https://community.kde.org/api.php?action=feedcontributions&user=Cauliergilles&feedformat=atomKDE Community Wiki - User contributions [en]2024-03-29T15:08:45ZUser contributionsMediaWiki 1.40.2https://community.kde.org/index.php?title=GSoC/2023/Ideas&diff=95778GSoC/2023/Ideas2023-02-09T16:57:59Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2022/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
=== Sample project ===<br />
<br />
'''Project type:''' Coding / Web Development / Promo / Translation<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor)<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
<br />
===Kalendar===<br />
<br />
==== Project: Calendar Invitation ====<br />
<br />
'''Brief explanation:''' The goal is to make it possible to send calendar invitation from Kalendar and also handle incoming invitations. This includes showing the free busy information from the attendees. Part of this features are already implemented in the C++ core but needs to be hooked up in the UI and others will require more work. <br />
<br />
'''Expected results:''' Being able to manage all your meetings with Kalendar and make sure this is unit tested :)<br />
<br />
'''Duration:''' ~350 hours<br />
<br />
'''Knowledge Prerequisite:''' C++ is highly recommended, this is a complex code base<br />
<br />
'''Mentor:''' Carl Schwan and Claudio Cambra (contact us in #kalendar:kde.org on Matrix)<br />
<br />
==== Project: Improved multiplatform support ====<br />
<br />
'''Brief explanation:''' Kalendar works great on Linux, but due to our dependency tree it is tricky to get it to build on Windows, and we do not have any current builds for macOS. For this project you will work on improving our support for either or both of these platforms and helping them become first class citizens for Kalendar. This will likely involve working on related projects like Akonadi.<br />
<br />
'''Expected results:''' Working daily builds of Kalendar on Windows and/or macOS, depending on chosen project duration.<br />
<br />
'''Duration:''' ~175 hours for one platform or ~350 hours for both platforms<br />
<br />
'''Knowledge Prerequisite:''' C++ and CMake will be used extensively<br />
<br />
'''Mentor:''' Claudio Cambra and Carl Schwan (contact us in #kalendar:kde.org on Matrix)<br />
<br />
==== Project: Mail integration ====<br />
<br />
'''Brief explanation:''' The goal is to make Kalendar not just a great calendaring application, but also a great mail application. We have basic email lists and a basic viewer working, but there is a huge amount of work still to do here: threading, editing, sending, and a lot more. A lot of this will not have to be done from scratch thanks to Akonadi (i.e. email retrieval and sending), but a lot of it will (i.e. threading).<br />
<br />
'''Expected results:''' Kalendar should be a nice mail app :)<br />
<br />
'''Duration:''' ~350 hours<br />
<br />
'''Knowledge Prerequisite:''' C++ is required, QML will be needed but can be learned on the go if one has some JS experience<br />
<br />
'''Mentor:''' Carl Schwan and Claudio Cambra (contact us in #kalendar:kde.org on Matrix)<br />
<br />
==== Project: Implement calendar availability ====<br />
<br />
'''Brief explanation:''' The short version is that you will need to implement [https://www.rfc-editor.org/rfc/rfc7953 RFC 7953] in Kalendar. The long version is that this availability extension definde by this RFC allows to define available and unavailable time periods. This is then helpful when trying to schedule a meeting with someone (see above tasks) as you will then be able to see then and avoid scheduling a meeting at that time. Implementation you will first need to add support for this in KCalendarCore for it and then expose this to the user interface so that user can modify their availability.<br />
<br />
'''Expected results:''' Being able to configure my availability in Kalendar<br />
<br />
'''Duration:''' ~175 hours<br />
<br />
'''Knowledge Prerequisite:''' C++ and QML is recommended<br />
<br />
'''Mentor:''' Carl Schwan and Claudio Cambra (contact us in #kalendar:kde.org on Matrix)<br />
<br />
==== Project: Accessibility improvements ====<br />
<br />
'''Brief explanation:''' It is a general KDE goal to make our applications accessible to everyone, including those who may require using their computers with keyboard navigation and screen readers. Kalendar needs a lot of work in this regard, particularly regarding navigation within the calendar views and around the application. <br />
<br />
'''Expected results:''' Keyboard navigation throughout the entirety of Kalendar is expected, as well as use with screen readers. Further ideas for accessibility-related improvements are a big plus.<br />
<br />
'''Duration:''' ~175 hours<br />
<br />
'''Knowledge Prerequisite:''' QML will be required for this task, and you will likely need to use some C++ too.<br />
<br />
'''Mentor:''' Claudio Cambra (contact me in #kalendar:kde.org on Matrix)<br />
<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Okular user interface for e-ink tables (PineNote) ====<br />
<br />
'''Brief explanation:''' e-ink tables are special given their "low" refresh rate.<br />
<br />
We would need to create a new Okular user interface (based either in the mobile or the dekstop one) to accommodate for the unique features of those kind of displays.<br />
<br />
We will probably arrange to get a device loaned if someone gets selected for this project.<br />
<br />
'''Expected results:''' A new Okular user interface that works well with e-ink tablets.<br />
<br />
'''Knowledge prerequisite:''' C++, probably QML.<br />
<br />
'''Duration:''' 350 hours.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
<br />
==== Project: Improve Okular for Android ====<br />
<br />
'''Brief explanation:''' Okular has an Android version it needs some improvements.<br />
<br />
Poppler, the library that Okular uses for PDF rendering is missing a "find me a font given a font name" backend for Android. We should use new new Font API introduced in Android API 29 to do that.<br />
<br />
The Icons in Okular-Android are not being rendered, there is something in KDE Frameworks interfering.<br />
<br />
You should have an Android device with Android >= 10 for testing<br />
<br />
'''Expected results:''' New Font API in poppler and icon rendering fixed.<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
'''Duration:''' 175 hours.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
===Sustainability===<br />
<br />
==== Project: Measuring Energy Usage Remotely with Online Portal ====<br />
<br />
'''Brief explanation:''' The goal of this project is to create an online portal that allows developers to remotely access and control the energy measurement lab at KDAB Berlin, enabling them to upload Standard Usage Scenario scripts and obtain data from the power meter.<br />
<br />
The related issue to this project : https://invent.kde.org/teams/eco/sustainable-software-goal/-/issues/3<br />
<br />
'''Expected results:''' Developers can upload Standard Usage Scenario scripts and obtain data from the power meter remotely.<br />
<br />
'''Knowledge Prerequisite:''' React/Django(Any web framework), Networking/Knowledge of tunneling, Task scheduling and Energy Measurement process.<br />
<br />
'''Duration:''' 175 hours<br />
<br />
'''Mentor:''' Joseph P. De Veaugh-Geiss (@joseph:kde.org<br />
), Volker Krause(@vkrause:kde.org)<br />
<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://docs.digikam.org/en/index.html digikam Documentation]<br />
'''<br />
<br />
==== Project: Improve Items Properties Management ====<br />
<br />
'''Brief Explanation''': the goal of this project is to improve the Items properties management. digiKam Properties (as Tags, Color Labels, Rating, Pick Labels, etc.) and Metadata entries (as Exif, Iptc, and Xmp tags) must be copiable between one item to other ones. Drag and drop and clipboard key features must be supported to make these operations. For the copiable Metadata entries, a preferred list of tags must be configurable to simplify workflow users.<br />
<br />
'''Expected Results''': <br />
<br />
Provide new options to copy digiKam properties or metadata entries between items. Write unit-tests, and documentation.<br />
<br />
'''Bugzilla Entries''': <br />
<br />
* [https://bugs.kde.org/show_bug.cgi?id=412343 Allow to apply the previously assigned tag to a new image]<br />
* [https://bugs.kde.org/show_bug.cgi?id=155384 Easily copy properties from one image to another one]<br />
<br />
'''Duration''':<br />
175 hours<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt API, GUI, CMake, metadata, database<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), Maik Qualmann (metzpinguin@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
<br />
==== Project: Add Automatic Tags Assignment ====<br />
<br />
'''Brief Explanation''': the goal of this project is to assign automatically a tags to items by contents analysis using deep learning. Places, Animals, Plants, Scene Type, Events, etx, must be recognized and corresponding keywords must be generated to be be stored in database and assigned to items. This kind of feature must be available as Maintenance tool, Batch Queue Manager tool, or from Captions sidebar.<br />
<br />
'''Expected Results''': <br />
<br />
Provide new tool for auto assignment of Tags to items. Write unit-tests, and documentation.<br />
<br />
'''Bugzilla Entries''': <br />
<br />
* [https://bugs.kde.org/show_bug.cgi?id=440582 Detecting black & white image]<br />
* [https://bugs.kde.org/show_bug.cgi?id=416988 Objects / Forms / Monuments / Context detection and recognition using Deep Learning]<br />
<br />
'''Duration''':<br />
175 hours<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Depp Learning, OpenCV, Qt API, GUI, CMake, metadata, database<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), Maik Qualmann (metzpinguin@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Port to Qt6::Multimedia Framework ====<br />
<br />
'''Brief Explanation''': digiKam manage video as photo and it's can play the video using QtAV framework, a software component based on FFMpeg 4 API. QtAV is not maintained since few months and not ported to Qt6/FFMpeg 5. Even if digiKam team has back-ported the QtAV source code and ported the implementation to Qt6/FFMpeg5, the maintenance of this code is very complex and needs a lots of man power. As since Qt version 6.4, QtMultimedia support FFMpeg as multi-platform backend, it become a solid alternative for the future.<br />
<br />
'''Expected Results''': <br />
<br />
Port all implementation using QtAV API to play and deal with the video media in digiKam. Write unit-tests, and documentation.<br />
<br />
'''Bugzilla Entries''': <br />
<br />
* [https://bugs.kde.org/show_bug.cgi?id=456512 No sound on AppImage previews]<br />
* [https://bugs.kde.org/show_bug.cgi?id=382582 Video stutters when played with MP3 audio track]<br />
* [https://bugs.kde.org/show_bug.cgi?id=463852 After create a Video SlideShow media as mp4 will not be integrated]<br />
* [https://bugs.kde.org/show_bug.cgi?id=448681 digikam uses abandoned library incompatible with ffmpeg 5.0]<br />
<br />
'''Duration''':<br />
175 hours<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, FFMpeg, Qt6 API, GUI, CMake, Video Format<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), Maik Qualmann (metzpinguin@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
=== Krita ===<br />
<br />
'''Krita is a digital painting application, used by millions of people all over the world. For Google Summer of Code, we expect students to already have contributed to Krita by building the application and submitting merge requests for some bug fixes. Note that some projects also demand a good knowledge of algorithms and skill in doing research.<br />
<br />
* [http://www.krita.org Krita project web site]<br />
* [https://mail.kde.org/mailman/listinfo/kimageshop Mailinglist]<br />
* [https://web.libera.chat/ #krita IRC channel on irc.libera.chat]<br />
'''<br />
<br />
==== Project: Add Benchmarks to the Krita executable ====<br />
<br />
'''Brief explanation:''' currently, to run benchmarks, people have to have a build from source. To see whether particular hardware gives a problem, we should add a function that generates a benchmark file complete with all hardware and OS info as well as what is being done. This should be separate both from the debug output and the krita log.<br />
<br />
<br />
'''Expected results''': integration of all benchmarks that currently run standalone from the command line into Krita. A dialog to select which benchmarks to run, and the output available after running the benchmark as a file and shown inside the benchmark dialog.<br />
<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~175 hr or ~350 hour (use only one)<br />
<br />
'''Mentor''': Dmitry Kazakov<br />
<br />
<br />
==== Project: Texture Each Dab instead of the whole Stroke ====<br />
<br />
'''Brief explanation''': Implementing texturing brush dabs instead of texturing whole stroke. (Just like Opacity is about the whole stroke and Flow is about the opacity of just one brush dab) Link: https://bugs.kde.org/show_bug.cgi?id=375155<br />
<br />
<br />
'''Expected results''': Texture is applied only on brush dabs. See https://bugsfiles.kde.org/attachment.cgi?id=135342<br />
<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~175 hr or ~350 hour (use only one)<br />
<br />
'''Mentor''': Dmitry Kazakov<br />
<br />
<br />
==== Project: Add film-like adjustment ====<br />
<br />
'''Brief explanation''': Film-like is a name of a special adjustment curve that allows the user to control the contrast without having hue shifts that often happen when using standard HSV Adjustment curves. Note: you will need to do quite a bit of research first. Link: https://bugs.kde.org/show_bug.cgi?id=385845<br />
<br />
<br />
'''Expected results''': A new filter with Film-like adjustment.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~175 hr<br />
<br />
'''Mentor''': Wolthera van Hövell<br />
<br />
==== Project: Adding support for high-channel depth brush tips ====<br />
<br />
'''Brief explanation''': Currently, brush tips are 8 bits and based on QImage objects. With the advent of 16 bit/channel and 32 bit/channel support in QImage, we can start supporting higher bit depth brush tips. The 16 bit/channel GBR format from Cinepaint is not so relevant: we should support EXR and PNG for predefined brush tips and extend the autogenerated brush tips to support higher channel depths as well.<br />
<br />
'''Expected results''': A gui to select the channel depth when creating brush tips, Loading of high-channel depth brush tips, Support for high-channel depth brush tips when painting<br />
<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~350 hour<br />
<br />
'''Mentor''': Halla rempt<br />
<br />
==== Project: Extend Arrange Docker to support alignment and distribution of Layers ====<br />
<br />
'''Brief explanation''': Currently, the arrange docker only supports aligning and distributing vector objects of a singlet vector layer. This project aims to extend the arrange docker support for layers and masks too.<br />
<br />
<br />
'''Expected results''': All the current operations available in Arrange docker could be done with the layers.<br />
<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~175 hr or ~350 hour (use only one)<br />
<br />
'''Mentor''': TBD<br />
<br />
==== Project: "Enter Group" and "Vector Pattern" GUI functionality for Krita vectors ====<br />
<br />
'''Brief explanation''': Currently, to modify grouped shapes the user have to always ungroup them. The goal of the project is to implement a UIX for modifying the shapes inside the group without ungrouping them (see Inkscape). The user should be able to "enter" a group, which would limit his actions only to the shapes inside a selected group (perhaps, shapes outside the group should also be grayed-out?). <br />
<br />
The feature is tightly related to the "SVG Vector Patterns" functionality. Krita can already render vector patterns perfectly fine, but there is no GUI for creating/modifying them. Pattern fills should be editable from the shape editor tool option widget.<br />
<br />
<br />
'''Expected results''':<br />
* The user can Enter/Leave group and modify shapes inside it without ungrouping<br />
* Shapes outside the currently entered group are grayed-out (disputable?)<br />
* The user can create/modify vector patterns using Tool Options docker of DefaultTool (see KoFillConfigWidget)<br />
<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~350 hour<br />
<br />
'''Mentor''': Dmitry Kazakov<br />
<br />
==== Project: Improve texture editing pipeline and add DDS file format ====<br />
<br />
'''Brief explanation''': It would be nice to have support for DDS textures file format, which is rather popular among game developers. There are also a lot of nice small features which could improve texture creator's workflow a lot: https://phabricator.kde.org/T12767<br />
<br />
'''Expected results''':<br />
* Krita can load and save DDS textures<br />
* Mipmap generation GUI<br />
* cubemaps, 3D-textures, texture arrays editing GUI <br />
<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~175 hr<br />
<br />
'''Mentor''': Wolthera van Hövell<br />
<br />
==== Project: Per-document resources docker ====<br />
<br />
'''Brief explanation''': Since Krita 5, Krita files can contain resources (brushes, gradients, palettes, etc.) that are specific for a certain document. This project entails creating a new docker that shows those resources and that allows adding and removing those resources from a document. If time permits, the document information dialog should also show the per-document resources.<br />
<br />
'''Expected results''': A new docker that shows the document's resources<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~175 hr<br />
<br />
'''Mentor''': Halla Rempt<br />
<br />
==== Project: Clipping Masks ====<br />
<br />
'''Brief explanation''': Users are asking for clipping mask functionality that is compatible with Photoshop. This project entails implementing loading and saving clipping masks to and from PSD files and KRA files, adding a tool to create and edit clipping masks and writing documentation for the manual. See https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/<br />
<br />
'''Expected results''': Photoshop-compatible clipping masks<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~350 hour<br />
<br />
'''Mentor''': Dmitry Kazakov<br />
<br />
==== Project: Action Recorder ====<br />
<br />
'''Brief explanation''': Krita used to have an action recorder: a system that would record all the user's actions, like painting, applying a filter and so on into a macro file that could be replayed. This system was disabled many years ago. You would need to design a generic system that integrates with Krita's 'strokes' framework and that would save all the user's actions to such a macro file, and then be able to replay this, both at native speed and at slowed-down speed. Note that this is different from the existing recorder which writes frames from the image's state to to an animation file.<br />
<br />
'''Expected results''': a working recorder and playback functionality<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~350 hour<br />
<br />
'''Mentor''': Dmitry Kazakov<br />
<br />
==== Project: Generic Layer Tagging====<br />
<br />
'''Brief explanation''': The layer properties dialog and layer docker should be extended with support for tagging. There should be a number of default tags, but the set of tags should be extensible. There should also be defined a number of default operational meanings for tags, like "do not render this layer to an exported image" for a "Draft" tag.<br />
<br />
'''Expected results: A tagging system for layers'''<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~350 hour<br />
<br />
'''Mentor:''' Halla Rempt<br />
<br />
==== Project: Improve Compositions Docker's Batch Export Features ====<br />
<br />
'''Brief explanation''': The current Compositions Docker does feature exporting and batch exporting, but currently lacks configuration for image or animation export settings. It could use more control over how all compositions are exported. <br />
<br />
'''Expected results''': Configurable export settings for the composition docker, and API improvements to allow for reuse of existing export GUI window(s). <br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~175 hr<br />
<br />
'''Mentor''': Eoin O'Neill<br />
<br />
<br />
===Community Health===<br />
<br />
==== Project: Improve Mining Workflow and/or Create A Qt Application for Monitoring Open Source Project Community Health ====<br />
<br />
'''Brief explanation:''' Community health has featured in a number of presentations related to KDE including a [https://carlschwan.eu/2021/04/29/health-of-the-kde-community/ blog post] and an [https://ervin.ipsquad.net/blog/2020/01/28/christelle-zouein-current-state-of-comdaan/ Akademy presentation]. There are a number of tools for monitoring community health including [https://framagit.org/ervin/ComDaAn ComDaAn] and [https://github.com/gotec/git2net Git2net]. Most of these tools do network analysis on repository information. Related tools include [https://apps.kde.org/kgraphviewer/ KGraphViewer] and [https://snap.stanford.edu/snap/index.html SNAP]. [https://rkward.kde.org/ RKward] could also be helpful.<br />
<br />
'''Expected results:''' Easier monitoring of KDE projects and open source projects KDE depends on.<br />
<br />
'''Duration:''' ~350 hours<br />
<br />
'''Knowledge Prerequisite:''' C++ is highly recommended, but other languages welcome. Interest in data mining, reproducible workflows<br />
<br />
'''Mentor:''' Benson Muite benson_muite@emailplus.org<br />
<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Duration:''' Mention one of ~175 or ~350 hours of effort necessary to finish the project. Use only one of these two project classes and don't come up with other numbers here.<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in [https://matrix.to/#/#kde-soc:kde.org #kde-soc:kde.org] on matrix.</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2023/Ideas&diff=95729GSoC/2023/Ideas2023-02-03T02:45:34Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2022/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
=== Sample project ===<br />
<br />
'''Project type:''' Coding / Web Development / Promo / Translation<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor)<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
<br />
===Kalendar===<br />
<br />
==== Project: Calendar Invitation ====<br />
<br />
'''Brief explanation:''' The goal is to make it possible to send calendar invitation from Kalendar and also handle incoming invitations. This includes showing the free busy information from the attendees. Part of this features are already implemented in the C++ core but needs to be hooked up in the UI and others will require more work. <br />
<br />
'''Expected results:''' Being able to manage all your meetings with Kalendar and make sure this is unit tested :)<br />
<br />
'''Duration:''' ~350 hours<br />
<br />
'''Knowledge Prerequisite:''' C++ is highly recommended, this is a complex code base<br />
<br />
'''Mentor:''' Carl Schwan and Claudio Cambra (contact us in #kalendar:kde.org on Matrix)<br />
<br />
==== Project: Improved multiplatform support ====<br />
<br />
'''Brief explanation:''' Kalendar works great on Linux, but due to our dependency tree it is tricky to get it to build on Windows, and we do not have any current builds for macOS. For this project you will work on improving our support for either or both of these platforms and helping them become first class citizens for Kalendar. This will likely involve working on related projects like Akonadi.<br />
<br />
'''Expected results:''' Working daily builds of Kalendar on Windows and/or macOS, depending on chosen project duration.<br />
<br />
'''Duration:''' ~175 hours for one platform or ~350 hours for both platforms<br />
<br />
'''Knowledge Prerequisite:''' C++ and CMake will be used extensively<br />
<br />
'''Mentor:''' Claudio Cambra and Carl Schwan (contact us in #kalendar:kde.org on Matrix)<br />
<br />
==== Project: Mail integration ====<br />
<br />
'''Brief explanation:''' The goal is to make Kalendar not just a great calendaring application, but also a great mail application. We have basic email lists and a basic viewer working, but there is a huge amount of work still to do here: threading, editing, sending, and a lot more. A lot of this will not have to be done from scratch thanks to Akonadi (i.e. email retrieval and sending), but a lot of it will (i.e. threading).<br />
<br />
'''Expected results:''' Kalendar should be a nice mail app :)<br />
<br />
'''Duration:''' ~350 hours<br />
<br />
'''Knowledge Prerequisite:''' C++ is required, QML will be needed but can be learned on the go if one has some JS experience<br />
<br />
'''Mentor:''' Carl Schwan and Claudio Cambra (contact us in #kalendar:kde.org on Matrix)<br />
<br />
==== Project: Implement calendar availability ====<br />
<br />
'''Brief explanation:''' The short version is that you will need to implement [https://www.rfc-editor.org/rfc/rfc7953 RFC 7953] in Kalendar. The long version is that this availability extension definde by this RFC allows to define available and unavailable time periods. This is then helpful when trying to schedule a meeting with someone (see above tasks) as you will then be able to see then and avoid scheduling a meeting at that time. Implementation you will first need to add support for this in KCalendarCore for it and then expose this to the user interface so that user can modify their availability.<br />
<br />
'''Expected results:''' Being able to configure my availability in Kalendar<br />
<br />
'''Duration:''' ~175 hours<br />
<br />
'''Knowledge Prerequisite:''' C++ and QML is recommended<br />
<br />
'''Mentor:''' Carl Schwan and Claudio Cambra (contact us in #kalendar:kde.org on Matrix)<br />
<br />
==== Project: Accessibility improvements ====<br />
<br />
'''Brief explanation:''' It is a general KDE goal to make our applications accessible to everyone, including those who may require using their computers with keyboard navigation and screen readers. Kalendar needs a lot of work in this regard, particularly regarding navigation within the calendar views and around the application. <br />
<br />
'''Expected results:''' Keyboard navigation throughout the entirety of Kalendar is expected, as well as use with screen readers. Further ideas for accessibility-related improvements are a big plus.<br />
<br />
'''Duration:''' ~175 hours<br />
<br />
'''Knowledge Prerequisite:''' QML will be required for this task, and you will likely need to use some C++ too.<br />
<br />
'''Mentor:''' Claudio Cambra (contact me in #kalendar:kde.org on Matrix)<br />
<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Okular user interface for e-ink tables (PineNote) ====<br />
<br />
'''Brief explanation:''' e-ink tables are special given their "low" refresh rate.<br />
<br />
We would need to create a new Okular user interface (based either in the mobile or the dekstop one) to accommodate for the unique features of those kind of displays.<br />
<br />
We will probably arrange to get a device loaned if someone gets selected for this project.<br />
<br />
'''Expected results:''' A new Okular user interface that works well with e-ink tablets.<br />
<br />
'''Knowledge prerequisite:''' C++, probably QML.<br />
<br />
'''Duration:''' 350 hours.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
<br />
==== Project: Improve Okular for Android ====<br />
<br />
'''Brief explanation:''' Okular has an Android version it needs some improvements.<br />
<br />
Poppler, the library that Okular uses for PDF rendering is missing a "find me a font given a font name" backend for Android. We should use new new Font API introduced in Android API 29 to do that.<br />
<br />
The Icons in Okular-Android are not being rendered, there is something in KDE Frameworks interfering.<br />
<br />
You should have an Android device with Android >= 10 for testing<br />
<br />
'''Expected results:''' New Font API in poppler and icon rendering fixed.<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
'''Duration:''' 175 hours.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
===Sustainability===<br />
<br />
==== Project: Measuring Energy Usage Remotely with Online Portal ====<br />
<br />
'''Brief explanation: The goal of this project is to create an online portal that allows developers to remotely access and control the energy measurement lab at KDAB Berlin, enabling them to upload Standard Usage Scenario scripts and obtain data from the power meter.<br />
<br />
The related issue to this project : https://invent.kde.org/teams/eco/sustainable-software-goal/-/issues/3'''<br />
<br />
'''Expected results: Developers can upload Standard Usage Scenario scripts and obtain data from the power meter remotely.'''<br />
<br />
'''Knowledge Prerequisite: React/Django(Any web framework), Networking/Knowledge of tunneling, Task scheduling and Energy Measurement process.'''<br />
<br />
'''Duration: 175 hours'''<br />
<br />
'''Mentor: Joseph P. De Veaugh-Geiss (@joseph:kde.org<br />
), Volker Krause(@vkrause:kde.org)<br />
'''<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://docs.digikam.org/en/index.html digikam Documentation]<br />
'''<br />
<br />
==== Project: Improve Items Properties Management ====<br />
<br />
'''Brief Explanation''': the goal of this project is to improve the Items properties management. digiKam Properties (as Tags, Color Labels, Rating, Pick Labels, etc.) and Metadata entries (as Exif, Iptc, and Xmp tags) must be copiable between one item to other ones. Drag and drop and clipboard key features must be supported to make these operations. For the copiable Metadata entries, a preferred list of tags must be configurable to simplify workflow users.<br />
<br />
'''Expected Results''': <br />
<br />
Provide new options to copy digiKam properties or metadata entries between items. Write unit-tests, and documentation.<br />
<br />
'''Bugzilla Entries''': <br />
<br />
* [https://bugs.kde.org/show_bug.cgi?id=412343 Allow to apply the previously assigned tag to a new image]<br />
* [https://bugs.kde.org/show_bug.cgi?id=155384 Easily copy properties from one image to another one]<br />
<br />
'''Duration''':<br />
175 hours<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt API, GUI, CMake, metadata, database<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), Maik Qualmann (metzpinguin@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
<br />
==== Project: Add Automatic Tags Assignment ====<br />
<br />
'''Brief Explanation''': the goal of this project is to assign automatically a tags to items by contents analysis using deep learning. Places, Animals, Plants, Scene Type, Events, etx, must be recognized and corresponding keywords must be generated to be be stored in database and assigned to items. This kind of feature must be available as Maintenance tool, Batch Queue Manager tool, or from Captions sidebar.<br />
<br />
'''Expected Results''': <br />
<br />
Provide new tool for auto assignment of Tags to items. Write unit-tests, and documentation.<br />
<br />
'''Bugzilla Entries''': <br />
<br />
* [https://bugs.kde.org/show_bug.cgi?id=440582 Detecting black & white image]<br />
* [https://bugs.kde.org/show_bug.cgi?id=416988 Objects / Forms / Monuments / Context detection and recognition using Deep Learning]<br />
<br />
'''Duration''':<br />
175 hours<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Depp Learning, OpenCV, Qt API, GUI, CMake, metadata, database<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), Maik Qualmann (metzpinguin@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Duration:''' Mention one of ~175 or ~350 hours of effort necessary to finish the project. Use only one of these two project classes and don't come up with other numbers here.<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in [https://matrix.to/#/#kde-soc:kde.org #kde-soc:kde.org] on matrix.</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2023/Ideas&diff=95728GSoC/2023/Ideas2023-02-03T02:18:28Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2022/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
=== Sample project ===<br />
<br />
'''Project type:''' Coding / Web Development / Promo / Translation<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor)<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
<br />
===Kalendar===<br />
<br />
==== Project: Calendar Invitation ====<br />
<br />
'''Brief explanation:''' The goal is to make it possible to send calendar invitation from Kalendar and also handle incoming invitations. This includes showing the free busy information from the attendees. Part of this features are already implemented in the C++ core but needs to be hooked up in the UI and others will require more work. <br />
<br />
'''Expected results:''' Being able to manage all your meetings with Kalendar and make sure this is unit tested :)<br />
<br />
'''Duration:''' ~350 hours<br />
<br />
'''Knowledge Prerequisite:''' C++ is highly recommended, this is a complex code base<br />
<br />
'''Mentor:''' Carl Schwan and Claudio Cambra (contact us in #kalendar:kde.org on Matrix)<br />
<br />
==== Project: Improved multiplatform support ====<br />
<br />
'''Brief explanation:''' Kalendar works great on Linux, but due to our dependency tree it is tricky to get it to build on Windows, and we do not have any current builds for macOS. For this project you will work on improving our support for either or both of these platforms and helping them become first class citizens for Kalendar. This will likely involve working on related projects like Akonadi.<br />
<br />
'''Expected results:''' Working daily builds of Kalendar on Windows and/or macOS, depending on chosen project duration.<br />
<br />
'''Duration:''' ~175 hours for one platform or ~350 hours for both platforms<br />
<br />
'''Knowledge Prerequisite:''' C++ and CMake will be used extensively<br />
<br />
'''Mentor:''' Claudio Cambra and Carl Schwan (contact us in #kalendar:kde.org on Matrix)<br />
<br />
==== Project: Mail integration ====<br />
<br />
'''Brief explanation:''' The goal is to make Kalendar not just a great calendaring application, but also a great mail application. We have basic email lists and a basic viewer working, but there is a huge amount of work still to do here: threading, editing, sending, and a lot more. A lot of this will not have to be done from scratch thanks to Akonadi (i.e. email retrieval and sending), but a lot of it will (i.e. threading).<br />
<br />
'''Expected results:''' Kalendar should be a nice mail app :)<br />
<br />
'''Duration:''' ~350 hours<br />
<br />
'''Knowledge Prerequisite:''' C++ is required, QML will be needed but can be learned on the go if one has some JS experience<br />
<br />
'''Mentor:''' Carl Schwan and Claudio Cambra (contact us in #kalendar:kde.org on Matrix)<br />
<br />
==== Project: Implement calendar availability ====<br />
<br />
'''Brief explanation:''' The short version is that you will need to implement [https://www.rfc-editor.org/rfc/rfc7953 RFC 7953] in Kalendar. The long version is that this availability extension definde by this RFC allows to define available and unavailable time periods. This is then helpful when trying to schedule a meeting with someone (see above tasks) as you will then be able to see then and avoid scheduling a meeting at that time. Implementation you will first need to add support for this in KCalendarCore for it and then expose this to the user interface so that user can modify their availability.<br />
<br />
'''Expected results:''' Being able to configure my availability in Kalendar<br />
<br />
'''Duration:''' ~175 hours<br />
<br />
'''Knowledge Prerequisite:''' C++ and QML is recommended<br />
<br />
'''Mentor:''' Carl Schwan and Claudio Cambra (contact us in #kalendar:kde.org on Matrix)<br />
<br />
==== Project: Accessibility improvements ====<br />
<br />
'''Brief explanation:''' It is a general KDE goal to make our applications accessible to everyone, including those who may require using their computers with keyboard navigation and screen readers. Kalendar needs a lot of work in this regard, particularly regarding navigation within the calendar views and around the application. <br />
<br />
'''Expected results:''' Keyboard navigation throughout the entirety of Kalendar is expected, as well as use with screen readers. Further ideas for accessibility-related improvements are a big plus.<br />
<br />
'''Duration:''' ~175 hours<br />
<br />
'''Knowledge Prerequisite:''' QML will be required for this task, and you will likely need to use some C++ too.<br />
<br />
'''Mentor:''' Claudio Cambra (contact me in #kalendar:kde.org on Matrix)<br />
<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Okular user interface for e-ink tables (PineNote) ====<br />
<br />
'''Brief explanation:''' e-ink tables are special given their "low" refresh rate.<br />
<br />
We would need to create a new Okular user interface (based either in the mobile or the dekstop one) to accommodate for the unique features of those kind of displays.<br />
<br />
We will probably arrange to get a device loaned if someone gets selected for this project.<br />
<br />
'''Expected results:''' A new Okular user interface that works well with e-ink tablets.<br />
<br />
'''Knowledge prerequisite:''' C++, probably QML.<br />
<br />
'''Duration:''' 350 hours.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
<br />
==== Project: Improve Okular for Android ====<br />
<br />
'''Brief explanation:''' Okular has an Android version it needs some improvements.<br />
<br />
Poppler, the library that Okular uses for PDF rendering is missing a "find me a font given a font name" backend for Android. We should use new new Font API introduced in Android API 29 to do that.<br />
<br />
The Icons in Okular-Android are not being rendered, there is something in KDE Frameworks interfering.<br />
<br />
You should have an Android device with Android >= 10 for testing<br />
<br />
'''Expected results:''' New Font API in poppler and icon rendering fixed.<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
'''Duration:''' 175 hours.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
===Sustainability===<br />
<br />
==== Project: Measuring Energy Usage Remotely with Online Portal ====<br />
<br />
'''Brief explanation: The goal of this project is to create an online portal that allows developers to remotely access and control the energy measurement lab at KDAB Berlin, enabling them to upload Standard Usage Scenario scripts and obtain data from the power meter.<br />
<br />
The related issue to this project : https://invent.kde.org/teams/eco/sustainable-software-goal/-/issues/3'''<br />
<br />
'''Expected results: Developers can upload Standard Usage Scenario scripts and obtain data from the power meter remotely.'''<br />
<br />
'''Knowledge Prerequisite: React/Django(Any web framework), Networking/Knowledge of tunneling, Task scheduling and Energy Measurement process.'''<br />
<br />
'''Duration: 175 hours'''<br />
<br />
'''Mentor: Joseph P. De Veaugh-Geiss (@joseph:kde.org<br />
), Volker Krause(@vkrause:kde.org)<br />
'''<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://docs.digikam.org/en/index.html digikam Documentation]<br />
'''<br />
<br />
==== Project: Improve Items Properties Management ====<br />
<br />
'''Brief Explanation''': the goal of this project is to improve the Items properties management. digiKam Properties (as Tags, Color Labels, Rating, Pick Labels, etc.) and Metadata entries (as Exif, Iptc, and Xmp tags) must be copiable between one item to other ones. Drag and drop and clipboard key features must be supported to make these operations. For the copiable Metadata entries, a preferred list of tags must be configurable to simplify workflow users.<br />
<br />
'''Expected Results''': <br />
<br />
Provide new options to copy digiKam properties or metadata entries between items. Write unit-tests, and documentation.<br />
<br />
'''Bugzilla Entries''': <br />
<br />
* [https://bugs.kde.org/show_bug.cgi?id=412343 Allow to apply the previously assigned tag to a new image]<br />
* [https://bugs.kde.org/show_bug.cgi?id=155384 Easily copy properties from one image to another one]<br />
<br />
'''Duration''':<br />
175 hours<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt API, GUI, CMake, metadata, database<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), Maik Qualmann (metzpinguin@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Duration:''' Mention one of ~175 or ~350 hours of effort necessary to finish the project. Use only one of these two project classes and don't come up with other numbers here.<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in [https://matrix.to/#/#kde-soc:kde.org #kde-soc:kde.org] on matrix.</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2023/Ideas&diff=95727GSoC/2023/Ideas2023-02-03T02:03:53Z<p>Cauliergilles: /* Ideas */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2022/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
=== Sample project ===<br />
<br />
'''Project type:''' Coding / Web Development / Promo / Translation<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor)<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
<br />
===Kalendar===<br />
<br />
==== Project: Calendar Invitation ====<br />
<br />
'''Brief explanation:''' The goal is to make it possible to send calendar invitation from Kalendar and also handle incoming invitations. This includes showing the free busy information from the attendees. Part of this features are already implemented in the C++ core but needs to be hooked up in the UI and others will require more work. <br />
<br />
'''Expected results:''' Being able to manage all your meetings with Kalendar and make sure this is unit tested :)<br />
<br />
'''Duration:''' ~350 hours<br />
<br />
'''Knowledge Prerequisite:''' C++ is highly recommended, this is a complex code base<br />
<br />
'''Mentor:''' Carl Schwan and Claudio Cambra (contact us in #kalendar:kde.org on Matrix)<br />
<br />
==== Project: Improved multiplatform support ====<br />
<br />
'''Brief explanation:''' Kalendar works great on Linux, but due to our dependency tree it is tricky to get it to build on Windows, and we do not have any current builds for macOS. For this project you will work on improving our support for either or both of these platforms and helping them become first class citizens for Kalendar. This will likely involve working on related projects like Akonadi.<br />
<br />
'''Expected results:''' Working daily builds of Kalendar on Windows and/or macOS, depending on chosen project duration.<br />
<br />
'''Duration:''' ~175 hours for one platform or ~350 hours for both platforms<br />
<br />
'''Knowledge Prerequisite:''' C++ and CMake will be used extensively<br />
<br />
'''Mentor:''' Claudio Cambra and Carl Schwan (contact us in #kalendar:kde.org on Matrix)<br />
<br />
==== Project: Mail integration ====<br />
<br />
'''Brief explanation:''' The goal is to make Kalendar not just a great calendaring application, but also a great mail application. We have basic email lists and a basic viewer working, but there is a huge amount of work still to do here: threading, editing, sending, and a lot more. A lot of this will not have to be done from scratch thanks to Akonadi (i.e. email retrieval and sending), but a lot of it will (i.e. threading).<br />
<br />
'''Expected results:''' Kalendar should be a nice mail app :)<br />
<br />
'''Duration:''' ~350 hours<br />
<br />
'''Knowledge Prerequisite:''' C++ is required, QML will be needed but can be learned on the go if one has some JS experience<br />
<br />
'''Mentor:''' Carl Schwan and Claudio Cambra (contact us in #kalendar:kde.org on Matrix)<br />
<br />
==== Project: Implement calendar availability ====<br />
<br />
'''Brief explanation:''' The short version is that you will need to implement [https://www.rfc-editor.org/rfc/rfc7953 RFC 7953] in Kalendar. The long version is that this availability extension definde by this RFC allows to define available and unavailable time periods. This is then helpful when trying to schedule a meeting with someone (see above tasks) as you will then be able to see then and avoid scheduling a meeting at that time. Implementation you will first need to add support for this in KCalendarCore for it and then expose this to the user interface so that user can modify their availability.<br />
<br />
'''Expected results:''' Being able to configure my availability in Kalendar<br />
<br />
'''Duration:''' ~175 hours<br />
<br />
'''Knowledge Prerequisite:''' C++ and QML is recommended<br />
<br />
'''Mentor:''' Carl Schwan and Claudio Cambra (contact us in #kalendar:kde.org on Matrix)<br />
<br />
==== Project: Accessibility improvements ====<br />
<br />
'''Brief explanation:''' It is a general KDE goal to make our applications accessible to everyone, including those who may require using their computers with keyboard navigation and screen readers. Kalendar needs a lot of work in this regard, particularly regarding navigation within the calendar views and around the application. <br />
<br />
'''Expected results:''' Keyboard navigation throughout the entirety of Kalendar is expected, as well as use with screen readers. Further ideas for accessibility-related improvements are a big plus.<br />
<br />
'''Duration:''' ~175 hours<br />
<br />
'''Knowledge Prerequisite:''' QML will be required for this task, and you will likely need to use some C++ too.<br />
<br />
'''Mentor:''' Claudio Cambra (contact me in #kalendar:kde.org on Matrix)<br />
<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Okular user interface for e-ink tables (PineNote) ====<br />
<br />
'''Brief explanation:''' e-ink tables are special given their "low" refresh rate.<br />
<br />
We would need to create a new Okular user interface (based either in the mobile or the dekstop one) to accommodate for the unique features of those kind of displays.<br />
<br />
We will probably arrange to get a device loaned if someone gets selected for this project.<br />
<br />
'''Expected results:''' A new Okular user interface that works well with e-ink tablets.<br />
<br />
'''Knowledge prerequisite:''' C++, probably QML.<br />
<br />
'''Duration:''' 350 hours.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
<br />
==== Project: Improve Okular for Android ====<br />
<br />
'''Brief explanation:''' Okular has an Android version it needs some improvements.<br />
<br />
Poppler, the library that Okular uses for PDF rendering is missing a "find me a font given a font name" backend for Android. We should use new new Font API introduced in Android API 29 to do that.<br />
<br />
The Icons in Okular-Android are not being rendered, there is something in KDE Frameworks interfering.<br />
<br />
You should have an Android device with Android >= 10 for testing<br />
<br />
'''Expected results:''' New Font API in poppler and icon rendering fixed.<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
'''Duration:''' 175 hours.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
===Sustainability===<br />
<br />
==== Project: Measuring Energy Usage Remotely with Online Portal ====<br />
<br />
'''Brief explanation: The goal of this project is to create an online portal that allows developers to remotely access and control the energy measurement lab at KDAB Berlin, enabling them to upload Standard Usage Scenario scripts and obtain data from the power meter.<br />
<br />
The related issue to this project : https://invent.kde.org/teams/eco/sustainable-software-goal/-/issues/3'''<br />
<br />
'''Expected results: Developers can upload Standard Usage Scenario scripts and obtain data from the power meter remotely.'''<br />
<br />
'''Knowledge Prerequisite: React/Django(Any web framework), Networking/Knowledge of tunneling, Task scheduling and Energy Measurement process.'''<br />
<br />
'''Duration: 175 hours'''<br />
<br />
'''Mentor: Joseph P. De Veaugh-Geiss (@joseph:kde.org<br />
), Volker Krause(@vkrause:kde.org)<br />
'''<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://docs.digikam.org/en/index.html digikam Documentation]<br />
'''<br />
<br />
==== Project: Improve Items Properties Management ====<br />
<br />
'''Brief Explanation''': the goal of this project is to improve the Items properties management. digiKam Properties (as Tags, Color Labels, Rating, Pick Labels, etc.) and Metadata entries (as Exif, Iptc, and Xmp tags) must be copiable between one item to other ones. Drag and drop and clipboard key features must be supported to make these operations. For the copiable Metadata entries, a preferred list of tags must be configurable to simplify workflow users.<br />
<br />
'''Expected Results''': <br />
<br />
Provide new options to copy digiKam properties or metadata entries between items. Write unit-tests, and documentation.<br />
<br />
'''Duration''':<br />
175 hours<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt API, GUI, CMake, metadata, database<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), Maik Qualmann (metzpinguin@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Duration:''' Mention one of ~175 or ~350 hours of effort necessary to finish the project. Use only one of these two project classes and don't come up with other numbers here.<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in [https://matrix.to/#/#kde-soc:kde.org #kde-soc:kde.org] on matrix.</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2022/Ideas&diff=93764GSoC/2022/Ideas2022-02-17T12:22:05Z<p>Cauliergilles: /* Project: Port Continuous Integration/Deployment to Gitlab/Craft DevOp Infrastructure and Notarize Bundles for Stores */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2021/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Duration:''' ~175 hr or ~350 hour (use only one)<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*expected effort to finish the project (either ~175 or ~350 hrs)<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
'''**Ideas with no mentors listed and their contact info will be removed**'''<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Duration:''' Mention one of ~175 or ~350 hours of effort necessary to finish the project. Use only one of these two project classes and don't come up with other numbers here.<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in [https://matrix.to/#/#kde-soc:kde.org #kde-soc:kde.org] on matrix.<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [https://web.libera.chat/ #digikam IRC channel on irc.libera.chat]<br />
'''<br />
<br />
==== Project: New plugin to process OCR ====<br />
<br />
'''Brief Explanation''': the goal of this project is to implement a new generic DPlugin to process images in batch with Tesseract. It's a C++ framework to make Optical Characters Recognition. This plugin must be able to run over images automatically and record detected text in image metadata for post-processing, as described in this bugzilla file:<br />
<br />
https://bugs.kde.org/show_bug.cgi?id=117629<br />
<br />
'''Expected Results''': <br />
<br />
Provide a new optional Generic Tesseract based DPlugin available in digiKam and Showfoto to run OCR automatically. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt5 and Qt6 API, Tesseract, CMake, OCR Image Processing<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), Minh Nghĩa Dương (minhnghiaduong997@gmail.com), Maik Qualmann (metzpinguin@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Improve Image Quality Sorter with Neural Network ====<br />
<br />
'''Brief Explanation''': digiKam has powerful feature to sort images by quality and register items with flags in database for future post processing. Analyzed image qualities are noise, focus, exposure, and compression. Algorithms used in background are revised in 2021 and give good enough result but we can add new criteria of quality based on Neural Network analysis, as for ex to detect the composition of image.<br />
<br />
'''Expected Results''': <br />
<br />
Provide an update of Image Quality processing using OpenCV DNN engine. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt5 and Qt6, DNN, OpenCV, Image Processing<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), Minh Nghĩa Dương (minhnghiaduong997@gmail.com), Maik Qualmann (metzpinguin@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Port Continuous Integration/Deployment to Gitlab/Craft DevOp Infrastructure and Notarize Bundles for Stores ====<br />
<br />
'''Brief Explanation''': digiKam use KDE/Jenkins to process Continuous Integration for Linux/BSD target. Windows and MacOS target do not work. With the recent migration to Gitlab, DevOps gain simplicity and become more powerful. The goal of this project is:<br />
<br />
* Prepare Craft infrastructure to handle digiKam and all required dependencies (this is more and less already done as other application as Krita already build with Craft).<br />
* Setup Continuous Integration and Continuous Deployment authorizations with Gitlab/Craft.<br />
* Compile digiKam from MacOS and Windows using CI.<br />
* Fix compilation with XCode and VisualC++ if necessary using CI.<br />
* Configure the signature of bundles.<br />
* Configure the application rights under MacOS and Windows (access to camera device, access to disks).<br />
* Construct the bundles.<br />
* Test if all is fine at run time on target computers.<br />
* Deploy the bundles to the Windows and MacOS stores (Kate editor do it already).<br />
<br />
Relevant bugzilla entries are listed below:<br />
<br />
* https://bugs.kde.org/show_bug.cgi?id=398582<br />
* https://bugs.kde.org/show_bug.cgi?id=120192<br />
<br />
Link to Craft DevOps toolkit:<br />
<br />
https://community.kde.org/Craft<br />
<br />
Mail from KDE admin about CI/CD changes with Gitlab:<br />
<br />
https://mail.kde.org/pipermail/kde-core-devel/2022-January/091542.html<br />
<br />
'''Expected Results''': <br />
<br />
Using modern Gitlab/Craft DevOps infrastructure to compile digiKam. <br />
Provide notarized bundles for Apple and Microsoft stores.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, CMake, Qt5 and Qt6, Gitlab, DevOps, Craft.<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), Minh Nghĩa Dương (minhnghiaduong997@gmail.com), Maik Qualmann (metzpinguin@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Okular user interface for e-ink tables (PineNote) ====<br />
<br />
'''Brief explanation:''' e-ink tables are special given their "low" refresh rate.<br />
<br />
We would need to create a new Okular user interface (based either in the mobile or the dekstop one) to accommodate for the unique features of those kind of displays.<br />
<br />
We will probably arrange to get a device loaned if someone gets selected for this project.<br />
<br />
'''Expected results:''' A new Okular user interface that works well with e-ink tablets.<br />
<br />
'''Knowledge prerequisite:''' C++, probably QML.<br />
<br />
'''Duration:''' 350 hours.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
=== KStars ===<br />
'''[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.'''<br />
<br />
==== Project: Observation Wizard Improvements ====<br />
'''Brief explanation''': The Observation Wizard enables users to select and filter objects of interest to them . Currently, the selection is done by object type, location, and magnitude in the sky. Further, the user can filter objects based on altitude and time-range when they are available. This tool can be further improved by providing the following features:<br />
# '''INDI Integration''': Filter and sort by object size for Deep Sky Objects that have a physical width and height, unlike point-like sources like stars. Limit objects to fall within a particular percentage of the sensor. For example, M31 galaxy is very large and spans almost 3 degrees in the night sky. It would not fit inside the camera's 1x1 degree field of view (as calculated from INDI). Similarly, an object spanning on 5'x5' arcmins is too small in the camera.<br />
# '''Image Integration''': The way the final list of objects are displayed should be modernized. Each object should have an image and also an Altitude-vs-Time plot next to it so that the user can quick identify what is the best time to observe this object. For large lists, this can be very CPU intensive and should be optimized accordingly.<br />
# '''Save/Load''': Ability to save and load the wizard search parameters for future use so that the user does not always have to start from scratch every time they need to search for objects.<br />
# '''Export''': Export the list of object to an external file or source in CSV and JSON formats.<br />
'''Expected results''': <br />
* Improved Observation Wizard Tool.<br />
* Proper integration with INDI & Ekos.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
<br />
==== Project: KStars Testing ====<br />
<br />
'''Brief explanation:''' KStars is built on a relatively large number of C++ classes, grouped in the following categories: sky objects and components, projection algorithms, graphics, timekeeping, widgets, Ekos automation, INDI client, FITS viewing, accessories and several library interfaces. Most of these constituting classes remain untested in terms of systematic and automatic verification. <br />
The objective of this project is to verify the code written in those classes at three levels: API, functionality and UI-based use case. In order to achieve this, the existing test code will have to extend its code coverage, report validation results and integrate seamlessly to the build recipe of the project.<br />
<br />
The difficulty of this project is the requirement to create tests on legacy code and consolidate a test plan that reflects how the software is working instead of how we expect it to work.<br />
<br />
'''Expected results:'''<br />
* Verify APIs: call each public class member using arbitrary test fixtures, control side effects by stubbing interfaces. This verifies code is executing in the data domain we expect, or fails for known reasons. As an example, the report will reveal how classes managing coordinates accept or reject numerical input.<br />
* Verify functionalities: ensure specific class interfaces return an expected result given a controlled set of input parameters. This verifies code is behaving as expected, or isolates known issues. As an example, the report will reveal which value of the Julian time classes managing timekeeping produce given different input objects embedding the same UTC time.<br />
* Verify use cases: ensure specific scenarios can be executed in the interface as presented in their documentation. This verifies procedures achieving useful results for the end-user remain stable, and controls how they evolve and improve during development.<br />
* Consolidate test reports and code coverage, and automate the execution of the test plan when building.<br />
Bonus: generate videos of use cases for end-users automatically.<br />
<br />
'''Level''': beginner to intermediate<br />
<br />
'''Knowledge prerequisites''': C++, Qt, software testing and verification fundamentals<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
=== Plasma Mobile Dialer ===<br />
'''Plasma Mobile Dialer is a part of the [https://plasma-mobile.org/ Plasma Mobile] project developed by KDE. Additional details could also be found in the [https://develop.kde.org/docs/build/plasma-mobile/ developer documentation].'''<br />
<br />
==== Project: Visual voicemail support ====<br />
<br />
'''Brief explanation:''' [https://invent.kde.org/plasma-mobile/plasma-dialer/-/issues/26 KDE Gitlab issue]<br />
<br />
As described in the KDE GitLab, it is possible to reuse the so-called [https://gitlab.com/kop316/vvmd vvmd] daemon that retrieves Visual voicemail. It provides environment-agnostic [https://doc.qt.io/qt-5/qtdbus-index.html D-Bus] interfaces. The draft for the Qt wrappers is also there.<br />
The integration could be implemented as part of the [https://invent.kde.org/plasma-mobile/plasma-dialer/-/tree/master/kde-telephony-plugin-declarative org.kde.telephony] QML plugin or as a separate QML plugin. After that, the user interface could be written in QML with [https://develop.kde.org/frameworks/kirigami/ Kirigami] components library for the plasma-dialer side.<br />
The task is mostly to propose and implement an appropriate graphical user interface.<br />
<br />
'''Expected results:''' An additional tab/page for the dialer where you could listen to voicemail messages<br />
<br />
'''Knowledge prerequisites''': QML, Kirigami (mostly), C++, Qt, D-Bus IPC (to interact with the existing daemon), CMake (project build system)<br />
<br />
'''Duration:''' 175 hours<br />
<br />
'''Mentor''': Alexey ([https://webchat.kde.org/#/room/#plasmamobile:kde.org KDE Web Chat]: aa13q)<br />
<br />
<br />
=== Plasma ===<br />
<br />
==== Plasma form factor integration of system dialogs ====<br />
<br />
'''Brief explanation''': On this project you will be improving the integration of different Plasma components into different form factors. By adopting the SystemDialog component, we will be able to integrate them visually on mobile, Big Screen and others.<br />
<br />
'''Expected results''': The SIM PIN, PolKit (i.e. admin password prompt), KWallet and Netork Manager will appear native on Plasma Mobile. As a stretch goal we could work out how to also benefit from this work on Plasma Big Screen which targets TV UXs.<br />
<br />
'''Knowledge Prerequisite''': QML and C++. Knowledge of Kirigami will come in handy.<br />
<br />
'''Duration''': 175 hours<br />
<br />
Mentor: Aleix Pol Gonzalez, @apol:kde.org<br />
<br />
<br />
==== Hardware based navigation of Maliit On-screen keyboard ====<br />
<br />
'''Brief explanation''': On this project you will be improving the [https://github.com/maliit/keyboard Maliit] on-screen keyboard to allow selection of keys and other keyboard elements, via hardware input such as gamepads, analog joysticks, or arrow keys, for use in Bigscreen and similar situations.<br />
<br />
'''Expected results''': Keys, word completion, and other core features of the keyboard should be controllable from hardware input. There should be clear visual indication of what key is currently selected, selection of word suggestions, and what action pressing hardware buttons (x, y, b, a, triggers, etc…) will result in. The OSK should detect what hardware configurations are currently in use, and display or not display hints as appropriate.<br />
<br />
'''Knowledge Prerequisite''': QML and C++<br />
<br />
'''Duration''': 175 hours<br />
<br />
Mentor: Rodney Dawes [https://webchat.kde.org/#/room/#maliit:matrix.org KDE Web Chat]: dobey)<br />
<br />
=== NeoChat ===<br />
<br />
==== Spaces Support in NeoChat ====<br />
<br />
'''Brief explanation''': Spaces are used to group matrix rooms together, for example all rooms belonging to the KDE Community. The project's goal is to enable NeoChat to support spaces.<br />
<br />
'''Expected results''': NeoChat can show spaces and ideally also create and edit them<br />
<br />
'''Knowledge Prerequisite''': QML and C++<br />
<br />
'''Duration''': 350 Hours<br />
<br />
Mentor: Tobias Fella and Carl Schwan, https://matrix.to/#/#neochat:kde.org<br />
=== Krita ===<br />
<br />
'''Krita is a digital painting application, used by millions of people all over the world. For Google Summer of Code, we expect students to already have contributed to Krita by building the application and submitting merge requests for some bug fixes. Note that some projects also demand a good knowledge of algorithms and skill in doing research.<br />
<br />
* [http://www.krita.org Krita project web site]<br />
* [https://mail.kde.org/mailman/listinfo/kimageshop Mailinglist]<br />
* [https://web.libera.chat/ #krita IRC channel on irc.libera.chat]<br />
'''<br />
<br />
==== Project: Export an Image to SVG ====<br />
<br />
'''Brief explanation:''' Right now, Krita can only save to SVG one layer at a time. It would be good if Krita was able to save the whole document to SVG: vector layers as groups, and raster layers as bitmaps. To be determined what should happen to other types of layers. Link: https://bugs.kde.org/show_bug.cgi?id=404834<br />
<br />
'''Expected results: File -> Save, File -> Save As, File -> Export should have an option to save to SVG. A file saved into SVG should have all raster and vector content from the document, but not the filter/fill layers.'''<br />
<br />
'''Knowledge Prerequisite''': C++. Qt. CMake<br />
<br />
'''Duration:''' ~175 hr<br />
<br />
'''Mentor:''' Wolthera van Hövell<br />
<br />
==== Project: Add Benchmarks to the Krita executable ====<br />
<br />
'''Brief explanation:''' currently, to run benchmarks, people have to have a build from source. To see whether particular hardware gives a problem, we should add a function that generates a benchmark file complete with all hardware and OS info as well as what is being done. This should be separate both from the debug output and the krita log.<br />
<br />
<br />
'''Expected results''': integration of all benchmarks that currently run standalone from the command line into Krita. A dialog to select which benchmarks to run, and the output available after running the benchmark as a file and shown inside the benchmark dialog.<br />
<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~175 hr or ~350 hour (use only one)<br />
<br />
'''Mentor''': Dmitry Kazakov<br />
<br />
<br />
==== Project: Implement Support for JPEG-XL ====<br />
<br />
'''Brief explanation''': JPEG-XL (https://jpeg.org/jpegxl/) is becoming the preferred output format for HDR content. This project should select an existing jpeg-xl library and integrate it into Krita as an import/export plugin.<br />
<br />
<br />
'''Expected results''': the ability to import and export files in this format<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~175 hr <br />
<br />
'''Mentor''': Halla Rempt<br />
<br />
<br />
==== Project: Texture Each Dab instead of the whole Stroke ====<br />
<br />
'''Brief explanation''': Implementing texturing brush dabs instead of texturing whole stroke. (Just like Opacity is about the whole stroke and Flow is about the opacity of just one brush dab) Link: https://bugs.kde.org/show_bug.cgi?id=375155<br />
<br />
<br />
'''Expected results''': Texture is applied only on brush dabs. See https://bugsfiles.kde.org/attachment.cgi?id=135342<br />
<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~175 hr or ~350 hour (use only one)<br />
<br />
'''Mentor''': Dmitry Kazakov<br />
<br />
<br />
==== Project: Add film-like adjustment ====<br />
<br />
'''Brief explanation''': Film-like is a name of a special adjustment curve that allows the user to control the contrast without having hue shifts that often happen when using standard HSV Adjustment curves. Note: you will need to do quite a bit of research first. Link: https://bugs.kde.org/show_bug.cgi?id=385845<br />
<br />
<br />
'''Expected results''': A new filter with Film-like adjustment.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~175 hr<br />
<br />
'''Mentor''': Wolthera van Hövell<br />
<br />
==== Project: Pixel-perfect ellipses ====<br />
<br />
'''Brief explanation''': In Krita, there is no way to draw a pixel-perfect ellipse using the Ellipse Tool. Most probably the appropriate solution would be to create a new type of Brush Engine that would behave in a pixel-perfect way. Note: this is more complicated than you might think at first. Link: https://bugs.kde.org/show_bug.cgi?id=387242<br />
<br />
<br />
'''Expected results''': A way to draw a pixel-perfect ellipse using the Ellipse Tool. The new Brush Engine must also behave in a pixel-perfect way creating lines and other shapes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~175 hr<br />
<br />
'''Mentor''': Ivan Yossi<br />
<br />
==== Project: Adding support for high-channel depth brush tips ====<br />
<br />
'''Brief explanation''': Currently, brush tips are 8 bits and based on QImage objects. With the advent of 16 bit/channel and 32 bit/channel support in QImage, we can start supporting higher bit depth brush tips. The 16 bit/channel GBR format from Cinepaint is not so relevant: we should support EXR and PNG for predefined brush tips and extend the autogenerated brush tips to support higher channel depths as well.<br />
<br />
'''Expected results''': A gui to select the channel depth when creating brush tips, Loading of high-channel depth brush tips, Support for high-channel depth brush tips when painting<br />
<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~350 hour<br />
<br />
'''Mentor''': Halla rempt<br />
<br />
==== Project: Extend Arrange Docker to support alignment and distribution of Layers ====<br />
<br />
'''Brief explanation''': Currently, the arrange docker only supports aligning and distributing vector objects of a singlet vector layer. This project aims to extend the arrange docker support for layers and masks too.<br />
<br />
<br />
'''Expected results''': All the current operations available in Arrange docker could be done with the layers.<br />
<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~175 hr or ~350 hour (use only one)<br />
<br />
'''Mentor''': Agata Cacko<br />
<br />
==== Project: "Enter Group" and "Vector Pattern" GUI functionality for Krita vectors ====<br />
<br />
'''Brief explanation''': Currently, to modify grouped shapes the user have to always ungroup them. The goal of the project is to implement a UIX for modifying the shapes inside the group without ungrouping them (see Inkscape). The user should be able to "enter" a group, which would limit his actions only to the shapes inside a selected group (perhaps, shapes outside the group should also be grayed-out?). <br />
<br />
The feature is tightly related to the "SVG Vector Patterns" functionality. Krita can already render vector patterns perfectly fine, but there is no GUI for creating/modifying them. Pattern fills should be editable from the shape editor tool option widget.<br />
<br />
<br />
'''Expected results''':<br />
* The user can Enter/Leave group and modify shapes inside it without ungrouping<br />
* Shapes outside the currently entered group are grayed-out (disputable?)<br />
* The user can create/modify vector patterns using Tool Options docker of DefaultTool (see KoFillConfigWidget)<br />
<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~350 hour<br />
<br />
'''Mentor''': Dmitry Kazakov<br />
<br />
==== Project: Improve texture editing pipeline and add DDS file format ====<br />
<br />
'''Brief explanation''': It would be nice to have support for DDS textures file format, which is rather popular among game developers. There are also a lot of nice small features which could improve texture creator's workflow a lot: https://phabricator.kde.org/T12767<br />
<br />
'''Expected results''':<br />
* Krita can load and save DDS textures<br />
* Mipmap generation GUI<br />
* cubemaps, 3D-textures, texture arrays editing GUI <br />
<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~175 hr<br />
<br />
'''Mentor''': Wolthera van Hövell<br />
<br />
==== Project: A Comic Book Frame Layer Type====<br />
<br />
'''Brief explanation''': This project is about adding a new layer type geared towards creating comic book frames. For this proposal, please first check how comic book frames work in other applications (Clip Studio, Medibang...) and propose a user interface. <br />
<br />
'''Expected results''': a usable system to place frames and gutters on an image and modify them.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~350 hour<br />
<br />
'''Mentor''': Halla Rempt<br />
<br />
==== Project: Per-document resources docker ====<br />
<br />
'''Brief explanation''': Since Krita 5, Krita files can contain resources (brushes, gradients, palettes, etc.) that are specific for a certain document. This project entails creating a new docker that shows those resources and that allows adding and removing those resources from a document. If time permits, the document information dialog should also show the per-document resources.<br />
<br />
'''Expected results''': A new docker that shows the document's resources<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~175 hr<br />
<br />
'''Mentor''': Halla Rempt<br />
<br />
==== Project: Clipping Masks ====<br />
<br />
'''Brief explanation''': Users are asking for clipping mask functionality that is compatible with Photoshop. This project entails implementing loading and saving clipping masks to and from PSD files and KRA files, adding a tool to create and edit clipping masks and writing documentation for the manual. See https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/<br />
<br />
'''Expected results''': Photoshop-compatible clipping masks<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~350 hour<br />
<br />
'''Mentor''': Dmitry Kazakov<br />
<br />
==== Project: Action Recorder ====<br />
<br />
'''Brief explanation''': Krita used to have an action recorder: a system that would record all the user's actions, like painting, applying a filter and so on into a macro file that could be replayed. This system was disabled many years ago. You would need to design a generic system that integrates with Krita's 'strokes' framework and that would save all the user's actions to such a macro file, and then be able to replay this, both at native speed and at slowed-down speed. Note that this is different from the existing recorder which writes frames from the image's state to to an animation file.<br />
<br />
'''Expected results''': a working recorder and playback functionality<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~350 hour<br />
<br />
'''Mentor''': Dmitry Kazakov<br />
<br />
==== Project: Generic Layer Tagging====<br />
<br />
'''Brief explanation''': The layer properties dialog and layer docker should be extended with support for tagging. There should be a number of default tags, but the set of tags should be extensible. There should also be defined a number of default operational meanings for tags, like "do not render this layer to an exported image" for a "Draft" tag.<br />
<br />
'''Expected results: A tagging system for layers'''<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~350 hour<br />
<br />
'''Mentor:''' Halla Rempt<br />
<br />
==== Project: Improve Compositions Docker's Batch Export Features ====<br />
<br />
'''Brief explanation''': The current Compositions Docker does feature exporting and batch exporting, but currently lacks configuration for image or animation export settings. It could use more control over how all compositions are exported. <br />
<br />
'''Expected results''': Configurable export settings for the composition docker, and API improvements to allow for reuse of existing export GUI window(s). <br />
<br />
'''Knowledge Prerequisite''': C++, Qt, CMake<br />
<br />
'''Duration:''' ~175 hr<br />
<br />
'''Mentor''': Eoin O'Neill<br />
<br />
=== KDE Connect ===<br />
<br />
'''KDE Connect is a series of apps for a wide range of platforms that provides inter-device integration such file and clipboard sharing, remote control, and more. Though the specific knowledge and workflow depends on the KDE Connect client (At, Android, iOS, etc.), development of all clients touches closely on concepts such as networking (socket <br />
<br />
* [https://kdeconnect.kde.org KDE Connect project web site]<br />
* [https://t.me/joinchat/AOS6gA37orb2dZCLhqbZjg KDE Connect Development Telegram Channel]<br />
* [https://community.kde.org/KDEConnect KDE Connect Community Wiki]<br />
* [https://userbase.kde.org/KDEConnect KDE Connect Userbase Wiki]<br />
* [https://invent.kde.org/network/kdeconnect-kde KDE Connect Qt/Desktop client repository]<br />
* [https://invent.kde.org/network/kdeconnect-android KDE Connect Android client repository]<br />
* [https://invent.kde.org/network/kdeconnect-ios KDE Connect iOS client repository]<br />
* [https://mail.kde.org/mailman/listinfo/kdeconnect KDE Connect mailing list]<br />
* IRC: #kdeconnect:kde.org & #kdeconnect:libera.chat<br />
'''<br />
<br />
==== Project: Porting the KDE Connect iOS app to macOS ====<br />
'''Brief explanation''': TBA.<br />
<br />
'''Expected results: An optimized macOS application, based on the KDE Connect iOS codebase'''<br />
<br />
'''Knowledge Prerequisite''': Swift, Objective-C, SwiftUI, Xcode, iOS, macOS<br />
<br />
'''Duration:''' ~TBA hour<br />
<br />
'''Mentor:'''<br />
<br />
=== GCompris ===<br />
<br />
==== Project: Adding new activities to GCompris ==== <br />
<br />
[https://gcompris.net/ GCompris] is a high quality educational software suite, including a large number of activities for children aged 2 to 10. We have recently launched our version 1.0 with multiple datasets feature. Moving forward we are looking to add more new activities to GCompris.<br />
<br />
'''Expected results''':<br />
This year we aim to add some new activities to GCompris. The activities can be port of the GTK+ version or you can propose new activities too. For example, we lack activities in the science domain(chemistry, biology) which can be proposed.<br />
We have a few ideas to propose but these are just ideas.<br />
<br />
You can have a look at our GCompris board to get some ideas about port of activities and multiple datasets too.<br />
<br />
Programming turtle: https://phabricator.kde.org/T15272<br />
<br />
Launch activities directly in command-line: https://phabricator.kde.org/T13899<br />
<br />
Find a number corresponding to a position on a graduated bar: https://phabricator.kde.org/T15274<br />
<br />
Adding using 10's complements to add numbers: https://phabricator.kde.org/T15276<br />
<br />
Grammatical analyses: https://phabricator.kde.org/T15277<br />
<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education.<br />
<br />
Be familiar with GCompris concept and content.<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough).<br />
<br />
Basic knowledge of QML, JavaScript would be a plus.<br />
<br />
Be able to build the Qt Quick version of GCompris.<br />
<br />
'''Application guide''':<br />
Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/GSOC_newcomers, http://gcompris.net/wiki/An_exercise_for_new_contributors and http://gcompris.net/wiki/Reviewing_an_activity<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Duration:''' 175 hours.<br />
<br />
'''Mentors''': Emmanuel Charruau (IRC: allon), Harsh Kumar (IRC: hadron), Deepak Kumar (IRC: deepak)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2022/Ideas&diff=93737GSoC/2022/Ideas2022-02-12T10:14:40Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2021/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Duration:''' ~175 hr or ~350 hour (use only one)<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*expected effort to finish the project (either ~175 or ~350 hrs)<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
'''**Ideas with no mentors listed and their contact info will be removed**'''<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Duration:''' Mention one of ~175 or ~350 hours of effort necessary to finish the project. Use only one of these two project classes and don't come up with other numbers here.<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in [https://matrix.to/#/#kde-soc:kde.org #kde-soc:kde.org] on matrix.<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [https://web.libera.chat/ #digikam IRC channel on irc.libera.chat]<br />
'''<br />
<br />
==== Project: New plugin to process OCR ====<br />
<br />
'''Brief Explanation''': the goal of this project is to implement a new generic DPlugin to process images in batch with Tesseract. It's a C++ framework to make Optical Characters Recognition. This plugin must be able to run over images automatically and record detected text in image metadata for post-processing, as described in this bugzilla file:<br />
<br />
https://bugs.kde.org/show_bug.cgi?id=117629<br />
<br />
'''Expected Results''': <br />
<br />
Provide a new optional Generic Tesseract based DPlugin available in digiKam and Showfoto to run OCR automatically. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt5 and Qt6 API, Tesseract, CMake, OCR Image Processing<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), Minh Nghĩa Dương (minhnghiaduong997@gmail.com), Maik Qualmann (metzpinguin@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Improve Image Quality Sorter with Neural Network ====<br />
<br />
'''Brief Explanation''': digiKam has powerful feature to sort images by quality and register items with flags in database for future post processing. Analyzed image qualities are noise, focus, exposure, and compression. Algorithms used in background are revised in 2021 and give good enough result but we can add new criteria of quality based on Neural Network analysis, as for ex to detect the composition of image.<br />
<br />
'''Expected Results''': <br />
<br />
Provide an update of Image Quality processing using OpenCV DNN engine. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt5 and Qt6, DNN, OpenCV, Image Processing<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), Minh Nghĩa Dương (minhnghiaduong997@gmail.com), Maik Qualmann (metzpinguin@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Port Continuous Integration/Deployment to Gitlab/Craft DevOp Infrastructure and Notarize Bundles for Stores ====<br />
<br />
'''Brief Explanation''': digiKam use KDE/Jenkins to process Continuous Integration for Linux/BSD target. Windows and MacOS target do not work. With the recent migration to Gitlab, DevOps gain simplicity and become more powerful. The goal of this project is:<br />
<br />
- Prepare Craft infrastructure to handle digiKam and all required dependencies (this is more and less already done as other application as Krita already build with Craft).<br />
- Setup Continuous Integration and Continuous Deployment authorizations with Gitlab/Craft.<br />
- Compile digiKam from MacOS and Windows using CI.<br />
- Fix compilation with XCode and VisualC++ if necessary using CI.<br />
- Configure the signature of bundles.<br />
- Configure the application rights under MacOS and Windows (access to camera device, access to disks).<br />
- Construct the bundles.<br />
- Test if all is fine at run time on target computers.<br />
- Deploy the bundles to the Windows and MacOS stores (Kate editor do it already).<br />
<br />
Relevant bugzilla entries are listed below:<br />
<br />
https://bugs.kde.org/show_bug.cgi?id=398582<br />
https://bugs.kde.org/show_bug.cgi?id=120192<br />
<br />
Link to Craft DevOps toolkit:<br />
<br />
https://community.kde.org/Craft<br />
<br />
'''Expected Results''': <br />
<br />
Using modern Gitlab/Craft DevOps infrastructure to compile digiKam. <br />
Provide notarized bundles for Apple and Microsoft stores.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, CMake, Qt5 and Qt6, Gitlab, DevOps, Craft.<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), Minh Nghĩa Dương (minhnghiaduong997@gmail.com), Maik Qualmann (metzpinguin@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Okular user interface for e-ink tables (PineNote) ====<br />
<br />
'''Brief explanation:''' e-ink tables are special given their "low" refresh rate.<br />
<br />
We would need to create a new Okular user interface (based either in the mobile or the dekstop one) to accommodate for the unique features of those kind of displays.<br />
<br />
We will probably arrange to get a device loaned if someone gets selected for this project.<br />
<br />
'''Expected results:''' A new Okular user interface that works well with e-ink tablets.<br />
<br />
'''Knowledge prerequisite:''' C++, probably QML.<br />
<br />
'''Duration:''' 350 hours.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
=== KStars ===<br />
'''[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.'''<br />
<br />
==== Project: Observation Wizard Improvements ====<br />
'''Brief explanation''': The Observation Wizard enables users to select and filter objects of interest to them . Currently, the selection is done by object type, location, and magnitude in the sky. Further, the user can filter objects based on altitude and time-range when they are available. This tool can be further improved by providing the following features:<br />
# '''INDI Integration''': Filter and sort by object size for Deep Sky Objects that have a physical width and height, unlike point-like sources like stars. Limit objects to fall within a particular percentage of the sensor. For example, M31 galaxy is very large and spans almost 3 degrees in the night sky. It would not fit inside the camera's 1x1 degree field of view (as calculated from INDI). Similarly, an object spanning on 5'x5' arcmins is too small in the camera.<br />
# '''Image Integration''': The way the final list of objects are displayed should be modernized. Each object should have an image and also an Altitude-vs-Time plot next to it so that the user can quick identify what is the best time to observe this object. For large lists, this can be very CPU intensive and should be optimized accordingly.<br />
# '''Save/Load''': Ability to save and load the wizard search parameters for future use so that the user does not always have to start from scratch every time they need to search for objects.<br />
# '''Export''': Export the list of object to an external file or source in CSV and JSON formats.<br />
'''Expected results''': <br />
* Improved Observation Wizard Tool.<br />
* Proper integration with INDI & Ekos.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
<br />
==== Project: KStars Testing ====<br />
<br />
'''Brief explanation:''' KStars is built on a relatively large number of C++ classes, grouped in the following categories: sky objects and components, projection algorithms, graphics, timekeeping, widgets, Ekos automation, INDI client, FITS viewing, accessories and several library interfaces. Most of these constituting classes remain untested in terms of systematic and automatic verification. <br />
The objective of this project is to verify the code written in those classes at three levels: API, functionality and UI-based use case. In order to achieve this, the existing test code will have to extend its code coverage, report validation results and integrate seamlessly to the build recipe of the project.<br />
<br />
The difficulty of this project is the requirement to create tests on legacy code and consolidate a test plan that reflects how the software is working instead of how we expect it to work.<br />
<br />
'''Expected results:'''<br />
* Verify APIs: call each public class member using arbitrary test fixtures, control side effects by stubbing interfaces. This verifies code is executing in the data domain we expect, or fails for known reasons. As an example, the report will reveal how classes managing coordinates accept or reject numerical input.<br />
* Verify functionalities: ensure specific class interfaces return an expected result given a controlled set of input parameters. This verifies code is behaving as expected, or isolates known issues. As an example, the report will reveal which value of the Julian time classes managing timekeeping produce given different input objects embedding the same UTC time.<br />
* Verify use cases: ensure specific scenarios can be executed in the interface as presented in their documentation. This verifies procedures achieving useful results for the end-user remain stable, and controls how they evolve and improve during development.<br />
* Consolidate test reports and code coverage, and automate the execution of the test plan when building.<br />
Bonus: generate videos of use cases for end-users automatically.<br />
<br />
'''Level''': beginner to intermediate<br />
<br />
'''Knowledge prerequisites''': C++, Qt, software testing and verification fundamentals<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
=== Plasma Mobile Dialer ===<br />
'''Plasma Mobile Dialer is a part of the [https://plasma-mobile.org/ Plasma Mobile] project developed by KDE. Additional details could also be found in the [https://develop.kde.org/docs/build/plasma-mobile/ developer documentation].'''<br />
<br />
==== Project: Visual voicemail support ====<br />
<br />
'''Brief explanation:''' [https://invent.kde.org/plasma-mobile/plasma-dialer/-/issues/26 KDE Gitlab issue]<br />
<br />
As described in the KDE GitLab, it is possible to reuse the so-called [https://gitlab.com/kop316/vvmd vvmd] daemon that retrieves Visual voicemail. It provides environment-agnostic [https://doc.qt.io/qt-5/qtdbus-index.html D-Bus] interfaces. The draft for the Qt wrappers is also there.<br />
The integration could be implemented as part of the [https://invent.kde.org/plasma-mobile/plasma-dialer/-/tree/master/kde-telephony-plugin-declarative org.kde.telephony] QML plugin or as a separate QML plugin. After that, the user interface could be written in QML with [https://develop.kde.org/frameworks/kirigami/ Kirigami] components library for the plasma-dialer side.<br />
The task is mostly to propose and implement an appropriate graphical user interface.<br />
<br />
'''Expected results:''' An additional tab/page for the dialer where you could listen to voicemail messages<br />
<br />
'''Knowledge prerequisites''': QML, Kirigami (mostly), C++, Qt, D-Bus IPC (to interact with the existing daemon), CMake (project build system)<br />
<br />
'''Duration:''' 175 hours<br />
<br />
'''Mentor''': Alexey ([https://webchat.kde.org/#/room/#plasmamobile:kde.org KDE Web Chat]: aa13q)<br />
<br />
<br />
=== Plasma ===<br />
<br />
==== Plasma form factor integration of system dialogs ====<br />
<br />
'''Brief explanation''': On this project you will be improving the integration of different Plasma components into different form factors. By adopting the SystemDialog component, we will be able to integrate them visually on mobile, Big Screen and others.<br />
<br />
'''Expected results''': The SIM PIN, PolKit (i.e. admin password prompt), KWallet and Netork Manager will appear native on Plasma Mobile. As a stretch goal we could work out how to also benefit from this work on Plasma Big Screen which targets TV UXs.<br />
<br />
'''Knowledge Prerequisite''': QML and C++. Knowledge of Kirigami will come in handy.<br />
<br />
'''Duration''': 175 hours<br />
<br />
Mentor: Aleix Pol Gonzalez, @apol:kde.org<br />
<br />
<br />
==== Hardware based navigation of Maliit On-screen keyboard ====<br />
<br />
'''Brief explanation''': On this project you will be improving the [https://github.com/maliit/keyboard Maliit] on-screen keyboard to allow selection of keys and other keyboard elements, via hardware input such as gamepads, analog joysticks, or arrow keys, for use in Bigscreen and similar situations.<br />
<br />
'''Expected results''': Keys, word completion, and other core features of the keyboard should be controllable from hardware input. There should be clear visual indication of what key is currently selected, selection of word suggestions, and what action pressing hardware buttons (x, y, b, a, triggers, etc…) will result in. The OSK should detect what hardware configurations are currently in use, and display or not display hints as appropriate.<br />
<br />
'''Knowledge Prerequisite''': QML and C++<br />
<br />
'''Duration''': 175 hours<br />
<br />
Mentor: Rodney Dawes [https://webchat.kde.org/#/room/#maliit:matrix.org KDE Web Chat]: dobey)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2022/Ideas&diff=93736GSoC/2022/Ideas2022-02-12T10:13:49Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2021/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Duration:''' ~175 hr or ~350 hour (use only one)<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*expected effort to finish the project (either ~175 or ~350 hrs)<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
'''**Ideas with no mentors listed and their contact info will be removed**'''<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Duration:''' Mention one of ~175 or ~350 hours of effort necessary to finish the project. Use only one of these two project classes and don't come up with other numbers here.<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in [https://matrix.to/#/#kde-soc:kde.org #kde-soc:kde.org] on matrix.<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [https://web.libera.chat/ #digikam IRC channel on irc.libera.chat]<br />
'''<br />
<br />
==== Project: New plugin to process OCR ====<br />
<br />
'''Brief Explanation''': the goal of this project is to implement a new generic DPlugin to process images in batch with Tesseract. It's a C++ framework to make Optical Characters Recognition. This plugin must be able to run over images automatically and record detected text in image metadata for post-processing, as described in this bugzilla file:<br />
<br />
https://bugs.kde.org/show_bug.cgi?id=117629<br />
<br />
'''Expected Results''': <br />
<br />
Provide a new optional Generic Tesseract based DPlugin available in digiKam and Showfoto to run OCR automatically. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt5 and Qt6 API, Tesseract, CMake, OCR Image Processing<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), Minh Nghĩa Dương (minhnghiaduong997@gmail.com), Maik Qualmann (metzpinguin@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Improve Image Quality Sorter with Neural Network ====<br />
<br />
'''Brief Explanation''': digiKam has powerful feature to sort images by quality and register items with flags in database for future post processing. Analyzed image qualities are noise, focus, exposure, and compression. Algorithms used in background are revised in 2021 and give good enough result but we can add new criteria of quality based on Neural Network analysis, as for ex to detect the composition of image.<br />
<br />
'''Expected Results''': <br />
<br />
Provide an update of Image Quality processing using OpenCV DNN engine. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt5 and Qt6, DNN, OpenCV, Image Processing<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), Minh Nghĩa Dương (minhnghiaduong997@gmail.com), Maik Qualmann (metzpinguin@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Port Continuous Integration/Deployment to Gitlab/Craft DevOp Infrastructure and Notarize Bundles for Stores.<br />
<br />
'''Brief Explanation''': digiKam use KDE/Jenkins to process Continuous Integration for Linux/BSD target. Windows and MacOS target do not work. With the recent migration to Gitlab, DevOps gain simplicity and become more powerful. The goal of this project is:<br />
<br />
- Prepare Craft infrastructure to handle digiKam and all required dependencies (this is more and less already done as other application as Krita already build with Craft).<br />
- Setup Continuous Integration and Continuous Deployment authorizations with Gitlab/Craft.<br />
- Compile digiKam from MacOS and Windows using CI.<br />
- Fix compilation with XCode and VisualC++ if necessary using CI.<br />
- Configure the signature of bundles.<br />
- Configure the application rights under MacOS and Windows (access to camera device, access to disks).<br />
- Construct the bundles.<br />
- Test if all is fine at run time on target computers.<br />
- Deploy the bundles to the Windows and MacOS stores (Kate editor do it already).<br />
<br />
Relevant bugzilla entries are listed below:<br />
<br />
https://bugs.kde.org/show_bug.cgi?id=398582<br />
https://bugs.kde.org/show_bug.cgi?id=120192<br />
<br />
Link to Craft DevOps toolkit:<br />
<br />
https://community.kde.org/Craft<br />
<br />
'''Expected Results''': <br />
<br />
Using modern Gitlab/Craft DevOps infrastructure to compile digiKam. <br />
Provide notarized bundles for Apple and Microsoft stores.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, CMake, Qt5 and Qt6, Gitlab, DevOps, Craft.<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), Minh Nghĩa Dương (minhnghiaduong997@gmail.com), Maik Qualmann (metzpinguin@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Okular user interface for e-ink tables (PineNote) ====<br />
<br />
'''Brief explanation:''' e-ink tables are special given their "low" refresh rate.<br />
<br />
We would need to create a new Okular user interface (based either in the mobile or the dekstop one) to accommodate for the unique features of those kind of displays.<br />
<br />
We will probably arrange to get a device loaned if someone gets selected for this project.<br />
<br />
'''Expected results:''' A new Okular user interface that works well with e-ink tablets.<br />
<br />
'''Knowledge prerequisite:''' C++, probably QML.<br />
<br />
'''Duration:''' 350 hours.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
=== KStars ===<br />
'''[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.'''<br />
<br />
==== Project: Observation Wizard Improvements ====<br />
'''Brief explanation''': The Observation Wizard enables users to select and filter objects of interest to them . Currently, the selection is done by object type, location, and magnitude in the sky. Further, the user can filter objects based on altitude and time-range when they are available. This tool can be further improved by providing the following features:<br />
# '''INDI Integration''': Filter and sort by object size for Deep Sky Objects that have a physical width and height, unlike point-like sources like stars. Limit objects to fall within a particular percentage of the sensor. For example, M31 galaxy is very large and spans almost 3 degrees in the night sky. It would not fit inside the camera's 1x1 degree field of view (as calculated from INDI). Similarly, an object spanning on 5'x5' arcmins is too small in the camera.<br />
# '''Image Integration''': The way the final list of objects are displayed should be modernized. Each object should have an image and also an Altitude-vs-Time plot next to it so that the user can quick identify what is the best time to observe this object. For large lists, this can be very CPU intensive and should be optimized accordingly.<br />
# '''Save/Load''': Ability to save and load the wizard search parameters for future use so that the user does not always have to start from scratch every time they need to search for objects.<br />
# '''Export''': Export the list of object to an external file or source in CSV and JSON formats.<br />
'''Expected results''': <br />
* Improved Observation Wizard Tool.<br />
* Proper integration with INDI & Ekos.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
<br />
==== Project: KStars Testing ====<br />
<br />
'''Brief explanation:''' KStars is built on a relatively large number of C++ classes, grouped in the following categories: sky objects and components, projection algorithms, graphics, timekeeping, widgets, Ekos automation, INDI client, FITS viewing, accessories and several library interfaces. Most of these constituting classes remain untested in terms of systematic and automatic verification. <br />
The objective of this project is to verify the code written in those classes at three levels: API, functionality and UI-based use case. In order to achieve this, the existing test code will have to extend its code coverage, report validation results and integrate seamlessly to the build recipe of the project.<br />
<br />
The difficulty of this project is the requirement to create tests on legacy code and consolidate a test plan that reflects how the software is working instead of how we expect it to work.<br />
<br />
'''Expected results:'''<br />
* Verify APIs: call each public class member using arbitrary test fixtures, control side effects by stubbing interfaces. This verifies code is executing in the data domain we expect, or fails for known reasons. As an example, the report will reveal how classes managing coordinates accept or reject numerical input.<br />
* Verify functionalities: ensure specific class interfaces return an expected result given a controlled set of input parameters. This verifies code is behaving as expected, or isolates known issues. As an example, the report will reveal which value of the Julian time classes managing timekeeping produce given different input objects embedding the same UTC time.<br />
* Verify use cases: ensure specific scenarios can be executed in the interface as presented in their documentation. This verifies procedures achieving useful results for the end-user remain stable, and controls how they evolve and improve during development.<br />
* Consolidate test reports and code coverage, and automate the execution of the test plan when building.<br />
Bonus: generate videos of use cases for end-users automatically.<br />
<br />
'''Level''': beginner to intermediate<br />
<br />
'''Knowledge prerequisites''': C++, Qt, software testing and verification fundamentals<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
=== Plasma Mobile Dialer ===<br />
'''Plasma Mobile Dialer is a part of the [https://plasma-mobile.org/ Plasma Mobile] project developed by KDE. Additional details could also be found in the [https://develop.kde.org/docs/build/plasma-mobile/ developer documentation].'''<br />
<br />
==== Project: Visual voicemail support ====<br />
<br />
'''Brief explanation:''' [https://invent.kde.org/plasma-mobile/plasma-dialer/-/issues/26 KDE Gitlab issue]<br />
<br />
As described in the KDE GitLab, it is possible to reuse the so-called [https://gitlab.com/kop316/vvmd vvmd] daemon that retrieves Visual voicemail. It provides environment-agnostic [https://doc.qt.io/qt-5/qtdbus-index.html D-Bus] interfaces. The draft for the Qt wrappers is also there.<br />
The integration could be implemented as part of the [https://invent.kde.org/plasma-mobile/plasma-dialer/-/tree/master/kde-telephony-plugin-declarative org.kde.telephony] QML plugin or as a separate QML plugin. After that, the user interface could be written in QML with [https://develop.kde.org/frameworks/kirigami/ Kirigami] components library for the plasma-dialer side.<br />
The task is mostly to propose and implement an appropriate graphical user interface.<br />
<br />
'''Expected results:''' An additional tab/page for the dialer where you could listen to voicemail messages<br />
<br />
'''Knowledge prerequisites''': QML, Kirigami (mostly), C++, Qt, D-Bus IPC (to interact with the existing daemon), CMake (project build system)<br />
<br />
'''Duration:''' 175 hours<br />
<br />
'''Mentor''': Alexey ([https://webchat.kde.org/#/room/#plasmamobile:kde.org KDE Web Chat]: aa13q)<br />
<br />
<br />
=== Plasma ===<br />
<br />
==== Plasma form factor integration of system dialogs ====<br />
<br />
'''Brief explanation''': On this project you will be improving the integration of different Plasma components into different form factors. By adopting the SystemDialog component, we will be able to integrate them visually on mobile, Big Screen and others.<br />
<br />
'''Expected results''': The SIM PIN, PolKit (i.e. admin password prompt), KWallet and Netork Manager will appear native on Plasma Mobile. As a stretch goal we could work out how to also benefit from this work on Plasma Big Screen which targets TV UXs.<br />
<br />
'''Knowledge Prerequisite''': QML and C++. Knowledge of Kirigami will come in handy.<br />
<br />
'''Duration''': 175 hours<br />
<br />
Mentor: Aleix Pol Gonzalez, @apol:kde.org<br />
<br />
<br />
==== Hardware based navigation of Maliit On-screen keyboard ====<br />
<br />
'''Brief explanation''': On this project you will be improving the [https://github.com/maliit/keyboard Maliit] on-screen keyboard to allow selection of keys and other keyboard elements, via hardware input such as gamepads, analog joysticks, or arrow keys, for use in Bigscreen and similar situations.<br />
<br />
'''Expected results''': Keys, word completion, and other core features of the keyboard should be controllable from hardware input. There should be clear visual indication of what key is currently selected, selection of word suggestions, and what action pressing hardware buttons (x, y, b, a, triggers, etc…) will result in. The OSK should detect what hardware configurations are currently in use, and display or not display hints as appropriate.<br />
<br />
'''Knowledge Prerequisite''': QML and C++<br />
<br />
'''Duration''': 175 hours<br />
<br />
Mentor: Rodney Dawes [https://webchat.kde.org/#/room/#maliit:matrix.org KDE Web Chat]: dobey)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2022/Ideas&diff=93735GSoC/2022/Ideas2022-02-12T09:58:14Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2021/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Duration:''' ~175 hr or ~350 hour (use only one)<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*expected effort to finish the project (either ~175 or ~350 hrs)<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
'''**Ideas with no mentors listed and their contact info will be removed**'''<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Duration:''' Mention one of ~175 or ~350 hours of effort necessary to finish the project. Use only one of these two project classes and don't come up with other numbers here.<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in [https://matrix.to/#/#kde-soc:kde.org #kde-soc:kde.org] on matrix.<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [https://web.libera.chat/ #digikam IRC channel on irc.libera.chat]<br />
'''<br />
<br />
==== Project: New plugin to process OCR ====<br />
<br />
'''Brief Explanation''': the goal of this project is to implement a new generic DPlugin to process images in batch with Tesseract. It's a C++ framework to make Optical Characters Recognition. This plugin must be able to run over images automatically and record detected text in image metadata for post-processing, as described in this bugzilla file:<br />
<br />
https://bugs.kde.org/show_bug.cgi?id=117629<br />
<br />
'''Expected Results''': <br />
<br />
Provide a new optional Generic Tesseract based DPlugin available in digiKam and Showfoto to run OCR automatically. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt5 and Qt6 API, Tesseract, CMake, OCR Image Processing<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Improve Image Quality Sorter with Neural Network ====<br />
<br />
'''Brief Explanation''': digiKam has powerful feature to sort images by quality and register items with flags in database for future post processing. Analyzed image qualities are noise, focus, exposure, and compression. Algorithms used in background are revised in 2021 and give good enough result but we can add new criteria of quality based on Neural Network analysis, as for ex to detect the composition of image.<br />
<br />
'''Expected Results''': <br />
<br />
Provide an update of Image Quality processing using OpenCV DNN engine. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt5 and Qt6, DNN, OpenCV, Image Processing<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), Minh Nghĩa Dương (minhnghiaduong997@gmail.com), Maik Qualmann (metzpinguin@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Okular user interface for e-ink tables (PineNote) ====<br />
<br />
'''Brief explanation:''' e-ink tables are special given their "low" refresh rate.<br />
<br />
We would need to create a new Okular user interface (based either in the mobile or the dekstop one) to accommodate for the unique features of those kind of displays.<br />
<br />
We will probably arrange to get a device loaned if someone gets selected for this project.<br />
<br />
'''Expected results:''' A new Okular user interface that works well with e-ink tablets.<br />
<br />
'''Knowledge prerequisite:''' C++, probably QML.<br />
<br />
'''Duration:''' 350 hours.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
=== KStars ===<br />
'''[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.'''<br />
<br />
==== Project: Observation Wizard Improvements ====<br />
'''Brief explanation''': The Observation Wizard enables users to select and filter objects of interest to them . Currently, the selection is done by object type, location, and magnitude in the sky. Further, the user can filter objects based on altitude and time-range when they are available. This tool can be further improved by providing the following features:<br />
# '''INDI Integration''': Filter and sort by object size for Deep Sky Objects that have a physical width and height, unlike point-like sources like stars. Limit objects to fall within a particular percentage of the sensor. For example, M31 galaxy is very large and spans almost 3 degrees in the night sky. It would not fit inside the camera's 1x1 degree field of view (as calculated from INDI). Similarly, an object spanning on 5'x5' arcmins is too small in the camera.<br />
# '''Image Integration''': The way the final list of objects are displayed should be modernized. Each object should have an image and also an Altitude-vs-Time plot next to it so that the user can quick identify what is the best time to observe this object. For large lists, this can be very CPU intensive and should be optimized accordingly.<br />
# '''Save/Load''': Ability to save and load the wizard search parameters for future use so that the user does not always have to start from scratch every time they need to search for objects.<br />
# '''Export''': Export the list of object to an external file or source in CSV and JSON formats.<br />
'''Expected results''': <br />
* Improved Observation Wizard Tool.<br />
* Proper integration with INDI & Ekos.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
<br />
==== Project: KStars Testing ====<br />
<br />
'''Brief explanation:''' KStars is built on a relatively large number of C++ classes, grouped in the following categories: sky objects and components, projection algorithms, graphics, timekeeping, widgets, Ekos automation, INDI client, FITS viewing, accessories and several library interfaces. Most of these constituting classes remain untested in terms of systematic and automatic verification. <br />
The objective of this project is to verify the code written in those classes at three levels: API, functionality and UI-based use case. In order to achieve this, the existing test code will have to extend its code coverage, report validation results and integrate seamlessly to the build recipe of the project.<br />
<br />
The difficulty of this project is the requirement to create tests on legacy code and consolidate a test plan that reflects how the software is working instead of how we expect it to work.<br />
<br />
'''Expected results:'''<br />
* Verify APIs: call each public class member using arbitrary test fixtures, control side effects by stubbing interfaces. This verifies code is executing in the data domain we expect, or fails for known reasons. As an example, the report will reveal how classes managing coordinates accept or reject numerical input.<br />
* Verify functionalities: ensure specific class interfaces return an expected result given a controlled set of input parameters. This verifies code is behaving as expected, or isolates known issues. As an example, the report will reveal which value of the Julian time classes managing timekeeping produce given different input objects embedding the same UTC time.<br />
* Verify use cases: ensure specific scenarios can be executed in the interface as presented in their documentation. This verifies procedures achieving useful results for the end-user remain stable, and controls how they evolve and improve during development.<br />
* Consolidate test reports and code coverage, and automate the execution of the test plan when building.<br />
Bonus: generate videos of use cases for end-users automatically.<br />
<br />
'''Level''': beginner to intermediate<br />
<br />
'''Knowledge prerequisites''': C++, Qt, software testing and verification fundamentals<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
=== Plasma Mobile Dialer ===<br />
'''Plasma Mobile Dialer is a part of the [https://plasma-mobile.org/ Plasma Mobile] project developed by KDE. Additional details could also be found in the [https://develop.kde.org/docs/build/plasma-mobile/ developer documentation].'''<br />
<br />
==== Project: Visual voicemail support ====<br />
<br />
'''Brief explanation:''' [https://invent.kde.org/plasma-mobile/plasma-dialer/-/issues/26 KDE Gitlab issue]<br />
<br />
As described in the KDE GitLab, it is possible to reuse the so-called [https://gitlab.com/kop316/vvmd vvmd] daemon that retrieves Visual voicemail. It provides environment-agnostic [https://doc.qt.io/qt-5/qtdbus-index.html D-Bus] interfaces. The draft for the Qt wrappers is also there.<br />
The integration could be implemented as part of the [https://invent.kde.org/plasma-mobile/plasma-dialer/-/tree/master/kde-telephony-plugin-declarative org.kde.telephony] QML plugin or as a separate QML plugin. After that, the user interface could be written in QML with [https://develop.kde.org/frameworks/kirigami/ Kirigami] components library for the plasma-dialer side.<br />
The task is mostly to propose and implement an appropriate graphical user interface.<br />
<br />
'''Expected results:''' An additional tab/page for the dialer where you could listen to voicemail messages<br />
<br />
'''Knowledge prerequisites''': QML, Kirigami (mostly), C++, Qt, D-Bus IPC (to interact with the existing daemon), CMake (project build system)<br />
<br />
'''Duration:''' 175 hours<br />
<br />
'''Mentor''': Alexey ([https://webchat.kde.org/#/room/#plasmamobile:kde.org KDE Web Chat]: aa13q)<br />
<br />
<br />
=== Plasma ===<br />
<br />
==== Plasma form factor integration of system dialogs ====<br />
<br />
'''Brief explanation''': On this project you will be improving the integration of different Plasma components into different form factors. By adopting the SystemDialog component, we will be able to integrate them visually on mobile, Big Screen and others.<br />
<br />
'''Expected results''': The SIM PIN, PolKit (i.e. admin password prompt), KWallet and Netork Manager will appear native on Plasma Mobile. As a stretch goal we could work out how to also benefit from this work on Plasma Big Screen which targets TV UXs.<br />
<br />
'''Knowledge Prerequisite''': QML and C++. Knowledge of Kirigami will come in handy.<br />
<br />
'''Duration''': 175 hours<br />
<br />
Mentor: Aleix Pol Gonzalez, @apol:kde.org<br />
<br />
<br />
==== Hardware based navigation of Maliit On-screen keyboard ====<br />
<br />
'''Brief explanation''': On this project you will be improving the [https://github.com/maliit/keyboard Maliit] on-screen keyboard to allow selection of keys and other keyboard elements, via hardware input such as gamepads, analog joysticks, or arrow keys, for use in Bigscreen and similar situations.<br />
<br />
'''Expected results''': Keys, word completion, and other core features of the keyboard should be controllable from hardware input. There should be clear visual indication of what key is currently selected, selection of word suggestions, and what action pressing hardware buttons (x, y, b, a, triggers, etc…) will result in. The OSK should detect what hardware configurations are currently in use, and display or not display hints as appropriate.<br />
<br />
'''Knowledge Prerequisite''': QML and C++<br />
<br />
'''Duration''': 175 hours<br />
<br />
Mentor: Rodney Dawes [https://webchat.kde.org/#/room/#maliit:matrix.org KDE Web Chat]: dobey)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2022/Ideas&diff=93734GSoC/2022/Ideas2022-02-12T09:50:57Z<p>Cauliergilles: /* Ideas */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2021/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Duration:''' ~175 hr or ~350 hour (use only one)<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*expected effort to finish the project (either ~175 or ~350 hrs)<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
'''**Ideas with no mentors listed and their contact info will be removed**'''<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Duration:''' Mention one of ~175 or ~350 hours of effort necessary to finish the project. Use only one of these two project classes and don't come up with other numbers here.<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in [https://matrix.to/#/#kde-soc:kde.org #kde-soc:kde.org] on matrix.<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [https://web.libera.chat/ #digikam IRC channel on irc.libera.chat]<br />
'''<br />
<br />
==== Project: New plugin to process OCR ====<br />
<br />
'''Brief Explanation''': the goal of this project is to implement a new generic DPlugin to process images in batch with Tesseract. It's a C++ framework to make Optical Characters Recognition. This plugin must be able to run over images automatically and record detected text in image metadata for post-processing, as described in this bugzilla file:<br />
<br />
https://bugs.kde.org/show_bug.cgi?id=117629<br />
<br />
'''Expected Results''': <br />
<br />
Provide a new optional Generic Tesseract based DPlugin available in digiKam and Showfoto to run OCR automatically. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt5 and Qt6 API, Tesseract, CMake, OCR Image Processing<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Okular user interface for e-ink tables (PineNote) ====<br />
<br />
'''Brief explanation:''' e-ink tables are special given their "low" refresh rate.<br />
<br />
We would need to create a new Okular user interface (based either in the mobile or the dekstop one) to accommodate for the unique features of those kind of displays.<br />
<br />
We will probably arrange to get a device loaned if someone gets selected for this project.<br />
<br />
'''Expected results:''' A new Okular user interface that works well with e-ink tablets.<br />
<br />
'''Knowledge prerequisite:''' C++, probably QML.<br />
<br />
'''Duration:''' 350 hours.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
=== KStars ===<br />
'''[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.'''<br />
<br />
==== Project: Observation Wizard Improvements ====<br />
'''Brief explanation''': The Observation Wizard enables users to select and filter objects of interest to them . Currently, the selection is done by object type, location, and magnitude in the sky. Further, the user can filter objects based on altitude and time-range when they are available. This tool can be further improved by providing the following features:<br />
# '''INDI Integration''': Filter and sort by object size for Deep Sky Objects that have a physical width and height, unlike point-like sources like stars. Limit objects to fall within a particular percentage of the sensor. For example, M31 galaxy is very large and spans almost 3 degrees in the night sky. It would not fit inside the camera's 1x1 degree field of view (as calculated from INDI). Similarly, an object spanning on 5'x5' arcmins is too small in the camera.<br />
# '''Image Integration''': The way the final list of objects are displayed should be modernized. Each object should have an image and also an Altitude-vs-Time plot next to it so that the user can quick identify what is the best time to observe this object. For large lists, this can be very CPU intensive and should be optimized accordingly.<br />
# '''Save/Load''': Ability to save and load the wizard search parameters for future use so that the user does not always have to start from scratch every time they need to search for objects.<br />
# '''Export''': Export the list of object to an external file or source in CSV and JSON formats.<br />
'''Expected results''': <br />
* Improved Observation Wizard Tool.<br />
* Proper integration with INDI & Ekos.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
<br />
==== Project: KStars Testing ====<br />
<br />
'''Brief explanation:''' KStars is built on a relatively large number of C++ classes, grouped in the following categories: sky objects and components, projection algorithms, graphics, timekeeping, widgets, Ekos automation, INDI client, FITS viewing, accessories and several library interfaces. Most of these constituting classes remain untested in terms of systematic and automatic verification. <br />
The objective of this project is to verify the code written in those classes at three levels: API, functionality and UI-based use case. In order to achieve this, the existing test code will have to extend its code coverage, report validation results and integrate seamlessly to the build recipe of the project.<br />
<br />
The difficulty of this project is the requirement to create tests on legacy code and consolidate a test plan that reflects how the software is working instead of how we expect it to work.<br />
<br />
'''Expected results:'''<br />
* Verify APIs: call each public class member using arbitrary test fixtures, control side effects by stubbing interfaces. This verifies code is executing in the data domain we expect, or fails for known reasons. As an example, the report will reveal how classes managing coordinates accept or reject numerical input.<br />
* Verify functionalities: ensure specific class interfaces return an expected result given a controlled set of input parameters. This verifies code is behaving as expected, or isolates known issues. As an example, the report will reveal which value of the Julian time classes managing timekeeping produce given different input objects embedding the same UTC time.<br />
* Verify use cases: ensure specific scenarios can be executed in the interface as presented in their documentation. This verifies procedures achieving useful results for the end-user remain stable, and controls how they evolve and improve during development.<br />
* Consolidate test reports and code coverage, and automate the execution of the test plan when building.<br />
Bonus: generate videos of use cases for end-users automatically.<br />
<br />
'''Level''': beginner to intermediate<br />
<br />
'''Knowledge prerequisites''': C++, Qt, software testing and verification fundamentals<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
=== Plasma Mobile Dialer ===<br />
'''Plasma Mobile Dialer is a part of the [https://plasma-mobile.org/ Plasma Mobile] project developed by KDE. Additional details could also be found in the [https://develop.kde.org/docs/build/plasma-mobile/ developer documentation].'''<br />
<br />
==== Project: Visual voicemail support ====<br />
<br />
'''Brief explanation:''' [https://invent.kde.org/plasma-mobile/plasma-dialer/-/issues/26 KDE Gitlab issue]<br />
<br />
As described in the KDE GitLab, it is possible to reuse the so-called [https://gitlab.com/kop316/vvmd vvmd] daemon that retrieves Visual voicemail. It provides environment-agnostic [https://doc.qt.io/qt-5/qtdbus-index.html D-Bus] interfaces. The draft for the Qt wrappers is also there.<br />
The integration could be implemented as part of the [https://invent.kde.org/plasma-mobile/plasma-dialer/-/tree/master/kde-telephony-plugin-declarative org.kde.telephony] QML plugin or as a separate QML plugin. After that, the user interface could be written in QML with [https://develop.kde.org/frameworks/kirigami/ Kirigami] components library for the plasma-dialer side.<br />
The task is mostly to propose and implement an appropriate graphical user interface.<br />
<br />
'''Expected results:''' An additional tab/page for the dialer where you could listen to voicemail messages<br />
<br />
'''Knowledge prerequisites''': QML, Kirigami (mostly), C++, Qt, D-Bus IPC (to interact with the existing daemon), CMake (project build system)<br />
<br />
'''Duration:''' 175 hours<br />
<br />
'''Mentor''': Alexey ([https://webchat.kde.org/#/room/#plasmamobile:kde.org KDE Web Chat]: aa13q)<br />
<br />
<br />
=== Plasma ===<br />
<br />
==== Plasma form factor integration of system dialogs ====<br />
<br />
'''Brief explanation''': On this project you will be improving the integration of different Plasma components into different form factors. By adopting the SystemDialog component, we will be able to integrate them visually on mobile, Big Screen and others.<br />
<br />
'''Expected results''': The SIM PIN, PolKit (i.e. admin password prompt), KWallet and Netork Manager will appear native on Plasma Mobile. As a stretch goal we could work out how to also benefit from this work on Plasma Big Screen which targets TV UXs.<br />
<br />
'''Knowledge Prerequisite''': QML and C++. Knowledge of Kirigami will come in handy.<br />
<br />
'''Duration''': 175 hours<br />
<br />
Mentor: Aleix Pol Gonzalez, @apol:kde.org<br />
<br />
<br />
==== Hardware based navigation of Maliit On-screen keyboard ====<br />
<br />
'''Brief explanation''': On this project you will be improving the [https://github.com/maliit/keyboard Maliit] on-screen keyboard to allow selection of keys and other keyboard elements, via hardware input such as gamepads, analog joysticks, or arrow keys, for use in Bigscreen and similar situations.<br />
<br />
'''Expected results''': Keys, word completion, and other core features of the keyboard should be controllable from hardware input. There should be clear visual indication of what key is currently selected, selection of word suggestions, and what action pressing hardware buttons (x, y, b, a, triggers, etc…) will result in. The OSK should detect what hardware configurations are currently in use, and display or not display hints as appropriate.<br />
<br />
'''Knowledge Prerequisite''': QML and C++<br />
<br />
'''Duration''': 175 hours<br />
<br />
Mentor: Rodney Dawes [https://webchat.kde.org/#/room/#maliit:matrix.org KDE Web Chat]: dobey)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2021/Ideas&diff=91127GSoC/2021/Ideas2021-02-22T05:18:03Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2020/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
** '''Ideas with no mentors listed and their contact info will be removed''' **<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
'''<br />
<br />
==== Project: Port to Qt6 API ====<br />
<br />
'''Brief Explanation''': current digiKam 7.x implementation if fully compatible with Qt5.13.x under macOS, Windows, and Linux, but we need to port implementations to new Qt6, where API has changed, become deprecated, or have been improved. This require non trivial changes in digiKam with plenty of regression tests to do. Identified changes to include in this project are:<br />
* Migrate libo2 dependency to the new QtNetworkAuth framework for WebService plugins.<br />
* Port internal DImg framework to use new QImage 16 bits colors depth format.<br />
* Fix deprecated QXmlPatterns API uses.<br />
* Port AppImage builder to Qt6 with suitable ICU support. <br />
* Fix all Qt 5 Core Compatibility C++ Classes Uses (https://doc-snapshots.qt.io/qt6-dev/qtcore5compat-module.html)<br />
<br />
'''Expected Results''': <br />
<br />
Port to new API, replace deprecated, and make digiKam ready for Qt6. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Oauth2, CMake<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: New plugin to process OCR ====<br />
<br />
'''Brief Explanation''': the goal of this project is to implement a new generic DPlugin to process images in batch with Tesseract. It's a C++ framework to make Optical Characters Recognition. This plugin must be able to run over images automatically and record detected text in image metadata for post-processing, as described in this bugzilla file:<br />
<br />
https://bugs.kde.org/show_bug.cgi?id=117629<br />
<br />
'''Expected Results''': <br />
<br />
Provide a new optional Generic Tesseract based DPlugin available in digiKam and Showfoto to run OCR automatically. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Tesseract, CMake, OCR Image Processing<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Improve Image Quality Sorter algorithms ====<br />
<br />
'''Brief Explanation''': digiKam has few algorithm used to sort images by quality and register items with flags in database for future post processing. Analyzed image qualities are noise, focus, exposure, and compression. Algorithms used in background do not give expected results and need improvements or to be re-written. Relevant files for bugzilla:<br />
<br />
* https://bugs.kde.org/show_bug.cgi?id=426355<br />
* https://bugs.kde.org/show_bug.cgi?id=399841<br />
<br />
'''Expected Results''': <br />
<br />
Provide an update of Image Quality processing using better implementation algorithm. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, OpenCV, Image Processing<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Improve custom stamp annotation handling ====<br />
<br />
'''Brief explanation:''' Okular does display stamp annotations, but the support<br />
is somewhat incomplete. This particularly shows when trying to use stamp<br />
annotations with a custom image. For example, such annotations can be<br />
added in Okular, but they cannot be saved to the pdf file in a way<br />
that any other pdf viewer can read. Also, they will not appear on print-outs.<br />
<br />
The underlying reason for this is that Okular renders these stamps itself,<br />
rather than relying on the poppler library, which does all other pdf<br />
rendering. Goal of this project is therefore to teach poppler how to<br />
render stamp annotations, and then make Okular use that new functionality.<br />
More details can be found in the bug report [0].<br />
<br />
[0] https://bugs.kde.org/show_bug.cgi?id=383651<br />
<br />
'''Expected results:''' Poppler should render stamp annotations. Annotations<br />
should be printable from Okular. Custom stamps inserted via the Okular GUI<br />
should be visible in other pdf readers.<br />
<br />
'''Knowledge prerequisite:''' C++, and a bit about the pdf format.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
<br />
=== KMyMoney ===<br />
KMyMoney is a cross-platform personal finance manager build on KDE frameworks technologies for your desktop and notebook environment. It enables users to keep careful track of their personal finances by providing a broad array of financial features and tools. <br />
<br />
==== Project: Integration of the new functionalities from the Alkimia library ====<br />
<gallery><br />
Kmymoney-alkimia-alkonlinequotewidget.png|Extended online quote support in KMyMoney 4.8<br />
Kmymoney-online-quote-addon-installer.png|Dialog for adding/updating online quote sources<br />
</gallery><br />
<br />
'''Brief explanation:''' <br />
With Alkimia version 8.0 the online quote support of KMyMoney was taken over, equipped with debug functions and extended by an online update of the quote sources.<br />
<br />
The task is to add this support to version 5 of KMyMoney, either as a replacement for existing functionality in KMyMoney (as was done with version 4.8) or as an optional KMyMoney plugin. <br />
<br />
In the former case, the WebPriceQuote class would need to be replaced with the associated AlkOnlineQuotesWidget class from the Alkimia library (see the associated Git commit for the [https://invent.kde.org/office/kmymoney/-/commit/6da0badcc33e756aedb524d62f49f3818efcafb6 4.8 branch]).<br />
<br />
For the second variant, the WebPriceQuote class would have to be converted to a KMyMoney plugin to make it optional. Based on this, another plugin can be added that uses the corresponding classes from Alkimia and can be used alternatively (From [https://bugs.kde.org/show_bug.cgi?id=381517#c1|Bug 381517]).<br />
<br />
'''Expected results:''' KMyMoney 5 will have the extended support of online quotes<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
<br />
==== Project: Add gdb pretty printer support for Qt5 ====<br />
<br />
'''Brief explanation:''' <br />
GDB provides a mechanism that allows pretty-printing of values with Python code. It greatly simplifies the representation of complex objects [https://sourceware.org/gdb/current/onlinedocs/gdb/Pretty-Printing.html#Pretty-Printing]. The task of this project is to complete Qt5 support based on [https://codereview.qt-project.org/c/qt/qtbase/+/87052].<br />
<br />
'''Expected results:''' The Qt5 pretty printer are part of further Qt releases<br />
<br />
'''Knowledge Prerequisite:''' gdb, git, python, Qt<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KtoBlzCheck ===<br />
<br />
KtoBLZCheck is a library for checking account numbers and bank codes of banks from different countries like Germany, Holland and Switzerland. The basic data used by the library is also used by other financial management applications such as KMyMoney, AqBanking and GnuCash.<br />
<br />
==== Project: Extend the usage of bank data support in KMyMoney ====<br />
<br />
[[File:KMymoney - New Institution Dialog.png|thumb|Current "New Institution" dialog]]<br />
[[File:Kmymoney-account-institution-tab.png|thumb|Current "Institution" tab of account dialog]]<br />
<br />
'''Brief explanation:''' <br />
<br />
KMyMoney provides dialogs to create and edit institutions and accounts, the latter having a link to an institution. This project is about extending these dialogs with the databases and functionalities provided by ktoblzcheck to simplify the input.<br />
<br />
'''Expected results:''' <br />
<br />
1. When adding new institutions, it should be possible to search for a bank in the corresponding dialog and take over existing bank data such as city and BIC for simplified setup.<br />
<br />
2. After entering an account number in the "Institution" tab of the account processing dialog, the IBAN should be calculated automatically if an institution has been selected before. <br />
<br />
According to [https://www.ecb.europa.eu/paym/integration/retail/sepa/iban/shared/pdf/iban_registry.pdf] there is a common structure for generating IBAN e.g. ''DE2!n8!n10!n'', ''NL2!n4!a10!n'', ''CH2!n5!n12!c'' and since ktoblzcheck already has functions to verify associated checksums [https://sourceforge.net/p/ktoblzcheck/code/ci/master/tree/src/lib/iban.cc#l217], it should be possible to calculate them.<br />
<br />
3. The extension or adaptation of the application documentation with the new functionality is part of this project.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KStars ===<br />
'''[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.'''<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support an ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can support addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Observation Wizard Improvements ====<br />
'''Brief explanation''': The Observation Wizard enables users to select and filter objects of interest to them . Currently, the selection is done by object type, location, and magnitude in the sky. Further, the user can filter objects based on altitude and time-range when they are available. This tool can be further improved by providing the following features:<br />
# '''INDI Integration''': Filter and sort by object size for Deep Sky Objects that have a physical width and height, unlike point-like sources like stars. Limit objects to fall within a particular percentage of the sensor. For example, M31 galaxy is very large and spans almost 3 degrees in the night sky. It would not fit inside the camera's 1x1 degree field of view (as calculated from INDI). Similarly, an object spanning on 5'x5' arcmins is too small in the camera.<br />
# '''Image Integration''': The way the final list of objects are displayed should be modernized. Each object should have an image and also an Altitude-vs-Time plot next to it so that the user can quick identify what is the best time to observe this object. For large lists, this can be very CPU intensive and should be optimized accordingly.<br />
# '''Save/Load''': Ability to save and load the wizard search parameters for future use so that the user does not always have to start from scratch every time they need to search for objects.<br />
# '''Export''': Export the list of object to an external file or source in CSV and JSON formats.<br />
'''Expected results''': <br />
* Improved Observation Wizard Tool.<br />
* Proper integration with INDI & Ekos.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
<br />
==== Project: KStars Testing ====<br />
<br />
'''Brief explanation:''' KStars is built on a relatively large number of C++ classes, grouped in the following categories: sky objects and components, projection algorithms, graphics, timekeeping, widgets, Ekos automation, INDI client, FITS viewing, accessories and several library interfaces. Most of these constituting classes remain untested in terms of systematic and automatic verification. <br />
The objective of this project is to verify the code written in those classes at three levels: API, functionality and UI-based use case. In order to achieve this, the existing test code will have to extend its code coverage, report validation results and integrate seamlessly to the build recipe of the project.<br />
<br />
The difficulty of this project is the requirement to create tests on legacy code and consolidate a test plan that reflects how the software is working instead of how we expect it to work.<br />
<br />
'''Expected results:'''<br />
* Verify APIs: call each public class member using arbitrary test fixtures, control side effects by stubbing interfaces. This verifies code is executing in the data domain we expect, or fails for known reasons. As an example, the report will reveal how classes managing coordinates accept or reject numerical input.<br />
* Verify functionalities: ensure specific class interfaces return an expected result given a controlled set of input parameters. This verifies code is behaving as expected, or isolates known issues. As an example, the report will reveal which value of the Julian time classes managing timekeeping produce given different input objects embedding the same UTC time.<br />
* Verify use cases: ensure specific scenarios can be executed in the interface as presented in their documentation. This verifies procedures achieving useful results for the end-user remain stable, and controls how they evolve and improve during development.<br />
* Consolidate test reports and code coverage, and automate the execution of the test plan when building.<br />
Bonus: generate videos of use cases for end-users automatically.<br />
<br />
'''Level''': beginner to intermediate<br />
<br />
'''Knowledge prerequisites''': C++, Qt, software testing and verification fundamentals<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
=== GCompris ===<br />
<br />
==== Project: Adding new activities to GCompris ==== <br />
<br />
[https://gcompris.net/ GCompris] is a high quality educational software suite, including a large number of activities for children aged 2 to 10. We have recently launched our version 1.0 with multiple datasets feature. Moving forward we are looking to add more new activities to GCompris.<br />
<br />
'''Brief explanation''': Originally written in Gtk+ the development team started to rewrite it from scratch in Qt Quick and almost finished the port. Also, we have recently work on the multiple datasets feature.<br />
<br />
'''Expected results''':<br />
This year we aim to add some new activities to GCompris. The activities can be port of the GTK+ version or you can propose new activities too. For example, we lack activities in the science domain(chemistry, biology) which can be proposed.<br />
We have recently added multiple datasets to many activities so for all other activities having multiple datasets would be nice.<br />
<br />
You can have a look at our GCompris board to get some ideas about port of activities and multiple datasets too.<br />
<br />
https://phabricator.kde.org/project/view/142/<br />
<br />
https://phabricator.kde.org/T12428<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education.<br />
<br />
Be familiar with GCompris concept and content.<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough).<br />
<br />
Basic knowledge of QML, JavaScript would be a plus.<br />
<br />
Be able to build the Qt Quick version of GCompris.<br />
<br />
'''Application guide''':<br />
Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/GSOC_newcomers, http://gcompris.net/wiki/An_exercise_for_new_contributors and http://gcompris.net/wiki/Reviewing_an_activity<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Emmanuel Charruau (IRC: allon), Johnny Jazeix (IRC: JohnnyJ), Timothée Giet (IRC: Animtim), Deepak Kumar (IRC: deepak_)<br />
<br />
=== Kdenlive ===<br />
<br />
Get in touch with the team on #kdenlive-dev channel on [irc://chat.freenode.net/kdenlive-dev IRC] or [https://webchat.kde.org/#/room/#kdenlive-dev:kde.org matrix]<br />
<br />
All Kdenlive development ideas are in [https://invent.kde.org/multimedia/kdenlive/-/wikis/dev/Ideas Kdenlive Wiki]<br />
<br />
Proposed priority (great users interest and seems feasible in the timeframe):<br />
<br />
==== Project: Trimming in the timeline ====<br />
<br />
See [https://invent.kde.org/multimedia/kdenlive/-/wikis/dev/ideas/Trimming detailed description].<br />
<br />
'''Brief explanation:''' currently, editors working in Kdenlive can only move or resize clips they put in the timeline. They are used to other tools like roll, slide etc, the lack of which is sometimes annoying, losing time to change of image keeping the edit synchronized. Several tools should not be too hard to create using Kdenlive existing functions under the hood.<br />
<br />
'''Expected results:''' all the trimming tools editors are used to should be available in Kdenlive<br />
<br />
'''Knowledge Prerequisite:''' Qt C++ & QML<br />
<br />
'''Mentor:''' Vincent Pinon (code), Massimo Stella (editing)<br />
<br />
=== KIO FUSE ===<br />
'''KIO FUSE is a bridge between [https://invent.kde.org/frameworks/kio KIO] and [https://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE]. You can find out more on feverfew's [https://feverfew.home.blog/ blog].'''<br />
<br />
* IRC (freenode): [irc://chat.freenode.net/kde-fm #kde-fm] ping feverfew or fvogt.<br />
* Matrix: [https://webchat.kde.org/#/room/#kde-fm:kde.org #kde-fm:kde.org] ping feverfew or fvogt.<br />
<br />
==== Project: xfstests Integration ====<br />
<br />
[https://kernel.googlesource.com/pub/scm/fs/ext2/xfstests-bld/+/HEAD/Documentation/what-is-xfstests.md xfstests] is a file system regression test suite. We would like to integrate this with our current test suite.<br />
<br />
Here are some things which will help to establish a good project plan:<br />
<br />
# A [https://patchwork.kernel.org/project/linux-fsdevel/patch/20200108192504.GA893@miu.piliscsaba.redhat.com/ patch] that seems to allow easier support of FUSE filesystems.<br />
# https://github.com/rfjakob/fuse-xfstests<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/14 !14]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to macOS ====<br />
<br />
Port KIO FUSE to macOS. Dolphin builds on macOS AFAIK so this project should be technically feasible.<br />
The solution is likely to involve [https://osxfuse.github.io/ osxfuse].<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/13 !13]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to Windows ====<br />
<br />
Port KIO FUSE to Windows. Currently a Dolphin port is in the works, so KIO (our main dependency) is already working.<br />
There are two potential solutions:<br />
<br />
# [https://dokan-dev.github.io/#fuse-api Dokan FUSE]<br />
# A method similar to what [https://github.com/billziss-gh/sshfs-win sshfs-win] has done ([https://github.com/billziss-gh/winfsp WinFsp] and [https://cygwin.com/ Cygwin]).<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/12 !12]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
=== NeoChat ===<br />
<br />
The two areas that could accept a student for GSoC are encryptions and voip support. Talk with us in #neochat:kde.org so that we can discuss together the scope of your project. Also we are open to interesting ideas about improvement in NeoChat.<br />
<br />
'''Knowledge prerequisite:''' C++, QML (Cryptographie or GStreamer)<br />
<br />
=== Plasma Mobile - Calendar ===<br />
<br />
Your goal will be to improve a proof of concept of a calendar application using Akonadi. The current proof of concept is able to sucessfully display a month view of all the events in your korganize callendar but to be really usefull the convergence of the application will need to be improved and the possibility of adding, editing and removing events should be added.<br />
<br />
'''Knowledge prerequisite:''' C++ and QML<br />
<br />
'''Contact:'''' @carl:kde.org on Matrix<br />
<br />
=== Plasma-nm ===<br />
<br />
==== Better firewall support ====<br />
'''Brief explanation''': Plasma-nm sets default firewall zone for each created connection. While this can be changed in connection settings, it would be nice to add some dialog interaction before a connection gets created and ask the user what firewall zone he wants to use when connecting to a new wireless network. <br />
<br />
'''Expected result''': Plasma-nm will ask the user what firewall zone he wants to use when connecting to a new wireless network.<br />
<br />
'''Mentor''': Jan Grulich - IRC (freenode): [irc://chat.freenode.net/plasma #plasma] ping jgrulich.<br />
<br />
'''Knowledge prerequisite:''' C++, QML<br />
<br />
<br />
=== Krita ===<br />
<br />
Please contact us early - the sooner, the better.<br />
<br />
You can suggest your own project. Make sure it's correct size for your experience level and the time limit.<br />
<br />
Contact:<br />
#krita on irc.freenode.net (note that the chat's activeness might vary depending on which time it is)<br />
https://krita-artists.org/c/develop/7<br />
<br />
==== Project: Reference Images Improvements ====<br />
<br />
'''Brief explanation:'''<br />
This is a set of smaller tasks that can be done independently, all focused on one single tool: Reference Images Tool.<br />
- crop/rotate/mirror the image<br />
- apply specific filters<br />
- possibility of it working like a File Layer (updates when the file is updated on the hard drive)<br />
Links: <br />
https://bugs.kde.org/show_bug.cgi?id=396155<br />
https://bugs.kde.org/show_bug.cgi?id=405130<br />
<br />
'''Expected results:'''<br />
More feature-complete Reference Images Tool <br />
(ultimate goal: no need for external reference images tools like PureRef or the Reference Docker plugin, as expressed by our users)<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt, limitations of the current Reference Images<br />
<br />
'''Mentor:'''<br />
Please contact ''halla'' on IRC: irc.freenode.net, channel #krita<br />
<br />
==== Project: Modern/high quality scaling algorithm ====<br />
<br />
'''Brief explanation:'''<br />
Link: https://bugs.kde.org/show_bug.cgi?id=333167<br />
No- or Lo-Halo sampling method for scaling.<br />
<br />
'''Expected results:'''<br />
Good scaling algorithm<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt, basic of algorithms<br />
<br />
'''Mentor:'''<br />
Please contact ''tiar'' on IRC: irc.freenode.net, channel #krita<br />
<br />
==== Project: Export a document to SVG ====<br />
<br />
'''Brief explanation:'''<br />
Right now, Krita can only save to SVG one layer at a time. It would be good if Krita was able to save the whole document to SVG: vector layers as groups, and raster layers as bitmaps. To be determined what should happen to other types of layers.<br />
Link: https://bugs.kde.org/show_bug.cgi?id=404834<br />
<br />
'''Expected results:'''<br />
File -> Save, File -> Save As, File -> Export should have an option to save to SVG.<br />
A file saved into SVG should have all raster and vector content from the document.<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt<br />
<br />
'''Mentor:'''<br />
Please contact ''Wotlhera_laptop'' on IRC: irc.freenode.net, channel #krita<br />
<br />
==== Project: Circle in a square assistant tool ====<br />
<br />
'''Brief explanation:'''<br />
Implementing a new assistant tool that is basically a readjustable 4 corner polygon that always has a circle inside it which touch the sides (useful for drawing circles in perspective).<br />
Link: https://bugs.kde.org/show_bug.cgi?id=405643<br />
<br />
'''Expected results:'''<br />
There is a short video in the bug report, the new assistant should behave just like in the video, plus it should have other features of assistants: it should have the lock/move/hide and change colors.<br />
It should interact nicely with Perspective and Vanishing Point assistant tools (since it's for perspective too, it should show a vanishing point just like Perspective assistant does; and the vanishing point, unlike in Perspective assistant, should snap to the Vanishing Point assistant. Moreover the vanishing point of the new assistant should snap to the vanishing point of Perspective tool and the edges should snap to the edges of Perspective assistant tool as well).<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt<br />
<br />
'''Mentor:'''<br />
Please contact ''Wolthera_laptop'' on IRC: irc.freenode.net, channel #krita<br />
<br />
<br />
==== Project: APNG import/export support ====<br />
<br />
'''Brief explanation:'''<br />
Implementing a way to export and import APNG animations.<br />
Link to the feature request: https://bugs.kde.org/show_bug.cgi?id=342479<br />
<br />
'''Expected results:'''<br />
Krita should be able to export animation to APNG and import frames from APNG.<br />
<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt<br />
<br />
'''Mentor:'''<br />
Please contact either ''emmetpdx'' or ''eoinoneill[m]'' on IRC: irc.freenode.net, channel #krita<br />
<br />
<br />
==== Project: Texture each dab instead of a stroke ====<br />
<br />
'''Brief explanation:'''<br />
Implementing texturing brush dabs instead of texturing whole stroke.<br />
(Just like Opacity is about the whole stroke and Flow is about the opacity of just one brush dab)<br />
Link: https://bugs.kde.org/show_bug.cgi?id=375155<br />
<br />
'''Expected results:'''<br />
Texture is applied only on brush dabs. See https://bugsfiles.kde.org/attachment.cgi?id=135342<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt<br />
<br />
'''Mentor:'''<br />
Please contact ''dmitryK|log'' on IRC: irc.freenode.net, channel #krita<br />
<br />
<br />
==== Project: Delete, cut, copy & paste from/to multiple layers/group ====<br />
<br />
'''Brief explanation:'''<br />
There are several operations that would be good to be applied on multiple layers or a whole group at once: cut, copy, delete and paste.<br />
Link: https://bugs.kde.org/show_bug.cgi?id=352519<br />
<br />
'''Expected results:'''<br />
Detailed explanations how each of the operations should behave are in the feature request linked above.<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt<br />
<br />
'''Mentor:'''<br />
Please contact ''dmitryK|log'' on IRC: irc.freenode.net, channel #krita<br />
<br />
==== Project: Add film-like adjustment ====<br />
<br />
'''Brief explanation:'''<br />
''Film-like'' is a name of a special adjustment curve that allows the user to control the contrast without having hue shifts that often happen when using standard HSV Adjustment curves.<br />
Link: https://bugs.kde.org/show_bug.cgi?id=385845<br />
<br />
'''Expected results:'''<br />
A new filter with Film-like adjustment.<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt<br />
<br />
'''Mentor:'''<br />
Please contact ''Wolthera_laptop'' on IRC: irc.freenode.net, channel #krita<br />
<br />
<br />
==== Project: Show thumbnails when hovering over a composition ====<br />
<br />
'''Brief explanation:'''<br />
Compositions docker allows the user to save different sets of visibility for layers. While the user can name them, it would be useful if it could also show a thumbnail of the composition.<br />
Link: https://bugs.kde.org/show_bug.cgi?id=428934<br />
<br />
'''Expected results:'''<br />
When the user hovers over the composition, the thumbnail of the composition is shown on top.<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt<br />
<br />
'''Mentor:'''<br />
Please contact either ''halla'' on IRC: irc.freenode.net, channel #krita<br />
<br />
==== Project: Smarter boolean operations on vectors ====<br />
<br />
'''Brief explanation:'''<br />
Right now, the algorithm for boolean operations on vector shapes creates much more nodes than necessary. This task is about implementing a smarter algorithm that would leave only a handful of the most necessary nodes after the operation.<br />
Link: https://bugs.kde.org/show_bug.cgi?id=400521<br />
<br />
'''Expected results:'''<br />
When the user performs a boolean operation on vector shapes, the amount of nodes should be minimal.<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt<br />
<br />
'''Mentor:'''<br />
Please contact either ''dmitryK|log'' on IRC: irc.freenode.net, channel #krita<br />
<br />
<br />
==== Project: Pixel-perfect ellipses ====<br />
<br />
'''Brief explanation:'''<br />
In Krita, there is no way to draw a pixel-perfect ellipse using the Ellipse Tool.<br />
Most probably the appropriate solution would be to create a new type of Brush Tip that would behave in a pixel-perfect way.<br />
Link: https://bugs.kde.org/show_bug.cgi?id=387242<br />
<br />
'''Expected results:'''<br />
A way to draw a pixel-perfect ellipse using the Ellipse Tool. The new Brush Tip must also behave in a pixel-perfect way creating lines and other shapes.<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt<br />
<br />
'''Mentor:'''<br />
Please contact either ''ivanyossi'' on IRC: irc.freenode.net, channel #krita</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2021/Ideas&diff=91126GSoC/2021/Ideas2021-02-22T05:13:50Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2020/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
** '''Ideas with no mentors listed and their contact info will be removed''' **<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
'''<br />
<br />
==== Project: Port to Qt6 API ====<br />
<br />
'''Brief Explanation''': current digiKam 7.x implementation if fully compatible with Qt5.13.x under macOS, Windows, and Linux, but we need to port implementations to new Qt6, where API has changed, become deprecated, or have been improved. This require non trivial changes in digiKam with plenty of regression tests to do. Identified changes to include in this project are:<br />
* Migrate libo2 dependency to the new QtNetworkAuth framework for WebService plugins.<br />
* Port internal DImg framework to use new QImage 16 bits colors depth format.<br />
* Fix deprecated QXmlPatterns API uses.<br />
* Port AppImage builder to Qt6 with suitable ICU support. <br />
* Fix all Qt 5 Core Compatibility C++ Classes Uses (https://doc-snapshots.qt.io/qt6-dev/qtcore5compat-module.html)<br />
<br />
'''Expected Results''': <br />
<br />
Port to new API, replace deprecated, and make digiKam ready for Qt6. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Oauth2, CMake<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: New plugin to process OCR ====<br />
<br />
'''Brief Explanation''': the goal of this project is to implement a new generic DPlugin to process images in batch with Tesseract. It's a C++ framework to make Optical Characters Recognition. This plugin must be able to run over images automatically and record detected text in image metadata for post-processing, as described in this bugzilla file:<br />
<br />
https://bugs.kde.org/show_bug.cgi?id=117629<br />
<br />
'''Expected Results''': <br />
<br />
Provide a new optional Generic Tesseract based DPlugin available in digiKam and Showfoto to run OCR automatically. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Tesseract, CMake, OCR Image Processing<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Improve Image Quality Sorter algorithms ====<br />
<br />
'''Brief Explanation''': digiKam has few algorithm used to sort images by quality and register items with flags in database for future post processing. Analyzed image qualities are noise, focus, exposure, and compression. Algorithms used in background do not give expected results and need improvements or to be re-written. Relevant files for bugzilla:<br />
<br />
* https://bugs.kde.org/show_bug.cgi?id=426355<br />
* https://bugs.kde.org/show_bug.cgi?id=399841<br />
<br />
'''Expected Results''': <br />
<br />
Provide an update of Image Quality processing using better implementation algorithù. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, OpenCV, Image Processing<br />
<br />
'''Mentors''': Thanh Trung Dinh (dinhthanhtrung1996@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Improve custom stamp annotation handling ====<br />
<br />
'''Brief explanation:''' Okular does display stamp annotations, but the support<br />
is somewhat incomplete. This particularly shows when trying to use stamp<br />
annotations with a custom image. For example, such annotations can be<br />
added in Okular, but they cannot be saved to the pdf file in a way<br />
that any other pdf viewer can read. Also, they will not appear on print-outs.<br />
<br />
The underlying reason for this is that Okular renders these stamps itself,<br />
rather than relying on the poppler library, which does all other pdf<br />
rendering. Goal of this project is therefore to teach poppler how to<br />
render stamp annotations, and then make Okular use that new functionality.<br />
More details can be found in the bug report [0].<br />
<br />
[0] https://bugs.kde.org/show_bug.cgi?id=383651<br />
<br />
'''Expected results:''' Poppler should render stamp annotations. Annotations<br />
should be printable from Okular. Custom stamps inserted via the Okular GUI<br />
should be visible in other pdf readers.<br />
<br />
'''Knowledge prerequisite:''' C++, and a bit about the pdf format.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
<br />
=== KMyMoney ===<br />
KMyMoney is a cross-platform personal finance manager build on KDE frameworks technologies for your desktop and notebook environment. It enables users to keep careful track of their personal finances by providing a broad array of financial features and tools. <br />
<br />
==== Project: Integration of the new functionalities from the Alkimia library ====<br />
<gallery><br />
Kmymoney-alkimia-alkonlinequotewidget.png|Extended online quote support in KMyMoney 4.8<br />
Kmymoney-online-quote-addon-installer.png|Dialog for adding/updating online quote sources<br />
</gallery><br />
<br />
'''Brief explanation:''' <br />
With Alkimia version 8.0 the online quote support of KMyMoney was taken over, equipped with debug functions and extended by an online update of the quote sources.<br />
<br />
The task is to add this support to version 5 of KMyMoney, either as a replacement for existing functionality in KMyMoney (as was done with version 4.8) or as an optional KMyMoney plugin. <br />
<br />
In the former case, the WebPriceQuote class would need to be replaced with the associated AlkOnlineQuotesWidget class from the Alkimia library (see the associated Git commit for the [https://invent.kde.org/office/kmymoney/-/commit/6da0badcc33e756aedb524d62f49f3818efcafb6 4.8 branch]).<br />
<br />
For the second variant, the WebPriceQuote class would have to be converted to a KMyMoney plugin to make it optional. Based on this, another plugin can be added that uses the corresponding classes from Alkimia and can be used alternatively (From [https://bugs.kde.org/show_bug.cgi?id=381517#c1|Bug 381517]).<br />
<br />
'''Expected results:''' KMyMoney 5 will have the extended support of online quotes<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
<br />
==== Project: Add gdb pretty printer support for Qt5 ====<br />
<br />
'''Brief explanation:''' <br />
GDB provides a mechanism that allows pretty-printing of values with Python code. It greatly simplifies the representation of complex objects [https://sourceware.org/gdb/current/onlinedocs/gdb/Pretty-Printing.html#Pretty-Printing]. The task of this project is to complete Qt5 support based on [https://codereview.qt-project.org/c/qt/qtbase/+/87052].<br />
<br />
'''Expected results:''' The Qt5 pretty printer are part of further Qt releases<br />
<br />
'''Knowledge Prerequisite:''' gdb, git, python, Qt<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KtoBlzCheck ===<br />
<br />
KtoBLZCheck is a library for checking account numbers and bank codes of banks from different countries like Germany, Holland and Switzerland. The basic data used by the library is also used by other financial management applications such as KMyMoney, AqBanking and GnuCash.<br />
<br />
==== Project: Extend the usage of bank data support in KMyMoney ====<br />
<br />
[[File:KMymoney - New Institution Dialog.png|thumb|Current "New Institution" dialog]]<br />
[[File:Kmymoney-account-institution-tab.png|thumb|Current "Institution" tab of account dialog]]<br />
<br />
'''Brief explanation:''' <br />
<br />
KMyMoney provides dialogs to create and edit institutions and accounts, the latter having a link to an institution. This project is about extending these dialogs with the databases and functionalities provided by ktoblzcheck to simplify the input.<br />
<br />
'''Expected results:''' <br />
<br />
1. When adding new institutions, it should be possible to search for a bank in the corresponding dialog and take over existing bank data such as city and BIC for simplified setup.<br />
<br />
2. After entering an account number in the "Institution" tab of the account processing dialog, the IBAN should be calculated automatically if an institution has been selected before. <br />
<br />
According to [https://www.ecb.europa.eu/paym/integration/retail/sepa/iban/shared/pdf/iban_registry.pdf] there is a common structure for generating IBAN e.g. ''DE2!n8!n10!n'', ''NL2!n4!a10!n'', ''CH2!n5!n12!c'' and since ktoblzcheck already has functions to verify associated checksums [https://sourceforge.net/p/ktoblzcheck/code/ci/master/tree/src/lib/iban.cc#l217], it should be possible to calculate them.<br />
<br />
3. The extension or adaptation of the application documentation with the new functionality is part of this project.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KStars ===<br />
'''[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.'''<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support an ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can support addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Observation Wizard Improvements ====<br />
'''Brief explanation''': The Observation Wizard enables users to select and filter objects of interest to them . Currently, the selection is done by object type, location, and magnitude in the sky. Further, the user can filter objects based on altitude and time-range when they are available. This tool can be further improved by providing the following features:<br />
# '''INDI Integration''': Filter and sort by object size for Deep Sky Objects that have a physical width and height, unlike point-like sources like stars. Limit objects to fall within a particular percentage of the sensor. For example, M31 galaxy is very large and spans almost 3 degrees in the night sky. It would not fit inside the camera's 1x1 degree field of view (as calculated from INDI). Similarly, an object spanning on 5'x5' arcmins is too small in the camera.<br />
# '''Image Integration''': The way the final list of objects are displayed should be modernized. Each object should have an image and also an Altitude-vs-Time plot next to it so that the user can quick identify what is the best time to observe this object. For large lists, this can be very CPU intensive and should be optimized accordingly.<br />
# '''Save/Load''': Ability to save and load the wizard search parameters for future use so that the user does not always have to start from scratch every time they need to search for objects.<br />
# '''Export''': Export the list of object to an external file or source in CSV and JSON formats.<br />
'''Expected results''': <br />
* Improved Observation Wizard Tool.<br />
* Proper integration with INDI & Ekos.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
<br />
==== Project: KStars Testing ====<br />
<br />
'''Brief explanation:''' KStars is built on a relatively large number of C++ classes, grouped in the following categories: sky objects and components, projection algorithms, graphics, timekeeping, widgets, Ekos automation, INDI client, FITS viewing, accessories and several library interfaces. Most of these constituting classes remain untested in terms of systematic and automatic verification. <br />
The objective of this project is to verify the code written in those classes at three levels: API, functionality and UI-based use case. In order to achieve this, the existing test code will have to extend its code coverage, report validation results and integrate seamlessly to the build recipe of the project.<br />
<br />
The difficulty of this project is the requirement to create tests on legacy code and consolidate a test plan that reflects how the software is working instead of how we expect it to work.<br />
<br />
'''Expected results:'''<br />
* Verify APIs: call each public class member using arbitrary test fixtures, control side effects by stubbing interfaces. This verifies code is executing in the data domain we expect, or fails for known reasons. As an example, the report will reveal how classes managing coordinates accept or reject numerical input.<br />
* Verify functionalities: ensure specific class interfaces return an expected result given a controlled set of input parameters. This verifies code is behaving as expected, or isolates known issues. As an example, the report will reveal which value of the Julian time classes managing timekeeping produce given different input objects embedding the same UTC time.<br />
* Verify use cases: ensure specific scenarios can be executed in the interface as presented in their documentation. This verifies procedures achieving useful results for the end-user remain stable, and controls how they evolve and improve during development.<br />
* Consolidate test reports and code coverage, and automate the execution of the test plan when building.<br />
Bonus: generate videos of use cases for end-users automatically.<br />
<br />
'''Level''': beginner to intermediate<br />
<br />
'''Knowledge prerequisites''': C++, Qt, software testing and verification fundamentals<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
=== GCompris ===<br />
<br />
==== Project: Adding new activities to GCompris ==== <br />
<br />
[https://gcompris.net/ GCompris] is a high quality educational software suite, including a large number of activities for children aged 2 to 10. We have recently launched our version 1.0 with multiple datasets feature. Moving forward we are looking to add more new activities to GCompris.<br />
<br />
'''Brief explanation''': Originally written in Gtk+ the development team started to rewrite it from scratch in Qt Quick and almost finished the port. Also, we have recently work on the multiple datasets feature.<br />
<br />
'''Expected results''':<br />
This year we aim to add some new activities to GCompris. The activities can be port of the GTK+ version or you can propose new activities too. For example, we lack activities in the science domain(chemistry, biology) which can be proposed.<br />
We have recently added multiple datasets to many activities so for all other activities having multiple datasets would be nice.<br />
<br />
You can have a look at our GCompris board to get some ideas about port of activities and multiple datasets too.<br />
<br />
https://phabricator.kde.org/project/view/142/<br />
<br />
https://phabricator.kde.org/T12428<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education.<br />
<br />
Be familiar with GCompris concept and content.<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough).<br />
<br />
Basic knowledge of QML, JavaScript would be a plus.<br />
<br />
Be able to build the Qt Quick version of GCompris.<br />
<br />
'''Application guide''':<br />
Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/GSOC_newcomers, http://gcompris.net/wiki/An_exercise_for_new_contributors and http://gcompris.net/wiki/Reviewing_an_activity<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Emmanuel Charruau (IRC: allon), Johnny Jazeix (IRC: JohnnyJ), Timothée Giet (IRC: Animtim), Deepak Kumar (IRC: deepak_)<br />
<br />
=== Kdenlive ===<br />
<br />
Get in touch with the team on #kdenlive-dev channel on [irc://chat.freenode.net/kdenlive-dev IRC] or [https://webchat.kde.org/#/room/#kdenlive-dev:kde.org matrix]<br />
<br />
All Kdenlive development ideas are in [https://invent.kde.org/multimedia/kdenlive/-/wikis/dev/Ideas Kdenlive Wiki]<br />
<br />
Proposed priority (great users interest and seems feasible in the timeframe):<br />
<br />
==== Project: Trimming in the timeline ====<br />
<br />
See [https://invent.kde.org/multimedia/kdenlive/-/wikis/dev/ideas/Trimming detailed description].<br />
<br />
'''Brief explanation:''' currently, editors working in Kdenlive can only move or resize clips they put in the timeline. They are used to other tools like roll, slide etc, the lack of which is sometimes annoying, losing time to change of image keeping the edit synchronized. Several tools should not be too hard to create using Kdenlive existing functions under the hood.<br />
<br />
'''Expected results:''' all the trimming tools editors are used to should be available in Kdenlive<br />
<br />
'''Knowledge Prerequisite:''' Qt C++ & QML<br />
<br />
'''Mentor:''' Vincent Pinon (code), Massimo Stella (editing)<br />
<br />
=== KIO FUSE ===<br />
'''KIO FUSE is a bridge between [https://invent.kde.org/frameworks/kio KIO] and [https://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE]. You can find out more on feverfew's [https://feverfew.home.blog/ blog].'''<br />
<br />
* IRC (freenode): [irc://chat.freenode.net/kde-fm #kde-fm] ping feverfew or fvogt.<br />
* Matrix: [https://webchat.kde.org/#/room/#kde-fm:kde.org #kde-fm:kde.org] ping feverfew or fvogt.<br />
<br />
==== Project: xfstests Integration ====<br />
<br />
[https://kernel.googlesource.com/pub/scm/fs/ext2/xfstests-bld/+/HEAD/Documentation/what-is-xfstests.md xfstests] is a file system regression test suite. We would like to integrate this with our current test suite.<br />
<br />
Here are some things which will help to establish a good project plan:<br />
<br />
# A [https://patchwork.kernel.org/project/linux-fsdevel/patch/20200108192504.GA893@miu.piliscsaba.redhat.com/ patch] that seems to allow easier support of FUSE filesystems.<br />
# https://github.com/rfjakob/fuse-xfstests<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/14 !14]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to macOS ====<br />
<br />
Port KIO FUSE to macOS. Dolphin builds on macOS AFAIK so this project should be technically feasible.<br />
The solution is likely to involve [https://osxfuse.github.io/ osxfuse].<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/13 !13]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to Windows ====<br />
<br />
Port KIO FUSE to Windows. Currently a Dolphin port is in the works, so KIO (our main dependency) is already working.<br />
There are two potential solutions:<br />
<br />
# [https://dokan-dev.github.io/#fuse-api Dokan FUSE]<br />
# A method similar to what [https://github.com/billziss-gh/sshfs-win sshfs-win] has done ([https://github.com/billziss-gh/winfsp WinFsp] and [https://cygwin.com/ Cygwin]).<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/12 !12]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
=== NeoChat ===<br />
<br />
The two areas that could accept a student for GSoC are encryptions and voip support. Talk with us in #neochat:kde.org so that we can discuss together the scope of your project. Also we are open to interesting ideas about improvement in NeoChat.<br />
<br />
'''Knowledge prerequisite:''' C++, QML (Cryptographie or GStreamer)<br />
<br />
=== Plasma Mobile - Calendar ===<br />
<br />
Your goal will be to improve a proof of concept of a calendar application using Akonadi. The current proof of concept is able to sucessfully display a month view of all the events in your korganize callendar but to be really usefull the convergence of the application will need to be improved and the possibility of adding, editing and removing events should be added.<br />
<br />
'''Knowledge prerequisite:''' C++ and QML<br />
<br />
'''Contact:'''' @carl:kde.org on Matrix<br />
<br />
=== Plasma-nm ===<br />
<br />
==== Better firewall support ====<br />
'''Brief explanation''': Plasma-nm sets default firewall zone for each created connection. While this can be changed in connection settings, it would be nice to add some dialog interaction before a connection gets created and ask the user what firewall zone he wants to use when connecting to a new wireless network. <br />
<br />
'''Expected result''': Plasma-nm will ask the user what firewall zone he wants to use when connecting to a new wireless network.<br />
<br />
'''Mentor''': Jan Grulich - IRC (freenode): [irc://chat.freenode.net/plasma #plasma] ping jgrulich.<br />
<br />
'''Knowledge prerequisite:''' C++, QML<br />
<br />
<br />
=== Krita ===<br />
<br />
Please contact us early - the sooner, the better.<br />
<br />
You can suggest your own project. Make sure it's correct size for your experience level and the time limit.<br />
<br />
Contact:<br />
#krita on irc.freenode.net (note that the chat's activeness might vary depending on which time it is)<br />
https://krita-artists.org/c/develop/7<br />
<br />
==== Project: Reference Images Improvements ====<br />
<br />
'''Brief explanation:'''<br />
This is a set of smaller tasks that can be done independently, all focused on one single tool: Reference Images Tool.<br />
- crop/rotate/mirror the image<br />
- apply specific filters<br />
- possibility of it working like a File Layer (updates when the file is updated on the hard drive)<br />
Links: <br />
https://bugs.kde.org/show_bug.cgi?id=396155<br />
https://bugs.kde.org/show_bug.cgi?id=405130<br />
<br />
'''Expected results:'''<br />
More feature-complete Reference Images Tool <br />
(ultimate goal: no need for external reference images tools like PureRef or the Reference Docker plugin, as expressed by our users)<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt, limitations of the current Reference Images<br />
<br />
'''Mentor:'''<br />
Please contact ''halla'' on IRC: irc.freenode.net, channel #krita<br />
<br />
==== Project: Modern/high quality scaling algorithm ====<br />
<br />
'''Brief explanation:'''<br />
Link: https://bugs.kde.org/show_bug.cgi?id=333167<br />
No- or Lo-Halo sampling method for scaling.<br />
<br />
'''Expected results:'''<br />
Good scaling algorithm<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt, basic of algorithms<br />
<br />
'''Mentor:'''<br />
Please contact ''tiar'' on IRC: irc.freenode.net, channel #krita<br />
<br />
==== Project: Export a document to SVG ====<br />
<br />
'''Brief explanation:'''<br />
Right now, Krita can only save to SVG one layer at a time. It would be good if Krita was able to save the whole document to SVG: vector layers as groups, and raster layers as bitmaps. To be determined what should happen to other types of layers.<br />
Link: https://bugs.kde.org/show_bug.cgi?id=404834<br />
<br />
'''Expected results:'''<br />
File -> Save, File -> Save As, File -> Export should have an option to save to SVG.<br />
A file saved into SVG should have all raster and vector content from the document.<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt<br />
<br />
'''Mentor:'''<br />
Please contact ''Wotlhera_laptop'' on IRC: irc.freenode.net, channel #krita<br />
<br />
==== Project: Circle in a square assistant tool ====<br />
<br />
'''Brief explanation:'''<br />
Implementing a new assistant tool that is basically a readjustable 4 corner polygon that always has a circle inside it which touch the sides (useful for drawing circles in perspective).<br />
Link: https://bugs.kde.org/show_bug.cgi?id=405643<br />
<br />
'''Expected results:'''<br />
There is a short video in the bug report, the new assistant should behave just like in the video, plus it should have other features of assistants: it should have the lock/move/hide and change colors.<br />
It should interact nicely with Perspective and Vanishing Point assistant tools (since it's for perspective too, it should show a vanishing point just like Perspective assistant does; and the vanishing point, unlike in Perspective assistant, should snap to the Vanishing Point assistant. Moreover the vanishing point of the new assistant should snap to the vanishing point of Perspective tool and the edges should snap to the edges of Perspective assistant tool as well).<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt<br />
<br />
'''Mentor:'''<br />
Please contact ''Wolthera_laptop'' on IRC: irc.freenode.net, channel #krita<br />
<br />
<br />
==== Project: APNG import/export support ====<br />
<br />
'''Brief explanation:'''<br />
Implementing a way to export and import APNG animations.<br />
Link to the feature request: https://bugs.kde.org/show_bug.cgi?id=342479<br />
<br />
'''Expected results:'''<br />
Krita should be able to export animation to APNG and import frames from APNG.<br />
<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt<br />
<br />
'''Mentor:'''<br />
Please contact either ''emmetpdx'' or ''eoinoneill[m]'' on IRC: irc.freenode.net, channel #krita<br />
<br />
<br />
==== Project: Texture each dab instead of a stroke ====<br />
<br />
'''Brief explanation:'''<br />
Implementing texturing brush dabs instead of texturing whole stroke.<br />
(Just like Opacity is about the whole stroke and Flow is about the opacity of just one brush dab)<br />
Link: https://bugs.kde.org/show_bug.cgi?id=375155<br />
<br />
'''Expected results:'''<br />
Texture is applied only on brush dabs. See https://bugsfiles.kde.org/attachment.cgi?id=135342<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt<br />
<br />
'''Mentor:'''<br />
Please contact ''dmitryK|log'' on IRC: irc.freenode.net, channel #krita<br />
<br />
<br />
==== Project: Delete, cut, copy & paste from/to multiple layers/group ====<br />
<br />
'''Brief explanation:'''<br />
There are several operations that would be good to be applied on multiple layers or a whole group at once: cut, copy, delete and paste.<br />
Link: https://bugs.kde.org/show_bug.cgi?id=352519<br />
<br />
'''Expected results:'''<br />
Detailed explanations how each of the operations should behave are in the feature request linked above.<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt<br />
<br />
'''Mentor:'''<br />
Please contact ''dmitryK|log'' on IRC: irc.freenode.net, channel #krita<br />
<br />
==== Project: Add film-like adjustment ====<br />
<br />
'''Brief explanation:'''<br />
''Film-like'' is a name of a special adjustment curve that allows the user to control the contrast without having hue shifts that often happen when using standard HSV Adjustment curves.<br />
Link: https://bugs.kde.org/show_bug.cgi?id=385845<br />
<br />
'''Expected results:'''<br />
A new filter with Film-like adjustment.<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt<br />
<br />
'''Mentor:'''<br />
Please contact ''Wolthera_laptop'' on IRC: irc.freenode.net, channel #krita<br />
<br />
<br />
==== Project: Show thumbnails when hovering over a composition ====<br />
<br />
'''Brief explanation:'''<br />
Compositions docker allows the user to save different sets of visibility for layers. While the user can name them, it would be useful if it could also show a thumbnail of the composition.<br />
Link: https://bugs.kde.org/show_bug.cgi?id=428934<br />
<br />
'''Expected results:'''<br />
When the user hovers over the composition, the thumbnail of the composition is shown on top.<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt<br />
<br />
'''Mentor:'''<br />
Please contact either ''halla'' on IRC: irc.freenode.net, channel #krita<br />
<br />
==== Project: Smarter boolean operations on vectors ====<br />
<br />
'''Brief explanation:'''<br />
Right now, the algorithm for boolean operations on vector shapes creates much more nodes than necessary. This task is about implementing a smarter algorithm that would leave only a handful of the most necessary nodes after the operation.<br />
Link: https://bugs.kde.org/show_bug.cgi?id=400521<br />
<br />
'''Expected results:'''<br />
When the user performs a boolean operation on vector shapes, the amount of nodes should be minimal.<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt<br />
<br />
'''Mentor:'''<br />
Please contact either ''dmitryK|log'' on IRC: irc.freenode.net, channel #krita<br />
<br />
<br />
==== Project: Pixel-perfect ellipses ====<br />
<br />
'''Brief explanation:'''<br />
In Krita, there is no way to draw a pixel-perfect ellipse using the Ellipse Tool.<br />
Most probably the appropriate solution would be to create a new type of Brush Tip that would behave in a pixel-perfect way.<br />
Link: https://bugs.kde.org/show_bug.cgi?id=387242<br />
<br />
'''Expected results:'''<br />
A way to draw a pixel-perfect ellipse using the Ellipse Tool. The new Brush Tip must also behave in a pixel-perfect way creating lines and other shapes.<br />
<br />
'''Knowledge Prerequisite:'''<br />
- C++, Qt<br />
<br />
'''Mentor:'''<br />
Please contact either ''ivanyossi'' on IRC: irc.freenode.net, channel #krita</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2021/Ideas&diff=91033GSoC/2021/Ideas2021-01-31T16:14:48Z<p>Cauliergilles: /* Project: Port DNG converter plugins to last Abobe DNG SDK */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2020/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
** '''Ideas with no mentors listed and their contact info will be removed''' **<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
* [https://webchat.kde.org/#/room/#dk-gsoc20-facesengine:kde.org #dk-gsoc20-facesengine channel on Riot kde webchat]'''<br />
<br />
==== Project: Port to Qt6 API ====<br />
<br />
'''Brief Explanation''': current digiKam 7.x implementation if fully compatible with Qt5.13.x under macOS, Windows, and Linux, but we need to port implementations to new Qt6, where API has changed, become deprecated, or have been improved. This require non trivial changes in digiKam with plenty of regression tests to do. Identified changes to include in this project are:<br />
* Migrate libo2 dependency to the new QtNetworkAuth framework for WebService plugins.<br />
* Port internal DImg framework to use new QImage 16 bits colors depth format.<br />
* Fix deprecated QXmlPatterns API uses.<br />
* Port AppImage builder to Qt6 with suitable ICU support. <br />
* Fix all Qt 5 Core Compatibility C++ Classes Uses (https://doc-snapshots.qt.io/qt6-dev/qtcore5compat-module.html)<br />
<br />
'''Expected Results''': <br />
<br />
Port to new API, replace deprecated, and make digiKam ready for Qt6. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Oauth2, CMake<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: New plugin to process OCR ====<br />
<br />
'''Brief Explanation''': the goal of this project is to implement a new generic DPlugin to process images in batch with Tesseract. It's a C++ framework to make Optical Characters Recognition. This plugin must be able to run over images automatically and record detected text in image metadata for post-processing, as described in this bugzilla file:<br />
<br />
https://bugs.kde.org/show_bug.cgi?id=117629<br />
<br />
'''Expected Results''': <br />
<br />
Provide a new optional Generic Tesseract based DPlugin available in digiKam and Showfoto to run OCR automatically. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Tesseract, CMake, OCR Image Processing<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Port DNG converter plugin to last Abobe DNG SDK ====<br />
<br />
'''Brief Explanation''': digiKam was the first open source project to provide DNG support using open source DNGSDK from Adobe. This converter have been started 10 years ago and currently the DNGSDK version used internally is an older one (2012). The goal of this project is to port the DNG Converted plugins to the last stable DNG SDK, and to link the internal Raw Engine based on libraw with this SDK for a better read-only support of most recent versions of DNG file provided by camera. Files from bugzilla relevant of this project are listed below:<br />
<br />
* https://bugs.kde.org/show_bug.cgi?id=284934<br />
* https://bugs.kde.org/show_bug.cgi?id=330920<br />
* https://bugs.kde.org/show_bug.cgi?id=381967<br />
* https://bugs.kde.org/show_bug.cgi?id=390700<br />
* https://bugs.kde.org/show_bug.cgi?id=427350<br />
* https://bugs.kde.org/show_bug.cgi?id=429119<br />
<br />
'''Expected Results''': <br />
<br />
Provide an update of DNGConverter plugin using last version of DNG DSK from Adobe. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, DNGSDK, CMake, RAW Image Processing<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
===Kirogi===<br />
<br />
'''A Ground Control Station (GSC) application for drones with a modern mindset and codebase philosophy, the project is one of the newest one under KDE organization and we would like your help to make it the best open source GCS around!<br />
<br />
'''We are also open for new ideas, be free to send your own plan for Kirogi.<br />
<br />
'''For more information, take a look in our website: https://kirogi.org/<br />
<br />
Be in touch with:<br />
* IRC (freenode): [irc://chat.freenode.net/kde-kirogi #kde-kirogi]<br />
* Telegram: [https://t.me/kde_kirogi @kde_kirogi]<br />
* Matrix: [https://webchat.kde.org/#/room/#kirigami:kde.org #kde-kirogi:kde.org]<br />
<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Improve custom stamp annotation handling ====<br />
<br />
'''Brief explanation:''' Okular does display stamp annotations, but the support<br />
is somewhat incomplete. This particularly shows when trying to use stamp<br />
annotations with a custom image. For example, such annotations can be<br />
added in Okular, but they cannot be saved to the pdf file in a way<br />
that any other pdf viewer can read. Also, they will not appear on print-outs.<br />
<br />
The underlying reason for this is that Okular renders these stamps itself,<br />
rather than relying on the poppler library, which does all other pdf<br />
rendering. Goal of this project is therefore to teach poppler how to<br />
render stamp annotations, and then make Okular use that new functionality.<br />
More details can be found in the bug report [0].<br />
<br />
[0] https://bugs.kde.org/show_bug.cgi?id=383651<br />
<br />
'''Expected results:''' Poppler should render stamp annotations. Annotations<br />
should be printable from Okular. Custom stamps inserted via the Okular GUI<br />
should be visible in other pdf readers.<br />
<br />
'''Knowledge prerequisite:''' C++, and a bit about the pdf format.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
<br />
=== KMyMoney ===<br />
KMyMoney is a cross-platform personal finance manager build on KDE frameworks technologies for your desktop and notebook environment. It enables users to keep careful track of their personal finances by providing a broad array of financial features and tools. <br />
<br />
==== Project: Integration of the new functionalities from the Alkimia library ====<br />
<gallery><br />
Kmymoney-alkimia-alkonlinequotewidget.png|Extended online quote support in KMyMoney 4.8<br />
Kmymoney-online-quote-addon-installer.png|Dialog for adding/updating online quote sources<br />
</gallery><br />
<br />
'''Brief explanation:''' <br />
With Alkimia version 8.0 the online quote support of KMyMoney was taken over, equipped with debug functions and extended by an online update of the quote sources.<br />
<br />
The task is to add this support to version 5 of KMyMoney, either as a replacement for existing functionality in KMyMoney (as was done with version 4.8) or as an optional KMyMoney plugin. <br />
<br />
In the former case, the WebPriceQuote class would need to be replaced with the associated AlkOnlineQuotesWidget class from the Alkimia library (see the associated Git commit for the [https://invent.kde.org/office/kmymoney/-/commit/6da0badcc33e756aedb524d62f49f3818efcafb6 4.8 branch]).<br />
<br />
For the second variant, the WebPriceQuote class would have to be converted to a KMyMoney plugin to make it optional. Based on this, another plugin can be added that uses the corresponding classes from Alkimia and can be used alternatively (From [https://bugs.kde.org/show_bug.cgi?id=381517#c1|Bug 381517]).<br />
<br />
'''Expected results:''' KMyMoney 5 will have the extended support of online quotes<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KtoBlzCheck ===<br />
<br />
KtoBLZCheck is a library for checking account numbers and bank codes of banks from different countries like Germany, Holland and Switzerland. The basic data used by the library is also used by other financial management applications such as KMyMoney, AqBanking and GnuCash.<br />
<br />
==== Project: Extend the usage of bank data support in KMyMoney ====<br />
<br />
[[File:KMymoney - New Institution Dialog.png|thumb|Current "New Institution" dialog]]<br />
[[File:Kmymoney-account-institution-tab.png|thumb|Current "Institution" tab of account dialog]]<br />
<br />
'''Brief explanation:''' <br />
<br />
KMyMoney provides dialogs to create and edit institutions and accounts, the latter having a link to an institution. This project is about extending these dialogs with the databases and functionalities provided by ktoblzcheck to simplify the input.<br />
<br />
'''Expected results:''' <br />
<br />
1. When adding new institutions, it should be possible to search for a bank in the corresponding dialog and take over existing bank data such as city and BIC for simplified setup.<br />
<br />
2. After entering an account number in the "Institution" tab of the account processing dialog, the IBAN should be calculated automatically if an institution has been selected before.<br />
<br />
3. The extension or adaptation of the application documentation with the new functionality is part of this project.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KStars ===<br />
'''[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.'''<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support an ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can support addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Observation Wizard Improvements ====<br />
'''Brief explanation''': The Observation Wizard enables users to select and filter objects of interest to them . Currently, the selection is done by object type, location, and magnitude in the sky. Further, the user can filter objects based on altitude and time-range when they are available. This tool can be further improved by providing the following features:<br />
# '''INDI Integration''': Filter and sort by object size for Deep Sky Objects that have a physical width and height, unlike point-like sources like stars. Limit objects to fall within a particular percentage of the sensor. For example, M31 galaxy is very large and spans almost 3 degrees in the night sky. It would not fit inside the camera's 1x1 degree field of view (as calculated from INDI). Similarly, an object spanning on 5'x5' arcmins is too small in the camera.<br />
# '''Image Integration''': The way the final list of objects are displayed should be modernized. Each object should have an image and also an Altitude-vs-Time plot next to it so that the user can quick identify what is the best time to observe this object. For large lists, this can be very CPU intensive and should be optimized accordingly.<br />
# '''Save/Load''': Ability to save and load the wizard search parameters for future use so that the user does not always have to start from scratch every time they need to search for objects.<br />
# '''Export''': Export the list of object to an external file or source in CSV and JSON formats.<br />
'''Expected results''': <br />
* Improved Observation Wizard Tool.<br />
* Proper integration with INDI & Ekos.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
<br />
==== Project: KStars Testing ====<br />
<br />
'''Brief explanation:''' KStars is built on a relatively large number of C++ classes, grouped in the following categories: sky objects and components, projection algorithms, graphics, timekeeping, widgets, Ekos automation, INDI client, FITS viewing, accessories and several library interfaces. Most of these constituting classes remain untested in terms of systematic and automatic verification. <br />
The objective of this project is to verify the code written in those classes at three levels: API, functionality and UI-based use case. In order to achieve this, the existing test code will have to extend its code coverage, report validation results and integrate seamlessly to the build recipe of the project.<br />
<br />
The difficulty of this project is the requirement to create tests on legacy code and consolidate a test plan that reflects how the software is working instead of how we expect it to work.<br />
<br />
'''Expected results:'''<br />
* Verify APIs: call each public class member using arbitrary test fixtures, control side effects by stubbing interfaces. This verifies code is executing in the data domain we expect, or fails for known reasons. As an example, the report will reveal how classes managing coordinates accept or reject numerical input.<br />
* Verify functionalities: ensure specific class interfaces return an expected result given a controlled set of input parameters. This verifies code is behaving as expected, or isolates known issues. As an example, the report will reveal which value of the Julian time classes managing timekeeping produce given different input objects embedding the same UTC time.<br />
* Verify use cases: ensure specific scenarios can be executed in the interface as presented in their documentation. This verifies procedures achieving useful results for the end-user remain stable, and controls how they evolve and improve during development.<br />
* Consolidate test reports and code coverage, and automate the execution of the test plan when building.<br />
Bonus: generate videos of use cases for end-users automatically.<br />
<br />
'''Level''': beginner to intermediate<br />
<br />
'''Knowledge prerequisites''': C++, Qt, software testing and verification fundamentals<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
===Akonadi ===<br />
<br />
The Akonadi framework is responsible for providing applications with a centralized database to store, index and retrieve the user's personal information. This includes the user's emails, contacts, calendars, events, journals, alarms, notes, etc. <br />
<br />
'''Communication:''' IRC (freenode) [irc://chat.freenode.net/akonadi #akonadi]<br />
<br />
=== GCompris ===<br />
<br />
==== Project: Adding new activities to GCompris ==== <br />
<br />
[https://gcompris.net/ GCompris] is a high quality educational software suite, including a large number of activities for children aged 2 to 10. We have recently launched our version 1.0 with multiple datasets feature. Moving forward we are looking to add more new activities to GCompris.<br />
<br />
'''Brief explanation''': Originally written in Gtk+ the development team started to rewrite it from scratch in Qt Quick and almost finished the port. Also, we have recently work on the multiple datasets feature.<br />
<br />
'''Expected results''':<br />
This year we aim to add some new activities to GCompris. The activities can be port of the GTK+ version or you can propose new activities too. For example, we lack activities in the science domain(chemistry, biology) which can be proposed.<br />
We have recently added multiple datasets to many activities so for all other activities having multiple datasets would be nice.<br />
<br />
You can have a look at our GCompris board to get some ideas about port of activities and multiple datasets too.<br />
<br />
https://phabricator.kde.org/project/view/142/<br />
<br />
https://phabricator.kde.org/T12428<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education.<br />
<br />
Be familiar with GCompris concept and content.<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough).<br />
<br />
Basic knowledge of QML, JavaScript would be a plus.<br />
<br />
Be able to build the Qt Quick version of GCompris.<br />
<br />
'''Application guide''':<br />
Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/GSOC_newcomers, http://gcompris.net/wiki/An_exercise_for_new_contributors and http://gcompris.net/wiki/Reviewing_an_activity<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Emmanuel Charruau (IRC: allon), Johnny Jazeix (IRC: JohnnyJ), Timothée Giet (IRC: Animtim), Deepak Kumar (IRC: deepak_)<br />
<br />
=== Falkon ===<br />
<br />
[https://www.falkon.org/ Falkon] is a KDE web browser using QtWebEngine rendering engine, previously known as QupZilla. It aims to be a lightweight web browser available through all major platforms. This project has been originally started only for educational purposes. But from its start, Falkon has grown into a feature-rich browser.<br />
<br />
[mailto:falkon@kde.org Contact the Falkon team]<br />
<br />
=== Cantor ===<br />
'''[https://edu.kde.org/cantor/ Cantor] provides a graphical frontend for different open source computer algebra systems and scientific programming languages. [mailto:kde-edu@kde.org Contact the KDE-Edu team].<br />
<br />
[https://mail.kde.org/mailman/listinfo/kde-edu Subscribe to KDE-Edu mail list]'''<br />
<br />
=== Kdenlive ===<br />
<br />
==== Project: Basic Subtitling Support in Kdenlive ====<br />
<br />
Get in touch with the team at #kdenlive or the developer group in [https://t.me/kdenlive_dev Telegram])<br />
<br />
=== KIO FUSE ===<br />
'''KIO FUSE is a bridge between [https://invent.kde.org/frameworks/kio KIO] and [https://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE]. You can find out more on feverfew's [https://feverfew.home.blog/ blog].'''<br />
<br />
* IRC (freenode): [irc://chat.freenode.net/kde-fm #kde-fm] ping feverfew or fvogt.<br />
* Matrix: [https://webchat.kde.org/#/room/#kde-fm:kde.org #kde-fm:kde.org] ping feverfew or fvogt.<br />
<br />
==== Project: xfstests Integration ====<br />
<br />
[https://kernel.googlesource.com/pub/scm/fs/ext2/xfstests-bld/+/HEAD/Documentation/what-is-xfstests.md xfstests] is a file system regression test suite. We would like to integrate this with our current test suite.<br />
<br />
Here are some things which will help to establish a good project plan:<br />
<br />
# A [https://patchwork.kernel.org/project/linux-fsdevel/patch/20200108192504.GA893@miu.piliscsaba.redhat.com/ patch] that seems to allow easier support of FUSE filesystems.<br />
# https://github.com/rfjakob/fuse-xfstests<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/14 !14]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to macOS ====<br />
<br />
Port KIO FUSE to macOS. Dolphin builds on macOS AFAIK so this project should be technically feasible.<br />
The solution is likely to involve [https://osxfuse.github.io/ osxfuse].<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/13 !13]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to Windows ====<br />
<br />
Port KIO FUSE to Windows. Currently a Dolphin port is in the works, so KIO (our main dependency) is already working.<br />
There are two potential solutions:<br />
<br />
# [https://dokan-dev.github.io/#fuse-api Dokan FUSE]<br />
# A method similar to what [https://github.com/billziss-gh/sshfs-win sshfs-win] has done ([https://github.com/billziss-gh/winfsp WinFsp] and [https://cygwin.com/ Cygwin]).<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/12 !12]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
=== Plasma Mobile ===<br />
<br />
=== NeoChat ===<br />
<br />
the two areas that could accept a student for GSoC are encryptions and voip support. Talk with use in #neochat:kde.org for more information about the scope of your project.<br />
<br />
'''Knowledge prerequisite:''' C++, QML (Cryptographie or GStreamer)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2021/Ideas&diff=91032GSoC/2021/Ideas2021-01-31T16:14:33Z<p>Cauliergilles: /* Project: New plugin to process OCR */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2020/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
** '''Ideas with no mentors listed and their contact info will be removed''' **<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
* [https://webchat.kde.org/#/room/#dk-gsoc20-facesengine:kde.org #dk-gsoc20-facesengine channel on Riot kde webchat]'''<br />
<br />
==== Project: Port to Qt6 API ====<br />
<br />
'''Brief Explanation''': current digiKam 7.x implementation if fully compatible with Qt5.13.x under macOS, Windows, and Linux, but we need to port implementations to new Qt6, where API has changed, become deprecated, or have been improved. This require non trivial changes in digiKam with plenty of regression tests to do. Identified changes to include in this project are:<br />
* Migrate libo2 dependency to the new QtNetworkAuth framework for WebService plugins.<br />
* Port internal DImg framework to use new QImage 16 bits colors depth format.<br />
* Fix deprecated QXmlPatterns API uses.<br />
* Port AppImage builder to Qt6 with suitable ICU support. <br />
* Fix all Qt 5 Core Compatibility C++ Classes Uses (https://doc-snapshots.qt.io/qt6-dev/qtcore5compat-module.html)<br />
<br />
'''Expected Results''': <br />
<br />
Port to new API, replace deprecated, and make digiKam ready for Qt6. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Oauth2, CMake<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: New plugin to process OCR ====<br />
<br />
'''Brief Explanation''': the goal of this project is to implement a new generic DPlugin to process images in batch with Tesseract. It's a C++ framework to make Optical Characters Recognition. This plugin must be able to run over images automatically and record detected text in image metadata for post-processing, as described in this bugzilla file:<br />
<br />
https://bugs.kde.org/show_bug.cgi?id=117629<br />
<br />
'''Expected Results''': <br />
<br />
Provide a new optional Generic Tesseract based DPlugin available in digiKam and Showfoto to run OCR automatically. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Tesseract, CMake, OCR Image Processing<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Port DNG converter plugins to last Abobe DNG SDK ====<br />
<br />
'''Brief Explanation''': digiKam was the first open source project to provide DNG support using open source DNGSDK from Adobe. This converter have been started 10 years ago and currently the DNGSDK version used internally is an older one (2012). The goal of this project is to port the DNG Converted plugins to the last stable DNG SDK, and to link the internal Raw Engine based on libraw with this SDK for a better read-only support of most recent versions of DNG file provided by camera. Files from bugzilla relevant of this project are listed below:<br />
<br />
* https://bugs.kde.org/show_bug.cgi?id=284934<br />
* https://bugs.kde.org/show_bug.cgi?id=330920<br />
* https://bugs.kde.org/show_bug.cgi?id=381967<br />
* https://bugs.kde.org/show_bug.cgi?id=390700<br />
* https://bugs.kde.org/show_bug.cgi?id=427350<br />
* https://bugs.kde.org/show_bug.cgi?id=429119<br />
<br />
'''Expected Results''': <br />
<br />
Provide an update of DNGConverter plugin using last version of DNG DSK from Adobe. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, DNGSDK, CMake, RAW Image Processing<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
===Kirogi===<br />
<br />
'''A Ground Control Station (GSC) application for drones with a modern mindset and codebase philosophy, the project is one of the newest one under KDE organization and we would like your help to make it the best open source GCS around!<br />
<br />
'''We are also open for new ideas, be free to send your own plan for Kirogi.<br />
<br />
'''For more information, take a look in our website: https://kirogi.org/<br />
<br />
Be in touch with:<br />
* IRC (freenode): [irc://chat.freenode.net/kde-kirogi #kde-kirogi]<br />
* Telegram: [https://t.me/kde_kirogi @kde_kirogi]<br />
* Matrix: [https://webchat.kde.org/#/room/#kirigami:kde.org #kde-kirogi:kde.org]<br />
<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Improve custom stamp annotation handling ====<br />
<br />
'''Brief explanation:''' Okular does display stamp annotations, but the support<br />
is somewhat incomplete. This particularly shows when trying to use stamp<br />
annotations with a custom image. For example, such annotations can be<br />
added in Okular, but they cannot be saved to the pdf file in a way<br />
that any other pdf viewer can read. Also, they will not appear on print-outs.<br />
<br />
The underlying reason for this is that Okular renders these stamps itself,<br />
rather than relying on the poppler library, which does all other pdf<br />
rendering. Goal of this project is therefore to teach poppler how to<br />
render stamp annotations, and then make Okular use that new functionality.<br />
More details can be found in the bug report [0].<br />
<br />
[0] https://bugs.kde.org/show_bug.cgi?id=383651<br />
<br />
'''Expected results:''' Poppler should render stamp annotations. Annotations<br />
should be printable from Okular. Custom stamps inserted via the Okular GUI<br />
should be visible in other pdf readers.<br />
<br />
'''Knowledge prerequisite:''' C++, and a bit about the pdf format.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
<br />
=== KMyMoney ===<br />
KMyMoney is a cross-platform personal finance manager build on KDE frameworks technologies for your desktop and notebook environment. It enables users to keep careful track of their personal finances by providing a broad array of financial features and tools. <br />
<br />
==== Project: Integration of the new functionalities from the Alkimia library ====<br />
<gallery><br />
Kmymoney-alkimia-alkonlinequotewidget.png|Extended online quote support in KMyMoney 4.8<br />
Kmymoney-online-quote-addon-installer.png|Dialog for adding/updating online quote sources<br />
</gallery><br />
<br />
'''Brief explanation:''' <br />
With Alkimia version 8.0 the online quote support of KMyMoney was taken over, equipped with debug functions and extended by an online update of the quote sources.<br />
<br />
The task is to add this support to version 5 of KMyMoney, either as a replacement for existing functionality in KMyMoney (as was done with version 4.8) or as an optional KMyMoney plugin. <br />
<br />
In the former case, the WebPriceQuote class would need to be replaced with the associated AlkOnlineQuotesWidget class from the Alkimia library (see the associated Git commit for the [https://invent.kde.org/office/kmymoney/-/commit/6da0badcc33e756aedb524d62f49f3818efcafb6 4.8 branch]).<br />
<br />
For the second variant, the WebPriceQuote class would have to be converted to a KMyMoney plugin to make it optional. Based on this, another plugin can be added that uses the corresponding classes from Alkimia and can be used alternatively (From [https://bugs.kde.org/show_bug.cgi?id=381517#c1|Bug 381517]).<br />
<br />
'''Expected results:''' KMyMoney 5 will have the extended support of online quotes<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KtoBlzCheck ===<br />
<br />
KtoBLZCheck is a library for checking account numbers and bank codes of banks from different countries like Germany, Holland and Switzerland. The basic data used by the library is also used by other financial management applications such as KMyMoney, AqBanking and GnuCash.<br />
<br />
==== Project: Extend the usage of bank data support in KMyMoney ====<br />
<br />
[[File:KMymoney - New Institution Dialog.png|thumb|Current "New Institution" dialog]]<br />
[[File:Kmymoney-account-institution-tab.png|thumb|Current "Institution" tab of account dialog]]<br />
<br />
'''Brief explanation:''' <br />
<br />
KMyMoney provides dialogs to create and edit institutions and accounts, the latter having a link to an institution. This project is about extending these dialogs with the databases and functionalities provided by ktoblzcheck to simplify the input.<br />
<br />
'''Expected results:''' <br />
<br />
1. When adding new institutions, it should be possible to search for a bank in the corresponding dialog and take over existing bank data such as city and BIC for simplified setup.<br />
<br />
2. After entering an account number in the "Institution" tab of the account processing dialog, the IBAN should be calculated automatically if an institution has been selected before.<br />
<br />
3. The extension or adaptation of the application documentation with the new functionality is part of this project.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KStars ===<br />
'''[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.'''<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support an ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can support addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Observation Wizard Improvements ====<br />
'''Brief explanation''': The Observation Wizard enables users to select and filter objects of interest to them . Currently, the selection is done by object type, location, and magnitude in the sky. Further, the user can filter objects based on altitude and time-range when they are available. This tool can be further improved by providing the following features:<br />
# '''INDI Integration''': Filter and sort by object size for Deep Sky Objects that have a physical width and height, unlike point-like sources like stars. Limit objects to fall within a particular percentage of the sensor. For example, M31 galaxy is very large and spans almost 3 degrees in the night sky. It would not fit inside the camera's 1x1 degree field of view (as calculated from INDI). Similarly, an object spanning on 5'x5' arcmins is too small in the camera.<br />
# '''Image Integration''': The way the final list of objects are displayed should be modernized. Each object should have an image and also an Altitude-vs-Time plot next to it so that the user can quick identify what is the best time to observe this object. For large lists, this can be very CPU intensive and should be optimized accordingly.<br />
# '''Save/Load''': Ability to save and load the wizard search parameters for future use so that the user does not always have to start from scratch every time they need to search for objects.<br />
# '''Export''': Export the list of object to an external file or source in CSV and JSON formats.<br />
'''Expected results''': <br />
* Improved Observation Wizard Tool.<br />
* Proper integration with INDI & Ekos.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
<br />
==== Project: KStars Testing ====<br />
<br />
'''Brief explanation:''' KStars is built on a relatively large number of C++ classes, grouped in the following categories: sky objects and components, projection algorithms, graphics, timekeeping, widgets, Ekos automation, INDI client, FITS viewing, accessories and several library interfaces. Most of these constituting classes remain untested in terms of systematic and automatic verification. <br />
The objective of this project is to verify the code written in those classes at three levels: API, functionality and UI-based use case. In order to achieve this, the existing test code will have to extend its code coverage, report validation results and integrate seamlessly to the build recipe of the project.<br />
<br />
The difficulty of this project is the requirement to create tests on legacy code and consolidate a test plan that reflects how the software is working instead of how we expect it to work.<br />
<br />
'''Expected results:'''<br />
* Verify APIs: call each public class member using arbitrary test fixtures, control side effects by stubbing interfaces. This verifies code is executing in the data domain we expect, or fails for known reasons. As an example, the report will reveal how classes managing coordinates accept or reject numerical input.<br />
* Verify functionalities: ensure specific class interfaces return an expected result given a controlled set of input parameters. This verifies code is behaving as expected, or isolates known issues. As an example, the report will reveal which value of the Julian time classes managing timekeeping produce given different input objects embedding the same UTC time.<br />
* Verify use cases: ensure specific scenarios can be executed in the interface as presented in their documentation. This verifies procedures achieving useful results for the end-user remain stable, and controls how they evolve and improve during development.<br />
* Consolidate test reports and code coverage, and automate the execution of the test plan when building.<br />
Bonus: generate videos of use cases for end-users automatically.<br />
<br />
'''Level''': beginner to intermediate<br />
<br />
'''Knowledge prerequisites''': C++, Qt, software testing and verification fundamentals<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
===Akonadi ===<br />
<br />
The Akonadi framework is responsible for providing applications with a centralized database to store, index and retrieve the user's personal information. This includes the user's emails, contacts, calendars, events, journals, alarms, notes, etc. <br />
<br />
'''Communication:''' IRC (freenode) [irc://chat.freenode.net/akonadi #akonadi]<br />
<br />
=== GCompris ===<br />
<br />
==== Project: Adding new activities to GCompris ==== <br />
<br />
[https://gcompris.net/ GCompris] is a high quality educational software suite, including a large number of activities for children aged 2 to 10. We have recently launched our version 1.0 with multiple datasets feature. Moving forward we are looking to add more new activities to GCompris.<br />
<br />
'''Brief explanation''': Originally written in Gtk+ the development team started to rewrite it from scratch in Qt Quick and almost finished the port. Also, we have recently work on the multiple datasets feature.<br />
<br />
'''Expected results''':<br />
This year we aim to add some new activities to GCompris. The activities can be port of the GTK+ version or you can propose new activities too. For example, we lack activities in the science domain(chemistry, biology) which can be proposed.<br />
We have recently added multiple datasets to many activities so for all other activities having multiple datasets would be nice.<br />
<br />
You can have a look at our GCompris board to get some ideas about port of activities and multiple datasets too.<br />
<br />
https://phabricator.kde.org/project/view/142/<br />
<br />
https://phabricator.kde.org/T12428<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education.<br />
<br />
Be familiar with GCompris concept and content.<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough).<br />
<br />
Basic knowledge of QML, JavaScript would be a plus.<br />
<br />
Be able to build the Qt Quick version of GCompris.<br />
<br />
'''Application guide''':<br />
Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/GSOC_newcomers, http://gcompris.net/wiki/An_exercise_for_new_contributors and http://gcompris.net/wiki/Reviewing_an_activity<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Emmanuel Charruau (IRC: allon), Johnny Jazeix (IRC: JohnnyJ), Timothée Giet (IRC: Animtim), Deepak Kumar (IRC: deepak_)<br />
<br />
=== Falkon ===<br />
<br />
[https://www.falkon.org/ Falkon] is a KDE web browser using QtWebEngine rendering engine, previously known as QupZilla. It aims to be a lightweight web browser available through all major platforms. This project has been originally started only for educational purposes. But from its start, Falkon has grown into a feature-rich browser.<br />
<br />
[mailto:falkon@kde.org Contact the Falkon team]<br />
<br />
=== Cantor ===<br />
'''[https://edu.kde.org/cantor/ Cantor] provides a graphical frontend for different open source computer algebra systems and scientific programming languages. [mailto:kde-edu@kde.org Contact the KDE-Edu team].<br />
<br />
[https://mail.kde.org/mailman/listinfo/kde-edu Subscribe to KDE-Edu mail list]'''<br />
<br />
=== Kdenlive ===<br />
<br />
==== Project: Basic Subtitling Support in Kdenlive ====<br />
<br />
Get in touch with the team at #kdenlive or the developer group in [https://t.me/kdenlive_dev Telegram])<br />
<br />
=== KIO FUSE ===<br />
'''KIO FUSE is a bridge between [https://invent.kde.org/frameworks/kio KIO] and [https://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE]. You can find out more on feverfew's [https://feverfew.home.blog/ blog].'''<br />
<br />
* IRC (freenode): [irc://chat.freenode.net/kde-fm #kde-fm] ping feverfew or fvogt.<br />
* Matrix: [https://webchat.kde.org/#/room/#kde-fm:kde.org #kde-fm:kde.org] ping feverfew or fvogt.<br />
<br />
==== Project: xfstests Integration ====<br />
<br />
[https://kernel.googlesource.com/pub/scm/fs/ext2/xfstests-bld/+/HEAD/Documentation/what-is-xfstests.md xfstests] is a file system regression test suite. We would like to integrate this with our current test suite.<br />
<br />
Here are some things which will help to establish a good project plan:<br />
<br />
# A [https://patchwork.kernel.org/project/linux-fsdevel/patch/20200108192504.GA893@miu.piliscsaba.redhat.com/ patch] that seems to allow easier support of FUSE filesystems.<br />
# https://github.com/rfjakob/fuse-xfstests<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/14 !14]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to macOS ====<br />
<br />
Port KIO FUSE to macOS. Dolphin builds on macOS AFAIK so this project should be technically feasible.<br />
The solution is likely to involve [https://osxfuse.github.io/ osxfuse].<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/13 !13]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to Windows ====<br />
<br />
Port KIO FUSE to Windows. Currently a Dolphin port is in the works, so KIO (our main dependency) is already working.<br />
There are two potential solutions:<br />
<br />
# [https://dokan-dev.github.io/#fuse-api Dokan FUSE]<br />
# A method similar to what [https://github.com/billziss-gh/sshfs-win sshfs-win] has done ([https://github.com/billziss-gh/winfsp WinFsp] and [https://cygwin.com/ Cygwin]).<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/12 !12]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
=== Plasma Mobile ===<br />
<br />
=== NeoChat ===<br />
<br />
the two areas that could accept a student for GSoC are encryptions and voip support. Talk with use in #neochat:kde.org for more information about the scope of your project.<br />
<br />
'''Knowledge prerequisite:''' C++, QML (Cryptographie or GStreamer)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2021/Ideas&diff=91031GSoC/2021/Ideas2021-01-31T16:14:12Z<p>Cauliergilles: /* Project: Port DNG converter plugins to last Abobe DNG SDK */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2020/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
** '''Ideas with no mentors listed and their contact info will be removed''' **<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
* [https://webchat.kde.org/#/room/#dk-gsoc20-facesengine:kde.org #dk-gsoc20-facesengine channel on Riot kde webchat]'''<br />
<br />
==== Project: Port to Qt6 API ====<br />
<br />
'''Brief Explanation''': current digiKam 7.x implementation if fully compatible with Qt5.13.x under macOS, Windows, and Linux, but we need to port implementations to new Qt6, where API has changed, become deprecated, or have been improved. This require non trivial changes in digiKam with plenty of regression tests to do. Identified changes to include in this project are:<br />
* Migrate libo2 dependency to the new QtNetworkAuth framework for WebService plugins.<br />
* Port internal DImg framework to use new QImage 16 bits colors depth format.<br />
* Fix deprecated QXmlPatterns API uses.<br />
* Port AppImage builder to Qt6 with suitable ICU support. <br />
* Fix all Qt 5 Core Compatibility C++ Classes Uses (https://doc-snapshots.qt.io/qt6-dev/qtcore5compat-module.html)<br />
<br />
'''Expected Results''': <br />
<br />
Port to new API, replace deprecated, and make digiKam ready for Qt6. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Oauth2, CMake<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: New plugin to process OCR ====<br />
<br />
'''Brief Explanation''': the goal of this project is to implement a new generic DPlugin to process images in batch with Tesseract. It's a C++ framework to make Optical Characters Recognition. This plugin must be able to run over images automatically and record detected text in image metadata for post-processing, as described in this bugzilla file:<br />
<br />
https://bugs.kde.org/show_bug.cgi?id=117629<br />
<br />
'''Expected Results''': <br />
<br />
Provide a new optional Generic Tesseract based DPlugin available in digiKam and Showfoto to run OCR automatically. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Tesseract, CMake, Image Processing<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Port DNG converter plugins to last Abobe DNG SDK ====<br />
<br />
'''Brief Explanation''': digiKam was the first open source project to provide DNG support using open source DNGSDK from Adobe. This converter have been started 10 years ago and currently the DNGSDK version used internally is an older one (2012). The goal of this project is to port the DNG Converted plugins to the last stable DNG SDK, and to link the internal Raw Engine based on libraw with this SDK for a better read-only support of most recent versions of DNG file provided by camera. Files from bugzilla relevant of this project are listed below:<br />
<br />
* https://bugs.kde.org/show_bug.cgi?id=284934<br />
* https://bugs.kde.org/show_bug.cgi?id=330920<br />
* https://bugs.kde.org/show_bug.cgi?id=381967<br />
* https://bugs.kde.org/show_bug.cgi?id=390700<br />
* https://bugs.kde.org/show_bug.cgi?id=427350<br />
* https://bugs.kde.org/show_bug.cgi?id=429119<br />
<br />
'''Expected Results''': <br />
<br />
Provide an update of DNGConverter plugin using last version of DNG DSK from Adobe. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, DNGSDK, CMake, RAW Image Processing<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
===Kirogi===<br />
<br />
'''A Ground Control Station (GSC) application for drones with a modern mindset and codebase philosophy, the project is one of the newest one under KDE organization and we would like your help to make it the best open source GCS around!<br />
<br />
'''We are also open for new ideas, be free to send your own plan for Kirogi.<br />
<br />
'''For more information, take a look in our website: https://kirogi.org/<br />
<br />
Be in touch with:<br />
* IRC (freenode): [irc://chat.freenode.net/kde-kirogi #kde-kirogi]<br />
* Telegram: [https://t.me/kde_kirogi @kde_kirogi]<br />
* Matrix: [https://webchat.kde.org/#/room/#kirigami:kde.org #kde-kirogi:kde.org]<br />
<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Improve custom stamp annotation handling ====<br />
<br />
'''Brief explanation:''' Okular does display stamp annotations, but the support<br />
is somewhat incomplete. This particularly shows when trying to use stamp<br />
annotations with a custom image. For example, such annotations can be<br />
added in Okular, but they cannot be saved to the pdf file in a way<br />
that any other pdf viewer can read. Also, they will not appear on print-outs.<br />
<br />
The underlying reason for this is that Okular renders these stamps itself,<br />
rather than relying on the poppler library, which does all other pdf<br />
rendering. Goal of this project is therefore to teach poppler how to<br />
render stamp annotations, and then make Okular use that new functionality.<br />
More details can be found in the bug report [0].<br />
<br />
[0] https://bugs.kde.org/show_bug.cgi?id=383651<br />
<br />
'''Expected results:''' Poppler should render stamp annotations. Annotations<br />
should be printable from Okular. Custom stamps inserted via the Okular GUI<br />
should be visible in other pdf readers.<br />
<br />
'''Knowledge prerequisite:''' C++, and a bit about the pdf format.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
<br />
=== KMyMoney ===<br />
KMyMoney is a cross-platform personal finance manager build on KDE frameworks technologies for your desktop and notebook environment. It enables users to keep careful track of their personal finances by providing a broad array of financial features and tools. <br />
<br />
==== Project: Integration of the new functionalities from the Alkimia library ====<br />
<gallery><br />
Kmymoney-alkimia-alkonlinequotewidget.png|Extended online quote support in KMyMoney 4.8<br />
Kmymoney-online-quote-addon-installer.png|Dialog for adding/updating online quote sources<br />
</gallery><br />
<br />
'''Brief explanation:''' <br />
With Alkimia version 8.0 the online quote support of KMyMoney was taken over, equipped with debug functions and extended by an online update of the quote sources.<br />
<br />
The task is to add this support to version 5 of KMyMoney, either as a replacement for existing functionality in KMyMoney (as was done with version 4.8) or as an optional KMyMoney plugin. <br />
<br />
In the former case, the WebPriceQuote class would need to be replaced with the associated AlkOnlineQuotesWidget class from the Alkimia library (see the associated Git commit for the [https://invent.kde.org/office/kmymoney/-/commit/6da0badcc33e756aedb524d62f49f3818efcafb6 4.8 branch]).<br />
<br />
For the second variant, the WebPriceQuote class would have to be converted to a KMyMoney plugin to make it optional. Based on this, another plugin can be added that uses the corresponding classes from Alkimia and can be used alternatively (From [https://bugs.kde.org/show_bug.cgi?id=381517#c1|Bug 381517]).<br />
<br />
'''Expected results:''' KMyMoney 5 will have the extended support of online quotes<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KtoBlzCheck ===<br />
<br />
KtoBLZCheck is a library for checking account numbers and bank codes of banks from different countries like Germany, Holland and Switzerland. The basic data used by the library is also used by other financial management applications such as KMyMoney, AqBanking and GnuCash.<br />
<br />
==== Project: Extend the usage of bank data support in KMyMoney ====<br />
<br />
[[File:KMymoney - New Institution Dialog.png|thumb|Current "New Institution" dialog]]<br />
[[File:Kmymoney-account-institution-tab.png|thumb|Current "Institution" tab of account dialog]]<br />
<br />
'''Brief explanation:''' <br />
<br />
KMyMoney provides dialogs to create and edit institutions and accounts, the latter having a link to an institution. This project is about extending these dialogs with the databases and functionalities provided by ktoblzcheck to simplify the input.<br />
<br />
'''Expected results:''' <br />
<br />
1. When adding new institutions, it should be possible to search for a bank in the corresponding dialog and take over existing bank data such as city and BIC for simplified setup.<br />
<br />
2. After entering an account number in the "Institution" tab of the account processing dialog, the IBAN should be calculated automatically if an institution has been selected before.<br />
<br />
3. The extension or adaptation of the application documentation with the new functionality is part of this project.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KStars ===<br />
'''[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.'''<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support an ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can support addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Observation Wizard Improvements ====<br />
'''Brief explanation''': The Observation Wizard enables users to select and filter objects of interest to them . Currently, the selection is done by object type, location, and magnitude in the sky. Further, the user can filter objects based on altitude and time-range when they are available. This tool can be further improved by providing the following features:<br />
# '''INDI Integration''': Filter and sort by object size for Deep Sky Objects that have a physical width and height, unlike point-like sources like stars. Limit objects to fall within a particular percentage of the sensor. For example, M31 galaxy is very large and spans almost 3 degrees in the night sky. It would not fit inside the camera's 1x1 degree field of view (as calculated from INDI). Similarly, an object spanning on 5'x5' arcmins is too small in the camera.<br />
# '''Image Integration''': The way the final list of objects are displayed should be modernized. Each object should have an image and also an Altitude-vs-Time plot next to it so that the user can quick identify what is the best time to observe this object. For large lists, this can be very CPU intensive and should be optimized accordingly.<br />
# '''Save/Load''': Ability to save and load the wizard search parameters for future use so that the user does not always have to start from scratch every time they need to search for objects.<br />
# '''Export''': Export the list of object to an external file or source in CSV and JSON formats.<br />
'''Expected results''': <br />
* Improved Observation Wizard Tool.<br />
* Proper integration with INDI & Ekos.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
<br />
==== Project: KStars Testing ====<br />
<br />
'''Brief explanation:''' KStars is built on a relatively large number of C++ classes, grouped in the following categories: sky objects and components, projection algorithms, graphics, timekeeping, widgets, Ekos automation, INDI client, FITS viewing, accessories and several library interfaces. Most of these constituting classes remain untested in terms of systematic and automatic verification. <br />
The objective of this project is to verify the code written in those classes at three levels: API, functionality and UI-based use case. In order to achieve this, the existing test code will have to extend its code coverage, report validation results and integrate seamlessly to the build recipe of the project.<br />
<br />
The difficulty of this project is the requirement to create tests on legacy code and consolidate a test plan that reflects how the software is working instead of how we expect it to work.<br />
<br />
'''Expected results:'''<br />
* Verify APIs: call each public class member using arbitrary test fixtures, control side effects by stubbing interfaces. This verifies code is executing in the data domain we expect, or fails for known reasons. As an example, the report will reveal how classes managing coordinates accept or reject numerical input.<br />
* Verify functionalities: ensure specific class interfaces return an expected result given a controlled set of input parameters. This verifies code is behaving as expected, or isolates known issues. As an example, the report will reveal which value of the Julian time classes managing timekeeping produce given different input objects embedding the same UTC time.<br />
* Verify use cases: ensure specific scenarios can be executed in the interface as presented in their documentation. This verifies procedures achieving useful results for the end-user remain stable, and controls how they evolve and improve during development.<br />
* Consolidate test reports and code coverage, and automate the execution of the test plan when building.<br />
Bonus: generate videos of use cases for end-users automatically.<br />
<br />
'''Level''': beginner to intermediate<br />
<br />
'''Knowledge prerequisites''': C++, Qt, software testing and verification fundamentals<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
===Akonadi ===<br />
<br />
The Akonadi framework is responsible for providing applications with a centralized database to store, index and retrieve the user's personal information. This includes the user's emails, contacts, calendars, events, journals, alarms, notes, etc. <br />
<br />
'''Communication:''' IRC (freenode) [irc://chat.freenode.net/akonadi #akonadi]<br />
<br />
=== GCompris ===<br />
<br />
==== Project: Adding new activities to GCompris ==== <br />
<br />
[https://gcompris.net/ GCompris] is a high quality educational software suite, including a large number of activities for children aged 2 to 10. We have recently launched our version 1.0 with multiple datasets feature. Moving forward we are looking to add more new activities to GCompris.<br />
<br />
'''Brief explanation''': Originally written in Gtk+ the development team started to rewrite it from scratch in Qt Quick and almost finished the port. Also, we have recently work on the multiple datasets feature.<br />
<br />
'''Expected results''':<br />
This year we aim to add some new activities to GCompris. The activities can be port of the GTK+ version or you can propose new activities too. For example, we lack activities in the science domain(chemistry, biology) which can be proposed.<br />
We have recently added multiple datasets to many activities so for all other activities having multiple datasets would be nice.<br />
<br />
You can have a look at our GCompris board to get some ideas about port of activities and multiple datasets too.<br />
<br />
https://phabricator.kde.org/project/view/142/<br />
<br />
https://phabricator.kde.org/T12428<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education.<br />
<br />
Be familiar with GCompris concept and content.<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough).<br />
<br />
Basic knowledge of QML, JavaScript would be a plus.<br />
<br />
Be able to build the Qt Quick version of GCompris.<br />
<br />
'''Application guide''':<br />
Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/GSOC_newcomers, http://gcompris.net/wiki/An_exercise_for_new_contributors and http://gcompris.net/wiki/Reviewing_an_activity<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Emmanuel Charruau (IRC: allon), Johnny Jazeix (IRC: JohnnyJ), Timothée Giet (IRC: Animtim), Deepak Kumar (IRC: deepak_)<br />
<br />
=== Falkon ===<br />
<br />
[https://www.falkon.org/ Falkon] is a KDE web browser using QtWebEngine rendering engine, previously known as QupZilla. It aims to be a lightweight web browser available through all major platforms. This project has been originally started only for educational purposes. But from its start, Falkon has grown into a feature-rich browser.<br />
<br />
[mailto:falkon@kde.org Contact the Falkon team]<br />
<br />
=== Cantor ===<br />
'''[https://edu.kde.org/cantor/ Cantor] provides a graphical frontend for different open source computer algebra systems and scientific programming languages. [mailto:kde-edu@kde.org Contact the KDE-Edu team].<br />
<br />
[https://mail.kde.org/mailman/listinfo/kde-edu Subscribe to KDE-Edu mail list]'''<br />
<br />
=== Kdenlive ===<br />
<br />
==== Project: Basic Subtitling Support in Kdenlive ====<br />
<br />
Get in touch with the team at #kdenlive or the developer group in [https://t.me/kdenlive_dev Telegram])<br />
<br />
=== KIO FUSE ===<br />
'''KIO FUSE is a bridge between [https://invent.kde.org/frameworks/kio KIO] and [https://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE]. You can find out more on feverfew's [https://feverfew.home.blog/ blog].'''<br />
<br />
* IRC (freenode): [irc://chat.freenode.net/kde-fm #kde-fm] ping feverfew or fvogt.<br />
* Matrix: [https://webchat.kde.org/#/room/#kde-fm:kde.org #kde-fm:kde.org] ping feverfew or fvogt.<br />
<br />
==== Project: xfstests Integration ====<br />
<br />
[https://kernel.googlesource.com/pub/scm/fs/ext2/xfstests-bld/+/HEAD/Documentation/what-is-xfstests.md xfstests] is a file system regression test suite. We would like to integrate this with our current test suite.<br />
<br />
Here are some things which will help to establish a good project plan:<br />
<br />
# A [https://patchwork.kernel.org/project/linux-fsdevel/patch/20200108192504.GA893@miu.piliscsaba.redhat.com/ patch] that seems to allow easier support of FUSE filesystems.<br />
# https://github.com/rfjakob/fuse-xfstests<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/14 !14]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to macOS ====<br />
<br />
Port KIO FUSE to macOS. Dolphin builds on macOS AFAIK so this project should be technically feasible.<br />
The solution is likely to involve [https://osxfuse.github.io/ osxfuse].<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/13 !13]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to Windows ====<br />
<br />
Port KIO FUSE to Windows. Currently a Dolphin port is in the works, so KIO (our main dependency) is already working.<br />
There are two potential solutions:<br />
<br />
# [https://dokan-dev.github.io/#fuse-api Dokan FUSE]<br />
# A method similar to what [https://github.com/billziss-gh/sshfs-win sshfs-win] has done ([https://github.com/billziss-gh/winfsp WinFsp] and [https://cygwin.com/ Cygwin]).<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/12 !12]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
=== Plasma Mobile ===<br />
<br />
=== NeoChat ===<br />
<br />
the two areas that could accept a student for GSoC are encryptions and voip support. Talk with use in #neochat:kde.org for more information about the scope of your project.<br />
<br />
'''Knowledge prerequisite:''' C++, QML (Cryptographie or GStreamer)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2021/Ideas&diff=91030GSoC/2021/Ideas2021-01-31T16:13:43Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2020/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
** '''Ideas with no mentors listed and their contact info will be removed''' **<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
* [https://webchat.kde.org/#/room/#dk-gsoc20-facesengine:kde.org #dk-gsoc20-facesengine channel on Riot kde webchat]'''<br />
<br />
==== Project: Port to Qt6 API ====<br />
<br />
'''Brief Explanation''': current digiKam 7.x implementation if fully compatible with Qt5.13.x under macOS, Windows, and Linux, but we need to port implementations to new Qt6, where API has changed, become deprecated, or have been improved. This require non trivial changes in digiKam with plenty of regression tests to do. Identified changes to include in this project are:<br />
* Migrate libo2 dependency to the new QtNetworkAuth framework for WebService plugins.<br />
* Port internal DImg framework to use new QImage 16 bits colors depth format.<br />
* Fix deprecated QXmlPatterns API uses.<br />
* Port AppImage builder to Qt6 with suitable ICU support. <br />
* Fix all Qt 5 Core Compatibility C++ Classes Uses (https://doc-snapshots.qt.io/qt6-dev/qtcore5compat-module.html)<br />
<br />
'''Expected Results''': <br />
<br />
Port to new API, replace deprecated, and make digiKam ready for Qt6. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Oauth2, CMake<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: New plugin to process OCR ====<br />
<br />
'''Brief Explanation''': the goal of this project is to implement a new generic DPlugin to process images in batch with Tesseract. It's a C++ framework to make Optical Characters Recognition. This plugin must be able to run over images automatically and record detected text in image metadata for post-processing, as described in this bugzilla file:<br />
<br />
https://bugs.kde.org/show_bug.cgi?id=117629<br />
<br />
'''Expected Results''': <br />
<br />
Provide a new optional Generic Tesseract based DPlugin available in digiKam and Showfoto to run OCR automatically. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Tesseract, CMake, Image Processing<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Port DNG converter plugins to last Abobe DNG SDK ====<br />
<br />
'''Brief Explanation''': digiKam was the first open source project to provide DNG support using open source DNGSDK from Adobe. This converter have been started 10 years ago and currently the DNGSDK version used internally is an older one (2012). The goal of this project is to port the DNG Converted plugins to the last stable DNG SDK, and to link the internal Raw Engine based on libraw with this SDK for a better read-only support of most recent versions of DNG file provided by camera. Files from bugzilla relevant of this project are listed below:<br />
<br />
https://bugs.kde.org/show_bug.cgi?id=284934<br />
https://bugs.kde.org/show_bug.cgi?id=330920<br />
https://bugs.kde.org/show_bug.cgi?id=381967<br />
https://bugs.kde.org/show_bug.cgi?id=390700<br />
https://bugs.kde.org/show_bug.cgi?id=427350<br />
https://bugs.kde.org/show_bug.cgi?id=429119<br />
<br />
'''Expected Results''': <br />
<br />
Provide an update of DNGConverter plugin using last version of DNG DSK from Adobe. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, DNGSDK, CMake, RAW Image Processing<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
===Kirogi===<br />
<br />
'''A Ground Control Station (GSC) application for drones with a modern mindset and codebase philosophy, the project is one of the newest one under KDE organization and we would like your help to make it the best open source GCS around!<br />
<br />
'''We are also open for new ideas, be free to send your own plan for Kirogi.<br />
<br />
'''For more information, take a look in our website: https://kirogi.org/<br />
<br />
Be in touch with:<br />
* IRC (freenode): [irc://chat.freenode.net/kde-kirogi #kde-kirogi]<br />
* Telegram: [https://t.me/kde_kirogi @kde_kirogi]<br />
* Matrix: [https://webchat.kde.org/#/room/#kirigami:kde.org #kde-kirogi:kde.org]<br />
<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Improve custom stamp annotation handling ====<br />
<br />
'''Brief explanation:''' Okular does display stamp annotations, but the support<br />
is somewhat incomplete. This particularly shows when trying to use stamp<br />
annotations with a custom image. For example, such annotations can be<br />
added in Okular, but they cannot be saved to the pdf file in a way<br />
that any other pdf viewer can read. Also, they will not appear on print-outs.<br />
<br />
The underlying reason for this is that Okular renders these stamps itself,<br />
rather than relying on the poppler library, which does all other pdf<br />
rendering. Goal of this project is therefore to teach poppler how to<br />
render stamp annotations, and then make Okular use that new functionality.<br />
More details can be found in the bug report [0].<br />
<br />
[0] https://bugs.kde.org/show_bug.cgi?id=383651<br />
<br />
'''Expected results:''' Poppler should render stamp annotations. Annotations<br />
should be printable from Okular. Custom stamps inserted via the Okular GUI<br />
should be visible in other pdf readers.<br />
<br />
'''Knowledge prerequisite:''' C++, and a bit about the pdf format.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
<br />
=== KMyMoney ===<br />
KMyMoney is a cross-platform personal finance manager build on KDE frameworks technologies for your desktop and notebook environment. It enables users to keep careful track of their personal finances by providing a broad array of financial features and tools. <br />
<br />
==== Project: Integration of the new functionalities from the Alkimia library ====<br />
<gallery><br />
Kmymoney-alkimia-alkonlinequotewidget.png|Extended online quote support in KMyMoney 4.8<br />
Kmymoney-online-quote-addon-installer.png|Dialog for adding/updating online quote sources<br />
</gallery><br />
<br />
'''Brief explanation:''' <br />
With Alkimia version 8.0 the online quote support of KMyMoney was taken over, equipped with debug functions and extended by an online update of the quote sources.<br />
<br />
The task is to add this support to version 5 of KMyMoney, either as a replacement for existing functionality in KMyMoney (as was done with version 4.8) or as an optional KMyMoney plugin. <br />
<br />
In the former case, the WebPriceQuote class would need to be replaced with the associated AlkOnlineQuotesWidget class from the Alkimia library (see the associated Git commit for the [https://invent.kde.org/office/kmymoney/-/commit/6da0badcc33e756aedb524d62f49f3818efcafb6 4.8 branch]).<br />
<br />
For the second variant, the WebPriceQuote class would have to be converted to a KMyMoney plugin to make it optional. Based on this, another plugin can be added that uses the corresponding classes from Alkimia and can be used alternatively (From [https://bugs.kde.org/show_bug.cgi?id=381517#c1|Bug 381517]).<br />
<br />
'''Expected results:''' KMyMoney 5 will have the extended support of online quotes<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KtoBlzCheck ===<br />
<br />
KtoBLZCheck is a library for checking account numbers and bank codes of banks from different countries like Germany, Holland and Switzerland. The basic data used by the library is also used by other financial management applications such as KMyMoney, AqBanking and GnuCash.<br />
<br />
==== Project: Extend the usage of bank data support in KMyMoney ====<br />
<br />
[[File:KMymoney - New Institution Dialog.png|thumb|Current "New Institution" dialog]]<br />
[[File:Kmymoney-account-institution-tab.png|thumb|Current "Institution" tab of account dialog]]<br />
<br />
'''Brief explanation:''' <br />
<br />
KMyMoney provides dialogs to create and edit institutions and accounts, the latter having a link to an institution. This project is about extending these dialogs with the databases and functionalities provided by ktoblzcheck to simplify the input.<br />
<br />
'''Expected results:''' <br />
<br />
1. When adding new institutions, it should be possible to search for a bank in the corresponding dialog and take over existing bank data such as city and BIC for simplified setup.<br />
<br />
2. After entering an account number in the "Institution" tab of the account processing dialog, the IBAN should be calculated automatically if an institution has been selected before.<br />
<br />
3. The extension or adaptation of the application documentation with the new functionality is part of this project.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KStars ===<br />
'''[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.'''<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support an ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can support addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Observation Wizard Improvements ====<br />
'''Brief explanation''': The Observation Wizard enables users to select and filter objects of interest to them . Currently, the selection is done by object type, location, and magnitude in the sky. Further, the user can filter objects based on altitude and time-range when they are available. This tool can be further improved by providing the following features:<br />
# '''INDI Integration''': Filter and sort by object size for Deep Sky Objects that have a physical width and height, unlike point-like sources like stars. Limit objects to fall within a particular percentage of the sensor. For example, M31 galaxy is very large and spans almost 3 degrees in the night sky. It would not fit inside the camera's 1x1 degree field of view (as calculated from INDI). Similarly, an object spanning on 5'x5' arcmins is too small in the camera.<br />
# '''Image Integration''': The way the final list of objects are displayed should be modernized. Each object should have an image and also an Altitude-vs-Time plot next to it so that the user can quick identify what is the best time to observe this object. For large lists, this can be very CPU intensive and should be optimized accordingly.<br />
# '''Save/Load''': Ability to save and load the wizard search parameters for future use so that the user does not always have to start from scratch every time they need to search for objects.<br />
# '''Export''': Export the list of object to an external file or source in CSV and JSON formats.<br />
'''Expected results''': <br />
* Improved Observation Wizard Tool.<br />
* Proper integration with INDI & Ekos.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
<br />
==== Project: KStars Testing ====<br />
<br />
'''Brief explanation:''' KStars is built on a relatively large number of C++ classes, grouped in the following categories: sky objects and components, projection algorithms, graphics, timekeeping, widgets, Ekos automation, INDI client, FITS viewing, accessories and several library interfaces. Most of these constituting classes remain untested in terms of systematic and automatic verification. <br />
The objective of this project is to verify the code written in those classes at three levels: API, functionality and UI-based use case. In order to achieve this, the existing test code will have to extend its code coverage, report validation results and integrate seamlessly to the build recipe of the project.<br />
<br />
The difficulty of this project is the requirement to create tests on legacy code and consolidate a test plan that reflects how the software is working instead of how we expect it to work.<br />
<br />
'''Expected results:'''<br />
* Verify APIs: call each public class member using arbitrary test fixtures, control side effects by stubbing interfaces. This verifies code is executing in the data domain we expect, or fails for known reasons. As an example, the report will reveal how classes managing coordinates accept or reject numerical input.<br />
* Verify functionalities: ensure specific class interfaces return an expected result given a controlled set of input parameters. This verifies code is behaving as expected, or isolates known issues. As an example, the report will reveal which value of the Julian time classes managing timekeeping produce given different input objects embedding the same UTC time.<br />
* Verify use cases: ensure specific scenarios can be executed in the interface as presented in their documentation. This verifies procedures achieving useful results for the end-user remain stable, and controls how they evolve and improve during development.<br />
* Consolidate test reports and code coverage, and automate the execution of the test plan when building.<br />
Bonus: generate videos of use cases for end-users automatically.<br />
<br />
'''Level''': beginner to intermediate<br />
<br />
'''Knowledge prerequisites''': C++, Qt, software testing and verification fundamentals<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
===Akonadi ===<br />
<br />
The Akonadi framework is responsible for providing applications with a centralized database to store, index and retrieve the user's personal information. This includes the user's emails, contacts, calendars, events, journals, alarms, notes, etc. <br />
<br />
'''Communication:''' IRC (freenode) [irc://chat.freenode.net/akonadi #akonadi]<br />
<br />
=== GCompris ===<br />
<br />
==== Project: Adding new activities to GCompris ==== <br />
<br />
[https://gcompris.net/ GCompris] is a high quality educational software suite, including a large number of activities for children aged 2 to 10. We have recently launched our version 1.0 with multiple datasets feature. Moving forward we are looking to add more new activities to GCompris.<br />
<br />
'''Brief explanation''': Originally written in Gtk+ the development team started to rewrite it from scratch in Qt Quick and almost finished the port. Also, we have recently work on the multiple datasets feature.<br />
<br />
'''Expected results''':<br />
This year we aim to add some new activities to GCompris. The activities can be port of the GTK+ version or you can propose new activities too. For example, we lack activities in the science domain(chemistry, biology) which can be proposed.<br />
We have recently added multiple datasets to many activities so for all other activities having multiple datasets would be nice.<br />
<br />
You can have a look at our GCompris board to get some ideas about port of activities and multiple datasets too.<br />
<br />
https://phabricator.kde.org/project/view/142/<br />
<br />
https://phabricator.kde.org/T12428<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education.<br />
<br />
Be familiar with GCompris concept and content.<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough).<br />
<br />
Basic knowledge of QML, JavaScript would be a plus.<br />
<br />
Be able to build the Qt Quick version of GCompris.<br />
<br />
'''Application guide''':<br />
Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/GSOC_newcomers, http://gcompris.net/wiki/An_exercise_for_new_contributors and http://gcompris.net/wiki/Reviewing_an_activity<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Emmanuel Charruau (IRC: allon), Johnny Jazeix (IRC: JohnnyJ), Timothée Giet (IRC: Animtim), Deepak Kumar (IRC: deepak_)<br />
<br />
=== Falkon ===<br />
<br />
[https://www.falkon.org/ Falkon] is a KDE web browser using QtWebEngine rendering engine, previously known as QupZilla. It aims to be a lightweight web browser available through all major platforms. This project has been originally started only for educational purposes. But from its start, Falkon has grown into a feature-rich browser.<br />
<br />
[mailto:falkon@kde.org Contact the Falkon team]<br />
<br />
=== Cantor ===<br />
'''[https://edu.kde.org/cantor/ Cantor] provides a graphical frontend for different open source computer algebra systems and scientific programming languages. [mailto:kde-edu@kde.org Contact the KDE-Edu team].<br />
<br />
[https://mail.kde.org/mailman/listinfo/kde-edu Subscribe to KDE-Edu mail list]'''<br />
<br />
=== Kdenlive ===<br />
<br />
==== Project: Basic Subtitling Support in Kdenlive ====<br />
<br />
Get in touch with the team at #kdenlive or the developer group in [https://t.me/kdenlive_dev Telegram])<br />
<br />
=== KIO FUSE ===<br />
'''KIO FUSE is a bridge between [https://invent.kde.org/frameworks/kio KIO] and [https://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE]. You can find out more on feverfew's [https://feverfew.home.blog/ blog].'''<br />
<br />
* IRC (freenode): [irc://chat.freenode.net/kde-fm #kde-fm] ping feverfew or fvogt.<br />
* Matrix: [https://webchat.kde.org/#/room/#kde-fm:kde.org #kde-fm:kde.org] ping feverfew or fvogt.<br />
<br />
==== Project: xfstests Integration ====<br />
<br />
[https://kernel.googlesource.com/pub/scm/fs/ext2/xfstests-bld/+/HEAD/Documentation/what-is-xfstests.md xfstests] is a file system regression test suite. We would like to integrate this with our current test suite.<br />
<br />
Here are some things which will help to establish a good project plan:<br />
<br />
# A [https://patchwork.kernel.org/project/linux-fsdevel/patch/20200108192504.GA893@miu.piliscsaba.redhat.com/ patch] that seems to allow easier support of FUSE filesystems.<br />
# https://github.com/rfjakob/fuse-xfstests<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/14 !14]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to macOS ====<br />
<br />
Port KIO FUSE to macOS. Dolphin builds on macOS AFAIK so this project should be technically feasible.<br />
The solution is likely to involve [https://osxfuse.github.io/ osxfuse].<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/13 !13]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to Windows ====<br />
<br />
Port KIO FUSE to Windows. Currently a Dolphin port is in the works, so KIO (our main dependency) is already working.<br />
There are two potential solutions:<br />
<br />
# [https://dokan-dev.github.io/#fuse-api Dokan FUSE]<br />
# A method similar to what [https://github.com/billziss-gh/sshfs-win sshfs-win] has done ([https://github.com/billziss-gh/winfsp WinFsp] and [https://cygwin.com/ Cygwin]).<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/12 !12]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
=== Plasma Mobile ===<br />
<br />
=== NeoChat ===<br />
<br />
the two areas that could accept a student for GSoC are encryptions and voip support. Talk with use in #neochat:kde.org for more information about the scope of your project.<br />
<br />
'''Knowledge prerequisite:''' C++, QML (Cryptographie or GStreamer)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2021/Ideas&diff=91029GSoC/2021/Ideas2021-01-31T15:39:45Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2020/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
** '''Ideas with no mentors listed and their contact info will be removed''' **<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
* [https://webchat.kde.org/#/room/#dk-gsoc20-facesengine:kde.org #dk-gsoc20-facesengine channel on Riot kde webchat]'''<br />
<br />
==== Project: Port to Qt6 API ====<br />
<br />
'''Brief Explanation''': current digiKam 7.x implementation if fully compatible with Qt5.13.x under macOS, Windows, and Linux, but we need to port implementations to new Qt6, where API has changed, become deprecated, or have been improved. This require non trivial changes in digiKam with plenty of regression tests to do. Identified changes to include in this project are:<br />
* Migrate libo2 dependency to the new QtNetworkAuth framework for WebService plugins.<br />
* Port internal DImg framework to use new QImage 16 bits colors depth format.<br />
* Fix deprecated QXmlPatterns API uses.<br />
* Port AppImage builder to Qt6 with suitable ICU support. <br />
* Fix all Qt 5 Core Compatibility C++ Classes Uses (https://doc-snapshots.qt.io/qt6-dev/qtcore5compat-module.html)<br />
<br />
'''Expected Results''': <br />
<br />
Port to new API, replace deprecated, and make digiKam ready for Qt6. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Oauth2, CMake<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: New plugin to process OCR ====<br />
<br />
'''Brief Explanation''': the goal of this project is to implement a new generic DPlugin to process images in batch with Tesseract. It's a C++ framework to make Optical Characters Recognition. This plugin must be able to run over images automatically and record detected text in image metadata for post-processing, as described in this bugzilla file:<br />
<br />
https://bugs.kde.org/show_bug.cgi?id=117629<br />
<br />
'''Expected Results''': <br />
<br />
Provide a new optional Generic Tesseract based DPlugin available in digiKam and Showfoto to run OCR automatically. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Tesseract, CMake, Image Processing<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
===Kirogi===<br />
<br />
'''A Ground Control Station (GSC) application for drones with a modern mindset and codebase philosophy, the project is one of the newest one under KDE organization and we would like your help to make it the best open source GCS around!<br />
<br />
'''We are also open for new ideas, be free to send your own plan for Kirogi.<br />
<br />
'''For more information, take a look in our website: https://kirogi.org/<br />
<br />
Be in touch with:<br />
* IRC (freenode): [irc://chat.freenode.net/kde-kirogi #kde-kirogi]<br />
* Telegram: [https://t.me/kde_kirogi @kde_kirogi]<br />
* Matrix: [https://webchat.kde.org/#/room/#kirigami:kde.org #kde-kirogi:kde.org]<br />
<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Improve custom stamp annotation handling ====<br />
<br />
'''Brief explanation:''' Okular does display stamp annotations, but the support<br />
is somewhat incomplete. This particularly shows when trying to use stamp<br />
annotations with a custom image. For example, such annotations can be<br />
added in Okular, but they cannot be saved to the pdf file in a way<br />
that any other pdf viewer can read. Also, they will not appear on print-outs.<br />
<br />
The underlying reason for this is that Okular renders these stamps itself,<br />
rather than relying on the poppler library, which does all other pdf<br />
rendering. Goal of this project is therefore to teach poppler how to<br />
render stamp annotations, and then make Okular use that new functionality.<br />
More details can be found in the bug report [0].<br />
<br />
[0] https://bugs.kde.org/show_bug.cgi?id=383651<br />
<br />
'''Expected results:''' Poppler should render stamp annotations. Annotations<br />
should be printable from Okular. Custom stamps inserted via the Okular GUI<br />
should be visible in other pdf readers.<br />
<br />
'''Knowledge prerequisite:''' C++, and a bit about the pdf format.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
<br />
=== KMyMoney ===<br />
KMyMoney is a cross-platform personal finance manager build on KDE frameworks technologies for your desktop and notebook environment. It enables users to keep careful track of their personal finances by providing a broad array of financial features and tools. <br />
<br />
==== Project: Integration of the new functionalities from the Alkimia library ====<br />
<gallery><br />
Kmymoney-alkimia-alkonlinequotewidget.png|Extended online quote support in KMyMoney 4.8<br />
Kmymoney-online-quote-addon-installer.png|Dialog for adding/updating online quote sources<br />
</gallery><br />
<br />
'''Brief explanation:''' <br />
With Alkimia version 8.0 the online quote support of KMyMoney was taken over, equipped with debug functions and extended by an online update of the quote sources.<br />
<br />
The task is to add this support to version 5 of KMyMoney, either as a replacement for existing functionality in KMyMoney (as was done with version 4.8) or as an optional KMyMoney plugin. <br />
<br />
In the former case, the WebPriceQuote class would need to be replaced with the associated AlkOnlineQuotesWidget class from the Alkimia library (see the associated Git commit for the [https://invent.kde.org/office/kmymoney/-/commit/6da0badcc33e756aedb524d62f49f3818efcafb6 4.8 branch]).<br />
<br />
For the second variant, the WebPriceQuote class would have to be converted to a KMyMoney plugin to make it optional. Based on this, another plugin can be added that uses the corresponding classes from Alkimia and can be used alternatively (From [https://bugs.kde.org/show_bug.cgi?id=381517#c1|Bug 381517]).<br />
<br />
'''Expected results:''' KMyMoney 5 will have the extended support of online quotes<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KtoBlzCheck ===<br />
<br />
KtoBLZCheck is a library for checking account numbers and bank codes of banks from different countries like Germany, Holland and Switzerland. The basic data used by the library is also used by other financial management applications such as KMyMoney, AqBanking and GnuCash.<br />
<br />
==== Project: Extend the usage of bank data support in KMyMoney ====<br />
<br />
[[File:KMymoney - New Institution Dialog.png|thumb|Current "New Institution" dialog]]<br />
[[File:Kmymoney-account-institution-tab.png|thumb|Current "Institution" tab of account dialog]]<br />
<br />
'''Brief explanation:''' <br />
<br />
KMyMoney provides dialogs to create and edit institutions and accounts, the latter having a link to an institution. This project is about extending these dialogs with the databases and functionalities provided by ktoblzcheck to simplify the input.<br />
<br />
'''Expected results:''' <br />
<br />
1. When adding new institutions, it should be possible to search for a bank in the corresponding dialog and take over existing bank data such as city and BIC for simplified setup.<br />
<br />
2. After entering an account number in the "Institution" tab of the account processing dialog, the IBAN should be calculated automatically if an institution has been selected before.<br />
<br />
3. The extension or adaptation of the application documentation with the new functionality is part of this project.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KStars ===<br />
'''[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.'''<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support an ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can support addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Observation Wizard Improvements ====<br />
'''Brief explanation''': The Observation Wizard enables users to select and filter objects of interest to them . Currently, the selection is done by object type, location, and magnitude in the sky. Further, the user can filter objects based on altitude and time-range when they are available. This tool can be further improved by providing the following features:<br />
# '''INDI Integration''': Filter and sort by object size for Deep Sky Objects that have a physical width and height, unlike point-like sources like stars. Limit objects to fall within a particular percentage of the sensor. For example, M31 galaxy is very large and spans almost 3 degrees in the night sky. It would not fit inside the camera's 1x1 degree field of view (as calculated from INDI). Similarly, an object spanning on 5'x5' arcmins is too small in the camera.<br />
# '''Image Integration''': The way the final list of objects are displayed should be modernized. Each object should have an image and also an Altitude-vs-Time plot next to it so that the user can quick identify what is the best time to observe this object. For large lists, this can be very CPU intensive and should be optimized accordingly.<br />
# '''Save/Load''': Ability to save and load the wizard search parameters for future use so that the user does not always have to start from scratch every time they need to search for objects.<br />
# '''Export''': Export the list of object to an external file or source in CSV and JSON formats.<br />
'''Expected results''': <br />
* Improved Observation Wizard Tool.<br />
* Proper integration with INDI & Ekos.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
<br />
==== Project: KStars Testing ====<br />
<br />
'''Brief explanation:''' KStars is built on a relatively large number of C++ classes, grouped in the following categories: sky objects and components, projection algorithms, graphics, timekeeping, widgets, Ekos automation, INDI client, FITS viewing, accessories and several library interfaces. Most of these constituting classes remain untested in terms of systematic and automatic verification. <br />
The objective of this project is to verify the code written in those classes at three levels: API, functionality and UI-based use case. In order to achieve this, the existing test code will have to extend its code coverage, report validation results and integrate seamlessly to the build recipe of the project.<br />
<br />
The difficulty of this project is the requirement to create tests on legacy code and consolidate a test plan that reflects how the software is working instead of how we expect it to work.<br />
<br />
'''Expected results:'''<br />
* Verify APIs: call each public class member using arbitrary test fixtures, control side effects by stubbing interfaces. This verifies code is executing in the data domain we expect, or fails for known reasons. As an example, the report will reveal how classes managing coordinates accept or reject numerical input.<br />
* Verify functionalities: ensure specific class interfaces return an expected result given a controlled set of input parameters. This verifies code is behaving as expected, or isolates known issues. As an example, the report will reveal which value of the Julian time classes managing timekeeping produce given different input objects embedding the same UTC time.<br />
* Verify use cases: ensure specific scenarios can be executed in the interface as presented in their documentation. This verifies procedures achieving useful results for the end-user remain stable, and controls how they evolve and improve during development.<br />
* Consolidate test reports and code coverage, and automate the execution of the test plan when building.<br />
Bonus: generate videos of use cases for end-users automatically.<br />
<br />
'''Level''': beginner to intermediate<br />
<br />
'''Knowledge prerequisites''': C++, Qt, software testing and verification fundamentals<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
===Akonadi ===<br />
<br />
The Akonadi framework is responsible for providing applications with a centralized database to store, index and retrieve the user's personal information. This includes the user's emails, contacts, calendars, events, journals, alarms, notes, etc. <br />
<br />
'''Communication:''' IRC (freenode) [irc://chat.freenode.net/akonadi #akonadi]<br />
<br />
=== GCompris ===<br />
<br />
==== Project: Adding new activities to GCompris ==== <br />
<br />
[https://gcompris.net/ GCompris] is a high quality educational software suite, including a large number of activities for children aged 2 to 10. We have recently launched our version 1.0 with multiple datasets feature. Moving forward we are looking to add more new activities to GCompris.<br />
<br />
'''Brief explanation''': Originally written in Gtk+ the development team started to rewrite it from scratch in Qt Quick and almost finished the port. Also, we have recently work on the multiple datasets feature.<br />
<br />
'''Expected results''':<br />
This year we aim to add some new activities to GCompris. The activities can be port of the GTK+ version or you can propose new activities too. For example, we lack activities in the science domain(chemistry, biology) which can be proposed.<br />
We have recently added multiple datasets to many activities so for all other activities having multiple datasets would be nice.<br />
<br />
You can have a look at our GCompris board to get some ideas about port of activities and multiple datasets too.<br />
<br />
https://phabricator.kde.org/project/view/142/<br />
<br />
https://phabricator.kde.org/T12428<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education.<br />
<br />
Be familiar with GCompris concept and content.<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough).<br />
<br />
Basic knowledge of QML, JavaScript would be a plus.<br />
<br />
Be able to build the Qt Quick version of GCompris.<br />
<br />
'''Application guide''':<br />
Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/GSOC_newcomers, http://gcompris.net/wiki/An_exercise_for_new_contributors and http://gcompris.net/wiki/Reviewing_an_activity<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Emmanuel Charruau (IRC: allon), Johnny Jazeix (IRC: JohnnyJ), Timothée Giet (IRC: Animtim), Deepak Kumar (IRC: deepak_)<br />
<br />
=== Falkon ===<br />
<br />
[https://www.falkon.org/ Falkon] is a KDE web browser using QtWebEngine rendering engine, previously known as QupZilla. It aims to be a lightweight web browser available through all major platforms. This project has been originally started only for educational purposes. But from its start, Falkon has grown into a feature-rich browser.<br />
<br />
[mailto:falkon@kde.org Contact the Falkon team]<br />
<br />
=== Cantor ===<br />
'''[https://edu.kde.org/cantor/ Cantor] provides a graphical frontend for different open source computer algebra systems and scientific programming languages. [mailto:kde-edu@kde.org Contact the KDE-Edu team].<br />
<br />
[https://mail.kde.org/mailman/listinfo/kde-edu Subscribe to KDE-Edu mail list]'''<br />
<br />
=== Kdenlive ===<br />
<br />
==== Project: Basic Subtitling Support in Kdenlive ====<br />
<br />
Get in touch with the team at #kdenlive or the developer group in [https://t.me/kdenlive_dev Telegram])<br />
<br />
=== KIO FUSE ===<br />
'''KIO FUSE is a bridge between [https://invent.kde.org/frameworks/kio KIO] and [https://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE]. You can find out more on feverfew's [https://feverfew.home.blog/ blog].'''<br />
<br />
* IRC (freenode): [irc://chat.freenode.net/kde-fm #kde-fm] ping feverfew or fvogt.<br />
* Matrix: [https://webchat.kde.org/#/room/#kde-fm:kde.org #kde-fm:kde.org] ping feverfew or fvogt.<br />
<br />
==== Project: xfstests Integration ====<br />
<br />
[https://kernel.googlesource.com/pub/scm/fs/ext2/xfstests-bld/+/HEAD/Documentation/what-is-xfstests.md xfstests] is a file system regression test suite. We would like to integrate this with our current test suite.<br />
<br />
Here are some things which will help to establish a good project plan:<br />
<br />
# A [https://patchwork.kernel.org/project/linux-fsdevel/patch/20200108192504.GA893@miu.piliscsaba.redhat.com/ patch] that seems to allow easier support of FUSE filesystems.<br />
# https://github.com/rfjakob/fuse-xfstests<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/14 !14]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to macOS ====<br />
<br />
Port KIO FUSE to macOS. Dolphin builds on macOS AFAIK so this project should be technically feasible.<br />
The solution is likely to involve [https://osxfuse.github.io/ osxfuse].<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/13 !13]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to Windows ====<br />
<br />
Port KIO FUSE to Windows. Currently a Dolphin port is in the works, so KIO (our main dependency) is already working.<br />
There are two potential solutions:<br />
<br />
# [https://dokan-dev.github.io/#fuse-api Dokan FUSE]<br />
# A method similar to what [https://github.com/billziss-gh/sshfs-win sshfs-win] has done ([https://github.com/billziss-gh/winfsp WinFsp] and [https://cygwin.com/ Cygwin]).<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/12 !12]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
=== Plasma Mobile ===<br />
<br />
=== NeoChat ===<br />
<br />
the two areas that could accept a student for GSoC are encryptions and voip support. Talk with use in #neochat:kde.org for more information about the scope of your project.<br />
<br />
'''Knowledge prerequisite:''' C++, QML (Cryptographie or GStreamer)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2021/Ideas&diff=91028GSoC/2021/Ideas2021-01-31T15:29:55Z<p>Cauliergilles: /* Project: Port to Qt6 API */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2020/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
** '''Ideas with no mentors listed and their contact info will be removed''' **<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
* [https://webchat.kde.org/#/room/#dk-gsoc20-facesengine:kde.org #dk-gsoc20-facesengine channel on Riot kde webchat]'''<br />
<br />
==== Project: Port to Qt6 API ====<br />
<br />
'''Brief Explanation''': current digiKam 7.x implementation if fully compatible with Qt5.13.x under macOS, Windows, and Linux, but we need to port implementations to new Qt6, where API has changed, become deprecated, or have been improved. This require non trivial changes in digiKam with plenty of regression tests to do. Identified changes to include in this project are:<br />
* Migrate libo2 dependency to the new QtNetworkAuth framework for WebService plugins.<br />
* Port internal DImg framework to use new QImage 16 bits colors depth format.<br />
* Fix deprecated QXmlPatterns API uses.<br />
* Port AppImage builder to Qt6 with suitable ICU support. <br />
* Fix all Qt 5 Core Compatibility C++ Classes Uses (https://doc-snapshots.qt.io/qt6-dev/qtcore5compat-module.html)<br />
<br />
'''Expected Results''': <br />
<br />
Port to new API, replace deprecated, and make digiKam ready for Qt6. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Oauth2, Cmake<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
===Kirogi===<br />
<br />
'''A Ground Control Station (GSC) application for drones with a modern mindset and codebase philosophy, the project is one of the newest one under KDE organization and we would like your help to make it the best open source GCS around!<br />
<br />
'''We are also open for new ideas, be free to send your own plan for Kirogi.<br />
<br />
'''For more information, take a look in our website: https://kirogi.org/<br />
<br />
Be in touch with:<br />
* IRC (freenode): [irc://chat.freenode.net/kde-kirogi #kde-kirogi]<br />
* Telegram: [https://t.me/kde_kirogi @kde_kirogi]<br />
* Matrix: [https://webchat.kde.org/#/room/#kirigami:kde.org #kde-kirogi:kde.org]<br />
<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Improve custom stamp annotation handling ====<br />
<br />
'''Brief explanation:''' Okular does display stamp annotations, but the support<br />
is somewhat incomplete. This particularly shows when trying to use stamp<br />
annotations with a custom image. For example, such annotations can be<br />
added in Okular, but they cannot be saved to the pdf file in a way<br />
that any other pdf viewer can read. Also, they will not appear on print-outs.<br />
<br />
The underlying reason for this is that Okular renders these stamps itself,<br />
rather than relying on the poppler library, which does all other pdf<br />
rendering. Goal of this project is therefore to teach poppler how to<br />
render stamp annotations, and then make Okular use that new functionality.<br />
More details can be found in the bug report [0].<br />
<br />
[0] https://bugs.kde.org/show_bug.cgi?id=383651<br />
<br />
'''Expected results:''' Poppler should render stamp annotations. Annotations<br />
should be printable from Okular. Custom stamps inserted via the Okular GUI<br />
should be visible in other pdf readers.<br />
<br />
'''Knowledge prerequisite:''' C++, and a bit about the pdf format.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
<br />
=== KMyMoney ===<br />
KMyMoney is a cross-platform personal finance manager build on KDE frameworks technologies for your desktop and notebook environment. It enables users to keep careful track of their personal finances by providing a broad array of financial features and tools. <br />
<br />
==== Project: Integration of the new functionalities from the Alkimia library ====<br />
<gallery><br />
Kmymoney-alkimia-alkonlinequotewidget.png|Extended online quote support in KMyMoney 4.8<br />
Kmymoney-online-quote-addon-installer.png|Dialog for adding/updating online quote sources<br />
</gallery><br />
<br />
'''Brief explanation:''' <br />
With Alkimia version 8.0 the online quote support of KMyMoney was taken over, equipped with debug functions and extended by an online update of the quote sources.<br />
<br />
The task is to add this support to version 5 of KMyMoney, either as a replacement for existing functionality in KMyMoney (as was done with version 4.8) or as an optional KMyMoney plugin. <br />
<br />
In the former case, the WebPriceQuote class would need to be replaced with the associated AlkOnlineQuotesWidget class from the Alkimia library (see the associated Git commit for the [https://invent.kde.org/office/kmymoney/-/commit/6da0badcc33e756aedb524d62f49f3818efcafb6 4.8 branch]).<br />
<br />
For the second variant, the WebPriceQuote class would have to be converted to a KMyMoney plugin to make it optional. Based on this, another plugin can be added that uses the corresponding classes from Alkimia and can be used alternatively (From [https://bugs.kde.org/show_bug.cgi?id=381517#c1|Bug 381517]).<br />
<br />
'''Expected results:''' KMyMoney 5 will have the extended support of online quotes<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KtoBlzCheck ===<br />
<br />
KtoBLZCheck is a library for checking account numbers and bank codes of banks from different countries like Germany, Holland and Switzerland. The basic data used by the library is also used by other financial management applications such as KMyMoney, AqBanking and GnuCash.<br />
<br />
==== Project: Extend the usage of bank data support in KMyMoney ====<br />
<br />
[[File:KMymoney - New Institution Dialog.png|thumb|Current "New Institution" dialog]]<br />
[[File:Kmymoney-account-institution-tab.png|thumb|Current "Institution" tab of account dialog]]<br />
<br />
'''Brief explanation:''' <br />
<br />
KMyMoney provides dialogs to create and edit institutions and accounts, the latter having a link to an institution. This project is about extending these dialogs with the databases and functionalities provided by ktoblzcheck to simplify the input.<br />
<br />
'''Expected results:''' <br />
<br />
1. When adding new institutions, it should be possible to search for a bank in the corresponding dialog and take over existing bank data such as city and BIC for simplified setup.<br />
<br />
2. After entering an account number in the "Institution" tab of the account processing dialog, the IBAN should be calculated automatically if an institution has been selected before.<br />
<br />
3. The extension or adaptation of the application documentation with the new functionality is part of this project.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KStars ===<br />
'''[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.'''<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support an ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can support addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Observation Wizard Improvements ====<br />
'''Brief explanation''': The Observation Wizard enables users to select and filter objects of interest to them . Currently, the selection is done by object type, location, and magnitude in the sky. Further, the user can filter objects based on altitude and time-range when they are available. This tool can be further improved by providing the following features:<br />
# '''INDI Integration''': Filter and sort by object size for Deep Sky Objects that have a physical width and height, unlike point-like sources like stars. Limit objects to fall within a particular percentage of the sensor. For example, M31 galaxy is very large and spans almost 3 degrees in the night sky. It would not fit inside the camera's 1x1 degree field of view (as calculated from INDI). Similarly, an object spanning on 5'x5' arcmins is too small in the camera.<br />
# '''Image Integration''': The way the final list of objects are displayed should be modernized. Each object should have an image and also an Altitude-vs-Time plot next to it so that the user can quick identify what is the best time to observe this object. For large lists, this can be very CPU intensive and should be optimized accordingly.<br />
# '''Save/Load''': Ability to save and load the wizard search parameters for future use so that the user does not always have to start from scratch every time they need to search for objects.<br />
# '''Export''': Export the list of object to an external file or source in CSV and JSON formats.<br />
'''Expected results''': <br />
* Improved Observation Wizard Tool.<br />
* Proper integration with INDI & Ekos.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
<br />
==== Project: KStars Testing ====<br />
<br />
'''Brief explanation:''' KStars is built on a relatively large number of C++ classes, grouped in the following categories: sky objects and components, projection algorithms, graphics, timekeeping, widgets, Ekos automation, INDI client, FITS viewing, accessories and several library interfaces. Most of these constituting classes remain untested in terms of systematic and automatic verification. <br />
The objective of this project is to verify the code written in those classes at three levels: API, functionality and UI-based use case. In order to achieve this, the existing test code will have to extend its code coverage, report validation results and integrate seamlessly to the build recipe of the project.<br />
<br />
The difficulty of this project is the requirement to create tests on legacy code and consolidate a test plan that reflects how the software is working instead of how we expect it to work.<br />
<br />
'''Expected results:'''<br />
* Verify APIs: call each public class member using arbitrary test fixtures, control side effects by stubbing interfaces. This verifies code is executing in the data domain we expect, or fails for known reasons. As an example, the report will reveal how classes managing coordinates accept or reject numerical input.<br />
* Verify functionalities: ensure specific class interfaces return an expected result given a controlled set of input parameters. This verifies code is behaving as expected, or isolates known issues. As an example, the report will reveal which value of the Julian time classes managing timekeeping produce given different input objects embedding the same UTC time.<br />
* Verify use cases: ensure specific scenarios can be executed in the interface as presented in their documentation. This verifies procedures achieving useful results for the end-user remain stable, and controls how they evolve and improve during development.<br />
* Consolidate test reports and code coverage, and automate the execution of the test plan when building.<br />
Bonus: generate videos of use cases for end-users automatically.<br />
<br />
'''Level''': beginner to intermediate<br />
<br />
'''Knowledge prerequisites''': C++, Qt, software testing and verification fundamentals<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
===Akonadi ===<br />
<br />
The Akonadi framework is responsible for providing applications with a centralized database to store, index and retrieve the user's personal information. This includes the user's emails, contacts, calendars, events, journals, alarms, notes, etc. <br />
<br />
'''Communication:''' IRC (freenode) [irc://chat.freenode.net/akonadi #akonadi]<br />
<br />
=== GCompris ===<br />
<br />
==== Project: Adding new activities to GCompris ==== <br />
<br />
[https://gcompris.net/ GCompris] is a high quality educational software suite, including a large number of activities for children aged 2 to 10. We have recently launched our version 1.0 with multiple datasets feature. Moving forward we are looking to add more new activities to GCompris.<br />
<br />
'''Brief explanation''': Originally written in Gtk+ the development team started to rewrite it from scratch in Qt Quick and almost finished the port. Also, we have recently work on the multiple datasets feature.<br />
<br />
'''Expected results''':<br />
This year we aim to add some new activities to GCompris. The activities can be port of the GTK+ version or you can propose new activities too. For example, we lack activities in the science domain(chemistry, biology) which can be proposed.<br />
We have recently added multiple datasets to many activities so for all other activities having multiple datasets would be nice.<br />
<br />
You can have a look at our GCompris board to get some ideas about port of activities and multiple datasets too.<br />
<br />
https://phabricator.kde.org/project/view/142/<br />
<br />
https://phabricator.kde.org/T12428<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education.<br />
<br />
Be familiar with GCompris concept and content.<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough).<br />
<br />
Basic knowledge of QML, JavaScript would be a plus.<br />
<br />
Be able to build the Qt Quick version of GCompris.<br />
<br />
'''Application guide''':<br />
Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/GSOC_newcomers, http://gcompris.net/wiki/An_exercise_for_new_contributors and http://gcompris.net/wiki/Reviewing_an_activity<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Emmanuel Charruau (IRC: allon), Johnny Jazeix (IRC: JohnnyJ), Timothée Giet (IRC: Animtim), Deepak Kumar (IRC: deepak_)<br />
<br />
=== Falkon ===<br />
<br />
[https://www.falkon.org/ Falkon] is a KDE web browser using QtWebEngine rendering engine, previously known as QupZilla. It aims to be a lightweight web browser available through all major platforms. This project has been originally started only for educational purposes. But from its start, Falkon has grown into a feature-rich browser.<br />
<br />
[mailto:falkon@kde.org Contact the Falkon team]<br />
<br />
=== Cantor ===<br />
'''[https://edu.kde.org/cantor/ Cantor] provides a graphical frontend for different open source computer algebra systems and scientific programming languages. [mailto:kde-edu@kde.org Contact the KDE-Edu team].<br />
<br />
[https://mail.kde.org/mailman/listinfo/kde-edu Subscribe to KDE-Edu mail list]'''<br />
<br />
=== Kdenlive ===<br />
<br />
==== Project: Basic Subtitling Support in Kdenlive ====<br />
<br />
Get in touch with the team at #kdenlive or the developer group in [https://t.me/kdenlive_dev Telegram])<br />
<br />
=== KIO FUSE ===<br />
'''KIO FUSE is a bridge between [https://invent.kde.org/frameworks/kio KIO] and [https://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE]. You can find out more on feverfew's [https://feverfew.home.blog/ blog].'''<br />
<br />
* IRC (freenode): [irc://chat.freenode.net/kde-fm #kde-fm] ping feverfew or fvogt.<br />
* Matrix: [https://webchat.kde.org/#/room/#kde-fm:kde.org #kde-fm:kde.org] ping feverfew or fvogt.<br />
<br />
==== Project: xfstests Integration ====<br />
<br />
[https://kernel.googlesource.com/pub/scm/fs/ext2/xfstests-bld/+/HEAD/Documentation/what-is-xfstests.md xfstests] is a file system regression test suite. We would like to integrate this with our current test suite.<br />
<br />
Here are some things which will help to establish a good project plan:<br />
<br />
# A [https://patchwork.kernel.org/project/linux-fsdevel/patch/20200108192504.GA893@miu.piliscsaba.redhat.com/ patch] that seems to allow easier support of FUSE filesystems.<br />
# https://github.com/rfjakob/fuse-xfstests<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/14 !14]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to macOS ====<br />
<br />
Port KIO FUSE to macOS. Dolphin builds on macOS AFAIK so this project should be technically feasible.<br />
The solution is likely to involve [https://osxfuse.github.io/ osxfuse].<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/13 !13]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to Windows ====<br />
<br />
Port KIO FUSE to Windows. Currently a Dolphin port is in the works, so KIO (our main dependency) is already working.<br />
There are two potential solutions:<br />
<br />
# [https://dokan-dev.github.io/#fuse-api Dokan FUSE]<br />
# A method similar to what [https://github.com/billziss-gh/sshfs-win sshfs-win] has done ([https://github.com/billziss-gh/winfsp WinFsp] and [https://cygwin.com/ Cygwin]).<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/12 !12]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
=== Plasma Mobile ===<br />
<br />
=== NeoChat ===<br />
<br />
the two areas that could accept a student for GSoC are encryptions and voip support. Talk with use in #neochat:kde.org for more information about the scope of your project.<br />
<br />
'''Knowledge prerequisite:''' C++, QML (Cryptographie or GStreamer)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2021/Ideas&diff=91027GSoC/2021/Ideas2021-01-31T03:45:00Z<p>Cauliergilles: /* Project: Port to Qt6 API */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2020/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
** '''Ideas with no mentors listed and their contact info will be removed''' **<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
* [https://webchat.kde.org/#/room/#dk-gsoc20-facesengine:kde.org #dk-gsoc20-facesengine channel on Riot kde webchat]'''<br />
<br />
==== Project: Port to Qt6 API ====<br />
<br />
'''Brief Explanation''': current digiKam 7.x implementation if fully compatible with Qt5.13.x under macOS, Windows, and Linux, but we need to port implementations to new Qt6, where API has changed, become deprecated, or have been improved. This require non trivial changes in digiKam with plenty of regression tests to do. Identified changes to included in this project are:<br />
* Migrate libo2 dependency to the new QtNetworkAuth framework for WebService plugins.<br />
* Port internal DImg framework to use new QImage 16 bits colors depth format.<br />
* Fix deprecated QXmlPatterns API uses.<br />
* Port AppImage builder to Qt6 with suitable ICU support. <br />
* Fix all Qt 5 Core Compatibility C++ Classes Uses (https://doc-snapshots.qt.io/qt6-dev/qtcore5compat-module.html)<br />
<br />
'''Expected Results''': <br />
<br />
Port to new API, replace deprecated, and make digiKam ready for Qt6. Write unit-tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Oauth2, Cmake<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
===Kirogi===<br />
<br />
'''A Ground Control Station (GSC) application for drones with a modern mindset and codebase philosophy, the project is one of the newest one under KDE organization and we would like your help to make it the best open source GCS around!<br />
<br />
'''We are also open for new ideas, be free to send your own plan for Kirogi.<br />
<br />
'''For more information, take a look in our website: https://kirogi.org/<br />
<br />
Be in touch with:<br />
* IRC (freenode): [irc://chat.freenode.net/kde-kirogi #kde-kirogi]<br />
* Telegram: [https://t.me/kde_kirogi @kde_kirogi]<br />
* Matrix: [https://webchat.kde.org/#/room/#kirigami:kde.org #kde-kirogi:kde.org]<br />
<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Improve custom stamp annotation handling ====<br />
<br />
'''Brief explanation:''' Okular does display stamp annotations, but the support<br />
is somewhat incomplete. This particularly shows when trying to use stamp<br />
annotations with a custom image. For example, such annotations can be<br />
added in Okular, but they cannot be saved to the pdf file in a way<br />
that any other pdf viewer can read. Also, they will not appear on print-outs.<br />
<br />
The underlying reason for this is that Okular renders these stamps itself,<br />
rather than relying on the poppler library, which does all other pdf<br />
rendering. Goal of this project is therefore to teach poppler how to<br />
render stamp annotations, and then make Okular use that new functionality.<br />
More details can be found in the bug report [0].<br />
<br />
[0] https://bugs.kde.org/show_bug.cgi?id=383651<br />
<br />
'''Expected results:''' Poppler should render stamp annotations. Annotations<br />
should be printable from Okular. Custom stamps inserted via the Okular GUI<br />
should be visible in other pdf readers.<br />
<br />
'''Knowledge prerequisite:''' C++, and a bit about the pdf format.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
<br />
=== KMyMoney ===<br />
KMyMoney is a cross-platform personal finance manager build on KDE frameworks technologies for your desktop and notebook environment. It enables users to keep careful track of their personal finances by providing a broad array of financial features and tools. <br />
<br />
==== Project: Integration of the new functionalities from the Alkimia library ====<br />
<gallery><br />
Kmymoney-alkimia-alkonlinequotewidget.png|Extended online quote support in KMyMoney 4.8<br />
Kmymoney-online-quote-addon-installer.png|Dialog for adding/updating online quote sources<br />
</gallery><br />
<br />
'''Brief explanation:''' <br />
With Alkimia version 8.0 the online quote support of KMyMoney was taken over, equipped with debug functions and extended by an online update of the quote sources.<br />
<br />
The task is to add this support to version 5 of KMyMoney, either as a replacement for existing functionality in KMyMoney (as was done with version 4.8) or as an optional KMyMoney plugin. <br />
<br />
In the former case, the WebPriceQuote class would need to be replaced with the associated AlkOnlineQuotesWidget class from the Alkimia library (see the associated Git commit for the [https://invent.kde.org/office/kmymoney/-/commit/6da0badcc33e756aedb524d62f49f3818efcafb6 4.8 branch]).<br />
<br />
For the second variant, the WebPriceQuote class would have to be converted to a KMyMoney plugin to make it optional. Based on this, another plugin can be added that uses the corresponding classes from Alkimia and can be used alternatively (From [https://bugs.kde.org/show_bug.cgi?id=381517#c1|Bug 381517]).<br />
<br />
'''Expected results:''' KMyMoney 5 will have the extended support of online quotes<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KtoBlzCheck ===<br />
<br />
KtoBLZCheck is a library for checking account numbers and bank codes of banks from different countries like Germany, Holland and Switzerland. The basic data used by the library is also used by other financial management applications such as KMyMoney, AqBanking and GnuCash.<br />
<br />
==== Project: Extend the usage of bank data support in KMyMoney ====<br />
<br />
[[File:KMymoney - New Institution Dialog.png|thumb|Current "New Institution" dialog]]<br />
[[File:Kmymoney-account-institution-tab.png|thumb|Current "Institution" tab of account dialog]]<br />
<br />
'''Brief explanation:''' <br />
<br />
KMyMoney provides dialogs to create and edit institutions and accounts, the latter having a link to an institution. This project is about extending these dialogs with the databases and functionalities provided by ktoblzcheck to simplify the input.<br />
<br />
'''Expected results:''' <br />
<br />
1. When adding new institutions, it should be possible to search for a bank in the corresponding dialog and take over existing bank data such as city and BIC for simplified setup.<br />
<br />
2. After entering an account number in the "Institution" tab of the account processing dialog, the IBAN should be calculated automatically if an institution has been selected before.<br />
<br />
3. The extension or adaptation of the application documentation with the new functionality is part of this project.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KStars ===<br />
'''[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.'''<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support an ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can support addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Observation Wizard Improvements ====<br />
'''Brief explanation''': The Observation Wizard enables users to select and filter objects of interest to them . Currently, the selection is done by object type, location, and magnitude in the sky. Further, the user can filter objects based on altitude and time-range when they are available. This tool can be further improved by providing the following features:<br />
# '''INDI Integration''': Filter and sort by object size for Deep Sky Objects that have a physical width and height, unlike point-like sources like stars. Limit objects to fall within a particular percentage of the sensor. For example, M31 galaxy is very large and spans almost 3 degrees in the night sky. It would not fit inside the camera's 1x1 degree field of view (as calculated from INDI). Similarly, an object spanning on 5'x5' arcmins is too small in the camera.<br />
# '''Image Integration''': The way the final list of objects are displayed should be modernized. Each object should have an image and also an Altitude-vs-Time plot next to it so that the user can quick identify what is the best time to observe this object. For large lists, this can be very CPU intensive and should be optimized accordingly.<br />
# '''Save/Load''': Ability to save and load the wizard search parameters for future use so that the user does not always have to start from scratch every time they need to search for objects.<br />
# '''Export''': Export the list of object to an external file or source in CSV and JSON formats.<br />
'''Expected results''': <br />
* Improved Observation Wizard Tool.<br />
* Proper integration with INDI & Ekos.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
<br />
==== Project: KStars Testing ====<br />
<br />
'''Brief explanation:''' KStars is built on a relatively large number of C++ classes, grouped in the following categories: sky objects and components, projection algorithms, graphics, timekeeping, widgets, Ekos automation, INDI client, FITS viewing, accessories and several library interfaces. Most of these constituting classes remain untested in terms of systematic and automatic verification. <br />
The objective of this project is to verify the code written in those classes at three levels: API, functionality and UI-based use case. In order to achieve this, the existing test code will have to extend its code coverage, report validation results and integrate seamlessly to the build recipe of the project.<br />
<br />
The difficulty of this project is the requirement to create tests on legacy code and consolidate a test plan that reflects how the software is working instead of how we expect it to work.<br />
<br />
'''Expected results:'''<br />
* Verify APIs: call each public class member using arbitrary test fixtures, control side effects by stubbing interfaces. This verifies code is executing in the data domain we expect, or fails for known reasons. As an example, the report will reveal how classes managing coordinates accept or reject numerical input.<br />
* Verify functionalities: ensure specific class interfaces return an expected result given a controlled set of input parameters. This verifies code is behaving as expected, or isolates known issues. As an example, the report will reveal which value of the Julian time classes managing timekeeping produce given different input objects embedding the same UTC time.<br />
* Verify use cases: ensure specific scenarios can be executed in the interface as presented in their documentation. This verifies procedures achieving useful results for the end-user remain stable, and controls how they evolve and improve during development.<br />
* Consolidate test reports and code coverage, and automate the execution of the test plan when building.<br />
Bonus: generate videos of use cases for end-users automatically.<br />
<br />
'''Level''': beginner to intermediate<br />
<br />
'''Knowledge prerequisites''': C++, Qt, software testing and verification fundamentals<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
===Akonadi ===<br />
<br />
The Akonadi framework is responsible for providing applications with a centralized database to store, index and retrieve the user's personal information. This includes the user's emails, contacts, calendars, events, journals, alarms, notes, etc. <br />
<br />
'''Communication:''' IRC (freenode) [irc://chat.freenode.net/akonadi #akonadi]<br />
<br />
=== GCompris ===<br />
<br />
==== Project: Adding new activities to GCompris ==== <br />
<br />
[https://gcompris.net/ GCompris] is a high quality educational software suite, including a large number of activities for children aged 2 to 10. We have recently launched our version 1.0 with multiple datasets feature. Moving forward we are looking to add more new activities to GCompris.<br />
<br />
'''Brief explanation''': Originally written in Gtk+ the development team started to rewrite it from scratch in Qt Quick and almost finished the port. Also, we have recently work on the multiple datasets feature.<br />
<br />
'''Expected results''':<br />
This year we aim to add some new activities to GCompris. The activities can be port of the GTK+ version or you can propose new activities too. For example, we lack activities in the science domain(chemistry, biology) which can be proposed.<br />
We have recently added multiple datasets to many activities so for all other activities having multiple datasets would be nice.<br />
<br />
You can have a look at our GCompris board to get some ideas about port of activities and multiple datasets too.<br />
<br />
https://phabricator.kde.org/project/view/142/<br />
<br />
https://phabricator.kde.org/T12428<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education.<br />
<br />
Be familiar with GCompris concept and content.<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough).<br />
<br />
Basic knowledge of QML, JavaScript would be a plus.<br />
<br />
Be able to build the Qt Quick version of GCompris.<br />
<br />
'''Application guide''':<br />
Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/GSOC_newcomers, http://gcompris.net/wiki/An_exercise_for_new_contributors and http://gcompris.net/wiki/Reviewing_an_activity<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Emmanuel Charruau (IRC: allon), Johnny Jazeix (IRC: JohnnyJ), Timothée Giet (IRC: Animtim), Deepak Kumar (IRC: deepak_)<br />
<br />
=== Falkon ===<br />
<br />
[https://www.falkon.org/ Falkon] is a KDE web browser using QtWebEngine rendering engine, previously known as QupZilla. It aims to be a lightweight web browser available through all major platforms. This project has been originally started only for educational purposes. But from its start, Falkon has grown into a feature-rich browser.<br />
<br />
[mailto:falkon@kde.org Contact the Falkon team]<br />
<br />
=== Cantor ===<br />
'''[https://edu.kde.org/cantor/ Cantor] provides a graphical frontend for different open source computer algebra systems and scientific programming languages. [mailto:kde-edu@kde.org Contact the KDE-Edu team].<br />
<br />
[https://mail.kde.org/mailman/listinfo/kde-edu Subscribe to KDE-Edu mail list]'''<br />
<br />
=== Kdenlive ===<br />
<br />
==== Project: Basic Subtitling Support in Kdenlive ====<br />
<br />
Get in touch with the team at #kdenlive or the developer group in [https://t.me/kdenlive_dev Telegram])<br />
<br />
=== KIO FUSE ===<br />
'''KIO FUSE is a bridge between [https://invent.kde.org/frameworks/kio KIO] and [https://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE]. You can find out more on feverfew's [https://feverfew.home.blog/ blog].'''<br />
<br />
* IRC (freenode): [irc://chat.freenode.net/kde-fm #kde-fm] ping feverfew or fvogt.<br />
* Matrix: [https://webchat.kde.org/#/room/#kde-fm:kde.org #kde-fm:kde.org] ping feverfew or fvogt.<br />
<br />
==== Project: xfstests Integration ====<br />
<br />
[https://kernel.googlesource.com/pub/scm/fs/ext2/xfstests-bld/+/HEAD/Documentation/what-is-xfstests.md xfstests] is a file system regression test suite. We would like to integrate this with our current test suite.<br />
<br />
Here are some things which will help to establish a good project plan:<br />
<br />
# A [https://patchwork.kernel.org/project/linux-fsdevel/patch/20200108192504.GA893@miu.piliscsaba.redhat.com/ patch] that seems to allow easier support of FUSE filesystems.<br />
# https://github.com/rfjakob/fuse-xfstests<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/14 !14]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to macOS ====<br />
<br />
Port KIO FUSE to macOS. Dolphin builds on macOS AFAIK so this project should be technically feasible.<br />
The solution is likely to involve [https://osxfuse.github.io/ osxfuse].<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/13 !13]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to Windows ====<br />
<br />
Port KIO FUSE to Windows. Currently a Dolphin port is in the works, so KIO (our main dependency) is already working.<br />
There are two potential solutions:<br />
<br />
# [https://dokan-dev.github.io/#fuse-api Dokan FUSE]<br />
# A method similar to what [https://github.com/billziss-gh/sshfs-win sshfs-win] has done ([https://github.com/billziss-gh/winfsp WinFsp] and [https://cygwin.com/ Cygwin]).<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/12 !12]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
=== Plasma Mobile ===<br />
<br />
=== NeoChat ===<br />
<br />
the two areas that could accept a student for GSoC are encryptions and voip support. Talk with use in #neochat:kde.org for more information about the scope of your project.<br />
<br />
'''Knowledge prerequisite:''' C++, QML (Cryptographie or GStreamer)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2021/Ideas&diff=91026GSoC/2021/Ideas2021-01-31T03:43:16Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2020/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
** '''Ideas with no mentors listed and their contact info will be removed''' **<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
* [https://webchat.kde.org/#/room/#dk-gsoc20-facesengine:kde.org #dk-gsoc20-facesengine channel on Riot kde webchat]'''<br />
<br />
==== Project: Port to Qt6 API ====<br />
<br />
'''Brief Explanation''': current digiKam 7.x implementation if fully compatible with Qt5.13.x under macOS, Windows, and Linux, but we need to port implementations to new Qt6, where API has changed, become deprecated, or have been improved. This require non trivial changes in digiKam with plenty of regression tests to do. Identified changes to included in this project are:<br />
* Migrate libo2 dependency to the new QtNetworkAuth framewwork for Webservice plugins.<br />
* Port internal DImg framework to use new QImage 16 bits colors depth format.<br />
* Fix deprecated QXmlPatterns API uses.<br />
* Port AppImage builder to Qt6 with suitable ICU support. <br />
* Fix all Qt 5 Core Compatibility C++ Classes Uses (https://doc-snapshots.qt.io/qt6-dev/qtcore5compat-module.html)<br />
<br />
'''Expected Results''': <br />
<br />
Port to new API, replace deprecated, and make digiKAm ready for Qt6. Write unit tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Oauth2<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
===Kirogi===<br />
<br />
'''A Ground Control Station (GSC) application for drones with a modern mindset and codebase philosophy, the project is one of the newest one under KDE organization and we would like your help to make it the best open source GCS around!<br />
<br />
'''We are also open for new ideas, be free to send your own plan for Kirogi.<br />
<br />
'''For more information, take a look in our website: https://kirogi.org/<br />
<br />
Be in touch with:<br />
* IRC (freenode): [irc://chat.freenode.net/kde-kirogi #kde-kirogi]<br />
* Telegram: [https://t.me/kde_kirogi @kde_kirogi]<br />
* Matrix: [https://webchat.kde.org/#/room/#kirigami:kde.org #kde-kirogi:kde.org]<br />
<br />
<br />
=== Okular ===<br />
'''Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.'''<br />
<br />
==== Project: Improve custom stamp annotation handling ====<br />
<br />
'''Brief explanation:''' Okular does display stamp annotations, but the support<br />
is somewhat incomplete. This particularly shows when trying to use stamp<br />
annotations with a custom image. For example, such annotations can be<br />
added in Okular, but they cannot be saved to the pdf file in a way<br />
that any other pdf viewer can read. Also, they will not appear on print-outs.<br />
<br />
The underlying reason for this is that Okular renders these stamps itself,<br />
rather than relying on the poppler library, which does all other pdf<br />
rendering. Goal of this project is therefore to teach poppler how to<br />
render stamp annotations, and then make Okular use that new functionality.<br />
More details can be found in the bug report [0].<br />
<br />
[0] https://bugs.kde.org/show_bug.cgi?id=383651<br />
<br />
'''Expected results:''' Poppler should render stamp annotations. Annotations<br />
should be printable from Okular. Custom stamps inserted via the Okular GUI<br />
should be visible in other pdf readers.<br />
<br />
'''Knowledge prerequisite:''' C++, and a bit about the pdf format.<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
<br />
=== KMyMoney ===<br />
KMyMoney is a cross-platform personal finance manager build on KDE frameworks technologies for your desktop and notebook environment. It enables users to keep careful track of their personal finances by providing a broad array of financial features and tools. <br />
<br />
==== Project: Integration of the new functionalities from the Alkimia library ====<br />
<gallery><br />
Kmymoney-alkimia-alkonlinequotewidget.png|Extended online quote support in KMyMoney 4.8<br />
Kmymoney-online-quote-addon-installer.png|Dialog for adding/updating online quote sources<br />
</gallery><br />
<br />
'''Brief explanation:''' <br />
With Alkimia version 8.0 the online quote support of KMyMoney was taken over, equipped with debug functions and extended by an online update of the quote sources.<br />
<br />
The task is to add this support to version 5 of KMyMoney, either as a replacement for existing functionality in KMyMoney (as was done with version 4.8) or as an optional KMyMoney plugin. <br />
<br />
In the former case, the WebPriceQuote class would need to be replaced with the associated AlkOnlineQuotesWidget class from the Alkimia library (see the associated Git commit for the [https://invent.kde.org/office/kmymoney/-/commit/6da0badcc33e756aedb524d62f49f3818efcafb6 4.8 branch]).<br />
<br />
For the second variant, the WebPriceQuote class would have to be converted to a KMyMoney plugin to make it optional. Based on this, another plugin can be added that uses the corresponding classes from Alkimia and can be used alternatively (From [https://bugs.kde.org/show_bug.cgi?id=381517#c1|Bug 381517]).<br />
<br />
'''Expected results:''' KMyMoney 5 will have the extended support of online quotes<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KtoBlzCheck ===<br />
<br />
KtoBLZCheck is a library for checking account numbers and bank codes of banks from different countries like Germany, Holland and Switzerland. The basic data used by the library is also used by other financial management applications such as KMyMoney, AqBanking and GnuCash.<br />
<br />
==== Project: Extend the usage of bank data support in KMyMoney ====<br />
<br />
[[File:KMymoney - New Institution Dialog.png|thumb|Current "New Institution" dialog]]<br />
[[File:Kmymoney-account-institution-tab.png|thumb|Current "Institution" tab of account dialog]]<br />
<br />
'''Brief explanation:''' <br />
<br />
KMyMoney provides dialogs to create and edit institutions and accounts, the latter having a link to an institution. This project is about extending these dialogs with the databases and functionalities provided by ktoblzcheck to simplify the input.<br />
<br />
'''Expected results:''' <br />
<br />
1. When adding new institutions, it should be possible to search for a bank in the corresponding dialog and take over existing bank data such as city and BIC for simplified setup.<br />
<br />
2. After entering an account number in the "Institution" tab of the account processing dialog, the IBAN should be calculated automatically if an institution has been selected before.<br />
<br />
3. The extension or adaptation of the application documentation with the new functionality is part of this project.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, KDE programming<br />
<br />
'''Level:''' intermediate level<br />
<br />
'''Mentor:''' contact [https://mail.kde.org/mailman/listinfo/kde-finance-apps kde-finance-apps] mailing list<br />
<br />
=== KStars ===<br />
'''[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.'''<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support an ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can support addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Observation Wizard Improvements ====<br />
'''Brief explanation''': The Observation Wizard enables users to select and filter objects of interest to them . Currently, the selection is done by object type, location, and magnitude in the sky. Further, the user can filter objects based on altitude and time-range when they are available. This tool can be further improved by providing the following features:<br />
# '''INDI Integration''': Filter and sort by object size for Deep Sky Objects that have a physical width and height, unlike point-like sources like stars. Limit objects to fall within a particular percentage of the sensor. For example, M31 galaxy is very large and spans almost 3 degrees in the night sky. It would not fit inside the camera's 1x1 degree field of view (as calculated from INDI). Similarly, an object spanning on 5'x5' arcmins is too small in the camera.<br />
# '''Image Integration''': The way the final list of objects are displayed should be modernized. Each object should have an image and also an Altitude-vs-Time plot next to it so that the user can quick identify what is the best time to observe this object. For large lists, this can be very CPU intensive and should be optimized accordingly.<br />
# '''Save/Load''': Ability to save and load the wizard search parameters for future use so that the user does not always have to start from scratch every time they need to search for objects.<br />
# '''Export''': Export the list of object to an external file or source in CSV and JSON formats.<br />
'''Expected results''': <br />
* Improved Observation Wizard Tool.<br />
* Proper integration with INDI & Ekos.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
<br />
==== Project: KStars Testing ====<br />
<br />
'''Brief explanation:''' KStars is built on a relatively large number of C++ classes, grouped in the following categories: sky objects and components, projection algorithms, graphics, timekeeping, widgets, Ekos automation, INDI client, FITS viewing, accessories and several library interfaces. Most of these constituting classes remain untested in terms of systematic and automatic verification. <br />
The objective of this project is to verify the code written in those classes at three levels: API, functionality and UI-based use case. In order to achieve this, the existing test code will have to extend its code coverage, report validation results and integrate seamlessly to the build recipe of the project.<br />
<br />
The difficulty of this project is the requirement to create tests on legacy code and consolidate a test plan that reflects how the software is working instead of how we expect it to work.<br />
<br />
'''Expected results:'''<br />
* Verify APIs: call each public class member using arbitrary test fixtures, control side effects by stubbing interfaces. This verifies code is executing in the data domain we expect, or fails for known reasons. As an example, the report will reveal how classes managing coordinates accept or reject numerical input.<br />
* Verify functionalities: ensure specific class interfaces return an expected result given a controlled set of input parameters. This verifies code is behaving as expected, or isolates known issues. As an example, the report will reveal which value of the Julian time classes managing timekeeping produce given different input objects embedding the same UTC time.<br />
* Verify use cases: ensure specific scenarios can be executed in the interface as presented in their documentation. This verifies procedures achieving useful results for the end-user remain stable, and controls how they evolve and improve during development.<br />
* Consolidate test reports and code coverage, and automate the execution of the test plan when building.<br />
Bonus: generate videos of use cases for end-users automatically.<br />
<br />
'''Level''': beginner to intermediate<br />
<br />
'''Knowledge prerequisites''': C++, Qt, software testing and verification fundamentals<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://webchat.kde.org/#/room/#kstars:kde.org KDE Web Chat]: Jasem)<br />
<br />
===Akonadi ===<br />
<br />
The Akonadi framework is responsible for providing applications with a centralized database to store, index and retrieve the user's personal information. This includes the user's emails, contacts, calendars, events, journals, alarms, notes, etc. <br />
<br />
'''Communication:''' IRC (freenode) [irc://chat.freenode.net/akonadi #akonadi]<br />
<br />
=== GCompris ===<br />
<br />
==== Project: Adding new activities to GCompris ==== <br />
<br />
[https://gcompris.net/ GCompris] is a high quality educational software suite, including a large number of activities for children aged 2 to 10. We have recently launched our version 1.0 with multiple datasets feature. Moving forward we are looking to add more new activities to GCompris.<br />
<br />
'''Brief explanation''': Originally written in Gtk+ the development team started to rewrite it from scratch in Qt Quick and almost finished the port. Also, we have recently work on the multiple datasets feature.<br />
<br />
'''Expected results''':<br />
This year we aim to add some new activities to GCompris. The activities can be port of the GTK+ version or you can propose new activities too. For example, we lack activities in the science domain(chemistry, biology) which can be proposed.<br />
We have recently added multiple datasets to many activities so for all other activities having multiple datasets would be nice.<br />
<br />
You can have a look at our GCompris board to get some ideas about port of activities and multiple datasets too.<br />
<br />
https://phabricator.kde.org/project/view/142/<br />
<br />
https://phabricator.kde.org/T12428<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education.<br />
<br />
Be familiar with GCompris concept and content.<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough).<br />
<br />
Basic knowledge of QML, JavaScript would be a plus.<br />
<br />
Be able to build the Qt Quick version of GCompris.<br />
<br />
'''Application guide''':<br />
Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/GSOC_newcomers, http://gcompris.net/wiki/An_exercise_for_new_contributors and http://gcompris.net/wiki/Reviewing_an_activity<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Emmanuel Charruau (IRC: allon), Johnny Jazeix (IRC: JohnnyJ), Timothée Giet (IRC: Animtim), Deepak Kumar (IRC: deepak_)<br />
<br />
=== Falkon ===<br />
<br />
[https://www.falkon.org/ Falkon] is a KDE web browser using QtWebEngine rendering engine, previously known as QupZilla. It aims to be a lightweight web browser available through all major platforms. This project has been originally started only for educational purposes. But from its start, Falkon has grown into a feature-rich browser.<br />
<br />
[mailto:falkon@kde.org Contact the Falkon team]<br />
<br />
=== Cantor ===<br />
'''[https://edu.kde.org/cantor/ Cantor] provides a graphical frontend for different open source computer algebra systems and scientific programming languages. [mailto:kde-edu@kde.org Contact the KDE-Edu team].<br />
<br />
[https://mail.kde.org/mailman/listinfo/kde-edu Subscribe to KDE-Edu mail list]'''<br />
<br />
=== Kdenlive ===<br />
<br />
==== Project: Basic Subtitling Support in Kdenlive ====<br />
<br />
Get in touch with the team at #kdenlive or the developer group in [https://t.me/kdenlive_dev Telegram])<br />
<br />
=== KIO FUSE ===<br />
'''KIO FUSE is a bridge between [https://invent.kde.org/frameworks/kio KIO] and [https://en.wikipedia.org/wiki/Filesystem_in_Userspace FUSE]. You can find out more on feverfew's [https://feverfew.home.blog/ blog].'''<br />
<br />
* IRC (freenode): [irc://chat.freenode.net/kde-fm #kde-fm] ping feverfew or fvogt.<br />
* Matrix: [https://webchat.kde.org/#/room/#kde-fm:kde.org #kde-fm:kde.org] ping feverfew or fvogt.<br />
<br />
==== Project: xfstests Integration ====<br />
<br />
[https://kernel.googlesource.com/pub/scm/fs/ext2/xfstests-bld/+/HEAD/Documentation/what-is-xfstests.md xfstests] is a file system regression test suite. We would like to integrate this with our current test suite.<br />
<br />
Here are some things which will help to establish a good project plan:<br />
<br />
# A [https://patchwork.kernel.org/project/linux-fsdevel/patch/20200108192504.GA893@miu.piliscsaba.redhat.com/ patch] that seems to allow easier support of FUSE filesystems.<br />
# https://github.com/rfjakob/fuse-xfstests<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/14 !14]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to macOS ====<br />
<br />
Port KIO FUSE to macOS. Dolphin builds on macOS AFAIK so this project should be technically feasible.<br />
The solution is likely to involve [https://osxfuse.github.io/ osxfuse].<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/13 !13]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
==== Project: Port to Windows ====<br />
<br />
Port KIO FUSE to Windows. Currently a Dolphin port is in the works, so KIO (our main dependency) is already working.<br />
There are two potential solutions:<br />
<br />
# [https://dokan-dev.github.io/#fuse-api Dokan FUSE]<br />
# A method similar to what [https://github.com/billziss-gh/sshfs-win sshfs-win] has done ([https://github.com/billziss-gh/winfsp WinFsp] and [https://cygwin.com/ Cygwin]).<br />
<br />
* Gitlab Issue: [https://invent.kde.org/system/kio-fuse/-/issues/12 !12]<br />
<br />
'''Knowledge prerequisite:''' C++<br />
<br />
=== Plasma Mobile ===<br />
<br />
=== NeoChat ===<br />
<br />
the two areas that could accept a student for GSoC are encryptions and voip support. Talk with use in #neochat:kde.org for more information about the scope of your project.<br />
<br />
'''Knowledge prerequisite:''' C++, QML (Cryptographie or GStreamer)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2020/Ideas&diff=87314GSoC/2020/Ideas2020-01-16T14:12:07Z<p>Cauliergilles: /* Project: DNN based Faces Recognition Improvements */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2018/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
** '''Ideas with no mentors listed and their contact info will be removed''' **<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
<br />
=== Krita ===<br />
'''[http://www.krita.org Krita]: digital painting for artists. It supports creating images from scratch from beginning to end. Krita is a complex application and developers need to have a fair amount of experience in order to be able to do something.'''<br />
<br />
'''Krita is a widely used digital painting application for professional artists. Last year, Krita gained the ability to create hand-drawn 2D animations, among other new features. For this year, projects that the Krita team would be interested in include the following ideas.'''<br />
<br />
'''Note that we're always open to ideas you bring in yourself: if you're passionate about something you've come up with yourself, that you want for Krita, that's a big plus for us.'''<br />
<br />
'''We also expect prospective students to submit at least three patches for bugs or wishes or small features. We want to know how good you are! See https://phabricator.kde.org/T7724 for some smaller tasks that you could work on that are not bugs.'''<br />
<br />
'''Talk to the team in IRC (freenode): #krita or via the mail list: https://mail.kde.org/mailman/listinfo/kimageshop'''<br />
<br />
==== Project: Integrating the MyPaint Brush Engine ====<br />
<br />
'''Brief Explanation''': The MyPaint brush engine has been separated from the MyPaint application and has been completely rewritten. Artists still like the mypaint brush engine a lot and it would be great to have the engine integrated in Krita as a new brush engine. Libmypaint can be found here: https://github.com/mypaint/libmypaint and the brush set here: https://github.com/mypaint/mypaint-brushes . The first goal is to integreate libmypaint in a Krita brushengine and make it load the brushes. The second goal is to expose the MyPaint brush options in Krita's brush editor and allow the modification and creation of MyPaint brushes in Krita. GIMP is an example of an application that has already integrated the MyPaint brush engine.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to effectively paint with MyPaint brushes in Krita.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: Supporting Vertical Text and SVG2 Text in the Text Shape ====<br />
<br />
'''Brief Explanation''': Krita's Text Shape was rewritten for Krita 4.0. It is now SVG based, instead of ODF. There are many things lacking, though. The original goal was to support SVG2. Currently the text shape only supports SVG1. There is no automatic wordwrap and vertical text (e.g. Chinese and Japanese) is not supported either. The goal of this project is to support wordwrap and vertical text layout. Other improvements to the text shape can be proposed as well. The level of this project is advanced.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to create and edit vertical text. Text shapes should be able to automatically wrap text to the bounding box.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita, SVG, Typography, Text Layout<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
==== Project: Add New Fill Layer Types ====<br />
<br />
'''Brief Explanation''': Fill layers are layers that automatically generate content. Krita currently has two types of fill layers: Color and Pattern. There used to be another type that generated content dynamically using the OpenShiva scripting language. However, that language hasn't been maintained for a long time. The goal of this project is to add a new dynamic fill layer types that could fill an area with different effects such as perlin and other types of noise, clouds, hatching, fractals.<br />
<br />
'''Expected Results''': <br />
<br />
Several new fill layer types that allow the user to add dynamically generated content as a layer in the layer stack <br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: Improve Krita for Touch Systems ====<br />
<br />
'''Brief Explanation''': Krita Gemini/Krita Sketch were version of Krita based on QtQuick 1 that provided a decent touch-only experience. Because of the technical limitations of QtQuick 2, the approach used in Gemini and Sketch is no longer viable. Since Krita 4, there is a QtQuick2 based touch docker that mimics the button bar found on some wacom devices. This is not configurable, and quite limited. This project involves working with Krita's UX designers and users to define a new approach to supporting touch devices, then implementing that support.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to work with Krita on a touch-only device such as a Surface Pro or Wacom Mobile Studio without wanting to chop their devices in two.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: SVG Mesh Gradients ====<br />
<br />
'''Brief Explanation''': Even though Mesh Gradients are not officially part of the truncated SVG2 specification anymore, having a second implementation next to Inkscape would help improving the standard. Plus, mesh gradients are very useful for artists. This project entails implementing a new gradient type. Whether this should be based on QGradient or not is up for discussion. The gradients should render exactly the same as in inkscape. See https://svgwg.org/svg-next/pservers.html#MeshGradientElement.<br />
<br />
'''Expected Results''': <br />
<br />
A new gradient type, UI to create and edit these gradients and apply them. Gradients should work both on vector objects as well as on paint layers.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita, SVG, Inkscape<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: Extending Animation Support for curves ====<br />
<br />
'''Brief Explanation''': In Krita, you can already add curves that could be applied to some properties of a layer, like opacity, animating those properties. We want the animation support extended by allowing users to place masks (filter masks, transformation masks, transparency masks) on the timeline and animate their properties using curves. Every property of a layer or mask placed on the timeline should be animatable.<br />
<br />
'''Expected results''':<br />
* Implementation of a gui for applying the curve settings to one or more properties of a mask or layer<br />
* Implementation of the actual rendering of the properties in the frames<br />
* Saving of these settings<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Jouni Pentikainen (tyyppi on IRC)<br />
<br />
<br />
==== Project: Adding support for high-channel depth brush tips ====<br />
<br />
'''Brief Explanation''': Currently, brush tips are 8 bits and based on QImage objects. With the advent of 16 bit/channel and 32 bit/channel support in QImage, we can start supporting higher bit depth brush tips. The 16 bit/channel GBR format from Cinepaint is not so relevant: we should support EXR and PNG for predefined brush tips and extend the autogenerated brush tips to support higher channel depths as well.<br />
<br />
'''Expected results''':<br />
* A gui to select the channel depth when creating brush tips<br />
* Loading of high-channel depth brush tips<br />
* Support for high-channel depth brush tips when painting<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Jouni Pentikainen (tyyppi on IRC)<br />
<br />
==== Project: Extend Arrange Docker to support alignment and distribution of Layers ====<br />
<br />
'''Brief Explanation''': Currently, the arrange docker only supports aligning and distributing vector objects of a singlet vector layer. This project aims to extend the arrange docker support for Layers too.<br />
<br />
'''Expected results''':<br />
* All the current operations available in Arrange docker could be done with the layers.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Level''' Easy<br />
<br />
'''Mentor''': TBD<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]'''<br />
<br />
==== Project: DNN based Faces Recognition Improvements ====<br />
<br />
'''Brief Explanation''': During GSoC 2019, we have proposed a project to implement an AI extension to the [https://cgit.kde.org/digikam.git/tree/core/libs/facesengine/recognition digiKam core face recognition]. The project has used the C++ OpenCV Deep Learning Module to detect and recognize faces with success. The project needs to be continued as recognition mechanisms which need faces [https://en.wikipedia.org/wiki/Cluster_analysis clustering analysis] to improve results while assigning automatically face-tags, especially when more than one face are detected in same photo.<br />
<br />
In parallel the Faces Detection and Faces Recognition codes from digiKam core needs to be hosted as plugins to be able to extend this features later (detect and recognize animals, monuments, plants, etc...)<br />
<br />
'''Expected Results''': <br />
<br />
Improve the Face Recognition workflow using clustering and open the recognition architecture with plugins for future extensions. Implement unit tests, and code documentations.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, OpenCV, Neural Network<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com), Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Faces Management workflow improvements ====<br />
<br />
'''Brief Explanation''': digiKam provide a Faces detection algorithm which work mostly in 80% of use cases. It detect faces position in image automatically and register these information in database. Event if a lots of tasks can be done in background by digiKam, the end-users needs to adjust, re-organize, rename, delete Face tags in database through the user interface.<br />
<br />
Since many year, a lots of improvements have been identified by digiKam users community to improve the face tags management workflow in graphical use interface. See [https://bugs.kde.org/buglist.cgi?product=digikam&component=Faces-Workflow&bug_status=UNCONFIRMED&bug_status=CONFIRMED&bug_status=ASSIGNED&bug_status=REOPENED this list of bugzilla entries] for details<br />
<br />
Note: Face Recognition is another part of Faces management, but this project is concerned by algorithms used while recognition.<br />
<br />
'''Expected Results''': <br />
<br />
Provide a better Face Tags management workflow in user interface, with unit test, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, User interface, digiKam<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Factoring all Export Tools with new Export API and port to QtNetworkAuth ====<br />
<br />
'''Brief Explanation''': With GoSC 2018, we proposed a project to implement a huge factorization and improvements with all [https://cgit.kde.org/digikam.git/tree/core/dplugins/ digiKam export to web service plugins]. Our student fixed plenty of code using OAuth version 2 authentification through [https://github.com/pipacs/o2 libo2 library], has simplified classes, and started to write a new API to factorize all these tools, including a common Wizard dialog. Even if the export tools implementation are now better, they do not use the new API and always run as a stand alone session in digiKam core. Due to this fact, the Web Service tools are not yet usable in digiKam Batch Queue Manager as single step runnable at end of a queue processing. So the section of code about factored export tools API is currently disabled in digiKam core. This year, the project will be to fix that and to migrate libo2 dependency to the new QtNetworkAuth framewwork.<br />
<br />
'''Expected Results''': <br />
<br />
Start to use every the new export tools API, use the new Wizard dialog, factoring codes everywhere, port to QtNetworkAuth, and introduce all export tools to BQM. Write unit tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Oauth2<br />
<br />
'''Mentors''': Mohamed Anwer (mohammed.ahmed.anwer@gmail.com), Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2020/Ideas&diff=87313GSoC/2020/Ideas2020-01-16T14:09:44Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2018/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
** '''Ideas with no mentors listed and their contact info will be removed''' **<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
<br />
=== Krita ===<br />
'''[http://www.krita.org Krita]: digital painting for artists. It supports creating images from scratch from beginning to end. Krita is a complex application and developers need to have a fair amount of experience in order to be able to do something.'''<br />
<br />
'''Krita is a widely used digital painting application for professional artists. Last year, Krita gained the ability to create hand-drawn 2D animations, among other new features. For this year, projects that the Krita team would be interested in include the following ideas.'''<br />
<br />
'''Note that we're always open to ideas you bring in yourself: if you're passionate about something you've come up with yourself, that you want for Krita, that's a big plus for us.'''<br />
<br />
'''We also expect prospective students to submit at least three patches for bugs or wishes or small features. We want to know how good you are! See https://phabricator.kde.org/T7724 for some smaller tasks that you could work on that are not bugs.'''<br />
<br />
'''Talk to the team in IRC (freenode): #krita or via the mail list: https://mail.kde.org/mailman/listinfo/kimageshop'''<br />
<br />
==== Project: Integrating the MyPaint Brush Engine ====<br />
<br />
'''Brief Explanation''': The MyPaint brush engine has been separated from the MyPaint application and has been completely rewritten. Artists still like the mypaint brush engine a lot and it would be great to have the engine integrated in Krita as a new brush engine. Libmypaint can be found here: https://github.com/mypaint/libmypaint and the brush set here: https://github.com/mypaint/mypaint-brushes . The first goal is to integreate libmypaint in a Krita brushengine and make it load the brushes. The second goal is to expose the MyPaint brush options in Krita's brush editor and allow the modification and creation of MyPaint brushes in Krita. GIMP is an example of an application that has already integrated the MyPaint brush engine.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to effectively paint with MyPaint brushes in Krita.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: Supporting Vertical Text and SVG2 Text in the Text Shape ====<br />
<br />
'''Brief Explanation''': Krita's Text Shape was rewritten for Krita 4.0. It is now SVG based, instead of ODF. There are many things lacking, though. The original goal was to support SVG2. Currently the text shape only supports SVG1. There is no automatic wordwrap and vertical text (e.g. Chinese and Japanese) is not supported either. The goal of this project is to support wordwrap and vertical text layout. Other improvements to the text shape can be proposed as well. The level of this project is advanced.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to create and edit vertical text. Text shapes should be able to automatically wrap text to the bounding box.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita, SVG, Typography, Text Layout<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
==== Project: Add New Fill Layer Types ====<br />
<br />
'''Brief Explanation''': Fill layers are layers that automatically generate content. Krita currently has two types of fill layers: Color and Pattern. There used to be another type that generated content dynamically using the OpenShiva scripting language. However, that language hasn't been maintained for a long time. The goal of this project is to add a new dynamic fill layer types that could fill an area with different effects such as perlin and other types of noise, clouds, hatching, fractals.<br />
<br />
'''Expected Results''': <br />
<br />
Several new fill layer types that allow the user to add dynamically generated content as a layer in the layer stack <br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: Improve Krita for Touch Systems ====<br />
<br />
'''Brief Explanation''': Krita Gemini/Krita Sketch were version of Krita based on QtQuick 1 that provided a decent touch-only experience. Because of the technical limitations of QtQuick 2, the approach used in Gemini and Sketch is no longer viable. Since Krita 4, there is a QtQuick2 based touch docker that mimics the button bar found on some wacom devices. This is not configurable, and quite limited. This project involves working with Krita's UX designers and users to define a new approach to supporting touch devices, then implementing that support.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to work with Krita on a touch-only device such as a Surface Pro or Wacom Mobile Studio without wanting to chop their devices in two.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: SVG Mesh Gradients ====<br />
<br />
'''Brief Explanation''': Even though Mesh Gradients are not officially part of the truncated SVG2 specification anymore, having a second implementation next to Inkscape would help improving the standard. Plus, mesh gradients are very useful for artists. This project entails implementing a new gradient type. Whether this should be based on QGradient or not is up for discussion. The gradients should render exactly the same as in inkscape. See https://svgwg.org/svg-next/pservers.html#MeshGradientElement.<br />
<br />
'''Expected Results''': <br />
<br />
A new gradient type, UI to create and edit these gradients and apply them. Gradients should work both on vector objects as well as on paint layers.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita, SVG, Inkscape<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: Extending Animation Support for curves ====<br />
<br />
'''Brief Explanation''': In Krita, you can already add curves that could be applied to some properties of a layer, like opacity, animating those properties. We want the animation support extended by allowing users to place masks (filter masks, transformation masks, transparency masks) on the timeline and animate their properties using curves. Every property of a layer or mask placed on the timeline should be animatable.<br />
<br />
'''Expected results''':<br />
* Implementation of a gui for applying the curve settings to one or more properties of a mask or layer<br />
* Implementation of the actual rendering of the properties in the frames<br />
* Saving of these settings<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Jouni Pentikainen (tyyppi on IRC)<br />
<br />
<br />
==== Project: Adding support for high-channel depth brush tips ====<br />
<br />
'''Brief Explanation''': Currently, brush tips are 8 bits and based on QImage objects. With the advent of 16 bit/channel and 32 bit/channel support in QImage, we can start supporting higher bit depth brush tips. The 16 bit/channel GBR format from Cinepaint is not so relevant: we should support EXR and PNG for predefined brush tips and extend the autogenerated brush tips to support higher channel depths as well.<br />
<br />
'''Expected results''':<br />
* A gui to select the channel depth when creating brush tips<br />
* Loading of high-channel depth brush tips<br />
* Support for high-channel depth brush tips when painting<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Jouni Pentikainen (tyyppi on IRC)<br />
<br />
==== Project: Extend Arrange Docker to support alignment and distribution of Layers ====<br />
<br />
'''Brief Explanation''': Currently, the arrange docker only supports aligning and distributing vector objects of a singlet vector layer. This project aims to extend the arrange docker support for Layers too.<br />
<br />
'''Expected results''':<br />
* All the current operations available in Arrange docker could be done with the layers.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Level''' Easy<br />
<br />
'''Mentor''': TBD<br />
<br />
===digiKam===<br />
<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]'''<br />
<br />
==== Project: DNN based Faces Recognition Improvements ====<br />
<br />
'''Brief Explanation''': During GSoC 2019, we have proposed a project to implement an AI extension to the [https://cgit.kde.org/digikam.git/tree/core/libs/facesengine/recognition digiKam core face recognition]. The project has used the C++ OpenCV Deep Learning Module to detect and recognize faces with success. The project need to be continued as recognition mechanism need faces [https://en.wikipedia.org/wiki/Cluster_analysis clustering analysis] to improve results while assigning automatically face-tags, especially when more than one face is detected on same photo.<br />
<br />
In parallel the Faces Detection and Faces Recognition codes from digiKam core needs to be hosted as plugins to be able to extend this features later (to detect and recognize animals, monuments, plants, etc...)<br />
<br />
'''Expected Results''': <br />
<br />
Improve the Face Recognition workflow using clustering and open the recognition architecture with plugins for future extensions. Implement unit tests, and code documentations.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, OpenCV, Neural Network<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com), Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Faces Management workflow improvements ====<br />
<br />
'''Brief Explanation''': digiKam provide a Faces detection algorithm which work mostly in 80% of use cases. It detect faces position in image automatically and register these information in database. Event if a lots of tasks can be done in background by digiKam, the end-users needs to adjust, re-organize, rename, delete Face tags in database through the user interface.<br />
<br />
Since many year, a lots of improvements have been identified by digiKam users community to improve the face tags management workflow in graphical use interface. See [https://bugs.kde.org/buglist.cgi?product=digikam&component=Faces-Workflow&bug_status=UNCONFIRMED&bug_status=CONFIRMED&bug_status=ASSIGNED&bug_status=REOPENED this list of bugzilla entries] for details<br />
<br />
Note: Face Recognition is another part of Faces management, but this project is concerned by algorithms used while recognition.<br />
<br />
'''Expected Results''': <br />
<br />
Provide a better Face Tags management workflow in user interface, with unit test, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, User interface, digiKam<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Factoring all Export Tools with new Export API and port to QtNetworkAuth ====<br />
<br />
'''Brief Explanation''': With GoSC 2018, we proposed a project to implement a huge factorization and improvements with all [https://cgit.kde.org/digikam.git/tree/core/dplugins/ digiKam export to web service plugins]. Our student fixed plenty of code using OAuth version 2 authentification through [https://github.com/pipacs/o2 libo2 library], has simplified classes, and started to write a new API to factorize all these tools, including a common Wizard dialog. Even if the export tools implementation are now better, they do not use the new API and always run as a stand alone session in digiKam core. Due to this fact, the Web Service tools are not yet usable in digiKam Batch Queue Manager as single step runnable at end of a queue processing. So the section of code about factored export tools API is currently disabled in digiKam core. This year, the project will be to fix that and to migrate libo2 dependency to the new QtNetworkAuth framewwork.<br />
<br />
'''Expected Results''': <br />
<br />
Start to use every the new export tools API, use the new Wizard dialog, factoring codes everywhere, port to QtNetworkAuth, and introduce all export tools to BQM. Write unit tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Oauth2<br />
<br />
'''Mentors''': Mohamed Anwer (mohammed.ahmed.anwer@gmail.com), Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2020/Ideas&diff=87312GSoC/2020/Ideas2020-01-16T14:00:27Z<p>Cauliergilles: /* Ideas */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2018/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you are urged to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors rarely works.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
** '''Ideas with no mentors listed and their contact info will be removed''' **<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
<br />
=== Krita ===<br />
'''[http://www.krita.org Krita]: digital painting for artists. It supports creating images from scratch from beginning to end. Krita is a complex application and developers need to have a fair amount of experience in order to be able to do something.'''<br />
<br />
'''Krita is a widely used digital painting application for professional artists. Last year, Krita gained the ability to create hand-drawn 2D animations, among other new features. For this year, projects that the Krita team would be interested in include the following ideas.'''<br />
<br />
'''Note that we're always open to ideas you bring in yourself: if you're passionate about something you've come up with yourself, that you want for Krita, that's a big plus for us.'''<br />
<br />
'''We also expect prospective students to submit at least three patches for bugs or wishes or small features. We want to know how good you are! See https://phabricator.kde.org/T7724 for some smaller tasks that you could work on that are not bugs.'''<br />
<br />
'''Talk to the team in IRC (freenode): #krita or via the mail list: https://mail.kde.org/mailman/listinfo/kimageshop'''<br />
<br />
==== Project: Integrating the MyPaint Brush Engine ====<br />
<br />
'''Brief Explanation''': The MyPaint brush engine has been separated from the MyPaint application and has been completely rewritten. Artists still like the mypaint brush engine a lot and it would be great to have the engine integrated in Krita as a new brush engine. Libmypaint can be found here: https://github.com/mypaint/libmypaint and the brush set here: https://github.com/mypaint/mypaint-brushes . The first goal is to integreate libmypaint in a Krita brushengine and make it load the brushes. The second goal is to expose the MyPaint brush options in Krita's brush editor and allow the modification and creation of MyPaint brushes in Krita. GIMP is an example of an application that has already integrated the MyPaint brush engine.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to effectively paint with MyPaint brushes in Krita.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: Supporting Vertical Text and SVG2 Text in the Text Shape ====<br />
<br />
'''Brief Explanation''': Krita's Text Shape was rewritten for Krita 4.0. It is now SVG based, instead of ODF. There are many things lacking, though. The original goal was to support SVG2. Currently the text shape only supports SVG1. There is no automatic wordwrap and vertical text (e.g. Chinese and Japanese) is not supported either. The goal of this project is to support wordwrap and vertical text layout. Other improvements to the text shape can be proposed as well. The level of this project is advanced.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to create and edit vertical text. Text shapes should be able to automatically wrap text to the bounding box.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita, SVG, Typography, Text Layout<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
==== Project: Add New Fill Layer Types ====<br />
<br />
'''Brief Explanation''': Fill layers are layers that automatically generate content. Krita currently has two types of fill layers: Color and Pattern. There used to be another type that generated content dynamically using the OpenShiva scripting language. However, that language hasn't been maintained for a long time. The goal of this project is to add a new dynamic fill layer types that could fill an area with different effects such as perlin and other types of noise, clouds, hatching, fractals.<br />
<br />
'''Expected Results''': <br />
<br />
Several new fill layer types that allow the user to add dynamically generated content as a layer in the layer stack <br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: Improve Krita for Touch Systems ====<br />
<br />
'''Brief Explanation''': Krita Gemini/Krita Sketch were version of Krita based on QtQuick 1 that provided a decent touch-only experience. Because of the technical limitations of QtQuick 2, the approach used in Gemini and Sketch is no longer viable. Since Krita 4, there is a QtQuick2 based touch docker that mimics the button bar found on some wacom devices. This is not configurable, and quite limited. This project involves working with Krita's UX designers and users to define a new approach to supporting touch devices, then implementing that support.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to work with Krita on a touch-only device such as a Surface Pro or Wacom Mobile Studio without wanting to chop their devices in two.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: SVG Mesh Gradients ====<br />
<br />
'''Brief Explanation''': Even though Mesh Gradients are not officially part of the truncated SVG2 specification anymore, having a second implementation next to Inkscape would help improving the standard. Plus, mesh gradients are very useful for artists. This project entails implementing a new gradient type. Whether this should be based on QGradient or not is up for discussion. The gradients should render exactly the same as in inkscape. See https://svgwg.org/svg-next/pservers.html#MeshGradientElement.<br />
<br />
'''Expected Results''': <br />
<br />
A new gradient type, UI to create and edit these gradients and apply them. Gradients should work both on vector objects as well as on paint layers.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita, SVG, Inkscape<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: Extending Animation Support for curves ====<br />
<br />
'''Brief Explanation''': In Krita, you can already add curves that could be applied to some properties of a layer, like opacity, animating those properties. We want the animation support extended by allowing users to place masks (filter masks, transformation masks, transparency masks) on the timeline and animate their properties using curves. Every property of a layer or mask placed on the timeline should be animatable.<br />
<br />
'''Expected results''':<br />
* Implementation of a gui for applying the curve settings to one or more properties of a mask or layer<br />
* Implementation of the actual rendering of the properties in the frames<br />
* Saving of these settings<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Jouni Pentikainen (tyyppi on IRC)<br />
<br />
<br />
==== Project: Adding support for high-channel depth brush tips ====<br />
<br />
'''Brief Explanation''': Currently, brush tips are 8 bits and based on QImage objects. With the advent of 16 bit/channel and 32 bit/channel support in QImage, we can start supporting higher bit depth brush tips. The 16 bit/channel GBR format from Cinepaint is not so relevant: we should support EXR and PNG for predefined brush tips and extend the autogenerated brush tips to support higher channel depths as well.<br />
<br />
'''Expected results''':<br />
* A gui to select the channel depth when creating brush tips<br />
* Loading of high-channel depth brush tips<br />
* Support for high-channel depth brush tips when painting<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Jouni Pentikainen (tyyppi on IRC)<br />
<br />
==== Project: Extend Arrange Docker to support alignment and distribution of Layers ====<br />
<br />
'''Brief Explanation''': Currently, the arrange docker only supports aligning and distributing vector objects of a singlet vector layer. This project aims to extend the arrange docker support for Layers too.<br />
<br />
'''Expected results''':<br />
* All the current operations available in Arrange docker could be done with the layers.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Level''' Easy<br />
<br />
'''Mentor''': TBD<br />
<br />
===digiKam===<br />
'''digiKam is an advanced open-source digital photo management application that runs on Linux, Windows, and MacOS. The application provides a comprehensive set of tools for importing, managing, editing, and sharing photos and raw files.<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]'''<br />
<br />
==== Project: DNN based Faces Recognition Improvements ====<br />
<br />
'''Brief Explanation''': With GSoC 2019, we have proposed a project to implement an AI extension to the [https://cgit.kde.org/digikam.git/tree/core/libs/facesengine/recognition digiKam core face recognition]. The project has used the C++ OpenCv Deep Learning Module to detect and recognize faces with success. The project need to be continued as recognition mechanism need faces clustering management to improve results while automatic face tags assignments.<br />
<br />
In parallel the Faces Detection and Faces Recognition and codes from digiKam core need to be hosted as plugins to be able to extend this features later (to detect and recognize animals, monuments, plants, etc...)<br />
<br />
'''Expected Results''': <br />
<br />
Improve the Face Recognition workflow using clustering and open the recognition architecture with plugins for future extensions. Implement unit tests, and code documentations.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, OpenCV, Neural Network<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com), Thanh Trung Dinh (dinhthanhtrung1996@gmail.com), and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Faces Management workflow improvements ====<br />
<br />
'''Brief Explanation''': digiKam provide a Faces detection algorithm which work mostly in 80% of use cases. It detect faces position in image automatically and register these information in database. Event if a lots of tasks can be done in background by digiKam, the end-users needs to adjust, re-organize, rename, delete Face tags in database through the user interface.<br />
<br />
Since many year, a lots of improvements have been identified by digiKam users community to improve the face tags management workflow in graphical use interface. See [https://bugs.kde.org/buglist.cgi?product=digikam&component=Faces-Workflow&bug_status=UNCONFIRMED&bug_status=CONFIRMED&bug_status=ASSIGNED&bug_status=REOPENED this list of bugzilla entries] for details<br />
<br />
Note: Face Recognition is another part of Faces management, but this project is concerned by algorithms used while recognition.<br />
<br />
'''Expected Results''': <br />
<br />
Provide a better Face Tags management workflow in user interface, with unit test, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, User interface, digiKam<br />
<br />
'''Mentors''': Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)<br />
<br />
==== Project: Factoring all Export Tools with new Export API and port to QtNetworkAuth ====<br />
<br />
'''Brief Explanation''': With GoSC 2018, we proposed a project to implement a huge factorization and improvements with all [https://cgit.kde.org/digikam.git/tree/core/dplugins/ digiKam export to web service plugins]. Our student fixed plenty of code using OAuth version 2 authentification through [https://github.com/pipacs/o2 libo2 library], has simplified classes, and started to write a new API to factorize all these tools, including a common Wizard dialog. Even if the export tools implementation are now better, they do not use the new API and always run as a stand alone session in digiKam core. Due to this fact, the Web Service tools are not yet usable in digiKam Batch Queue Manager as single step runnable at end of a queue processing. So the section of code about factored export tools API is currently disabled in digiKam core. This year, the project will be to fix that and to migrate libo2 dependency to the new QtNetworkAuth framewwork.<br />
<br />
'''Expected Results''': <br />
<br />
Start to use every the new export tools API, use the new Wizard dialog, factoring codes everywhere, port to QtNetworkAuth, and introduce all export tools to BQM. Write unit tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Oauth2<br />
<br />
'''Mentors''': Mohamed Anwer (mohammed.ahmed.anwer@gmail.com), Maik Qualmann (metzpinguin@gmail.com) and Gilles Caulier (caulier.gilles@gmail.com)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2019/Ideas&diff=82729GSoC/2019/Ideas2019-02-03T17:55:10Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2018/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
** '''Ideas with no mentors listed and their contact info will be removed''' **<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
=== Cantor ===<br />
[https://edu.kde.org/cantor/ Cantor] provides a graphical frontend for different open source computer algebra systems and scientific programming languages. [mailto:kde-edu@kde.org Contact the KDE-Edu team].<br />
<br />
[mailto:kde-edu@mail.kde.org Contact KDE-Edu]<br />
<br />
==== Project: Integrated documentation ====<br />
'''Brief explanation''': at the moment the external documentation like for example for Maxima http://maxima.sourceforge.net/docs/manual/en/maxima.html, and similar for Octave, python, etc., is opened in the external browser window. Ideally, we'd show this inside of the application in the help/documentation panel and enable a quick access to the documentation together with some more advanced search capabilities. Integrated search and also the context sensitive help (user marks a keyword in the worksheet, hits e.g. the F1 button and the documentation for the selected keyword is shown) should be possible. Qt Help Framework (http://doc.qt.io/qt-5/qthelp-framework.html) should be utilized for this. For indexing and searching in a unified manner the documentation together with the search index should be available locally. Qt help's qch file should be available for download on store.kde.org. Users of different systems (Maxima, Octave, R, etc.) would download the documentation they need. Ideally, we could also try to get a similar appearance by css-styling the html files for different systems prior to creating those qch files.<br />
<br />
The project consists of the following three major parts:<br />
* implementation in c++ (documentation panel, searching, short cuts for faster navigation, etc.)<br />
* creation of Qt help files for major computer algebra systems and programming languages supported by Cantor<br />
* definition of sections on store.kde.org<br />
<br />
'''Expected results''': integrated documentation in Cantor for the supported CAS and programming languages<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, basic knowledge about html<br />
<br />
'''Mentor''': Alexander Semke<br />
<br />
===digiKam===<br />
digiKam is an advanced digital photo management application for Linux, Windows, and MacOS.<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://www.linkedin.com/groups/12186015/ LinkedIn Group]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
<br />
==== Project: AI Face Recognition with OpenCV DNN module ====<br />
<br />
'''Brief Explanation''': With GoSC 2016, we proposed a project to implement an AI extension to the [https://cgit.kde.org/digikam.git/tree/core/libs/facesengine/recognition digiKam core face recognition]. The project used the Dlib C++ API, but we were not satisfied by the results, as the algorithm gave poor performance. This choice also introduced a huge backport of low level codes which we don't want to maintain. So, even though the project proposed a somewhat suitable solution to provide an AI face recognition processor based on deep-learning, this one was not really powerful and functional enough. For now, this section of code about Dlib DNN extension is disabled in digiKam core.<br />
<br />
As digiKam core already depends on OpenCV library to perform complex image processing, and as OpenCV >= 3.3 release provide a new [https://docs.opencv.org/3.4.3/d2/d58/tutorial_table_of_content_dnn.html OpenCV DNN (Deep Neural Network) module], the goal now is to port the current digiKam core face recognition DNN extension to new OpenCV API and write all unit tests to validate the algorithm usability, efficiency, and performance, while learning and recognizing faces automatically.<br />
<br />
'''Expected Results''': <br />
<br />
Provide a suitable Face recognition based on DNN OpenCV API, with unit test, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, OpenCV, digiKam<br />
<br />
'''Mentors''': Maik Qualmann and Gilles Caulier<br />
<br />
==== Project: Faces Management workflow improvements ====<br />
<br />
'''Brief Explanation''': digiKam provide a Faces detection algorithm which work mostly in 80% of use cases. It detect faces position in image automatically and register these information in database. Event if a lots of tasks can be done in background by digiKam, the end-users needs to adjust, re-organize, rename, delete Face tags in database through the user interface.<br />
<br />
Since many year, a lots of improvements have been identified by digiKam users community to improve the face tags management workflow in graphical use interface. See [https://bugs.kde.org/buglist.cgi?product=digikam&component=Faces-Workflow&bug_status=UNCONFIRMED&bug_status=CONFIRMED&bug_status=ASSIGNED&bug_status=REOPENED this list of bugzilla entries] for details<br />
<br />
Note: Face Recognition is another part of Faces management, but this project is concerned by algorithms used while recognition.<br />
<br />
'''Expected Results''': <br />
<br />
Provide a better Face Tags management workflow in user interface, with unit test, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, User interface, digiKam<br />
<br />
'''Mentors''': Gilles Caulier<br />
<br />
==== Project: Zoomable and Resizable Brush for Healing Clone Tool ====<br />
<br />
'''Brief Explanation''': With GoSC 2016, we have proposed a project to implement an [https://cgit.kde.org/digikam.git/tree/core/utilities/imageeditor/tools/enhance Healing Clone tool for digiKam image editor] to be able to remove unwanted artifacts from images. The student has implemented the basis without a zoomable canvas and without the resizable brush support. Due to this lack of features, the tools cannot be used in production by end-users.<br />
<br />
This section of code about healing clone tool is currently disabled in digiKam core.<br />
<br />
The goal of this project is to implement the missing feature for the Healing Clone tool in image editor, including the unit-tests and the documentation.<br />
<br />
'''Expected Results''': <br />
<br />
Provide a suitable Healing clone tool for image editor, with unit tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, digiKam<br />
<br />
'''Mentors''': Mohamed Anwer and Gilles Caulier<br />
<br />
==== Project: Factoring all Export Tools with new Export API ====<br />
<br />
'''Brief Explanation''': With GoSC 2018, we proposed a project to implement a huge factorization and improvements with all [https://cgit.kde.org/digikam.git/tree/core/utilities/assistants/webservices digiKam export to web service tools]. Our student fixed plenty of code using OAuth version 2 authentification, has simplified classes, and started to write a new API to factorize all these tools, including a common Wizard dialog. Even if the export tools implementation are now better, they do not use the new API and always run as a stand alone session in digiKam core. Due to this fact, the Web Service tools are not yet usable in digiKam Batch Queue Manager as single step runnable at end of a queue processing. So the section of code about factored export tools API is currently disabled in digiKam core. This year, the project will be to fix that.<br />
<br />
'''Expected Results''': <br />
<br />
Start to use every the new export tools API, use the new Wizard dialog, factoring codes everywhere, and introduce all export tools to BQM. Write unit tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, digiKam<br />
<br />
'''Mentors''': Maik Qualmann and Gilles Caulier<br />
<br />
=== Falkon ===<br />
[https://www.falkon.org/ Falkon] is a KDE web browser.<br />
<br />
[mailto:falkon@kde.org Contact the Falkon team]<br />
<br />
==== Plasma integration ====<br />
<br />
'''Brief explanation:''' Falkon is Qt application and as such it integrates quite well into Plasma desktop environment. There is also an extension that allows to store passwords in KWallet. Plasma desktop provides some services that could be useful to use from browser, like showing the progress of downloads as jobs in notification applet or searching for bookmarks or open tabs from KRunner.<br />
<br />
There is already existing extension for Chrome that implements these features - [https://cgit.kde.org/plasma-browser-integration.git plasma-browser-integration] that can be used as a base for the Falkon extension.<br />
<br />
'''Expected results:''' Falkon C++ extension and additional helpers improves the integration with Plasma desktop.<br />
<br />
'''Knowledge Prerequisite:''' C++/Qt, JavaScript basics<br />
<br />
'''Mentor:''' David Rosca (nowrep@gmail.com, IRC: nowrep on #falkon)<br />
<br />
==== Firefox Sync ====<br />
<br />
'''Brief explanation:''' Firefox Sync is an open API for synchronization of browser data between multiple instances. Falkon doesn't currently have support for any synchronization at all. Instead of creating in-house solution, it would be best to use some existing solution, which Firefox Sync appears to be a great candidate.<br />
<br />
Firefox Sync is not exclusive to Firefox browser, it was already implemented for example in Gnome Epiphany browser (https://github.com/GNOME/epiphany/tree/master/lib/sync).<br />
<br />
'''Expected results:''' Falkon is able to sync bookmarks, passwords, sessions ... over Firefox Sync API.<br />
<br />
'''Knowledge Prerequisite:''' C++/Qt<br />
<br />
'''Mentor:''' David Rosca (nowrep@gmail.com, IRC: nowrep on #falkon)<br />
<br />
=== GCompris ===<br />
[https://gcompris.net/ GCompris] is a high quality educational software suite, including a large number of activities for children aged 2 to 10. [mailto:gcompris-devel@kde.org Contact] the GCompris team.<br />
<br />
==== Project: Finishing the port of the major activities for version 1.0 ====<br />
'''Brief explanation''': Originally written in Gtk+ the development team started to rewrite it from scratch in Qt Quick and almost finished the port.<br />
<br />
'''Expected results''':<br />
The aim of this year is to work on the most important activities that we are missing to have a complete 1.0, mostly the analog electricity one (https://phabricator.kde.org/T5954, other activities can be proposed too, for example, we lack activities to learn about biology).<br />
First phase is to check how the Gtk+ version was working, what could be improved and then create a proposal with a timeline explaining what you expect to do and the time estimation. It does not need to be a simple clone, improvements should be done when possible.<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education<br />
<br />
Be familiar with GCompris concept and content<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough)<br />
<br />
Be able to build the Qt Quick version of GCompris<br />
<br />
'''Application guide''':<br />
Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/GSOC_newcomers, http://gcompris.net/wiki/An_exercise_for_new_contributors and http://gcompris.net/wiki/Reviewing_an_activity<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Aman Kumar Gupta (IRC: gupta2140[m]), Emmanuel Charruau (IRC: allon), Johnny Jazeix (IRC: JohnnyJ), Timothée Giet (IRC: Animtim)<br />
<br />
==== Project: One step closer to version 1.0 ====<br />
'''Brief explanation''': we had some remarks that the difficulty in an activity can increase too much and target different ages in the same levels. The aim of this project is to add a granularity on the datasets so the child can better target what to learn.<br />
<br />
'''Expected results''':<br />
The aim of this project is to update activities to be able to use json files as datasets so we can have multiple datasets (each targeting a different learning goal) for the same activity.<br />
<br />
You need to choose activities that need this kind of datasets and update their code to use multiple datasets.<br />
<br />
A discussion is opened in https://phabricator.kde.org/T10211 to better know what we want and how to do it (WIP).<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education<br />
<br />
Be familiar with GCompris concept and content<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough)<br />
<br />
Be able to build the Qt Quick version of GCompris<br />
<br />
'''Application guide''':<br />
Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/GSOC_newcomers, http://gcompris.net/wiki/An_exercise_for_new_contributors and http://gcompris.net/wiki/Reviewing_an_activity<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Aman Kumar Gupta (IRC: gupta2140[m]), Emmanuel Charruau (IRC: allon), Johnny Jazeix (IRC: JohnnyJ), Timothée Giet (IRC: Animtim)<br />
<br />
=== KDE Connect ===<br />
[https://community.kde.org/KDEConnect KDE Connect] is a project that enables all your devices to communicate with each other.<br />
<br />
==== KDE Connect for Windows port ====<br />
We want to improve the integration of KDE Connect with the Windows system. As of now, KDE Connect builds on Windows ([https://community.kde.org/KDEConnect/Build_Windows using Craft]) and some plugins have been ported, but it's still unstable and incomplete.<br />
<br />
This project should aim to:<br />
<br />
* Implement all the missing plugins<br />
* Provide full integration with the OS:<br />
** Send-to integration from the right-click menu,<br />
** Make the notifications appear in the Windows 10 notifications bar, etc.<br />
* Improve existing documentation for how to compile (and use) KDE Connect on Windows<br />
** It would also be great if we had the option to use mingw as the compiler instead of depending on the Visual Studio compiler<br />
<br />
By the end of the project, we should have a releaseable installer for KDE Connect on Windows and/or KDE Connect published on the Windows app store.<br />
<br />
'''Areas of knowledge:''' Experience writing Windows applications, C++ and Qt5 is required.<br />
<br />
'''Mentor:''' Simon Redman (simon@ergotech.com)<br />
<br />
Feel free to reach out to the rest of the team on the [https://mail.kde.org/mailman/listinfo/kdeconnect kdeconnect mailing list], [https://t.me/joinchat/BRUUN0bwMhNfn8FIejA-nw Telegram], or on #kdeconnect on Freenode<br />
<br />
=== KDE neon ===<br />
[https://neon.kde.org KDE neon] compiles KDE software to make it available pronto.<br />
<br />
==== Project: ISO Image Writer ====<br />
<br />
[https://cgit.kde.org/isoimagewriter.git/ ISO Image Writer] copies ISO images onto USB drives. It needs code tidied up and builds made for Snap, FlatPak, Windows, Mac and good old Linux packages. [https://phabricator.kde.org/M113/466/ Design to implement]<br />
<br />
'''Expected Results''': Installable packages<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Build systems, multi-platform<br />
<br />
Mentor: <br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Jonathan Riddell (IRC: Riddell)<br />
<br />
=== Kdenlive ===<br />
[https://kdenlive.org Kdenlive] is a KDE-application for professional video editors. It supports hundreds of video formats and all the features you can expect from a non-linear video editor, including some advanced features like timeline preview rendering, proxy clips and more.<br />
<br />
==== Project: Evolving Titler tool ====<br />
<br />
'''Brief Explanation''': Kdenlive titler tool allows to draw texts and images to composite over videos.<br />
<br />
Current code is using XML description, drawn by our "kdenlivetitle" MLT module, using old QPainter engine.<br />
This engines has limitations that blocks interesting features.<br />
Few years ago, an upstream module appeared in MLT, named "WebVfx", which uses QML to do similar things with much more flexibility.<br />
<br />
We would like to be able to load current XML titles and convert them automatically to QML format, and generate QML from our current GUI. Then the GUI could evolve to integrate new features, in accordance to our community requests & design group recommendations.<br />
<br />
'''Expected Results''': A titler using QML backend<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, QML<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Vincent Pinon (IRC: vpinon)<br />
<br />
=== KDE Partition Manager ===<br />
<br />
[https://www.kde.org/applications/system/kdepartitionmanager KDE Partition Manager] is a utility program to help you manage the disk devices, partitions and file systems on your computer. It allows you to easily create, copy, move, delete, resize without losing data, backup and restore partitions.<br />
<br />
==== Project: Port authentication to Polkit-qt ====<br />
<br />
'''Brief Explanation''': KDE Partition Manager was recently ported to KAuth (which is Tier 2 KDE Framework library). This means that instead of running the whole GUI as root, KDE Partition Manager runs as a normal user, starts a small (non-GUI) helper application which runs as root and executes privileged tasks.<br />
<br />
KAuth itself was not sufficient for this task, so we built a small protocol on top of KAuth. Usually, programs that use KAuth, start a helper, it does its job and exists. In KDE Partition Manager, helper persists, and communicates with KDE Partition Manager using a fairly simple DBus protocol over which GUI application can request two things:<br />
* execute some external program, like sfdisk, btrfs, etc... <br />
* Copy block of data (partition) to another location).<br />
<br />
However, KAuth library itself is a layer built on top of Polkit-Qt (which is a small wrapper around Polkit).<br />
<br />
'''The proposal''' for this project is to port away from KAuth and run our custom protocol between helper and GUI application directly on top of Polkit-Qt.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and basic knowledge of Qt<br />
<br />
You don't need experience of using DBus, you can pick this up during the project.<br />
<br />
'''Mentors''': Andrius Štikonas (IRC: stikonas), Caio Jordão Carvalho (IRC: cjlcarvalho)<br />
<br />
==== Project: Finish mdraid and implement dmraid support ====<br />
<br />
'''Brief Explanation''': KDE Partition Manager got a mdraid (Software RAID) support during the last Google Summer of Code as you can see in the [https://cgit.kde.org/kpmcore.git/?h=raid-support raid-support branch]. It is working with a good number of functionalities such as the display of RAID devices and the manipulation of them. Most of this work is completed, but there are some fixes to do, including some udev bugs, and it is needed to include the implementation for resizing mdraid volumes.<br />
<br />
There is another type of RAID available for Linux systems, which is dmraid (FakeRAID). It works along the device mapper to discover and manipulate ATA RAIDs created by controllers BIOS. Our goal in this project is to offer some basic functionalities for it, such as displaying, creating, erasing and manipulating partitions inside of these volumes.<br />
<br />
'''The proposal''' for this project is to finish mdraid support and implement initial dmraid support.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and basic knowledge of Qt<br />
<br />
'''Mentors''': Andrius Štikonas (IRC: stikonas), Caio Jordão Carvalho (IRC: cjlcarvalho)<br />
<br />
=== Krita ===<br />
[http://www.krita.org Krita]: digital painting for artists. It supports creating images from scratch from beginning to end. Krita is a complex application and developers need to have a fair amount of experience in order to be able to do something.<br />
<br />
Krita is a widely used digital painting application for professional artists. Last year, Krita gained the ability to create hand-drawn 2D animations, among other new features. For this year, projects that the Krita team would be interested in include the following ideas.<br />
<br />
Note that we're always open to ideas you bring in yourself: if you're passionate about something you've come up with yourself, that you want for Krita, that's a big plus for us.<br />
<br />
We also expect prospective students to submit at least three patches for bugs or wishes or small features. We want to know how good you are! See https://phabricator.kde.org/T7724 for some smaller tasks that you could work on that are not bugs.<br />
<br />
==== Project: Integrating the MyPaint Brush Engine ====<br />
<br />
'''Brief Explanation''': The MyPaint brush engine has been separated from the MyPaint application and has been completely rewritten. Artists still like the mypaint brush engine a lot and it would be great to have the engine integrated in Krita as a new brush engine. Libmypaint can be found here: https://github.com/mypaint/libmypaint and the brush set here: https://github.com/mypaint/mypaint-brushes . The first goal is to integreate libmypaint in a Krita brushengine and make it load the brushes. The second goal is to expose the MyPaint brush options in Krita's brush editor and allow the modification and creation of MyPaint brushes in Krita. GIMP is an example of an application that has already integrated the MyPaint brush engine.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to effectively paint with MyPaint brushes in Krita.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
<br />
==== Project: Supporting Vertical Text and SVG2 Text in the Text Shape ====<br />
<br />
'''Brief Explanation''': Krita's Text Shape was rewritten for Krita 4.0. It is now SVG based, instead of ODF. There are many things lacking, though. The original goal was to support SVG2. Currently the text shape only supports SVG1. There is no automatic wordwrap and vertical text (e.g. Chinese and Japanese) is not supported either. The goal of this project is to support wordwrap and vertical text layout. Other improvements to the text shape can be proposed as well. The level of this project is advanced.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to create and edit vertical text. Text shapes should be able to automatically wrap text to the bounding box.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita, SVG, Typography, Text Layout<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
==== Project: Add New Fill Layer Types ====<br />
<br />
'''Brief Explanation''': Fill layers are layers that automatically generate content. Krita currently has two types of fill layers: Color and Pattern. There used to be another type that generated content dynamically using the OpenShiva scripting language. However, that language hasn't been maintained for a long time. The goal of this project is to add a new dynamic fill layer types that could fill an area with different effects such as perlin and other types of noise, clouds, hatching, fractals.<br />
<br />
'''Expected Results''': <br />
<br />
Several new fill layer types that allow the user to add dynamically generated content as a layer in the layer stack <br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
==== Project: Port Krita to Android OR iOS ====<br />
<br />
'''Brief Explanation''': Krita is currently only available on Windows, macOS and Linux. The goal of this project is to port the desktop version of Krita to one mobile operating system, either Android or iOS. This involves making sure all (or a viable subset of) Krita's dependencies are available on the target platform, as well as Krita itself.<br />
<br />
'''Expected Results''': <br />
<br />
A build of Krita that starts on either mobile OS and shows an image. Further integration with either mobile OS would be nice, but is an extra. Furthermore, the build system and build scripts need to be documented, complete and maintainable.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita, CMake, Android or iOS. You also need to have access to test hardware.<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
==== Project: Improve Krita for Touch Systems ====<br />
<br />
'''Brief Explanation''': Krita Gemini/Krita Sketch were version of Krita based on QtQuick 1 that provided a decent touch-only experience. Because of the technical limitations of QtQuick 2, the approach used in Gemini and Sketch is no longer viable. Since Krita 4, there is a QtQuick2 based touch docker that mimics the button bar found on some wacom devices. This is not configurable, and quite limited. This project involves working with Krita's UX designers and users to define a new approach to supporting touch devices, then implementing that support.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to work with Krita on a touch-only device such as a Surface Pro or Wacom Mobile Studio without wanting to chop their devices in two.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: SVG Mesh Gradients ====<br />
<br />
'''Brief Explanation''': Even though Mesh Gradients are not officially part of the truncated SVG2 specification anymore, having a second implementation next to Inkscape would help improving the standard. Plus, mesh gradients are very useful for artists. This project entails implementing a new gradient type. Whether this should be based on QGradient or not is up for discussion. The gradients should render exactly the same as in inkscape. See https://svgwg.org/svg-next/pservers.html#MeshGradientElement.<br />
<br />
'''Expected Results''': <br />
<br />
A new gradient type, UI to create and edit these gradients and apply them. Gradients should work both on vector objects as well as on paint layers.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita, SVG, Inkscape<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: Extending Animation Support for curves ====<br />
<br />
'''Brief Explanation''': In Krita, you can already add curves that could be applied to some properties of a layer, like opacity, animating those properties. We want the animation support extended by allowing users to place masks (filter masks, transformation masks, transparency masks) on the timeline and animate their properties using curves. Every property of a layer or mask placed on the timeline should be animatable.<br />
<br />
'''Expected results''':<br />
* Implementation of a gui for applying the curve settings to one or more properties of a mask or layer<br />
* Implementation of the actual rendering of the properties in the frames<br />
* Saving of these settings<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Jouni Pentikainen (tyyppi on IRC)<br />
<br />
==== Project: Taking the Shape Brush to the next level ====<br />
<br />
'''Brief Explanation''': Krita has a number of interesting brush engines. One of them is the Shape Brush engine. Inspired by Alchemy, the shape brush "throws" shapes on the canvas. The current implementation is limited to geometric shapes. We want the brush engine to be extended to make it possible to load vector shapes defined as PDF or SVG and use those to draw on the canvas as well. Other improvements are the addition of Feathering, an outline mode, edge sharpening and background textures.<br />
<br />
'''Expected Results''': A revamped and exciting shapes brush<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Krita<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
=== KStars ===<br />
[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support an ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can support addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Histogram Adjustments''': Controls for Shadow, Midtones, and Highlights. White / Black points controls.<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* New controls for histogram.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
=== LabPlot ===<br />
[https://labplot.kde.org LabPlot] is a KDE-application for interactive graphing and analysis of scientific data. LabPlot provides an easy way to create, manage and edit plots and to perform data analysis. Labplot is part of the [https://edu.kde.org/ KDE Edu team].<br />
<br />
[mailto:kde-edu@mail.kde.org Contact KDE-Edu]<br />
<br />
==== Project: Import of educational data sets available on the internet ====<br />
'''Brief explanation''': There are many internet pages providing data sets for educational and study purposes for many different areas (astrophysics, statistics, medicine, etc.). Some tools used in the scientific area provide some "wrappers" for such online sources and allow the user to easily play around with those data sets in the applications whereas the technical details like fetching of data from the server and parsing are done completely transparent for the user. The goal of this project is to add similar functionality to LabPlot. There will be a wizard where the user can select from a thematically grouped list of data sets available online. The internal description of such an online data set should contain the URL with the actual file that needs to be downloaded and the settings for LabPlot's data parser (separator, column names and data types, etc.). The definition of the data sources should be made available on store.kde.org.<br />
<br />
'''Expected results''': We want to be able to easily import the educational data sets available on the internet.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt<br />
<br />
'''Mentor''': Fábián Kristóf<br />
<br />
==== Project: Statistical analysis ====<br />
Currently LabPlot has only basic support for statistical data analysis by providing some basic measures of descriptive statistics in the spreadsheet. The goal of the project is to add more statistics relevant features (hypothesis tests, cluster analysis, ets.) to LabPlot.<br />
<br />
'''Expected results''':<br />
* evaluate available statistical open-source libraries which can be used for this project<br />
* determine a reasonable set of features and algorithms that can be added to LabPlot, compare here with other similar projects, and implement them<br />
* for the visualization of results of statistical calculations, implement new kind of reports for this, comparable to other similar projects<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, basic statistics knowledge<br />
<br />
'''Mentor''': Stefan Gerlach, Alexander Semke<br />
<br />
=== Okular ===<br />
Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.<br />
<br />
==== Project: Support animated PDF ====<br />
<br />
'''Brief explanation:''' PDF files can support animation via JavaScript. This is one feature that is regularly requested by users and would be nice supporting it in Okular.<br />
'''Knowledge Prerequisite:''' C++, Qt<br />
<br />
'''Mentor:''' Albert Astals Cid aacid@kde.org<br />
<br />
'''Application guide''':<br />
* https://bugs.kde.org/show_bug.cgi?id=403772<br />
* https://bugs.kde.org/show_bug.cgi?id=242617<br />
<br />
<br />
==== Project: Add support for showing and adding replies to sticky notes ====<br />
<br />
'''Brief explanation:''' PDF files can contain replies to certain annotations. In this project, you would need to add support to Okular and possibly to poppler so that they show the same way they do on other PDF readers. Once they are shown and if there is enough time adding the capability to add replies is also welcome.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt<br />
<br />
'''Mentor:''' Okular developers https://mail.kde.org/mailman/listinfo/okular-devel<br />
<br />
'''Application guide''':<br />
* https://bugs.kde.org/show_bug.cgi?id=387834<br />
<br />
<br />
==== Project: Improve custom stamp annotation handling ====<br />
<br />
'''Brief explanation:''' Okular does display stamp annotations, but the support<br />
is somewhat incomplete. This particularly shows when trying to use stamp<br />
annotations with a custom image. For example, such annotations can be<br />
added in Okular, but they cannot be saved to the pdf file in a way<br />
that any other pdf viewer can read. Also, they will not appear on print-outs.<br />
<br />
The underlying reason for this is that Okular renders these stamps itself,<br />
rather than relying on the poppler library, which does all other pdf<br />
rendering. Goal of this project is therefore to teach poppler how to<br />
render stamp annotations, and then make Okular use that new functionality.<br />
More details can be found in the bug report [0].<br />
<br />
[0] https://bugs.kde.org/show_bug.cgi?id=383651<br />
<br />
'''Expected results:''' Poppler should render stamp annotations. Annotations<br />
should be printable from Okular. Custom stamps inserted via the Okular GUI<br />
should be visible in other pdf readers.<br />
<br />
'''Knowledge prerequisite:''' C++, and a bit about the pdf format.<br />
<br />
<br />
==== Project: Annotation improvements ====<br />
<br />
'''Brief explanation:''' Okular supports convenient editing of pdf annotations, but quite a number of paper-cut bugs are known. Examples are [0,1,2], but many more can be found in the bugtracker. Goal of this project is to fix as many of these bugs as possible, which should improve the Okular user experience greatly.<br />
<br />
[0] https://bugs.kde.org/show_bug.cgi?id=275371<br />
<br />
[1] https://bugs.freedesktop.org/show_bug.cgi?id=102635<br />
<br />
[2] https://bugs.freedesktop.org/show_bug.cgi?id=52010<br />
<br />
'''Expected results:''' Lots of annotation-related bugs fixed. Annotation rendering and manipulation should be more enjoyable.<br />
<br />
'''Knowledge prerequisite:''' C++ and Qt, and a bit about the pdf format<br />
<br />
=== Plasma Mobile ===<br />
Plasma Mobile is KDE's software stack for mobile devices that includes Plasma phone components, Kirigami and a set of mobile-friendly applications.<br />
<br />
==== SMS App ====<br />
Plasma Mobile currently does not have a functional SMS app. One approach to this would be extending the SMS app that is currently developed for KDE Connect to have a Plasma Mobile backend.<br />
<br />
This includes:<br />
- Develop an approach to make the app support multiple backends<br />
- Develop a backend for the Plasma Mobile SMS stack (ofono)<br />
- Possibly improvements to the Plasma Mobile SMS stack<br />
- Possibly improvements to the SMS app UX<br />
<br />
Goal is to be able to communicate via SMS on a Plasma mobile phone with all basic features (sending, receiving SMS, browsing through conversations).<br />
<br />
This requires access to a Plasma mobile enabled phone, preferably the Nexus 5X. Second-hand phones are available at very low prices.<br />
<br />
'''Areas of knowledge:''' Basic understanding of C++ and Qt5.<br />
<br />
'''Mentors:''' Simon Redman and Nicolas Fella for KDE Connect specific things, Bhushan Shah for Plasma Mobile things. Get in touch with us on #kdeconnect on freenode or the [https://matrix.to/#/%23plasmamobile:matrix.org Plasma Mobile Matrix channel]<br />
<br />
=== Purpose ===<br />
The [https://api.kde.org/frameworks/purpose/html/index.html Purpose] framework offers the possibility to create integrate services and actions on any application without having to implement them specifically. Purpose will offer them mechanisms to list the different alternatives to execute given the requested action type and will facilitate components so that all the plugins can receive all the information they need.<br />
<br />
==== Barcode scanning infrastructure ====<br />
Purpose enables application developers to use features without implementing them themselves. It offers multiple alternatives to achieve a goal. Right now it supports sharing files and URLs.<br />
<br />
An interesting use case for it would be scanning barcodes. An application developer that wants to scan a barcode would ask Purpose for it. Purpose would offer multiple ways of doing it, e.g. from a local file, from the local camera or from a via KDE Connect connected phone. Purpose would then return the data to the application.<br />
<br />
Goal of this task is to have a framework for scanning barcodes as well as multiple implementations. This consists of:<br />
- Adding a new Plugin type to Purpose<br />
- A import from file backend<br />
- A local camera backend<br />
- A KDE Connect backend<br />
- One or more applications using it, e.g. Itinerary or a barcode scan app for Plasma Mobile<br />
<br />
'''Areas of knowledge:''' Basic understanding of C++ and Qt5 is required. Experience with Java/Android for the KDE Connect backend is beneficial.<br />
<br />
'''Mentor:''' Nicolas Fella (nicofee) for KDE Connect parts. Aleix Pol (apol) for Purpose parts. Volker Krause (vkrause) for zxing parts. [https://mail.kde.org/mailman/listinfo/kde-frameworks-devel Devel mail list].</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2019/Ideas&diff=82320GSoC/2019/Ideas2018-12-16T11:07:32Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2018/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
** '''Ideas with no mentors listed and their contact info will be removed''' **<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
===digiKam===<br />
digiKam is an advanced digital photo management application for Linux, Windows, and MacOS.<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://plus.google.com/+digikam Google+ page]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
<br />
==== Project: AI Face Recognition with OpenCV DNN module ====<br />
<br />
'''Brief Explanation''': With GoSC 2016, we have proposed a project to implement an AI extension to the [https://cgit.kde.org/digikam.git/tree/core/libs/facesengine/recognition digiKam core face recognition]. The student has used the Dlib C++ API, but we have not satisfied by the results, as the algorithm give poor performance. This choice has also introduced a huge back-port of low level codes which we don't want to maintain in the future. In other words, even if the project propose a more and less suitable solution to provide an AI face recognition processor based on deep-learning, this one was not really powerful and functional as well. <br />
<br />
This section of code about Dlib DNN extension is currently disabled in digiKam core.<br />
<br />
As digiKam core already depend of OpenCV library to perform complex image processing, and as OpenCV >= 3.3 release provide a new [https://docs.opencv.org/3.4.3/d2/d58/tutorial_table_of_content_dnn.html OpenCV DNN (Deep Neural Network) module], the goal of this project is to port the current digiKam core face recognition DNN extension to new OpenCV API and write all unit tests to validate the algorithm usability, efficiency, and performances, while learning and recognize faces automatically.<br />
<br />
'''Expected Results''': <br />
<br />
Provide a suitable Face recognition based on DNN OpenCV API, with unit test, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, OpenCV, digiKam<br />
<br />
'''Mentors''': Maik Qualmann and Gilles Caulier<br />
<br />
==== Project: Zoomable and Resizable Brush for Healing Clone Tool ====<br />
<br />
'''Brief Explanation''': With GoSC 2016, we have proposed a project to implement an [https://cgit.kde.org/digikam.git/tree/core/utilities/imageeditor/tools/enhance Healing Clone tool for digiKam image editor] to be able to remove unwanted artifacts from images. The student has implemented the basis without a zoomable canvas and without the resizable brush support. Due to this lack of features, the tools cannot be used in production by end-users.<br />
<br />
This section of code about healing clone tool is currently disabled in digiKam core.<br />
<br />
The goal of this project is to implement the missing feature for the Healing Clone tool in image editor, including the unit-tests and the documentation.<br />
<br />
'''Expected Results''': <br />
<br />
Provide a suitable Healing clone tool for image editor, with unit tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, digiKam<br />
<br />
'''Mentors''': Mohamed Anwer and Gilles Caulier<br />
<br />
==== Project: Factoring all Export Tools with new Export API ====<br />
<br />
'''Brief Explanation''': With GoSC 2018, we have proposed a project to implement a huge factorization and improvements with all [https://cgit.kde.org/digikam.git/tree/core/utilities/assistants/webservices digiKam export to web service tools]. The student has fixed plenty of codes using OAuth version 2 authentification, has simplified classes, and started to write a new API to factorize all these tools, including a common Wizard dialog. Even if the export tools implementation are now better, each one do not use the new API and always run as a stand alone session in digiKam core. Due to this fact, the Web Service tools are not yet usable in digiKam Batch Queue Manager as single step runnable at end of a queue processing.<br />
<br />
This section of code about factored export tools API is currently disabled in digiKam core.<br />
<br />
'''Expected Results''': <br />
<br />
Start to use every the new export tools API, use the new Wizard dialog, factoring codes everywhere, and introduce all export tools to BQM. Write unit tests, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, digiKam<br />
<br />
'''Mentors''': Maik Qualmann and Gilles Caulier<br />
<br />
=== Krita ===<br />
[http://www.krita.org Krita]: digital painting for artists. It supports creating images from scratch from beginning to end. Krita is a complex application and developers need to have a fair amount of experience in order to be able to do something.<br />
<br />
Krita is a widely used digital painting application for professional artists. Last year, Krita gained the ability to create hand-drawn 2D animations, among other new features. For this year, projects that the Krita team would be interested in include the following ideas.<br />
<br />
Note that we're always open to ideas you bring in yourself: if you're passionate about something you've come up with yourself, that you want for Krita, that's a big plus for us.<br />
<br />
We also expect prospective students to submit at least three patches for bugs or wishes or small features. We want to know how good you are! See https://phabricator.kde.org/T7724 for some smaller tasks that you could work on that are not bugs.<br />
<br />
==== Project: Integrating the MyPaint Brush Engine ====<br />
<br />
'''Brief Explanation''': The MyPaint brush engine has been separated from the MyPaint application and has been completely rewritten. Artists still like the mypaint brush engine a lot and it would be great to have the engine integrated in Krita as a new brush engine. Libmypaint can be found here: https://github.com/mypaint/libmypaint and the brush set here: https://github.com/mypaint/mypaint-brushes . The first goal is to integreate libmypaint in a Krita brushengine and make it load the brushes. The second goal is to expose the MyPaint brush options in Krita's brush editor and allow the modification and creation of MyPaint brushes in Krita. GIMP is an example of an application that has already integrated the MyPaint brush engine.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to effectively paint with MyPaint brushes in Krita.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
<br />
==== Project: Supporting Vertical Text and SVG2 Text in the Text Shape ====<br />
<br />
'''Brief Explanation''': Krita's Text Shape was rewritten for Krita 4.0. It is now SVG based, instead of ODF. There are many things lacking, though. The original goal was to support SVG2. Currently the text shape only supports SVG1. There is no automatic wordwrap and vertical text (e.g. Chinese and Japanese) is not supported either. The goal of this project is to support wordwrap and vertical text layout. Other improvements to the text shape can be proposed as well. The level of this project is advanced.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to create and edit vertical text. Text shapes should be able to automatically wrap text to the bounding box.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita, SVG, Typography, Text Layout<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
==== Project: Add New Fill Layer Types ====<br />
<br />
'''Brief Explanation''': Fill layers are layers that automatically generate content. Krita currently has two types of fill layers: Color and Pattern. There used to be another type that generated content dynamically using the OpenShiva scripting language. However, that language hasn't been maintained for a long time. The goal of this project is to add a new dynamic fill layer types that could fill an area with different effects such as perlin and other types of noise, clouds, hatching, fractals.<br />
<br />
'''Expected Results''': <br />
<br />
Several new fill layer types that allow the user to add dynamically generated content as a layer in the layer stack <br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
==== Project: Port Krita to Android OR iOS ====<br />
<br />
'''Brief Explanation''': Krita is currently only available on Windows, macOS and Linux. The goal of this project is to port the desktop version of Krita to one mobile operating system, either Android or iOS. This involves making sure all (or a viable subset of) Krita's dependencies are available on the target platform, as well as Krita itself.<br />
<br />
'''Expected Results''': <br />
<br />
A build of Krita that starts on either mobile OS and shows an image. Further integration with either mobile OS would be nice, but is an extra. Furthermore, the build system and build scripts need to be documented, complete and maintainable.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita, CMake, Android or iOS. You also need to have access to test hardware.<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
==== Project: Improve Krita for Touch Systems ====<br />
<br />
'''Brief Explanation''': Krita Gemini/Krita Sketch were version of Krita based on QtQuick 1 that provided a decent touch-only experience. Because of the technical limitations of QtQuick 2, the approach used in Gemini and Sketch is no longer viable. Since Krita 4, there is a QtQuick2 based touch docker that mimics the button bar found on some wacom devices. This is not configurable, and quite limited. This project involves working with Krita's UX designers and users to define a new approach to supporting touch devices, then implementing that support.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to work with Krita on a touch-only device such as a Surface Pro or Wacom Mobile Studio without wanting to chop their devices in two.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: SVG Mesh Gradients ====<br />
<br />
'''Brief Explanation''': Even though Mesh Gradients are not officially part of the truncated SVG2 specification anymore, having a second implementation next to Inkscape would help improving the standard. Plus, mesh gradients are very useful for artists. This project entails implementing a new gradient type. Whether this should be based on QGradient or not is up for discussion. The gradients should render exactly the same as in inkscape. See https://svgwg.org/svg-next/pservers.html#MeshGradientElement.<br />
<br />
'''Expected Results''': <br />
<br />
A new gradient type, UI to create and edit these gradients and apply them. Gradients should work both on vector objects as well as on paint layers.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita, SVG, Inkscape<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: Extending Animation Support for curves ====<br />
<br />
'''Brief Explanation''': In Krita, you can already add curves that could be applied to some properties of a layer, like opacity, animating those properties. We want the animation support extended by allowing users to place masks (filter masks, transformation masks, transparency masks) on the timeline and animate their properties using curves. Every property of a layer or mask placed on the timeline should be animatable.<br />
<br />
'''Expected results''':<br />
* Implementation of a gui for applying the curve settings to one or more properties of a mask or layer<br />
* Implementation of the actual rendering of the properties in the frames<br />
* Saving of these settings<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Jouni Pentikainen (tyyppi on IRC)<br />
<br />
==== Project: Taking the Shape Brush to the next level ====<br />
<br />
'''Brief Explanation''': Krita has a number of interesting brush engines. One of them is the Shape Brush engine. Inspired by Alchemy, the shape brush "throws" shapes on the canvas. The current implementation is limited to geometric shapes. We want the brush engine to be extended to make it possible to load vector shapes defined as PDF or SVG and use those to draw on the canvas as well. Other improvements are the addition of Feathering, an outline mode, edge sharpening and background textures.<br />
<br />
'''Expected Results''': A revamped and exciting shapes brush<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Krita<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
=== GCompris ===<br />
[https://gcompris.net/ GCompris] is a high quality educational software suite, including a large number of activities for children aged 2 to 10.<br />
<br />
[mailto:kde-edu@kde.org Contact] the KDE-Edu team.<br />
<br />
=== KDE neon ===<br />
[https://neon.kde.org KDE neon] compiles KDE software to make it available pronto.<br />
<br />
==== Project: ISO Image Writer ====<br />
<br />
[https://cgit.kde.org/isoimagewriter.git/ ISO Image Writer] copies ISO images onto USB drives. It needs code tidied up and builds made for Snap, FlatPak, Windows, Mac and good old Linux packages. <br />
<br />
'''Expected Results''': Installable packages<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Build systems, multi-platform<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Jonathan Riddell (IRC: Riddell)<br />
<br />
=== KDE Partition Manager ===<br />
[https://www.kde.org/applications/system/kdepartitionmanager KDE Partition Manager] is a utility program to help you manage the disk devices, partitions and file systems on your computer. It allows you to easily create, copy, move, delete, resize without losing data, backup and restore partitions. [https://mail.kde.org/mailman/listinfo/kde-devel Developer mail list].<br />
<br />
=== Kopete ===<br />
<br />
[https://kopete.kde.org/ Kopete] is a flexible and extendable multiple protocol instant messaging system. [http://mail.kde.org/mailman/listinfo/kopete-devel Developer mail list].<br />
<br />
=== LabPlot ===<br />
[https://labplot.kde.org LabPlot] is a KDE-application for interactive graphing and analysis of scientific data. LabPlot provides an easy way to create, manage and edit plots and to perform data analysis. Labplot is part of the [https://edu.kde.org/ KDE Edu team].<br />
<br />
[mailto:kde-edu@mail.kde.org Contact KDE-Edu]<br />
<br />
=== Kdenlive ===<br />
[https://kdenlive.org Kdenlive] is a KDE-application for professional video editors. It supports hundreds of video formats and all the features you can expect from a non-linear video editor, including some advanced features like timeline preview rendering, proxy clips and more.<br />
<br />
==== Project: Evolving Titler tool ====<br />
<br />
'''Brief Explanation''': Kdenlive titler tool allows to draw texts and images to composite over videos.<br />
<br />
Current code is using XML description, drawn by our "kdenlivetitle" MLT module, using old QPainter engine.<br />
This engines has limitations that blocks interesting features.<br />
Few years ago, an upstream module appeared in MLT, named "WebVfx", which uses QML to do similar things with much more flexibility.<br />
<br />
We would like to be able to load current XML titles and convert them automatically to QML format, and generate QML from our current GUI. Then the GUI could evolve to integrate new features, in accordance to our community requests & design group recommendations.<br />
<br />
'''Expected Results''': A titler using QML backend<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, QML<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Vincent Pinon (IRC: vpinon)<br />
<br />
=== Choqok ===<br />
Get in touch on IRC (#choqok).<br />
<br />
=== KStars ===<br />
[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support an ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can support addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Histogram Adjustments''': Controls for Shadow, Midtones, and Highlights. White / Black points controls.<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* New controls for histogram.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
=== Peruse ===<br />
Peruse is a comic book reader application by KDE, which is designed to work both on touch based devices, and on the traditional desktop. Additionally, it has a tool called Peruse Creator which is designed to create comic books for use with Peruse and any other CBZ capable comic book reader. It has rudimentary support for the [http://acbf.wikia.com/wiki/Specifications Advanced Comic Book Format], which is a metadata container for comic book archives (CBR, CBZ and so on).<br />
<br />
See the Peruse website for more detailed information: https://peruse.kde.org/<br />
<br />
=== KGpg ===<br />
[https://utils.kde.org/projects/kgpg KGpg] is a frontend for GnuPG key management. [mailto:kde-utils-devel@kde.org Contact the KGpg team].<br />
<br />
===KWin===<br />
KWin is the KDE project's default window manager. [https://mail.kde.org/mailman/listinfo/kwin Kwin developer mail list].<br />
<br />
=== Plasma ===<br />
Plasma is KDE's desktop environment; Simple by default, powerful when needed. [https://mail.kde.org/mailman/listinfo/plasma-devel Developer mail list].<br />
<br />
=== Okular ===<br />
Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.<br />
<br />
=== WikiToLearn ===<br />
WikiToLearn was born as a non-profit community and an open source project, which provides free and collaborative textbooks with the help of students and academia. Knowledge only grows if shared!<br />
<br />
You can find all of the [ https://www.wikitolearn.org/ WikiToLearn] community on [https://chat.wikitolearn.org chat.wikitolearn.org]. We have many other ideas: get in touch with us to discuss them further!<br />
<br />
=== Falkon ===<br />
[https://www.falkon.org/ Falkon] is a web browser previously known as QupZilla. [mailto:falkon@kde.org Contact the Falkon team].<br />
<br />
=== Cantor ===<br />
[https://edu.kde.org/cantor/ Cantor] provides a graphical frontend for different open source computer algebra systems and scientific programming languages. [mailto:kde-edu@kde.org Contact the KDE-Edu team].<br />
<br />
=== Plasma Mobile ===<br />
Plasma Mobile is KDE's software stack for mobile devices that includes Plasma phone components, Kirigami and a set of mobile-friendly applications.<br />
<br />
==== SMS App ====<br />
Plasma Mobile currently does not have a functional SMS app. One approach to this would be extending the SMS app that is currently developed for KDE Connect to have a Plasma Mobile backend.<br />
<br />
This includes:<br />
- Develop an approach to make the app support multiple backends<br />
- Develop a backend for the Plasma Mobile SMS stack (ofono)<br />
- Possibly improvements to the Plasma Mobile SMS stack<br />
- Possibly improvements to the SMS app UX<br />
<br />
Goal is to be able to communicate via SMS on a Plasma mobile phone with all basic features (sending, receiving SMS, browsing through conversations).<br />
<br />
This requires access to a Plasma mobile enabled phone, preferably the Nexus 5X. Second-hand phones are available at very low prices.<br />
<br />
'''Areas of knowledge:''' Basic understanding of C++ and Qt5.<br />
<br />
'''Mentors:''' Simon Redman and Nicolas Fella for KDE Connect specific things, Bhushan Shah for Plasma Mobile things. Get in touch with us on #kdeconnect on freenode or the [https://matrix.to/#/%23plasmamobile:matrix.org Plasma Mobile Matrix channel]<br />
<br />
=== KDevelop ===<br />
[https://www.kdevelop.org/ Kdevelop] is a cross-platform IDE for C, C++, Python, QML/JavaScript and PHP. [mailto:kdevelop-devel@kde.org Contact the Kdevelop team].<br />
<br />
=== Xdg-desktop-portal-kde ===<br />
<br />
<br />
=== KDE Connect ===<br />
[https://community.kde.org/KDEConnect KDE Connect] is a project that enables all your devices to communicate with each other.<br />
<br />
==== KDE Connect for Windows port ====<br />
We want to improve the integration of KDE Connect with the Windows system. As of now, KDE Connect builds on Windows (using Craft) and some plugins have been ported, but it's still unstable and incomplete. This project should aim to implement all the missing plugins, plus provide full integration with the OS: Send-to integration from the right-click menu, making the notifications appear in the Windows 10 notifications bar, etc. By the end of the project, we should have a releaseable installer for KDE Connect on Windows and/or KDE Connect published on the Windows app store.<br />
<br />
'''Areas of knowledge:''' Experience writing Windows applications, C++ and Qt5 is required.<br />
<br />
'''Mentor:''' Get in touch with us in the [https://mail.kde.org/mailman/listinfo/kdeconnect kdeconnect mailing list] or on #kdeconnect on Freenode<br />
<br />
=== Purpose ===<br />
The [https://api.kde.org/frameworks/purpose/html/index.html Purpose] framework offers the possibility to create integrate services and actions on any application without having to implement them specifically. Purpose will offer them mechanisms to list the different alternatives to execute given the requested action type and will facilitate components so that all the plugins can receive all the information they need.<br />
<br />
==== Barcode scanning infrastructure ====<br />
Purpose enables application developers to use features without implementing them themselves. It offers multiple alternatives to achieve a goal. Right now it supports sharing files and URLs.<br />
<br />
An interesting use case for it would be scanning barcodes. An application developer that wants to scan a barcode would ask Purpose for it. Purpose would offer multiple ways of doing it, e.g. from a local file, from the local camera or from a via KDE Connect connected phone. Purpose would then return the data to the application.<br />
<br />
Goal of this task is to have a framework for scanning barcodes as well as multiple implementations. This consists of:<br />
- Adding a new Plugin type to Purpose<br />
- A import from file backend<br />
- A local camera backend<br />
- A KDE Connect backend<br />
- One or more applications using it, e.g. Itinerary or a barcode scan app for Plasma Mobile<br />
<br />
'''Areas of knowledge:''' Basic understanding of C++ and Qt5 is required. Experience with Java/Android for the KDE Connect backend is beneficial.<br />
<br />
'''Mentor:''' Nicolas Fella (nicofee) for KDE Connect parts. Aleix Pol (apol) for Purpose parts. Volker Krause (vkrause) for zxing parts. [https://mail.kde.org/mailman/listinfo/kde-frameworks-devel Devel mail list].</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2019/Ideas&diff=82319GSoC/2019/Ideas2018-12-16T10:47:48Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2018/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
** '''Ideas with no mentors listed and their contact info will be removed''' **<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
===digiKam===<br />
digiKam is an advanced digital photo management application for Linux, Windows, and MacOS.<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://plus.google.com/+digikam Google+ page]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
<br />
==== Project: AI Face Recognition with OpenCV DNN module ====<br />
<br />
'''Brief Explanation''': With GoSC 2016, we have proposed a project to implement an AI extension to the [https://cgit.kde.org/digikam.git/tree/core/libs/facesengine/recognition digiKam core face recognition]. The student has used the Dlib C++ API, but we have not satisfied by the results, as the algorithm give poor performance. This choice has also introduced a huge back-port of low level codes which we don't want to maintain in the future. In other words, even if the project propose a more and less suitable solution to provide an AI face recognition processor based on deep-learning, this one was not really powerful and functional as well. <br />
This section of code is currently disabled in digiKam core.<br />
<br />
As digiKam core already depend of OpenCV library to perform complex image processing, and as OpenCV >= 3.3 release provide a new [https://docs.opencv.org/3.4.3/d2/d58/tutorial_table_of_content_dnn.html OpenCV DNN (Deep Neural Network) module], the goal of this project is to port the current digiKam core face recognition DNN extension to new OpenCV API and write all unit tests to validate the algorithm usability, efficiency, and performances, while learning and recognize faces automatically.<br />
<br />
'''Expected Results''': <br />
<br />
Provide a suitable Face recognition based on DNN OpenCV API, with unit test, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, OpenCV, digiKam<br />
<br />
'''Mentors''': Maik Qualmann and Gilles Caulier<br />
<br />
==== Project: Zoomable and Resizable Brush for Healing Clone Tool ====<br />
<br />
'''Brief Explanation''': With GoSC 2016, we have proposed a project to implement an [https://cgit.kde.org/digikam.git/tree/core/utilities/imageeditor/tools/enhance Healing Clone tool for digiKam image editor] to be able to remove unwanted artifacts from images. The student has implemented the basis without a zoomable canvas and without the resizable brush support. Due to this lack of features, the tools cannot be used in production by end-users.<br />
This section of code is currently disabled in digiKam core.<br />
<br />
The goal of this project is to implement the missing feature for the Healing Clone tool in image editor, including the unit-tests and the documentation.<br />
<br />
'''Expected Results''': <br />
<br />
Provide a suitable Healing clone tool for image editor, with unit test, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, digiKam<br />
<br />
'''Mentors''': Mohamed Anwer and Gilles Caulier<br />
<br />
=== Krita ===<br />
[http://www.krita.org Krita]: digital painting for artists. It supports creating images from scratch from beginning to end. Krita is a complex application and developers need to have a fair amount of experience in order to be able to do something.<br />
<br />
Krita is a widely used digital painting application for professional artists. Last year, Krita gained the ability to create hand-drawn 2D animations, among other new features. For this year, projects that the Krita team would be interested in include the following ideas.<br />
<br />
Note that we're always open to ideas you bring in yourself: if you're passionate about something you've come up with yourself, that you want for Krita, that's a big plus for us.<br />
<br />
We also expect prospective students to submit at least three patches for bugs or wishes or small features. We want to know how good you are! See https://phabricator.kde.org/T7724 for some smaller tasks that you could work on that are not bugs.<br />
<br />
==== Project: Integrating the MyPaint Brush Engine ====<br />
<br />
'''Brief Explanation''': The MyPaint brush engine has been separated from the MyPaint application and has been completely rewritten. Artists still like the mypaint brush engine a lot and it would be great to have the engine integrated in Krita as a new brush engine. Libmypaint can be found here: https://github.com/mypaint/libmypaint and the brush set here: https://github.com/mypaint/mypaint-brushes . The first goal is to integreate libmypaint in a Krita brushengine and make it load the brushes. The second goal is to expose the MyPaint brush options in Krita's brush editor and allow the modification and creation of MyPaint brushes in Krita. GIMP is an example of an application that has already integrated the MyPaint brush engine.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to effectively paint with MyPaint brushes in Krita.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
<br />
==== Project: Supporting Vertical Text and SVG2 Text in the Text Shape ====<br />
<br />
'''Brief Explanation''': Krita's Text Shape was rewritten for Krita 4.0. It is now SVG based, instead of ODF. There are many things lacking, though. The original goal was to support SVG2. Currently the text shape only supports SVG1. There is no automatic wordwrap and vertical text (e.g. Chinese and Japanese) is not supported either. The goal of this project is to support wordwrap and vertical text layout. Other improvements to the text shape can be proposed as well. The level of this project is advanced.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to create and edit vertical text. Text shapes should be able to automatically wrap text to the bounding box.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita, SVG, Typography, Text Layout<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
==== Project: Add New Fill Layer Types ====<br />
<br />
'''Brief Explanation''': Fill layers are layers that automatically generate content. Krita currently has two types of fill layers: Color and Pattern. There used to be another type that generated content dynamically using the OpenShiva scripting language. However, that language hasn't been maintained for a long time. The goal of this project is to add a new dynamic fill layer types that could fill an area with different effects such as perlin and other types of noise, clouds, hatching, fractals.<br />
<br />
'''Expected Results''': <br />
<br />
Several new fill layer types that allow the user to add dynamically generated content as a layer in the layer stack <br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
==== Project: Port Krita to Android OR iOS ====<br />
<br />
'''Brief Explanation''': Krita is currently only available on Windows, macOS and Linux. The goal of this project is to port the desktop version of Krita to one mobile operating system, either Android or iOS. This involves making sure all (or a viable subset of) Krita's dependencies are available on the target platform, as well as Krita itself.<br />
<br />
'''Expected Results''': <br />
<br />
A build of Krita that starts on either mobile OS and shows an image. Further integration with either mobile OS would be nice, but is an extra. Furthermore, the build system and build scripts need to be documented, complete and maintainable.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita, CMake, Android or iOS. You also need to have access to test hardware.<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
==== Project: Improve Krita for Touch Systems ====<br />
<br />
'''Brief Explanation''': Krita Gemini/Krita Sketch were version of Krita based on QtQuick 1 that provided a decent touch-only experience. Because of the technical limitations of QtQuick 2, the approach used in Gemini and Sketch is no longer viable. Since Krita 4, there is a QtQuick2 based touch docker that mimics the button bar found on some wacom devices. This is not configurable, and quite limited. This project involves working with Krita's UX designers and users to define a new approach to supporting touch devices, then implementing that support.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to work with Krita on a touch-only device such as a Surface Pro or Wacom Mobile Studio without wanting to chop their devices in two.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: SVG Mesh Gradients ====<br />
<br />
'''Brief Explanation''': Even though Mesh Gradients are not officially part of the truncated SVG2 specification anymore, having a second implementation next to Inkscape would help improving the standard. Plus, mesh gradients are very useful for artists. This project entails implementing a new gradient type. Whether this should be based on QGradient or not is up for discussion. The gradients should render exactly the same as in inkscape. See https://svgwg.org/svg-next/pservers.html#MeshGradientElement.<br />
<br />
'''Expected Results''': <br />
<br />
A new gradient type, UI to create and edit these gradients and apply them. Gradients should work both on vector objects as well as on paint layers.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita, SVG, Inkscape<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: Extending Animation Support for curves ====<br />
<br />
'''Brief Explanation''': In Krita, you can already add curves that could be applied to some properties of a layer, like opacity, animating those properties. We want the animation support extended by allowing users to place masks (filter masks, transformation masks, transparency masks) on the timeline and animate their properties using curves. Every property of a layer or mask placed on the timeline should be animatable.<br />
<br />
'''Expected results''':<br />
* Implementation of a gui for applying the curve settings to one or more properties of a mask or layer<br />
* Implementation of the actual rendering of the properties in the frames<br />
* Saving of these settings<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Jouni Pentikainen (tyyppi on IRC)<br />
<br />
==== Project: Taking the Shape Brush to the next level ====<br />
<br />
'''Brief Explanation''': Krita has a number of interesting brush engines. One of them is the Shape Brush engine. Inspired by Alchemy, the shape brush "throws" shapes on the canvas. The current implementation is limited to geometric shapes. We want the brush engine to be extended to make it possible to load vector shapes defined as PDF or SVG and use those to draw on the canvas as well. Other improvements are the addition of Feathering, an outline mode, edge sharpening and background textures.<br />
<br />
'''Expected Results''': A revamped and exciting shapes brush<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Krita<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
=== GCompris ===<br />
[https://gcompris.net/ GCompris] is a high quality educational software suite, including a large number of activities for children aged 2 to 10.<br />
<br />
[mailto:kde-edu@kde.org Contact] the KDE-Edu team.<br />
<br />
=== KDE neon ===<br />
[https://neon.kde.org KDE neon] compiles KDE software to make it available pronto.<br />
<br />
==== Project: ISO Image Writer ====<br />
<br />
[https://cgit.kde.org/isoimagewriter.git/ ISO Image Writer] copies ISO images onto USB drives. It needs code tidied up and builds made for Snap, FlatPak, Windows, Mac and good old Linux packages. <br />
<br />
'''Expected Results''': Installable packages<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Build systems, multi-platform<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Jonathan Riddell (IRC: Riddell)<br />
<br />
=== KDE Partition Manager ===<br />
[https://www.kde.org/applications/system/kdepartitionmanager KDE Partition Manager] is a utility program to help you manage the disk devices, partitions and file systems on your computer. It allows you to easily create, copy, move, delete, resize without losing data, backup and restore partitions. [https://mail.kde.org/mailman/listinfo/kde-devel Developer mail list].<br />
<br />
=== Kopete ===<br />
<br />
[https://kopete.kde.org/ Kopete] is a flexible and extendable multiple protocol instant messaging system. [http://mail.kde.org/mailman/listinfo/kopete-devel Developer mail list].<br />
<br />
=== LabPlot ===<br />
[https://labplot.kde.org LabPlot] is a KDE-application for interactive graphing and analysis of scientific data. LabPlot provides an easy way to create, manage and edit plots and to perform data analysis. Labplot is part of the [https://edu.kde.org/ KDE Edu team].<br />
<br />
[mailto:kde-edu@mail.kde.org Contact KDE-Edu]<br />
<br />
=== Kdenlive ===<br />
[https://kdenlive.org Kdenlive] is a KDE-application for professional video editors. It supports hundreds of video formats and all the features you can expect from a non-linear video editor, including some advanced features like timeline preview rendering, proxy clips and more.<br />
<br />
==== Project: Evolving Titler tool ====<br />
<br />
'''Brief Explanation''': Kdenlive titler tool allows to draw texts and images to composite over videos.<br />
<br />
Current code is using XML description, drawn by our "kdenlivetitle" MLT module, using old QPainter engine.<br />
This engines has limitations that blocks interesting features.<br />
Few years ago, an upstream module appeared in MLT, named "WebVfx", which uses QML to do similar things with much more flexibility.<br />
<br />
We would like to be able to load current XML titles and convert them automatically to QML format, and generate QML from our current GUI. Then the GUI could evolve to integrate new features, in accordance to our community requests & design group recommendations.<br />
<br />
'''Expected Results''': A titler using QML backend<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, QML<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Vincent Pinon (IRC: vpinon)<br />
<br />
=== Choqok ===<br />
Get in touch on IRC (#choqok).<br />
<br />
=== KStars ===<br />
[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support an ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can support addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Histogram Adjustments''': Controls for Shadow, Midtones, and Highlights. White / Black points controls.<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* New controls for histogram.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
=== Peruse ===<br />
Peruse is a comic book reader application by KDE, which is designed to work both on touch based devices, and on the traditional desktop. Additionally, it has a tool called Peruse Creator which is designed to create comic books for use with Peruse and any other CBZ capable comic book reader. It has rudimentary support for the [http://acbf.wikia.com/wiki/Specifications Advanced Comic Book Format], which is a metadata container for comic book archives (CBR, CBZ and so on).<br />
<br />
See the Peruse website for more detailed information: https://peruse.kde.org/<br />
<br />
=== KGpg ===<br />
[https://utils.kde.org/projects/kgpg KGpg] is a frontend for GnuPG key management. [mailto:kde-utils-devel@kde.org Contact the KGpg team].<br />
<br />
===KWin===<br />
KWin is the KDE project's default window manager. [https://mail.kde.org/mailman/listinfo/kwin Kwin developer mail list].<br />
<br />
=== Plasma ===<br />
Plasma is KDE's desktop environment; Simple by default, powerful when needed. [https://mail.kde.org/mailman/listinfo/plasma-devel Developer mail list].<br />
<br />
=== Okular ===<br />
Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.<br />
<br />
=== WikiToLearn ===<br />
WikiToLearn was born as a non-profit community and an open source project, which provides free and collaborative textbooks with the help of students and academia. Knowledge only grows if shared!<br />
<br />
You can find all of the [ https://www.wikitolearn.org/ WikiToLearn] community on [https://chat.wikitolearn.org chat.wikitolearn.org]. We have many other ideas: get in touch with us to discuss them further!<br />
<br />
=== Falkon ===<br />
[https://www.falkon.org/ Falkon] is a web browser previously known as QupZilla. [mailto:falkon@kde.org Contact the Falkon team].<br />
<br />
=== Cantor ===<br />
[https://edu.kde.org/cantor/ Cantor] provides a graphical frontend for different open source computer algebra systems and scientific programming languages. [mailto:kde-edu@kde.org Contact the KDE-Edu team].<br />
<br />
=== Plasma Mobile ===<br />
Plasma Mobile is KDE's software stack for mobile devices that includes Plasma phone components, Kirigami and a set of mobile-friendly applications.<br />
<br />
==== SMS App ====<br />
Plasma Mobile currently does not have a functional SMS app. One approach to this would be extending the SMS app that is currently developed for KDE Connect to have a Plasma Mobile backend.<br />
<br />
This includes:<br />
- Develop an approach to make the app support multiple backends<br />
- Develop a backend for the Plasma Mobile SMS stack (ofono)<br />
- Possibly improvements to the Plasma Mobile SMS stack<br />
- Possibly improvements to the SMS app UX<br />
<br />
Goal is to be able to communicate via SMS on a Plasma mobile phone with all basic features (sending, receiving SMS, browsing through conversations).<br />
<br />
This requires access to a Plasma mobile enabled phone, preferably the Nexus 5X. Second-hand phones are available at very low prices.<br />
<br />
'''Areas of knowledge:''' Basic understanding of C++ and Qt5.<br />
<br />
'''Mentors:''' Simon Redman and Nicolas Fella for KDE Connect specific things, Bhushan Shah for Plasma Mobile things. Get in touch with us on #kdeconnect on freenode or the [https://matrix.to/#/%23plasmamobile:matrix.org Plasma Mobile Matrix channel]<br />
<br />
=== KDevelop ===<br />
[https://www.kdevelop.org/ Kdevelop] is a cross-platform IDE for C, C++, Python, QML/JavaScript and PHP. [mailto:kdevelop-devel@kde.org Contact the Kdevelop team].<br />
<br />
=== Xdg-desktop-portal-kde ===<br />
<br />
<br />
=== KDE Connect ===<br />
[https://community.kde.org/KDEConnect KDE Connect] is a project that enables all your devices to communicate with each other.<br />
<br />
==== KDE Connect for Windows port ====<br />
We want to improve the integration of KDE Connect with the Windows system. As of now, KDE Connect builds on Windows (using Craft) and some plugins have been ported, but it's still unstable and incomplete. This project should aim to implement all the missing plugins, plus provide full integration with the OS: Send-to integration from the right-click menu, making the notifications appear in the Windows 10 notifications bar, etc. By the end of the project, we should have a releaseable installer for KDE Connect on Windows and/or KDE Connect published on the Windows app store.<br />
<br />
'''Areas of knowledge:''' Experience writing Windows applications, C++ and Qt5 is required.<br />
<br />
'''Mentor:''' Get in touch with us in the [https://mail.kde.org/mailman/listinfo/kdeconnect kdeconnect mailing list] or on #kdeconnect on Freenode<br />
<br />
=== Purpose ===<br />
The [https://api.kde.org/frameworks/purpose/html/index.html Purpose] framework offers the possibility to create integrate services and actions on any application without having to implement them specifically. Purpose will offer them mechanisms to list the different alternatives to execute given the requested action type and will facilitate components so that all the plugins can receive all the information they need.<br />
<br />
==== Barcode scanning infrastructure ====<br />
Purpose enables application developers to use features without implementing them themselves. It offers multiple alternatives to achieve a goal. Right now it supports sharing files and URLs.<br />
<br />
An interesting use case for it would be scanning barcodes. An application developer that wants to scan a barcode would ask Purpose for it. Purpose would offer multiple ways of doing it, e.g. from a local file, from the local camera or from a via KDE Connect connected phone. Purpose would then return the data to the application.<br />
<br />
Goal of this task is to have a framework for scanning barcodes as well as multiple implementations. This consists of:<br />
- Adding a new Plugin type to Purpose<br />
- A import from file backend<br />
- A local camera backend<br />
- A KDE Connect backend<br />
- One or more applications using it, e.g. Itinerary or a barcode scan app for Plasma Mobile<br />
<br />
'''Areas of knowledge:''' Basic understanding of C++ and Qt5 is required. Experience with Java/Android for the KDE Connect backend is beneficial.<br />
<br />
'''Mentor:''' Nicolas Fella (nicofee) for KDE Connect parts. Aleix Pol (apol) for Purpose parts. Volker Krause (vkrause) for zxing parts. [https://mail.kde.org/mailman/listinfo/kde-frameworks-devel Devel mail list].</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2019/Ideas&diff=82318GSoC/2019/Ideas2018-12-16T10:35:57Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2018/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Becoming accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or another image '''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor) <br />
<br />
** '''Ideas with no mentors listed and their contact info will be removed''' **<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
===digiKam===<br />
digiKam is an advanced digital photo management application for Linux, Windows, and MacOS.<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://plus.google.com/+digikam Google+ page]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
<br />
==== Project: AI Face Recognition with OpenCV DNN module ====<br />
<br />
'''Brief Explanation''': With GoSC 2016, we have proposed a project to implement an AI extension to the [https://cgit.kde.org/digikam.git/tree/core/libs/facesengine/recognition digiKam core face recognition]. The student has used the Dlib C++ API, but we have not satisfied by the results, as the algorithm give poor performance. This choice has also introduced a huge back-port of low level codes which we don't want to maintain in the future. In other words, even if the project propose a more and less suitable solution to provide an AI face recognition processor based on deep-learning, this one was not really powerful and functional as well. <br />
This section of code is currently disabled in digiKam core.<br />
<br />
As digiKam core already depend of OpenCV library to perform complex image processing, and as OpenCV >= 3.3 release provide a new [https://docs.opencv.org/3.4.3/d2/d58/tutorial_table_of_content_dnn.html OpenCV DNN (Deep Neural Network) module], the goal of this project is to port the current digiKam core face recognition DNN extension to new OpenCV API and write all unit tests to validate the algorithm usability, efficiency, and performances, while learning and recognize faces automatically.<br />
<br />
'''Expected Results''': <br />
<br />
Provide a suitable Face recognition based on DNN OpenCV API, with unit test, and documentation.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, OpenCV, digiKam<br />
<br />
'''Mentor''': Maik Qualmann and Gilles Caulier<br />
<br />
=== Krita ===<br />
[http://www.krita.org Krita]: digital painting for artists. It supports creating images from scratch from beginning to end. Krita is a complex application and developers need to have a fair amount of experience in order to be able to do something.<br />
<br />
Krita is a widely used digital painting application for professional artists. Last year, Krita gained the ability to create hand-drawn 2D animations, among other new features. For this year, projects that the Krita team would be interested in include the following ideas.<br />
<br />
Note that we're always open to ideas you bring in yourself: if you're passionate about something you've come up with yourself, that you want for Krita, that's a big plus for us.<br />
<br />
We also expect prospective students to submit at least three patches for bugs or wishes or small features. We want to know how good you are! See https://phabricator.kde.org/T7724 for some smaller tasks that you could work on that are not bugs.<br />
<br />
==== Project: Integrating the MyPaint Brush Engine ====<br />
<br />
'''Brief Explanation''': The MyPaint brush engine has been separated from the MyPaint application and has been completely rewritten. Artists still like the mypaint brush engine a lot and it would be great to have the engine integrated in Krita as a new brush engine. Libmypaint can be found here: https://github.com/mypaint/libmypaint and the brush set here: https://github.com/mypaint/mypaint-brushes . The first goal is to integreate libmypaint in a Krita brushengine and make it load the brushes. The second goal is to expose the MyPaint brush options in Krita's brush editor and allow the modification and creation of MyPaint brushes in Krita. GIMP is an example of an application that has already integrated the MyPaint brush engine.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to effectively paint with MyPaint brushes in Krita.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
<br />
==== Project: Supporting Vertical Text and SVG2 Text in the Text Shape ====<br />
<br />
'''Brief Explanation''': Krita's Text Shape was rewritten for Krita 4.0. It is now SVG based, instead of ODF. There are many things lacking, though. The original goal was to support SVG2. Currently the text shape only supports SVG1. There is no automatic wordwrap and vertical text (e.g. Chinese and Japanese) is not supported either. The goal of this project is to support wordwrap and vertical text layout. Other improvements to the text shape can be proposed as well. The level of this project is advanced.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to create and edit vertical text. Text shapes should be able to automatically wrap text to the bounding box.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita, SVG, Typography, Text Layout<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
==== Project: Add New Fill Layer Types ====<br />
<br />
'''Brief Explanation''': Fill layers are layers that automatically generate content. Krita currently has two types of fill layers: Color and Pattern. There used to be another type that generated content dynamically using the OpenShiva scripting language. However, that language hasn't been maintained for a long time. The goal of this project is to add a new dynamic fill layer types that could fill an area with different effects such as perlin and other types of noise, clouds, hatching, fractals.<br />
<br />
'''Expected Results''': <br />
<br />
Several new fill layer types that allow the user to add dynamically generated content as a layer in the layer stack <br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
==== Project: Port Krita to Android OR iOS ====<br />
<br />
'''Brief Explanation''': Krita is currently only available on Windows, macOS and Linux. The goal of this project is to port the desktop version of Krita to one mobile operating system, either Android or iOS. This involves making sure all (or a viable subset of) Krita's dependencies are available on the target platform, as well as Krita itself.<br />
<br />
'''Expected Results''': <br />
<br />
A build of Krita that starts on either mobile OS and shows an image. Further integration with either mobile OS would be nice, but is an extra. Furthermore, the build system and build scripts need to be documented, complete and maintainable.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita, CMake, Android or iOS. You also need to have access to test hardware.<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
<br />
==== Project: Improve Krita for Touch Systems ====<br />
<br />
'''Brief Explanation''': Krita Gemini/Krita Sketch were version of Krita based on QtQuick 1 that provided a decent touch-only experience. Because of the technical limitations of QtQuick 2, the approach used in Gemini and Sketch is no longer viable. Since Krita 4, there is a QtQuick2 based touch docker that mimics the button bar found on some wacom devices. This is not configurable, and quite limited. This project involves working with Krita's UX designers and users to define a new approach to supporting touch devices, then implementing that support.<br />
<br />
'''Expected Results''': <br />
<br />
Artists should be able to work with Krita on a touch-only device such as a Surface Pro or Wacom Mobile Studio without wanting to chop their devices in two.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: SVG Mesh Gradients ====<br />
<br />
'''Brief Explanation''': Even though Mesh Gradients are not officially part of the truncated SVG2 specification anymore, having a second implementation next to Inkscape would help improving the standard. Plus, mesh gradients are very useful for artists. This project entails implementing a new gradient type. Whether this should be based on QGradient or not is up for discussion. The gradients should render exactly the same as in inkscape. See https://svgwg.org/svg-next/pservers.html#MeshGradientElement.<br />
<br />
'''Expected Results''': <br />
<br />
A new gradient type, UI to create and edit these gradients and apply them. Gradients should work both on vector objects as well as on paint layers.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C, C++, Qt, Krita, SVG, Inkscape<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
==== Project: Extending Animation Support for curves ====<br />
<br />
'''Brief Explanation''': In Krita, you can already add curves that could be applied to some properties of a layer, like opacity, animating those properties. We want the animation support extended by allowing users to place masks (filter masks, transformation masks, transparency masks) on the timeline and animate their properties using curves. Every property of a layer or mask placed on the timeline should be animatable.<br />
<br />
'''Expected results''':<br />
* Implementation of a gui for applying the curve settings to one or more properties of a mask or layer<br />
* Implementation of the actual rendering of the properties in the frames<br />
* Saving of these settings<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Level''' Advanced<br />
<br />
'''Mentor''': Jouni Pentikainen (tyyppi on IRC)<br />
<br />
==== Project: Taking the Shape Brush to the next level ====<br />
<br />
'''Brief Explanation''': Krita has a number of interesting brush engines. One of them is the Shape Brush engine. Inspired by Alchemy, the shape brush "throws" shapes on the canvas. The current implementation is limited to geometric shapes. We want the brush engine to be extended to make it possible to load vector shapes defined as PDF or SVG and use those to draw on the canvas as well. Other improvements are the addition of Feathering, an outline mode, edge sharpening and background textures.<br />
<br />
'''Expected Results''': A revamped and exciting shapes brush<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Krita<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud)<br />
<br />
=== GCompris ===<br />
[https://gcompris.net/ GCompris] is a high quality educational software suite, including a large number of activities for children aged 2 to 10.<br />
<br />
[mailto:kde-edu@kde.org Contact] the KDE-Edu team.<br />
<br />
=== KDE neon ===<br />
[https://neon.kde.org KDE neon] compiles KDE software to make it available pronto.<br />
<br />
==== Project: ISO Image Writer ====<br />
<br />
[https://cgit.kde.org/isoimagewriter.git/ ISO Image Writer] copies ISO images onto USB drives. It needs code tidied up and builds made for Snap, FlatPak, Windows, Mac and good old Linux packages. <br />
<br />
'''Expected Results''': Installable packages<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Build systems, multi-platform<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Jonathan Riddell (IRC: Riddell)<br />
<br />
=== KDE Partition Manager ===<br />
[https://www.kde.org/applications/system/kdepartitionmanager KDE Partition Manager] is a utility program to help you manage the disk devices, partitions and file systems on your computer. It allows you to easily create, copy, move, delete, resize without losing data, backup and restore partitions. [https://mail.kde.org/mailman/listinfo/kde-devel Developer mail list].<br />
<br />
=== Kopete ===<br />
<br />
[https://kopete.kde.org/ Kopete] is a flexible and extendable multiple protocol instant messaging system. [http://mail.kde.org/mailman/listinfo/kopete-devel Developer mail list].<br />
<br />
=== LabPlot ===<br />
[https://labplot.kde.org LabPlot] is a KDE-application for interactive graphing and analysis of scientific data. LabPlot provides an easy way to create, manage and edit plots and to perform data analysis. Labplot is part of the [https://edu.kde.org/ KDE Edu team].<br />
<br />
[mailto:kde-edu@mail.kde.org Contact KDE-Edu]<br />
<br />
=== Kdenlive ===<br />
[https://kdenlive.org Kdenlive] is a KDE-application for professional video editors. It supports hundreds of video formats and all the features you can expect from a non-linear video editor, including some advanced features like timeline preview rendering, proxy clips and more.<br />
<br />
==== Project: Evolving Titler tool ====<br />
<br />
'''Brief Explanation''': Kdenlive titler tool allows to draw texts and images to composite over videos.<br />
<br />
Current code is using XML description, drawn by our "kdenlivetitle" MLT module, using old QPainter engine.<br />
This engines has limitations that blocks interesting features.<br />
Few years ago, an upstream module appeared in MLT, named "WebVfx", which uses QML to do similar things with much more flexibility.<br />
<br />
We would like to be able to load current XML titles and convert them automatically to QML format, and generate QML from our current GUI. Then the GUI could evolve to integrate new features, in accordance to our community requests & design group recommendations.<br />
<br />
'''Expected Results''': A titler using QML backend<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, QML<br />
<br />
'''Level''' Medium<br />
<br />
'''Mentor''': Vincent Pinon (IRC: vpinon)<br />
<br />
=== Choqok ===<br />
Get in touch on IRC (#choqok).<br />
<br />
=== KStars ===<br />
[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time.<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support an ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can support addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: FITSViewer & Photometry Improvements ====<br />
'''Brief explanation''': The FITSViewer is used to display [https://fits.gsfc.nasa.gov/fits_standard.html FITS] images as captured by cameras or opened by the user. It supports 8, 16, 32, and 64bit formats with either a single channel (Mono or Bayer) or RGB cube. The goal for this project is to provide efficient and intuitive controls for:<br />
# '''Histogram Adjustments''': Controls for Shadow, Midtones, and Highlights. White / Black points controls.<br />
# '''Noise Calculation''': Calculate the overall Signal-to-Noise (SNR) radio for the overall image, or a specific subframe of the image.<br />
# '''Sky Glow Computation''': Estimation of Sky Glow component in image of various exposures. Each captured image is affected by multiple sources of noise, only of which is the sky glow which in turn is affected by the atmosphere, pollution, and artificial sources (e.g. light). The objective is to propose to the user the optimum exposure time given the sky glow contribution to the image.<br />
# '''Mask Overlay''': Ability to select custom mask over stars to aid in focusing and photometry.<br />
# '''Photometry''': KStars includes SEP which can be used to extract sources from stellar images and also performs aperture photometry. A new tool should be developed to aid the users to perform photometric work with the images including reduction of images (darks & flats) with various optimization/algorithmic settings. Additionally, the tool provides means for aperture photometry calculations as well.<br />
Since FITSViews typically deals with very high-resolution images, such calculations can be very computationally expensive. It is expected that a very efficient multi-threaded code to be developed to take advantage of all the available cores on the system and any hardware or instruction set optimizations to achieve the smoothest user experience.<br />
'''Expected results''': <br />
* Improved Histogram Tool.<br />
* New controls for histogram.<br />
* SNR, Sky Glow, and Photometry calculations.<br />
* Photometric reductions. Aperture photometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Threading, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
=== Peruse ===<br />
Peruse is a comic book reader application by KDE, which is designed to work both on touch based devices, and on the traditional desktop. Additionally, it has a tool called Peruse Creator which is designed to create comic books for use with Peruse and any other CBZ capable comic book reader. It has rudimentary support for the [http://acbf.wikia.com/wiki/Specifications Advanced Comic Book Format], which is a metadata container for comic book archives (CBR, CBZ and so on).<br />
<br />
See the Peruse website for more detailed information: https://peruse.kde.org/<br />
<br />
=== KGpg ===<br />
[https://utils.kde.org/projects/kgpg KGpg] is a frontend for GnuPG key management. [mailto:kde-utils-devel@kde.org Contact the KGpg team].<br />
<br />
===KWin===<br />
KWin is the KDE project's default window manager. [https://mail.kde.org/mailman/listinfo/kwin Kwin developer mail list].<br />
<br />
=== Plasma ===<br />
Plasma is KDE's desktop environment; Simple by default, powerful when needed. [https://mail.kde.org/mailman/listinfo/plasma-devel Developer mail list].<br />
<br />
=== Okular ===<br />
Okular is a universal document viewer developed by KDE. Okular works on multiple platforms, including but not limited to Linux, Windows, Mac OS X, *BSD. [mailto:okular-devel@kde.org Contact] the Okular developers.<br />
<br />
=== WikiToLearn ===<br />
WikiToLearn was born as a non-profit community and an open source project, which provides free and collaborative textbooks with the help of students and academia. Knowledge only grows if shared!<br />
<br />
You can find all of the [ https://www.wikitolearn.org/ WikiToLearn] community on [https://chat.wikitolearn.org chat.wikitolearn.org]. We have many other ideas: get in touch with us to discuss them further!<br />
<br />
=== Falkon ===<br />
[https://www.falkon.org/ Falkon] is a web browser previously known as QupZilla. [mailto:falkon@kde.org Contact the Falkon team].<br />
<br />
=== Cantor ===<br />
[https://edu.kde.org/cantor/ Cantor] provides a graphical frontend for different open source computer algebra systems and scientific programming languages. [mailto:kde-edu@kde.org Contact the KDE-Edu team].<br />
<br />
=== Plasma Mobile ===<br />
Plasma Mobile is KDE's software stack for mobile devices that includes Plasma phone components, Kirigami and a set of mobile-friendly applications.<br />
<br />
==== SMS App ====<br />
Plasma Mobile currently does not have a functional SMS app. One approach to this would be extending the SMS app that is currently developed for KDE Connect to have a Plasma Mobile backend.<br />
<br />
This includes:<br />
- Develop an approach to make the app support multiple backends<br />
- Develop a backend for the Plasma Mobile SMS stack (ofono)<br />
- Possibly improvements to the Plasma Mobile SMS stack<br />
- Possibly improvements to the SMS app UX<br />
<br />
Goal is to be able to communicate via SMS on a Plasma mobile phone with all basic features (sending, receiving SMS, browsing through conversations).<br />
<br />
This requires access to a Plasma mobile enabled phone, preferably the Nexus 5X. Second-hand phones are available at very low prices.<br />
<br />
'''Areas of knowledge:''' Basic understanding of C++ and Qt5.<br />
<br />
'''Mentors:''' Simon Redman and Nicolas Fella for KDE Connect specific things, Bhushan Shah for Plasma Mobile things. Get in touch with us on #kdeconnect on freenode or the [https://matrix.to/#/%23plasmamobile:matrix.org Plasma Mobile Matrix channel]<br />
<br />
=== KDevelop ===<br />
[https://www.kdevelop.org/ Kdevelop] is a cross-platform IDE for C, C++, Python, QML/JavaScript and PHP. [mailto:kdevelop-devel@kde.org Contact the Kdevelop team].<br />
<br />
=== Xdg-desktop-portal-kde ===<br />
<br />
<br />
=== KDE Connect ===<br />
[https://community.kde.org/KDEConnect KDE Connect] is a project that enables all your devices to communicate with each other.<br />
<br />
==== KDE Connect for Windows port ====<br />
We want to improve the integration of KDE Connect with the Windows system. As of now, KDE Connect builds on Windows (using Craft) and some plugins have been ported, but it's still unstable and incomplete. This project should aim to implement all the missing plugins, plus provide full integration with the OS: Send-to integration from the right-click menu, making the notifications appear in the Windows 10 notifications bar, etc. By the end of the project, we should have a releaseable installer for KDE Connect on Windows and/or KDE Connect published on the Windows app store.<br />
<br />
'''Areas of knowledge:''' Experience writing Windows applications, C++ and Qt5 is required.<br />
<br />
'''Mentor:''' Get in touch with us in the [https://mail.kde.org/mailman/listinfo/kdeconnect kdeconnect mailing list] or on #kdeconnect on Freenode<br />
<br />
=== Purpose ===<br />
The [https://api.kde.org/frameworks/purpose/html/index.html Purpose] framework offers the possibility to create integrate services and actions on any application without having to implement them specifically. Purpose will offer them mechanisms to list the different alternatives to execute given the requested action type and will facilitate components so that all the plugins can receive all the information they need.<br />
<br />
==== Barcode scanning infrastructure ====<br />
Purpose enables application developers to use features without implementing them themselves. It offers multiple alternatives to achieve a goal. Right now it supports sharing files and URLs.<br />
<br />
An interesting use case for it would be scanning barcodes. An application developer that wants to scan a barcode would ask Purpose for it. Purpose would offer multiple ways of doing it, e.g. from a local file, from the local camera or from a via KDE Connect connected phone. Purpose would then return the data to the application.<br />
<br />
Goal of this task is to have a framework for scanning barcodes as well as multiple implementations. This consists of:<br />
- Adding a new Plugin type to Purpose<br />
- A import from file backend<br />
- A local camera backend<br />
- A KDE Connect backend<br />
- One or more applications using it, e.g. Itinerary or a barcode scan app for Plasma Mobile<br />
<br />
'''Areas of knowledge:''' Basic understanding of C++ and Qt5 is required. Experience with Java/Android for the KDE Connect backend is beneficial.<br />
<br />
'''Mentor:''' Nicolas Fella (nicofee) for KDE Connect parts. Aleix Pol (apol) for Purpose parts. Volker Krause (vkrause) for zxing parts. [https://mail.kde.org/mailman/listinfo/kde-frameworks-devel Devel mail list].</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2018/Ideas&diff=79785GSoC/2018/Ideas2018-03-14T13:02:29Z<p>Cauliergilles: /* Project 3: Supporting Twitter and Amazon Drive services in digiKam export */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2017/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Being accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or other image'''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor)<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
===digiKam===<br />
digiKam is an advanced digital photo management application for Linux, Windows, and MacOS.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://plus.google.com/+digikam Google+ page]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
<br />
==== Project 1 : digiKam Web Services tools authentication with OAuth2 ==== <br />
<br />
'''Brief Explanation''': digiKam has many tools dedicated to share items on web services, as Facebook, Google Photo, Google Drive, SmugMug, etc...<br />
All tools use an older way to be authenticated through the web service using an external web browser instance to capture the token network session. This is a fastidious way to open a web service session.<br />
Currently, Flickr, DropBox, and Imgur tools use an embedded OAuth2 authentification without a web browser instance through O2 library for Qt.<br />
The goal of this project is to port all others web service tools to O2 library API.<br />
<br />
'''Expected results''':<br />
*Review code of current tools ported to OAuth2<br />
*Review current implementation of tools and list all web services compatible with OAuth standard.<br />
*Plan the amount of work to port tools by order of complexity, and identify possible problems.<br />
*Port code for each tools step by step, by writing unit tests independently.<br />
*Test all tools with all use cases, depending of tool options.<br />
*Write documentation.<br />
<br />
'''Knowledge Prerequisite''': Network, OAuth, C++, and Qt5<br />
<br />
'''Mentor''': Maik Qualmann and Gilles Caulier<br />
<br />
==== Project 2 : Added the possibility to manually sort the digiKam icon view ====<br />
<br />
'''Brief Explanation''': digiKam has the possibility to sort the items in the icon view according to different criteria, for example by: name, date, file size, rating etc. Many digiKam users have long been wishing to manually sort the icon view. The bug report (https://bugs.kde.org/show_bug.cgi?id=91562) now has more than 700 votes.<br />
The goal of this project is to rearrange the sorting of items in the icon view by drag and drop. This sort must be stored in the database and must be retrievable like the other sort functions.<br />
<br />
'''Expected results''':<br />
*Review code of current sort functions and the icon view model.<br />
*Review current database schema of SQLite and MySQL.<br />
*Adding a column to SQLite and MySQL table to store manual sort order.<br />
*Write database upgrade procedure to port older digiKam databases.<br />
*Write code for reading and writing manual sort order to the database.<br />
*Write code for the manual item sorting in the icon view.<br />
*Test your implementation of manual sorting.<br />
*Write documentation.<br />
<br />
'''Knowledge Prerequisite''': Databases SQLite and MySQL, C++ and Qt5<br />
<br />
'''Mentor''': Maik Qualmann and Gilles Caulier<br />
<br />
==== Project 3: Supporting Twitter and Amazon Drive services in digiKam export ====<br />
<br />
'''Brief explanation''': There are many web services that digiKam can communicate with and export images to them. Following digiKam convection, we want to support Twitter and OneDrive export.<br />
Also, It would be great if we grouped web services in specific categories, for example: Facebook, Twitter, VK, G+, ..etc will be grouped in "Social Networks" category. the user can expand a category and check the boxes beside every service he want to use and share an image to all selected service with the same status update.<br />
<br />
'''Expected Results'''<br />
*Reviewing currently supported web services code<br />
*Writing a client to connect to Twitter's API to be used to export images with status to it<br />
*Writing a client to connect to OneDrive API to export images and albums to it<br />
*Creating a dedicated widget to hold web services categories and categorizing each service to the right category<br />
*Supporting the ability to select multiple service and export to them at once<br />
*Writing unit tests for each new service<br />
*Writing docs for each newly created class<br />
<br />
'''Knowledge Prerequisites''': C++, Qt, Network, Restful API's<br />
<br />
'''Mentor''': Mohamed Anwer and Gilles Caulier<br />
<br />
=== Krita ===<br />
[http://www.krita.org Krita]: digital painting for artists. It supports creating images from scratch from beginning to end. Krita is a complex application and developers need to have a fair amount of experience in order to be able to do something.<br />
<br />
Krita is a widely used digital painting application for professional artists. Last year, Krita gained the ability to create hand-drawn 2D animations, among other new features. For this year, projects that the Krita team would be interested in include the following ideas.<br />
<br />
Note that we're always open to ideas you bring in yourself: if you're passionate about something you've come up with yourself, that you want for Krita, that's a big plus for us.<br />
<br />
We also expect prospective students to submit at least three patches for bugs or wishes or small features. We want to know how good you are! See https://phabricator.kde.org/T7724 for some smaller tasks that you could work on that are not bugs.<br />
<br />
==== Project: Optimize multithreading in Krita's Tile Manager (make the hash table lockfree) ====<br />
<br />
'''Brief explanation''': This is a hard-core project, only suitable for someone with deep knowledge of the problems of designing multi-threaded software. It involves Krita's core datamodel, where the tiles that compose image data are managed. The main problem is that at the moment the core utilizes QReadWriteLock and QMutex a lot, which means that Krita painting performance stops scaling well, when the number of CPU cores becomes larger than 8. The goal of this project is to locate all the bottlenecks (there are at least 4 of them) and resolve them in a lock-free. One of the bottlenecks involves KisTileHashTable which is used to access the tiles. Since this touches the very core of Krita, a thorough test plan is essential.<br />
<br />
'''Steps to apply''':<br />
The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
# Build Krita with unittests enabled<br />
# Install GNU Perf or VTune<br />
# Run FreehandStrokeBenchmark in a profiler and try to locate all the places where most of the locking/waits happen. The main one will be the hash table, but there are at least three more (your task is to locate them and add into your proposal!)<br />
# (optional) To test your coding abilities you can try to port one of the hash tables code from [https://github.com/preshing/junction Junction] library to Qt's primitives. If you don't feel overwhelmed with such code, you are perfectly fit for the project!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Expected results''': No bottlenecks anymore! <br />
<br />
'''Knowledge Prerequisite''': C++, Qt, threads, locks.<br />
<br />
'''Mentor''': Dmitry Kazakov (dmkitryK|log on irc)<br />
<br />
==== Project: Extending Animation Support for curves ====<br />
<br />
'''Brief Explanation''': In Krita, you can already add curves that could be applied to some properties of a layer, like opacity, animating those properties. We want the animation support extended by allowing users to place masks (filter masks, transformation masks, transparency masks) on the timeline and animate their properties using curves. Every property of a layer or mask placed on the timeline should be animatable.<br />
<br />
'''Expected results''':<br />
* Implementation of a gui for applying the curve settings to one or more properties of a mask or layer<br />
* Implementation of the actual rendering of the properties in the frames<br />
* Saving of these settings<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk_log)<br />
<br />
==== Project: Taking the Shape Brush to the next level ====<br />
'''Brief Explanation''': Krita has a number of interesting brush engines. One of them is the Shape Brush engine. Inspired by Alchemy, the shape brush "throws" shapes on the canvas. The current implementation is limited to geometric shapes. We want the brush engine to be extended to make it possible to load vector shapes defined as PDF or SVG and use those to draw on the canvas as well. Other improvements are the addition of Feathering, an outline mode, edge sharpening and background textures.<br />
<br />
'''Expected Results''': A revamped and exciting shapes brush<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Krita<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Lukas Tvrdy (IRC: LukasT)<br />
<br />
==== Project: Analysis of thoroughput of Krita Blending Modes and porting them to AVX2 ====<br />
<br />
'''Brief Explanation''': Blending modes is the hottest piece of code in Krita. It should process gigabytes of data per second, therefore it should be extremely optimized. Some of its parts are already optimized to use AVX instructions, but some (float16 color spaces) are not. We need to port the rest of the color spaces to AVX and make a research into the possibilities of using AXV2 instructions directly (int16 instructions). [https://github.com/VcDevel/Vc Vc library] supports AXV2 instructions, though we don't know to what extent, it might happen that you would need to extend the library itself to get the needed functionality. This is another hard-core project only suitable if you have a good deal of experience.<br />
<br />
'''Steps to apply''': The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
<br />
# Build Krita with unittests enabled<br />
# Install GNU Perf or VTune<br />
# Run KisCompositionBenchmark under a profiler and see the hottest places of blending modes code<br />
# Check the code of "Normal" blending mode for float32 color spaces (KoOptimizedCompositeOpOver128), copy the file and try to create your own blending mode for float16 color space. Hint: the only thing you should do is to implement correct unpacking/packing code that would convert the values to 32-bit float and back.<br />
# If you don't feel overwhelmed with such code, you are perfectly fit for the project!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Expected Results''': Float16 color spaces are ported to AVX, Integer8 and Integer16 colorspaces are ported to AVX2<br />
<br />
'''Knowledge Prerequisite''': C++, SEE/AVX (read [http://www.intel.eu/content/www/eu/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html Intel's manual])<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Port generic code for not-so-popular blending modes to AVX ====<br />
<br />
'''Brief Explanation''': In Krita we have a lot of blending modes, but only Normal and Alpha Darken are optimized and ported to AVX instructions. The reason for that is obvious, these two blending modes are the hottest and are used in every single image produced in Krita. But it doesn't mean that the other blending modes are less important for painters: they still use Multiply for painting shadows, and Linear Dodge for painting highlights, so they should also be fast! <br />
<br />
The good piece of news is that all these "non-popular" blending modes are implemented in Krita by means of a single class KoCompositeOpGenericSC, so, basically, as a result of your project, you should provide one class only! The bad piece of news is that this single class implements about a hundred of blending modes using C++ templates... so be prepared! :)<br />
<br />
'''Steps to apply''': The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
<br />
# Build Krita with unittests enabled<br />
# Install GNU Perf or VTune<br />
# Run KisCompositionBenchmark under a profiler and see the hottest places of blending modes code<br />
# Check the code of "Copy" blending mode in KoCompositeOpCopy2 and try to port it into AVX for RGB8 colorspace. Use KoOptimizedCompositeOpOver32 as an example.<br />
# If you don't feel overwhelmed with such code, you are perfectly fit for the project!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Expected Results''': "Copy" blending mode is ported to AVX, all the "generic" blending modes are ported to AVX<br />
<br />
'''Knowledge Prerequisite''': C++, SEE/AVX (read [http://www.intel.eu/content/www/eu/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html Intel's manual])<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Optimize Soft, Gaussian and Stamp brushes to use AVX ====<br />
<br />
'''Brief Explanation''': When the user draws a line in Krita, this line consists of thousands of small rectangular images (dabs) that are painted one over another. For each dab, Krita generates its own mask (depending on the stylus pressure and tilt) and uses this mask for filling the layer. It happens thousands of times per second, which makes mask generation code one of the hottest places in Krita. We already have AVX optimization for Default brush mask engine and it works 5(!) times faster than Gaussian engine and 3(!) times faster than the Soft engine. The goal of this project is to port the rest of non-optimized engines to use AVX via [https://github.com/VcDevel/Vc Vc library] and make them faster.<br />
<br />
'''Steps to apply''': The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
<br />
# Build Krita with unittests enabled<br />
# Install GNU Perf or VTune<br />
# Run FreehandStrokeBenchmark under a profiler and compare the results for different types of brushes. You can see how faster Default brush tip is.<br />
# Check the code in kis_brush_mask_applicator_factories.cpp and try to implement your own version of FastRowProcessor for KisGaussCircleMaskGenerator '''without''' using any AVX. Even without any vector instruction, the brush will become much faster, just because it will use less virtual calls.<br />
# If you don't feel overwhelmed with the amount of C++ templates in your code, you are perfectly fit for the project!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Expected Results''': Circular Soft, Gaussian and Stamp brush masks are ported to AVX-optimized code. Optionally, if there is enough time, rectangular brush masks are posted as well.<br />
<br />
'''Knowledge Prerequisite''': C++, SEE/AVX (read [http://www.intel.eu/content/www/eu/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html Intel's manual])<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
<br />
==== Project: Partial canvas updates and region of interest (performance optimization for huge (20k+) canvases) ====<br />
<br />
'''Brief Explanation''': We already have an optimization for huge canvases, which is called Instant Preview. But it works only when the user has the canvas zoomed out to fit the screen. There are some usecases, when the user wants to work with a small "working area" of a huge image and he doesn't care what happens to the rest of the image. This project is targeted to optimize this case.<br />
<br />
'''Expected Results''': By the end of the summer we expect these features to be implemented:<br />
* Partial updates in openGL canvas. Right now we redraw all the image textures in every frame, which is not needed after porting to Qt5.<br />
* Region of Intereset (ROI) in KisImage. Updates should be reordered and the priority should be given to the areas that are currently visible to the user<br />
* Work Area Tool. The user should be able to define the area, where he would like to work in. The updates for other parts of the image are skipped until the user exits this special mode.<br />
* (if there is time) Optimize textures loading to use RIO as well. Theoretically, we can just skip uploading of the tiles that are not visible on the screen at the moment.<br />
<br />
'''Steps to apply''': The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
<br />
# Build Krita<br />
# Check the code in KisImage, pay attention to 'cropRect' parameter of the update calls. That is exactly what you need for limiting the updates in the work area tool<br />
# Try to write Work Area Tool: copy the code of KisToolCrop, connect it to Krita and make it override the cropRect parameter in KisImage.<br />
# If you manage to make a draft of Work Area Tool, most probably, you will manage to complete the whole project successfully!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Knowledge Prerequisite''': C++, OpenGL<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log), Julian Thijssen (IRC: Nimmy)<br />
<br />
==== Project: Add 3D Painting Assistants ====<br />
<br />
'''Brief explanation''': One of the more innovative features in Krita are the painting assistants. These are shapes overlaid on the canvas that the artist can use to help him achieve perspective, straight lines and other shapes freehand. For complex drawings it would be useful to be able to place 3D models on the canvas, position and scale them and use those as guides for drawing.<br />
<br />
'''Expected results''': by the end of the summer, 3D models should be shown on canvas as canvas decorations, using OpenGL in hidden-line wireframe mode. The models should be manipulated using on-canvas controls like other assistants. Magnetic snapping is an optional extra.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, OpenGL, Assimp<br />
<br />
'''Mentor''': Julian Thijssen (IRC: Nimmy)<br />
<br />
=== KDE Student Programs ===<br />
<br />
KDE Student Programs is the working group responsible for running Season of KDE and managing KDE's participation in Google Summer of Code, Google Code-In, and other mentorship programmes.<br />
<br />
=== GCompris ===<br />
==== Project: One step closer to version 1.0 ====<br />
'''Brief explanation''': GCompris is a an educational software suite comprising of numerous activities for children aged 2 to 10. Originally written in Gtk+ it's development team started to rewrite it from scratch in Qt Quick.<br />
<br />
'''Expected results''':<br />
The aim of this year is to work on the most important activities that we are missing to have a complete 1.0. You can find a list of tasks that you can work on at https://phabricator.kde.org/T7498.<br />
<br />
First phase is to check how the Gtk+ version was working, what could be improved and then create a proposal with a timeline explaining what you expect to do and the time estimation. It does not need to be a simple clone, improvements should be done when possible.<br />
<br />
Bitmap drawing activity and piano activities are already started in gsoc-tuxPaint/playpiano branches respectively.<br />
Note that for piano activities, it is a "package" containing multiple activities: play_piano, piano_composition, name_notes and play_rhythm.<br />
The other ones are to start from scratch.<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education<br />
<br />
Be familiar with GCompris concept and content<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough)<br />
<br />
Be able to build the Qt Quick version of GCompris<br />
<br />
'''Application guide''':<br />
Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/GSOC_newcomers, http://gcompris.net/wiki/An_exercise_for_new_contributors and http://gcompris.net/wiki/Reviewing_an_activity<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Divyam Madaan (IRC: dmadaan), Emmanuel Charruau (IRC: allon), Johnny Jazeix (IRC: JohnnyJ), Timothée Giet (IRC: Animtim)<br />
<br />
==== Project: Unit test framework ====<br />
<br />
'''Expected results''':<br />
The aim of this project is to build the base for unit testing for GCompris. The student will have to think on what we can test (qml, js...) and how we can put this in place.<br />
More information can be found in https://phabricator.kde.org/T7668.<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education<br />
<br />
Be familiar with GCompris concept and content<br />
<br />
Basic knowledge in a programming language and CMake use (a 1 year school course is enough)<br />
<br />
Be able to build the Qt Quick version of GCompris<br />
<br />
Technologies used are CMake, C++, Qt.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Divyam Madaan (IRC: dmadaan), Johnny Jazeix (IRC: JohnnyJ), Rudra Nil Basu (IRC: rudra), Timothée Giet (IRC: Animtim)<br />
<br />
=== KDE Partition Manager ===<br />
=== Kopete ===<br />
<br />
==== Project: Write tests and Improve protocol support ====<br />
<br />
'''Brief explanation''': Kopete is an instant messaging client that has the modular architecture and supports many messaging services with useful plugins to complement them. <br />
<br />
'''Expected results''':<br />
The aim of this project is to fix the bugs due to porting and improve the frontend and the test coverage.<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
* Be interested in test-driven development.<br />
<br />
* Be familiar with the codebase of KDE in general.<br />
<br />
* Knowledge of C++ / Qt.<br />
<br />
'''Application guide''':<br />
<br />
Get in touch with us on mailing-list and start hacking KDE and fix bugs. Teams of two people is preferred for this project as it is a lot of work :)<br />
<br />
You can contact on IRC also but it is better to discuss over mailing list as not many people are in IRC on #kopete channel.<br />
<br />
'''Mentors''': Vijay <vijaykrishnavanshi@gmail.com> (vijay_ on IRC), Kopete Mailing List <kopete-devel@kde.org><br />
<br />
=== LabPlot ===<br />
[http://www.labplot.kde.org LabPlot] is a KDE-application for interactive graphing and analysis of scientific data. LabPlot provides an easy way to create, manage and edit plots and to perform data analysis.<br />
<br />
==== Project: Plotting of live MQTT data ====<br />
'''Brief explanation''': LabPlot has already some support for plotting of live-data (http://krajszgsoc.blogspot.de/2017/09/in-finish-line-but-not-in-end.html). To cover more use-cases we want to also support MQTT sources. We need to investigate the available MQTT libraries for Qt:<br />
* https://blog.qt.io/blog/2017/08/14/introducing-qtmqtt-protocol/<br />
* https://github.com/emqtt/qmqtt<br />
and to add some support for MQTT to LabPlot.<br />
<br />
'''Expected results''': Similar to the currently supported data sources (files, sockets, serial port, SQL databases) we want to support the subscription to MQTT brockers and plotting of their data. <br />
<br />
'''Knowledge Prerequisite''': C++, Qt, (optional) knowledge and experience with MQTT<br />
<br />
'''Mentor''': Fábián Kristóf - Szabolcs (mailto:fkristofszabolcs@gmail.com)<br />
<br />
==== Project: Import of educational data sets available on the internet ====<br />
'''Brief explanation''': There are many internet pages providing data sets for educational and study purposes for many different areas (astrophysics, statistics, medicine, etc.). Some tools used in the scientific area provide some "wrappers" for such online sources and allow the user to easily play around with those data sets in the applications whereas the technical details like fetching of data from the server and parsing are done completely transparent for the user. The goal of this project is to add similar functionality to LabPlot. There will be a wizard where the user can select from a thematically grouped list of data sets available online. The internal description of such an online data set should contain the URL with the actual file that needs to be downloaded and the settings for LabPlot's data parser (separator, column names and data types, etc.). The data fetched once should be cached so there is no need to fetch from the web again. Here we can have a look maybe at KStars for how to implement such a caching strategy and maybe even re-use some code from KStars.<br />
In addition to the list of pre-defined online sources, we need to elaborate how the user can add new online data sets (together with all the required parametrization) and publish the settings to make them available for everybody.<br />
<br />
'''Expected results''': We want to be able to easily import the educational data sets available on the internet.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt<br />
<br />
'''Mentor''': Stefan Gerlach<br />
<br />
==== Project: Import of data from web-services ====<br />
'''Brief explanation''': Brief explanation: This goal of this project is to extend the number of supported data sources by adding the possibility to import the data from web services (live and historical financial data, weather, etc.). Most web services expose their data via JSON. We need to add a "JSON filter" to LabPlot capable to connect to a web service, to fetch the data, to parse it and to import into LabPlot's internal data containers. In the GUI the user should be guided through the entry of the service URL, additional services parameters like API token, etc. and through the settings for the actual parsing (which JSON fields to consume and how). Also, it should be possible to refresh the data periodically like it is already possible for the live data (http://krajszgsoc.blogspot.de/2017/09/in-finish-line-but-not-in-end.html). The goal is also to provide a set of widely known web services so the user can select and import the data from a list of pre-defined services. In addition to this, we need to elaborate the possibility to "publish" the settings for a web-service done by the user and make them publicly available to every LabPlot user.<br />
<br />
<br />
'''Expected results''': Similar to the currently supported data sources (files, sockets, serial port, SQL databases) we want to import the data from web services and visualize it.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, (optional) JSON support in Qt<br />
<br />
'''Mentor''': Alexander Semke<br />
<br />
=== Kdenlive ===<br />
[https://kdenlive.org Kdenlive] is a KDE-application for professional video editors. It supports hundreds of video formats and all the features you can expect from a non-linear video editor, including some advanced features like timeline preview rendering, proxy clips and more. <br />
<br />
=== Choqok ===<br />
==== Project: Port Choqok to Kirigami ====<br />
<br />
'''Brief explanation:''' Current Choqok UI doesn't make use of QML and creates interfaces in C++ files. The idea is to rewrite the interface in QML. At this point is better doing it with Kirigami since this means it will work on Plasma Mobile too.<br />
<br />
'''Expected results:''' Choqok UI makes use of Kirigami.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, Qml<br />
<br />
'''Mentor:''' Andrea Scarpino (IRC: ilpianista)<br />
<br />
'''Application guide''':<br />
Get in touch on IRC (#choqok).<br />
<br />
=== KStars ===<br />
<br />
[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time. <br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support an ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can support addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Implementing Ekos in KStars Lite ====<br />
'''Brief explanation''': Ekos is KStars premier tool for observatory control and automation. KStars Lite was successfully developed in GSoC 2016 and is available for Android phones and tablets. We would like to extend KStars Lite to include basic support for Ekos. Currently, KStars Lite supports basic telescope and capture controls, but it could be extended to support a richer experience for users who are performing observatory control and astrophotography.<br />
<br />
'''Expected results''': <br />
* Telescope floating motion controls including speed controls.<br />
* Like video feed display from supported devices.<br />
* Image capture with binning, count, exposure, ISO..etc controls similar to Ekos desktop client.<br />
* Focus controls.<br />
* Alignment using remote astrometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, QML<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Ekos Web Client ====<br />
'''Brief explanation''': Ekos is KStars premier tool for observatory control and automation. A web client port of Ekos is desired where it communicates with the underlying INDI servers and drivers without a direct dependency on thick desktop clients. Ekos includes many modules including setup, capture, focus, guide, align, and mount. All functionalities of the desktop Ekos client are expected in the web client version using Python+Ajax or similar framework technologies suitable for online dynamic driven clients.<br />
<br />
'''Expected results''': <br />
* Online Ekos web client with all the thick client feature set.<br />
* Authentication and Registration framework.<br />
* Support for notifications similar to desktop client.<br />
* Ajax dynamic driven interface with near real-time updates for framing and captures.<br />
* Multi-user support with granular permissions.<br />
* Web based INDI Control Panel with all the driver controls as in the desktop version.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Django/Ajax or similar technology framework.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Akarsh Simha ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: kstar)<br />
<br />
=== Peruse ===<br />
<br />
Peruse is a comic book reader application by KDE, which is designed to work both on touch based devices, and on the traditional desktop. Additionally, it has a tool called Peruse Creator which is designed to create comic books for use with Peruse and any other CBZ capable comic book reader. It has rudimentary support for the [http://acbf.wikia.com/wiki/Specifications Advanced Comic Book Format], which is a metadata container for comic book archives (CBR, CBZ and so on).<br />
<br />
See also the Peruse website for more detailed information: https://peruse.kde.org/<br />
<br />
==== Project: Expand Creator's Abilities ====<br />
<br />
'''Brief explanation:''' Peruse Creator is currently very simple, and will allow the user to create a CBZ comic book archive annotated with a subset of the [http://acbf.wikia.com/wiki/Specifications Advanced Comic Book Format] (ACBF) metainfo, such as authors, publisher information, characters and so on. It does not allow for the creation or editing of the viewport based navigation that ACBF describes, nor does it support the text layers system ACBF proposes for comic book translation. It also lacks editor components for a variety of the general metainformation ACBF suggests.<br />
<br />
Your project proposal should include explicit descriptions of which of these you wish to build support for, and how you propose to do so. It should further include timeframes for each.<br />
<br />
'''Expected results:''' A more capable Peruse Creator.<br />
<br />
'''Knowledge Prerequisite:''' C++ and Qt required, additionally QML/QtQuick knowledge is preferred<br />
<br />
'''Mentor:''' Dan Leinir Turthra Jensen (admin@leinir.dk, IRC: leinir, Telegram and twitter: @leinir)<br />
<br />
==== Project: New Viewer Component ====<br />
<br />
'''Brief explanation:''' The current viewer component for Comic Book Archives (CBR) in Peruse is a simple full-page viewer, which only supports page-by-page navigation. The [http://acbf.wikia.com/wiki/Specifications Advanced Comic Book Format] (ACBF) metadata container brings with it support for a viewport system, which describes how the application should present [http://acbf.wikia.com/wiki/Body_Section_Definition#Frame specific sub-sections of each page], as well as a system for [http://acbf.wikia.com/wiki/Body_Section_Definition#Jump navigating between arbitrary pages in the comic].<br />
<br />
Your project proposal should include explicit descriptions of how you would suggest implementing this, as well as a schedule for the work.<br />
<br />
'''Expected results:''' A viewer component which is able to consume and display the viewport based navigation metadata from the ACBF container, as well as present the general metainformation to the user.<br />
<br />
'''Knowledge Prerequisite:''' C++ and Qt required, additionally QML/QtQuick knowledge is preferred<br />
<br />
'''Mentor:''' Dan Leinir Turthra Jensen (admin@leinir.dk, IRC: leinir, Telegram and twitter: @leinir)<br />
<br />
=== KGpg ===<br />
<br />
[https://utils.kde.org/projects/kgpg KGpg] is a frontend for GnuPG key management.<br />
<br />
'''Brief explanation:''' KGpg currently consists of one application with a very narrow external interface, which is available via DBus. The goal is to split out parts of the code into a static library that is used both by the KGpg binary as well as to-be-written unit tests, which should also cover at least all of the "[https://cgit.kde.org/kgpg.git/tree/transactions transaction]" classes.<br />
<br />
'''Expected results:''' unit tests that can be called via CTest, and are integrated into the KDE CI jobs<br />
<br />
'''Knowledge Prerequisite:''' basic C++, CMake, and GnuPG usage<br />
<br />
'''Mentor:''' Rolf Eike Beer (kde@opensource.sf-tec.de, IRC: Dakon)<br />
<br />
===KWin===<br />
==== Multi-GPU support in Wayland session ==== <br />
<br />
'''Brief Explanation''': Currently KWin as a Wayland compositor can only render to outputs of the primary GPU. We want to allow multi GPU setups with more than one graphics card or simultaneous use of an expansion card and the internal graphics. For that, we need to query all available GPUs and handle them accordingly in our DRM backend.<br />
<br />
'''Expected results''':<br />
Query all available GPUs in DRM backend and their outputs.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt5, basic knowledge of graphics hardware<br />
<br />
'''Mentor''': Roman Gilg (Email: subdiff@gmail.com; IRC: romangg)<br />
<br />
==== Wayland graphical tablet input support ==== <br />
<br />
'''Brief Explanation''': Tablets are very different from mice, they have a lot more information about their current state and events. As such there are separate protocols for passing these events from raw hardware to the client. We need to add:<br />
* A protocol in kwayland to wrap the low level protocol<br />
* support in KWin to map libinput to sending wayland events to the right clients.<br />
* support in Qt's wayland client code to map wayland to Qt events that applications can use <br />
(this will mean collaborating not just within KDE code but also Qt)<br />
<br />
'''Expected results''':<br />
Working tablet support in all applications within a kwin wayland session.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt5,<br />
<br />
'''Mentor''': David Edmundson (davidedmundson@kde.org)<br />
<br />
==== Activities support in KWin on Wayland ==== <br />
<br />
'''Brief Explanation''': KWin has one important regression when it comes to Wayland - lack of support for activities (mainly hiding windows that do not belong to the current activity). What needs to be done:<br />
* Implement a way for kwin to know which applications belong to which activities<br />
* Implement a way for applications to specify on which activities they are<br />
<br />
'''Expected results''':<br />
Working activities in KWin without any performance regressions.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt5,<br />
<br />
'''Mentor''': Ivan Cukic (ivan.cukic@kde.org)<br />
<br />
=== Plasma ===<br />
==== Improve handling for touchpads and mice with Libinput ====<br />
<br />
'''Brief explanation:''' [https://www.freedesktop.org/wiki/Software/libinput/ Libinput] is now used as the driver for input devices in most distros. However, System Settings does not present the user with good interfaces for configuring input devices with libinput. Currently, the only well-supported use case is for [https://bugsfiles.kde.org/attachment.cgi?id=108954 touchpads in a Wayland session]. For touchpads on X11, and mice on both X11 and Wayland, the user experience is sub-optimal or non-existent.<br />
<br />
'''Expected results:''' System Settings should expose good user interfaces for configuring both touchpads and mice when using Libinput, and for both Wayland and X11.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt<br />
<br />
'''Mentor:''' Nate Graham (Email: pointedstick@zoho.com; Telegram: @nggraham)<br />
<br />
'''Application guide''':<br />
* https://wayland.freedesktop.org/libinput/doc/latest/developers.html<br />
* https://bugs.kde.org/show_bug.cgi?id=383379<br />
<br />
==== System Settings: Port keyboard input modules and expand scope to cover input method configuration ====<br />
<br />
'''Brief explanation:''' System Settings' keyboard configuration module needs to be ported to Qt Quick based on reference designs provided by KDE's Visual Design Group. Additionally, the scope of keyboard input configuration needs to be expanded to cover input method configuration as well. This is both part of a larger drive to port the modules in the System Settings application to Qt Quick and modernize its UI design, as well as improve the text input configuration experience for a global audience. This project involves refactoring the existing System Settings module's code to be used as the backend for a QML-based UI and writing new backend code to configure the ibus or fcitx input method daemons. The UI design is expected to be refined during the course of the project in collaboration with VDG contributors. Interaction with other developers working on System Settings module ports in parallel is also expected.<br />
<br />
'''Expected results:''' System Settings should offer keyboard layout and basic input language configuration in a modern UI design.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, Qt Quick/QML<br />
<br />
'''Mentor:''' Eike Hein (Email: hein@kde.org; IRC: Sho_; Telegram: @eikehein)<br />
<br />
'''Application guide''':<br />
* https://conf.kde.org/en/akademy2017/public/events/359<br />
* https://www.youtube.com/watch?v=wE0KDabPfsQ<br />
* https://phabricator.kde.org/M112<br />
<br />
==== Discover: fwupd integration ====<br />
<br />
'''Brief explanation:''' Discover Software Center is in charge of offering different kinds of assets at the moment. Applications, Add-ons, etc as well as serving updates. At the moment it's still not able to update our devices' firmwares. There's a tool for GNU/Linux called FWUPD to do so: https://fwupd.org/developers<br />
<br />
Despite the description specifying plasma, the end goal is to provide a seamless solution to have your hardware's firmware up to date.<br />
If the proposal is too short, other improvements suggested to add to the idea will be welcome.<br />
<br />
'''Expected results:''' Plasma being great at having an up to date system, also with hardware.<br />
<br />
'''Knowledge Prerequisite:''' C++ and Qt, also notions of how glib works, to understand upstream FWUPD.<br />
<br />
'''Mentor:''' Aleix Pol: apol, @AleixPol, aleixpol@kde.org<br />
<br />
=== Okular ===<br />
==== Add support for showing and adding replies to sticky notes ====<br />
<br />
'''Brief explanation:''' PDF files can contain replies to certain annotations, you would need to add support to Okular and potential poppler so that they show the same way they do on other PDF readers. Once they are shown and if there is enough time adding the capability to add replies is also welcome.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt<br />
<br />
'''Mentor:''' Okular developers https://mail.kde.org/mailman/listinfo/okular-devel<br />
<br />
'''Application guide''':<br />
* https://bugs.kde.org/show_bug.cgi?id=387834<br />
<br />
<br />
==== Project: Verifying signatures of pdf files ====<br />
<br />
'''Brief explanation:''' Okular should provide information about signatures if a pdf document has been signed. The poppler library used by Okular to render pdf files does support verification of signed pdf files and the retrieval of signature information. However, this functionality is not used by Okular. Goal of the project is to extend the Okular GUI to show whether a document is signed, and to show the signature details.<br />
<br />
Bonus points for any steps towards signing pdf files in Okular.<br />
<br />
'''Expected results:''' When opening a signed document, Okular should show that the document is signed, and whether the signature is valid, expired, etc. Detailed information about the signature(s) should be made available, through a new menu entry (all signatures) or by a context menu for individual signatures.<br />
<br />
'''Knowledge prerequisite:''' C++ and Qt, very little cryptography skills<br />
<br />
<br />
==== Project: Implement the FreeText annotation ====<br />
<br />
'''Brief explanation:''' Okular implements various annotations from the pdf standard, but a few are still missing. Goal of this project is to implement the FreeText annotation. It allows to write text anywhere directly on a pdf file [0]. There is partial support in poppler [1], the library that is used for the actual pdf rendering. Okular shows such annotations, but they cannot be manipulated. Goal is to implement full support for editing FreeText annotations in Okular.<br />
<br />
[0] https://bugs.kde.org/show_bug.cgi?id=353401<br />
[1] https://bugs.freedesktop.org/show_bug.cgi?id=93213<br />
<br />
'''Expected results:''' The Okular annotation toolbar gains a new entry 'FreeText', where users can create new FreeText annotations. Additionally, existing FreeText annotations can be moved, deleted and modified.<br />
<br />
'''Knowledge prerequisite:''' C++ and Qt, and a bit about the pdf format<br />
<br />
==== Project: Improve custom stamp annotation handling ====<br />
<br />
'''Brief explanation:''' Okular does display stamp annotations, but the support<br />
is somewhat incomplete. This particularly shows when trying to use stamp<br />
annotations with a custom image. For example, such annotations can be<br />
added in Okular, but they cannot be saved to the pdf file in a way<br />
that any other pdf viewer can read. Also, they will not appear on print-outs.<br />
<br />
The underlying reason for this is that Okular renders these stamps itself,<br />
rather than relying on the poppler library, which does all other pdf<br />
rendering. Goal of this project is therefore to teach poppler how to<br />
render stamp annotations, and then make Okular use that new functionality.<br />
More details can be found in the bug report [0].<br />
<br />
[0] https://bugs.kde.org/show_bug.cgi?id=383651<br />
<br />
'''Expected results:''' Poppler should render stamp annotations. Annotations<br />
should be printable from Okular. Custom stamps inserted via the Okular GUI<br />
should be visible in other pdf readers.<br />
<br />
'''Knowledge prerequisite:''' C++, and a bit about the pdf format.<br />
<br />
<br />
==== Project: Annotation improvements ====<br />
<br />
'''Brief explanation:''' Okular supports convenient editing of pdf annotations, but quite a number of paper-cut bugs are known. Examples are [0,1,2], but many more can be found in the bugtracker. Goal of this project is to fix as many of these bugs as possible, which should improve the Okular user experience greatly.<br />
<br />
[0] https://bugs.kde.org/show_bug.cgi?id=275371<br />
[1] https://bugs.freedesktop.org/show_bug.cgi?id=102635<br />
[2] https://bugs.freedesktop.org/show_bug.cgi?id=52010<br />
<br />
'''Expected results:''' Lots of annotation-related bugs fixed. Annotation rendering and manipulation should be more enjoyable.<br />
<br />
'''Knowledge prerequisite:''' C++ and Qt, and a bit about the pdf format<br />
<br />
<br />
=== WikiToLearn ===<br />
<br />
You can find all of the WikiToLearn community on [https://chat.wikitolearn.org chat.wikitolearn.org]. We have many other ideas: get in touch with us to discuss them further!<br />
<br />
==== Project: Progressive Web App ====<br />
<br />
'''Brief explanation:''' [https://cgit.kde.org/scratch/cristianbaldi/wikitolearn-frontend.git Current PWA] is being used in the first iteration of the new WikiToLearn architecture. It needs some improvement in terms of testing, offline-experience and organization to make it stable and ready for a first stable release. We want, also, to create a cohesive ecosystem of resources and design guidelines that can be easily reused. Main goal of this project is to enhance the existing project to provide a tested, functional and production-ready PWA. <br />
<br />
'''Expected results:'''<br />
<br />
* Improve documentation<br />
* Write design guidelines for people who want to contribute<br />
* Organize shared resources in a reusable manner<br />
* Write unit and integration test<br />
* Implement functional offline browsing<br />
* Enhance UX for a production-ready release<br />
<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
* Knowledge of Vue<br />
* Knowledge of HTML5, CSS3 (Sass/Less), JS (ES6 and Browser Apis)<br />
* Responsive design<br />
* Build Tools (WebPack)<br />
* Standards and best practices in Web Development<br />
<br />
<br />
'''Mentor:''' Gianluca Rigoletti (@rigolo)<br />
<br />
=== Falkon ===<br />
<br />
Falkon is a web browser previously known as QupZilla.<br />
<br />
==== JavaScript/QML extensions support ====<br />
<br />
'''Brief explanation:''' Falkon supports additional application extensions to be installed. Currently, it only supports compiled C++ extensions, which makes it complicated to develop and distribute. Adding support for JavaScript extensions would make it more accessible and easier for developers.<br />
<br />
Qt includes own JavaScript engine (QJSEngine/QQmlEngine), so this task is about integrating it into Falkon code base and exposing the browser function to JavaScript extensions.<br />
<br />
'''Expected results:''' Extensions can be written in JavaScript and use QML for GUI. JavaScript extensions should be able to access and interact with all important browser functions.<br />
<br />
'''Knowledge Prerequisite:''' C++/Qt, JavaScript/QML basics<br />
<br />
'''Mentor:''' David Rosca (nowrep@gmail.com, IRC: nowrep on #falkon)<br />
<br />
==== Plasma integration ====<br />
<br />
'''Brief explanation:''' Falkon is Qt application and as such it integrates quite well into Plasma desktop environment. There is also an extension that allows to store passwords in KWallet. Plasma desktop provides some services that could be useful to use from browser, like showing the progress of downloads as jobs in notification applet or searching for bookmarks or open tabs from KRunner.<br />
<br />
There is already existing extension for Chrome that implements these features - [https://cgit.kde.org/plasma-browser-integration.git plasma-browser-integration] that can be used as a base for the Falkon extension.<br />
<br />
'''Expected results:''' Falkon C++ extension and additional helpers improves the integration with Plasma desktop.<br />
<br />
'''Knowledge Prerequisite:''' C++/Qt, JavaScript basics<br />
<br />
'''Mentor:''' David Rosca (nowrep@gmail.com, IRC: nowrep on #falkon)<br />
<br />
=== Cantor ===<br />
<br />
Cantor provides a graphical frontend for different open source computer algebra systems and scientific programming languages [https://edu.kde.org/cantor/].<br />
<br />
==== Project: Improve Cantor's worksheet ====<br />
'''Brief explanation''': One of the central components in Cantor is the worksheet - the place where the calculations are triggered and the results are shown. The worksheet is basically a collection of "cells" of different types which can carry user inputs or the results of the calculations. There are many features that are available in similar (free and commercial) products and that are still missing in this area in Cantor. The goal of this project is to close couple of most obvious gaps and to greatly improve the user experience in Cantor. To name couple of things that need to be implemented:<br />
* collapsible cells to hide the output of the calculations<br />
* additional styling for the cells like setting the color and the font<br />
* highlighting of the cell being currently calculated<br />
* use optionally different background colors for different cell types for an easier identification of e.g. text cells and cells used for calculations<br />
* show timings<br />
* context menu for the cells and for the cells outputs, provide their things like differentiate, simplify, etc. as well as things like "copy as text/latex/image"<br />
* copy&paste of cells<br />
* etc.<br />
<br />
'''Expected results''': Cantor's worksheet with an improved the usability extended functionality.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Qt Graphics Framework<br />
<br />
'''Mentor''': tbd<br />
<br />
=== Plasma Mobile ===<br />
Plasma Mobile is KDE's software stack for mobile devices that includes Plasma phone components, Kirigami and a set of mobile-friendly applications.<br />
<br />
==== Project: Mobile-friendly Locale & Language configuration module ==== <br />
<br />
'''Brief Explanation''': System Settings are built of modules (KCMs) which allow users to configure specific aspects of their system. KCMs that are programmed using Qt Quick and designed to look good on any screen sizes can be shared between desktop and mobile. This project's goal is to create such a universal Locale & Language configuration module.<br />
<br />
'''Expected results''': the student has designed and programmed a configuration module that<br />
*Allows users to change system locale & language, install translation packages and configure keyboard layouts<br />
*Has a flexible and user-friendly interface<br />
*Can be used on both desktop and mobile platforms<br />
<br />
'''Knowledge Prerequisite''': Qt 5, QML, C++<br />
<br />
'''Mentor''': Eike Hein (Sho_ on IRC)<br />
<br />
==== Project: Mobile-friendly Storage configuration module ==== <br />
<br />
'''Brief Explanation''': System Settings are built of modules (KCMs) which allow users to configure specific aspects of their system. KCMs that are programmed using Qt Quick and designed to look good on any screen sizes can be shared between desktop and mobile. This project's goal is to create such a universal Storage configuration module.<br />
<br />
'''Expected results''': the student has designed and programmed a configuration module that<br />
*Allows users to see their storage stats in an informative and friendly way<br />
*Can be used to configure USB/MTP storage: by plugging your phone to a desktop/laptop you should be able to access files on the phone. Even though this bit is mostly base system/hardware providing this, Plasma Mobile should offer a user interface to enable/disable the USB/MTP storage support by default and on-demand<br />
*Has a flexible and user-friendly interface<br />
*Can be used on both desktop and mobile platforms<br />
<br />
'''Knowledge Prerequisite''': Qt 5, QML, C++<br />
<br />
'''Mentor''': tbd<br />
<br />
==== Project: Mobile-friendly Network configuration module ==== <br />
<br />
'''Brief Explanation''': System Settings are built of modules (KCMs) which allow users to configure specific aspects of their system. KCMs that are programmed using Qt Quick and designed to look good on any screen sizes can be shared between desktop and mobile. This project's goal is to create such a universal Network configuration module.<br />
<br />
'''Expected results''': the student has designed and programmed a configuration module that<br />
* Allows users to configure their wireless and mobile connections<br />
* Allows users to easily create hotspots <br />
* Gives users possibility to see statistics about transmitted/recieved data and control their limits for mobile connections<br />
<br />
<br />
'''Additional information''': There is currently one mobile-friendly KCM for network configuration in progress. In case it's not completely finished before GSoC coding period starts, then the student is supposed to finish it and add something else on top of that (like support for VPN connections), there will be definitely some interesting things to add and improve. <br />
<br />
'''Knowledge Prerequisite''': Qt, QML, C++<br />
<br />
'''Mentor''': Jan Grulich (email: jgrulich@redhat.com; irc: jgrulich)<br />
<br />
==== Project: Telephony applications set ==== <br />
<br />
'''Brief Explanation''': In accordance with Plasma Mobile roadmap (https://vizzzion.org/blog/2017/10/plasma-mobile-roadmap/) and the goal of usability and productivity for basic software (https://phabricator.kde.org/T6831), we need to enable Plasma Mobile users to perform basic tasks on their phone effortlessly. To achieve that, we should provide a set of telephony applications: Dialer, SMS, Contact book. All of those apps already exist but are extremely basic and hardly usable. The goal of this project is to bring them to a state when they can be used for telephony tasks on a day-to-day basis.<br />
<br />
'''Expected results''': the student has designed and programmed the telephony application set that:<br />
*Allows users to perform telephony tasks on a daily basis<br />
*Has a flexible and user-friendly interface (usage of Kirigami is highly recommended)<br />
<br />
'''Knowledge Prerequisite''': Qt 5, QML, C++<br />
<br />
'''Mentor''': Dan Leinir Turthra Jensen (leinir on IRC)<br />
<br />
=== KDevelop ===<br />
==== Project: Improve development on docker containers ==== <br />
<br />
'''Brief Explanation''': We have been working on integrating properly docker containers usage into the IDE so they can be developed transparently. This project should help polishing the rough edges and make sure everything integrates properly.<br />
Some ideas would be improving the build systems, debuggers, language support in general, etc. We expect whoever sends the proposal to have looked into the problem and formed an idea of what needs to happen. Here's some explanation of the status quo.<br />
<br />
http://www.proli.net/2017/05/23/kdevelop-runtimes-docker-and-flatpak-integration/<br />
http://www.proli.net/2017/12/18/docker-as-an-sdk-for-arm-distributions/<br />
<br />
'''Expected results''': Improved usability of the integration of docker into the IDE.<br />
<br />
'''Knowledge Prerequisite''': Qt 5, C++<br />
<br />
'''Mentor''': Aleix Pol<br />
<br />
=== Xdg-desktop-portal-kde ===<br />
==== Project: Remote desktop portal ====<br />
'''Brief explanation:''' Xdg-desktop-portal-kde is a portal backend implementation for [https://github.com/flatpak/xdg-desktop-portal xdg-desktop-portal], allowing sandboxed applications (flatpak, snap) to access system files, devices and many other things. One of the missing parts is an implementation of [https://github.com/flatpak/xdg-desktop-portal/blob/master/data/org.freedesktop.impl.portal.RemoteDesktop.xml remote desktop portal], which should allow sandboxed applications to use remote desktop. Xdg-desktop-portal-kde recently got support for screencast portal, which adds support for screen sharing, this together with missing remote desktop portal should bring complete support for remote desktop to sandboxed applications, but also for Plasma wayland session. The similar implementation for Gnome can be found [https://github.com/flatpak/xdg-desktop-portal-gtk here].<br />
<br />
'''Expected results:''' Applications with support for xdg-desktop-portal should be able to use remote desktop also with Plasma desktop.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt<br />
<br />
'''Mentor:''' Jan Grulich (Email: jgrulich@redhat.com; irc: jgrulich)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2018/Ideas&diff=79784GSoC/2018/Ideas2018-03-14T10:08:26Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoC Instructions]], [[../../2017/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Being accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or other image'''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor)<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
===digiKam===<br />
digiKam is an advanced digital photo management application for Linux, Windows, and MacOS.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://plus.google.com/+digikam Google+ page]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
<br />
==== Project 1 : digiKam Web Services tools authentication with OAuth2 ==== <br />
<br />
'''Brief Explanation''': digiKam has many tools dedicated to share items on web services, as Facebook, Google Photo, Google Drive, SmugMug, etc...<br />
All tools use an older way to be authenticated through the web service using an external web browser instance to capture the token network session. This is a fastidious way to open a web service session.<br />
Currently, Flickr, DropBox, and Imgur tools use an embedded OAuth2 authentification without a web browser instance through O2 library for Qt.<br />
The goal of this project is to port all others web service tools to O2 library API.<br />
<br />
'''Expected results''':<br />
*Review code of current tools ported to OAuth2<br />
*Review current implementation of tools and list all web services compatible with OAuth standard.<br />
*Plan the amount of work to port tools by order of complexity, and identify possible problems.<br />
*Port code for each tools step by step, by writing unit tests independently.<br />
*Test all tools with all use cases, depending of tool options.<br />
*Write documentation.<br />
<br />
'''Knowledge Prerequisite''': Network, OAuth, C++, and Qt5<br />
<br />
'''Mentor''': Maik Qualmann and Gilles Caulier<br />
<br />
==== Project 2 : Added the possibility to manually sort the digiKam icon view ====<br />
<br />
'''Brief Explanation''': digiKam has the possibility to sort the items in the icon view according to different criteria, for example by: name, date, file size, rating etc. Many digiKam users have long been wishing to manually sort the icon view. The bug report (https://bugs.kde.org/show_bug.cgi?id=91562) now has more than 700 votes.<br />
The goal of this project is to rearrange the sorting of items in the icon view by drag and drop. This sort must be stored in the database and must be retrievable like the other sort functions.<br />
<br />
'''Expected results''':<br />
*Review code of current sort functions and the icon view model.<br />
*Review current database schema of SQLite and MySQL.<br />
*Adding a column to SQLite and MySQL table to store manual sort order.<br />
*Write database upgrade procedure to port older digiKam databases.<br />
*Write code for reading and writing manual sort order to the database.<br />
*Write code for the manual item sorting in the icon view.<br />
*Test your implementation of manual sorting.<br />
*Write documentation.<br />
<br />
'''Knowledge Prerequisite''': Databases SQLite and MySQL, C++ and Qt5<br />
<br />
'''Mentor''': Maik Qualmann and Gilles Caulier<br />
<br />
==== Project 3: Supporting Twitter and Amazon Drive services in digiKam export ====<br />
<br />
'''Brief explanation''': There are many web services that digiKam can communicate with and export images to them. Following digiKam convection, we want to support Twitter and Amazon Drive export.<br />
Also, It would be great if we grouped web services in specific categories, for example: Facebook, Twitter, VK, G+, ..etc will be grouped in "Social Networks" category. the user can expand a category and check the boxes beside every service he want to use and share an image to all selected service with the same status update.<br />
<br />
'''Expected Results'''<br />
*Reviewing currently supported web services code<br />
*Writing a client to connect to Twitter's API to be used to export images with status to it<br />
*Writing a client to connect to Amazon Cloud API to export images and albums to it<br />
*Creating a dedicated widget to hold web services categories and categorizing each service to the right category<br />
*Supporting the ability to select multiple service and export to them at once<br />
*Writing unit tests for each new service<br />
*Writing docs for each newly created class<br />
<br />
'''Knowledge Prerequisites''': C++, Qt, Network, Restful API's<br />
<br />
'''Mentor''': Mohamed Anwer and Gilles Caulier<br />
<br />
=== Krita ===<br />
[http://www.krita.org Krita]: digital painting for artists. It supports creating images from scratch from beginning to end. Krita is a complex application and developers need to have a fair amount of experience in order to be able to do something.<br />
<br />
Krita is a widely used digital painting application for professional artists. Last year, Krita gained the ability to create hand-drawn 2D animations, among other new features. For this year, projects that the Krita team would be interested in include the following ideas.<br />
<br />
Note that we're always open to ideas you bring in yourself: if you're passionate about something you've come up with yourself, that you want for Krita, that's a big plus for us.<br />
<br />
We also expect prospective students to submit at least three patches for bugs or wishes or small features. We want to know how good you are! See https://phabricator.kde.org/T7724 for some smaller tasks that you could work on that are not bugs.<br />
<br />
==== Project: Optimize multithreading in Krita's Tile Manager (make the hash table lockfree) ====<br />
<br />
'''Brief explanation''': This is a hard-core project, only suitable for someone with deep knowledge of the problems of designing multi-threaded software. It involves Krita's core datamodel, where the tiles that compose image data are managed. The main problem is that at the moment the core utilizes QReadWriteLock and QMutex a lot, which means that Krita painting performance stops scaling well, when the number of CPU cores becomes larger than 8. The goal of this project is to locate all the bottlenecks (there are at least 4 of them) and resolve them in a lock-free. One of the bottlenecks involves KisTileHashTable which is used to access the tiles. Since this touches the very core of Krita, a thorough test plan is essential.<br />
<br />
'''Steps to apply''':<br />
The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
# Build Krita with unittests enabled<br />
# Install GNU Perf or VTune<br />
# Run FreehandStrokeBenchmark in a profiler and try to locate all the places where most of the locking/waits happen. The main one will be the hash table, but there are at least three more (your task is to locate them and add into your proposal!)<br />
# (optional) To test your coding abilities you can try to port one of the hash tables code from [https://github.com/preshing/junction Junction] library to Qt's primitives. If you don't feel overwhelmed with such code, you are perfectly fit for the project!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Expected results''': No bottlenecks anymore! <br />
<br />
'''Knowledge Prerequisite''': C++, Qt, threads, locks.<br />
<br />
'''Mentor''': Dmitry Kazakov (dmkitryK|log on irc)<br />
<br />
==== Project: Extending Animation Support for curves ====<br />
<br />
'''Brief Explanation''': In Krita, you can already add curves that could be applied to some properties of a layer, like opacity, animating those properties. We want the animation support extended by allowing users to place masks (filter masks, transformation masks, transparency masks) on the timeline and animate their properties using curves. Every property of a layer or mask placed on the timeline should be animatable.<br />
<br />
'''Expected results''':<br />
* Implementation of a gui for applying the curve settings to one or more properties of a mask or layer<br />
* Implementation of the actual rendering of the properties in the frames<br />
* Saving of these settings<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk_log)<br />
<br />
==== Project: Taking the Shape Brush to the next level ====<br />
'''Brief Explanation''': Krita has a number of interesting brush engines. One of them is the Shape Brush engine. Inspired by Alchemy, the shape brush "throws" shapes on the canvas. The current implementation is limited to geometric shapes. We want the brush engine to be extended to make it possible to load vector shapes defined as PDF or SVG and use those to draw on the canvas as well. Other improvements are the addition of Feathering, an outline mode, edge sharpening and background textures.<br />
<br />
'''Expected Results''': A revamped and exciting shapes brush<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Krita<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Lukas Tvrdy (IRC: LukasT)<br />
<br />
==== Project: Analysis of thoroughput of Krita Blending Modes and porting them to AVX2 ====<br />
<br />
'''Brief Explanation''': Blending modes is the hottest piece of code in Krita. It should process gigabytes of data per second, therefore it should be extremely optimized. Some of its parts are already optimized to use AVX instructions, but some (float16 color spaces) are not. We need to port the rest of the color spaces to AVX and make a research into the possibilities of using AXV2 instructions directly (int16 instructions). [https://github.com/VcDevel/Vc Vc library] supports AXV2 instructions, though we don't know to what extent, it might happen that you would need to extend the library itself to get the needed functionality. This is another hard-core project only suitable if you have a good deal of experience.<br />
<br />
'''Steps to apply''': The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
<br />
# Build Krita with unittests enabled<br />
# Install GNU Perf or VTune<br />
# Run KisCompositionBenchmark under a profiler and see the hottest places of blending modes code<br />
# Check the code of "Normal" blending mode for float32 color spaces (KoOptimizedCompositeOpOver128), copy the file and try to create your own blending mode for float16 color space. Hint: the only thing you should do is to implement correct unpacking/packing code that would convert the values to 32-bit float and back.<br />
# If you don't feel overwhelmed with such code, you are perfectly fit for the project!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Expected Results''': Float16 color spaces are ported to AVX, Integer8 and Integer16 colorspaces are ported to AVX2<br />
<br />
'''Knowledge Prerequisite''': C++, SEE/AVX (read [http://www.intel.eu/content/www/eu/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html Intel's manual])<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Port generic code for not-so-popular blending modes to AVX ====<br />
<br />
'''Brief Explanation''': In Krita we have a lot of blending modes, but only Normal and Alpha Darken are optimized and ported to AVX instructions. The reason for that is obvious, these two blending modes are the hottest and are used in every single image produced in Krita. But it doesn't mean that the other blending modes are less important for painters: they still use Multiply for painting shadows, and Linear Dodge for painting highlights, so they should also be fast! <br />
<br />
The good piece of news is that all these "non-popular" blending modes are implemented in Krita by means of a single class KoCompositeOpGenericSC, so, basically, as a result of your project, you should provide one class only! The bad piece of news is that this single class implements about a hundred of blending modes using C++ templates... so be prepared! :)<br />
<br />
'''Steps to apply''': The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
<br />
# Build Krita with unittests enabled<br />
# Install GNU Perf or VTune<br />
# Run KisCompositionBenchmark under a profiler and see the hottest places of blending modes code<br />
# Check the code of "Copy" blending mode in KoCompositeOpCopy2 and try to port it into AVX for RGB8 colorspace. Use KoOptimizedCompositeOpOver32 as an example.<br />
# If you don't feel overwhelmed with such code, you are perfectly fit for the project!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Expected Results''': "Copy" blending mode is ported to AVX, all the "generic" blending modes are ported to AVX<br />
<br />
'''Knowledge Prerequisite''': C++, SEE/AVX (read [http://www.intel.eu/content/www/eu/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html Intel's manual])<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Optimize Soft, Gaussian and Stamp brushes to use AVX ====<br />
<br />
'''Brief Explanation''': When the user draws a line in Krita, this line consists of thousands of small rectangular images (dabs) that are painted one over another. For each dab, Krita generates its own mask (depending on the stylus pressure and tilt) and uses this mask for filling the layer. It happens thousands of times per second, which makes mask generation code one of the hottest places in Krita. We already have AVX optimization for Default brush mask engine and it works 5(!) times faster than Gaussian engine and 3(!) times faster than the Soft engine. The goal of this project is to port the rest of non-optimized engines to use AVX via [https://github.com/VcDevel/Vc Vc library] and make them faster.<br />
<br />
'''Steps to apply''': The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
<br />
# Build Krita with unittests enabled<br />
# Install GNU Perf or VTune<br />
# Run FreehandStrokeBenchmark under a profiler and compare the results for different types of brushes. You can see how faster Default brush tip is.<br />
# Check the code in kis_brush_mask_applicator_factories.cpp and try to implement your own version of FastRowProcessor for KisGaussCircleMaskGenerator '''without''' using any AVX. Even without any vector instruction, the brush will become much faster, just because it will use less virtual calls.<br />
# If you don't feel overwhelmed with the amount of C++ templates in your code, you are perfectly fit for the project!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Expected Results''': Circular Soft, Gaussian and Stamp brush masks are ported to AVX-optimized code. Optionally, if there is enough time, rectangular brush masks are posted as well.<br />
<br />
'''Knowledge Prerequisite''': C++, SEE/AVX (read [http://www.intel.eu/content/www/eu/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html Intel's manual])<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
<br />
==== Project: Partial canvas updates and region of interest (performance optimization for huge (20k+) canvases) ====<br />
<br />
'''Brief Explanation''': We already have an optimization for huge canvases, which is called Instant Preview. But it works only when the user has the canvas zoomed out to fit the screen. There are some usecases, when the user wants to work with a small "working area" of a huge image and he doesn't care what happens to the rest of the image. This project is targeted to optimize this case.<br />
<br />
'''Expected Results''': By the end of the summer we expect these features to be implemented:<br />
* Partial updates in openGL canvas. Right now we redraw all the image textures in every frame, which is not needed after porting to Qt5.<br />
* Region of Intereset (ROI) in KisImage. Updates should be reordered and the priority should be given to the areas that are currently visible to the user<br />
* Work Area Tool. The user should be able to define the area, where he would like to work in. The updates for other parts of the image are skipped until the user exits this special mode.<br />
* (if there is time) Optimize textures loading to use RIO as well. Theoretically, we can just skip uploading of the tiles that are not visible on the screen at the moment.<br />
<br />
'''Steps to apply''': The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
<br />
# Build Krita<br />
# Check the code in KisImage, pay attention to 'cropRect' parameter of the update calls. That is exactly what you need for limiting the updates in the work area tool<br />
# Try to write Work Area Tool: copy the code of KisToolCrop, connect it to Krita and make it override the cropRect parameter in KisImage.<br />
# If you manage to make a draft of Work Area Tool, most probably, you will manage to complete the whole project successfully!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Knowledge Prerequisite''': C++, OpenGL<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log), Julian Thijssen (IRC: Nimmy)<br />
<br />
==== Project: Add 3D Painting Assistants ====<br />
<br />
'''Brief explanation''': One of the more innovative features in Krita are the painting assistants. These are shapes overlaid on the canvas that the artist can use to help him achieve perspective, straight lines and other shapes freehand. For complex drawings it would be useful to be able to place 3D models on the canvas, position and scale them and use those as guides for drawing.<br />
<br />
'''Expected results''': by the end of the summer, 3D models should be shown on canvas as canvas decorations, using OpenGL in hidden-line wireframe mode. The models should be manipulated using on-canvas controls like other assistants. Magnetic snapping is an optional extra.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, OpenGL, Assimp<br />
<br />
'''Mentor''': Julian Thijssen (IRC: Nimmy)<br />
<br />
=== KDE Student Programs ===<br />
<br />
KDE Student Programs is the working group responsible for running Season of KDE and managing KDE's participation in Google Summer of Code, Google Code-In, and other mentorship programmes.<br />
<br />
=== GCompris ===<br />
==== Project: One step closer to version 1.0 ====<br />
'''Brief explanation''': GCompris is a an educational software suite comprising of numerous activities for children aged 2 to 10. Originally written in Gtk+ it's development team started to rewrite it from scratch in Qt Quick.<br />
<br />
'''Expected results''':<br />
The aim of this year is to work on the most important activities that we are missing to have a complete 1.0. You can find a list of tasks that you can work on at https://phabricator.kde.org/T7498.<br />
<br />
First phase is to check how the Gtk+ version was working, what could be improved and then create a proposal with a timeline explaining what you expect to do and the time estimation. It does not need to be a simple clone, improvements should be done when possible.<br />
<br />
Bitmap drawing activity and piano activities are already started in gsoc-tuxPaint/playpiano branches respectively.<br />
Note that for piano activities, it is a "package" containing multiple activities: play_piano, piano_composition, name_notes and play_rhythm.<br />
The other ones are to start from scratch.<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education<br />
<br />
Be familiar with GCompris concept and content<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough)<br />
<br />
Be able to build the Qt Quick version of GCompris<br />
<br />
'''Application guide''':<br />
Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/GSOC_newcomers, http://gcompris.net/wiki/An_exercise_for_new_contributors and http://gcompris.net/wiki/Reviewing_an_activity<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Divyam Madaan (IRC: dmadaan), Emmanuel Charruau (IRC: allon), Johnny Jazeix (IRC: JohnnyJ), Timothée Giet (IRC: Animtim)<br />
<br />
==== Project: Unit test framework ====<br />
<br />
'''Expected results''':<br />
The aim of this project is to build the base for unit testing for GCompris. The student will have to think on what we can test (qml, js...) and how we can put this in place.<br />
More information can be found in https://phabricator.kde.org/T7668.<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education<br />
<br />
Be familiar with GCompris concept and content<br />
<br />
Basic knowledge in a programming language and CMake use (a 1 year school course is enough)<br />
<br />
Be able to build the Qt Quick version of GCompris<br />
<br />
Technologies used are CMake, C++, Qt.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Divyam Madaan (IRC: dmadaan), Johnny Jazeix (IRC: JohnnyJ), Rudra Nil Basu (IRC: rudra), Timothée Giet (IRC: Animtim)<br />
<br />
=== KDE Partition Manager ===<br />
=== Kopete ===<br />
<br />
==== Project: Write tests and Improve protocol support ====<br />
<br />
'''Brief explanation''': Kopete is an instant messaging client that has the modular architecture and supports many messaging services with useful plugins to complement them. <br />
<br />
'''Expected results''':<br />
The aim of this project is to fix the bugs due to porting and improve the frontend and the test coverage.<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
* Be interested in test-driven development.<br />
<br />
* Be familiar with the codebase of KDE in general.<br />
<br />
* Knowledge of C++ / Qt.<br />
<br />
'''Application guide''':<br />
<br />
Get in touch with us on mailing-list and start hacking KDE and fix bugs. Teams of two people is preferred for this project as it is a lot of work :)<br />
<br />
You can contact on IRC also but it is better to discuss over mailing list as not many people are in IRC on #kopete channel.<br />
<br />
'''Mentors''': Vijay <vijaykrishnavanshi@gmail.com> (vijay_ on IRC), Kopete Mailing List <kopete-devel@kde.org><br />
<br />
=== LabPlot ===<br />
[http://www.labplot.kde.org LabPlot] is a KDE-application for interactive graphing and analysis of scientific data. LabPlot provides an easy way to create, manage and edit plots and to perform data analysis.<br />
<br />
==== Project: Plotting of live MQTT data ====<br />
'''Brief explanation''': LabPlot has already some support for plotting of live-data (http://krajszgsoc.blogspot.de/2017/09/in-finish-line-but-not-in-end.html). To cover more use-cases we want to also support MQTT sources. We need to investigate the available MQTT libraries for Qt:<br />
* https://blog.qt.io/blog/2017/08/14/introducing-qtmqtt-protocol/<br />
* https://github.com/emqtt/qmqtt<br />
and to add some support for MQTT to LabPlot.<br />
<br />
'''Expected results''': Similar to the currently supported data sources (files, sockets, serial port, SQL databases) we want to support the subscription to MQTT brockers and plotting of their data. <br />
<br />
'''Knowledge Prerequisite''': C++, Qt, (optional) knowledge and experience with MQTT<br />
<br />
'''Mentor''': Fábián Kristóf - Szabolcs (mailto:fkristofszabolcs@gmail.com)<br />
<br />
==== Project: Import of educational data sets available on the internet ====<br />
'''Brief explanation''': There are many internet pages providing data sets for educational and study purposes for many different areas (astrophysics, statistics, medicine, etc.). Some tools used in the scientific area provide some "wrappers" for such online sources and allow the user to easily play around with those data sets in the applications whereas the technical details like fetching of data from the server and parsing are done completely transparent for the user. The goal of this project is to add similar functionality to LabPlot. There will be a wizard where the user can select from a thematically grouped list of data sets available online. The internal description of such an online data set should contain the URL with the actual file that needs to be downloaded and the settings for LabPlot's data parser (separator, column names and data types, etc.). The data fetched once should be cached so there is no need to fetch from the web again. Here we can have a look maybe at KStars for how to implement such a caching strategy and maybe even re-use some code from KStars.<br />
In addition to the list of pre-defined online sources, we need to elaborate how the user can add new online data sets (together with all the required parametrization) and publish the settings to make them available for everybody.<br />
<br />
'''Expected results''': We want to be able to easily import the educational data sets available on the internet.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt<br />
<br />
'''Mentor''': Stefan Gerlach<br />
<br />
==== Project: Import of data from web-services ====<br />
'''Brief explanation''': Brief explanation: This goal of this project is to extend the number of supported data sources by adding the possibility to import the data from web services (live and historical financial data, weather, etc.). Most web services expose their data via JSON. We need to add a "JSON filter" to LabPlot capable to connect to a web service, to fetch the data, to parse it and to import into LabPlot's internal data containers. In the GUI the user should be guided through the entry of the service URL, additional services parameters like API token, etc. and through the settings for the actual parsing (which JSON fields to consume and how). Also, it should be possible to refresh the data periodically like it is already possible for the live data (http://krajszgsoc.blogspot.de/2017/09/in-finish-line-but-not-in-end.html). The goal is also to provide a set of widely known web services so the user can select and import the data from a list of pre-defined services. In addition to this, we need to elaborate the possibility to "publish" the settings for a web-service done by the user and make them publicly available to every LabPlot user.<br />
<br />
<br />
'''Expected results''': Similar to the currently supported data sources (files, sockets, serial port, SQL databases) we want to import the data from web services and visualize it.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, (optional) JSON support in Qt<br />
<br />
'''Mentor''': Alexander Semke<br />
<br />
=== Kdenlive ===<br />
[https://kdenlive.org Kdenlive] is a KDE-application for professional video editors. It supports hundreds of video formats and all the features you can expect from a non-linear video editor, including some advanced features like timeline preview rendering, proxy clips and more. <br />
<br />
=== Choqok ===<br />
==== Project: Port Choqok to Kirigami ====<br />
<br />
'''Brief explanation:''' Current Choqok UI doesn't make use of QML and creates interfaces in C++ files. The idea is to rewrite the interface in QML. At this point is better doing it with Kirigami since this means it will work on Plasma Mobile too.<br />
<br />
'''Expected results:''' Choqok UI makes use of Kirigami.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, Qml<br />
<br />
'''Mentor:''' Andrea Scarpino (IRC: ilpianista)<br />
<br />
'''Application guide''':<br />
Get in touch on IRC (#choqok).<br />
<br />
=== KStars ===<br />
<br />
[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time. <br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support an ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can support addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Implementing Ekos in KStars Lite ====<br />
'''Brief explanation''': Ekos is KStars premier tool for observatory control and automation. KStars Lite was successfully developed in GSoC 2016 and is available for Android phones and tablets. We would like to extend KStars Lite to include basic support for Ekos. Currently, KStars Lite supports basic telescope and capture controls, but it could be extended to support a richer experience for users who are performing observatory control and astrophotography.<br />
<br />
'''Expected results''': <br />
* Telescope floating motion controls including speed controls.<br />
* Like video feed display from supported devices.<br />
* Image capture with binning, count, exposure, ISO..etc controls similar to Ekos desktop client.<br />
* Focus controls.<br />
* Alignment using remote astrometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, QML<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Ekos Web Client ====<br />
'''Brief explanation''': Ekos is KStars premier tool for observatory control and automation. A web client port of Ekos is desired where it communicates with the underlying INDI servers and drivers without a direct dependency on thick desktop clients. Ekos includes many modules including setup, capture, focus, guide, align, and mount. All functionalities of the desktop Ekos client are expected in the web client version using Python+Ajax or similar framework technologies suitable for online dynamic driven clients.<br />
<br />
'''Expected results''': <br />
* Online Ekos web client with all the thick client feature set.<br />
* Authentication and Registration framework.<br />
* Support for notifications similar to desktop client.<br />
* Ajax dynamic driven interface with near real-time updates for framing and captures.<br />
* Multi-user support with granular permissions.<br />
* Web based INDI Control Panel with all the driver controls as in the desktop version.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Django/Ajax or similar technology framework.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Akarsh Simha ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: kstar)<br />
<br />
=== Peruse ===<br />
<br />
Peruse is a comic book reader application by KDE, which is designed to work both on touch based devices, and on the traditional desktop. Additionally, it has a tool called Peruse Creator which is designed to create comic books for use with Peruse and any other CBZ capable comic book reader. It has rudimentary support for the [http://acbf.wikia.com/wiki/Specifications Advanced Comic Book Format], which is a metadata container for comic book archives (CBR, CBZ and so on).<br />
<br />
See also the Peruse website for more detailed information: https://peruse.kde.org/<br />
<br />
==== Project: Expand Creator's Abilities ====<br />
<br />
'''Brief explanation:''' Peruse Creator is currently very simple, and will allow the user to create a CBZ comic book archive annotated with a subset of the [http://acbf.wikia.com/wiki/Specifications Advanced Comic Book Format] (ACBF) metainfo, such as authors, publisher information, characters and so on. It does not allow for the creation or editing of the viewport based navigation that ACBF describes, nor does it support the text layers system ACBF proposes for comic book translation. It also lacks editor components for a variety of the general metainformation ACBF suggests.<br />
<br />
Your project proposal should include explicit descriptions of which of these you wish to build support for, and how you propose to do so. It should further include timeframes for each.<br />
<br />
'''Expected results:''' A more capable Peruse Creator.<br />
<br />
'''Knowledge Prerequisite:''' C++ and Qt required, additionally QML/QtQuick knowledge is preferred<br />
<br />
'''Mentor:''' Dan Leinir Turthra Jensen (admin@leinir.dk, IRC: leinir, Telegram and twitter: @leinir)<br />
<br />
==== Project: New Viewer Component ====<br />
<br />
'''Brief explanation:''' The current viewer component for Comic Book Archives (CBR) in Peruse is a simple full-page viewer, which only supports page-by-page navigation. The [http://acbf.wikia.com/wiki/Specifications Advanced Comic Book Format] (ACBF) metadata container brings with it support for a viewport system, which describes how the application should present [http://acbf.wikia.com/wiki/Body_Section_Definition#Frame specific sub-sections of each page], as well as a system for [http://acbf.wikia.com/wiki/Body_Section_Definition#Jump navigating between arbitrary pages in the comic].<br />
<br />
Your project proposal should include explicit descriptions of how you would suggest implementing this, as well as a schedule for the work.<br />
<br />
'''Expected results:''' A viewer component which is able to consume and display the viewport based navigation metadata from the ACBF container, as well as present the general metainformation to the user.<br />
<br />
'''Knowledge Prerequisite:''' C++ and Qt required, additionally QML/QtQuick knowledge is preferred<br />
<br />
'''Mentor:''' Dan Leinir Turthra Jensen (admin@leinir.dk, IRC: leinir, Telegram and twitter: @leinir)<br />
<br />
=== KGpg ===<br />
<br />
[https://utils.kde.org/projects/kgpg KGpg] is a frontend for GnuPG key management.<br />
<br />
'''Brief explanation:''' KGpg currently consists of one application with a very narrow external interface, which is available via DBus. The goal is to split out parts of the code into a static library that is used both by the KGpg binary as well as to-be-written unit tests, which should also cover at least all of the "[https://cgit.kde.org/kgpg.git/tree/transactions transaction]" classes.<br />
<br />
'''Expected results:''' unit tests that can be called via CTest, and are integrated into the KDE CI jobs<br />
<br />
'''Knowledge Prerequisite:''' basic C++, CMake, and GnuPG usage<br />
<br />
'''Mentor:''' Rolf Eike Beer (kde@opensource.sf-tec.de, IRC: Dakon)<br />
<br />
===KWin===<br />
==== Multi-GPU support in Wayland session ==== <br />
<br />
'''Brief Explanation''': Currently KWin as a Wayland compositor can only render to outputs of the primary GPU. We want to allow multi GPU setups with more than one graphics card or simultaneous use of an expansion card and the internal graphics. For that, we need to query all available GPUs and handle them accordingly in our DRM backend.<br />
<br />
'''Expected results''':<br />
Query all available GPUs in DRM backend and their outputs.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt5, basic knowledge of graphics hardware<br />
<br />
'''Mentor''': Roman Gilg (Email: subdiff@gmail.com; IRC: romangg)<br />
<br />
==== Wayland graphical tablet input support ==== <br />
<br />
'''Brief Explanation''': Tablets are very different from mice, they have a lot more information about their current state and events. As such there are separate protocols for passing these events from raw hardware to the client. We need to add:<br />
* A protocol in kwayland to wrap the low level protocol<br />
* support in KWin to map libinput to sending wayland events to the right clients.<br />
* support in Qt's wayland client code to map wayland to Qt events that applications can use <br />
(this will mean collaborating not just within KDE code but also Qt)<br />
<br />
'''Expected results''':<br />
Working tablet support in all applications within a kwin wayland session.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt5,<br />
<br />
'''Mentor''': David Edmundson (davidedmundson@kde.org)<br />
<br />
==== Activities support in KWin on Wayland ==== <br />
<br />
'''Brief Explanation''': KWin has one important regression when it comes to Wayland - lack of support for activities (mainly hiding windows that do not belong to the current activity). What needs to be done:<br />
* Implement a way for kwin to know which applications belong to which activities<br />
* Implement a way for applications to specify on which activities they are<br />
<br />
'''Expected results''':<br />
Working activities in KWin without any performance regressions.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt5,<br />
<br />
'''Mentor''': Ivan Cukic (ivan.cukic@kde.org)<br />
<br />
=== Plasma ===<br />
==== Improve handling for touchpads and mice with Libinput ====<br />
<br />
'''Brief explanation:''' [https://www.freedesktop.org/wiki/Software/libinput/ Libinput] is now used as the driver for input devices in most distros. However, System Settings does not present the user with good interfaces for configuring input devices with libinput. Currently, the only well-supported use case is for [https://bugsfiles.kde.org/attachment.cgi?id=108954 touchpads in a Wayland session]. For touchpads on X11, and mice on both X11 and Wayland, the user experience is sub-optimal or non-existent.<br />
<br />
'''Expected results:''' System Settings should expose good user interfaces for configuring both touchpads and mice when using Libinput, and for both Wayland and X11.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt<br />
<br />
'''Mentor:''' Nate Graham (Email: pointedstick@zoho.com; Telegram: @nggraham)<br />
<br />
'''Application guide''':<br />
* https://wayland.freedesktop.org/libinput/doc/latest/developers.html<br />
* https://bugs.kde.org/show_bug.cgi?id=383379<br />
<br />
==== System Settings: Port keyboard input modules and expand scope to cover input method configuration ====<br />
<br />
'''Brief explanation:''' System Settings' keyboard configuration module needs to be ported to Qt Quick based on reference designs provided by KDE's Visual Design Group. Additionally, the scope of keyboard input configuration needs to be expanded to cover input method configuration as well. This is both part of a larger drive to port the modules in the System Settings application to Qt Quick and modernize its UI design, as well as improve the text input configuration experience for a global audience. This project involves refactoring the existing System Settings module's code to be used as the backend for a QML-based UI and writing new backend code to configure the ibus or fcitx input method daemons. The UI design is expected to be refined during the course of the project in collaboration with VDG contributors. Interaction with other developers working on System Settings module ports in parallel is also expected.<br />
<br />
'''Expected results:''' System Settings should offer keyboard layout and basic input language configuration in a modern UI design.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, Qt Quick/QML<br />
<br />
'''Mentor:''' Eike Hein (Email: hein@kde.org; IRC: Sho_; Telegram: @eikehein)<br />
<br />
'''Application guide''':<br />
* https://conf.kde.org/en/akademy2017/public/events/359<br />
* https://www.youtube.com/watch?v=wE0KDabPfsQ<br />
* https://phabricator.kde.org/M112<br />
<br />
==== Discover: fwupd integration ====<br />
<br />
'''Brief explanation:''' Discover Software Center is in charge of offering different kinds of assets at the moment. Applications, Add-ons, etc as well as serving updates. At the moment it's still not able to update our devices' firmwares. There's a tool for GNU/Linux called FWUPD to do so: https://fwupd.org/developers<br />
<br />
Despite the description specifying plasma, the end goal is to provide a seamless solution to have your hardware's firmware up to date.<br />
If the proposal is too short, other improvements suggested to add to the idea will be welcome.<br />
<br />
'''Expected results:''' Plasma being great at having an up to date system, also with hardware.<br />
<br />
'''Knowledge Prerequisite:''' C++ and Qt, also notions of how glib works, to understand upstream FWUPD.<br />
<br />
'''Mentor:''' Aleix Pol: apol, @AleixPol, aleixpol@kde.org<br />
<br />
=== Okular ===<br />
==== Add support for showing and adding replies to sticky notes ====<br />
<br />
'''Brief explanation:''' PDF files can contain replies to certain annotations, you would need to add support to Okular and potential poppler so that they show the same way they do on other PDF readers. Once they are shown and if there is enough time adding the capability to add replies is also welcome.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt<br />
<br />
'''Mentor:''' Okular developers https://mail.kde.org/mailman/listinfo/okular-devel<br />
<br />
'''Application guide''':<br />
* https://bugs.kde.org/show_bug.cgi?id=387834<br />
<br />
<br />
==== Project: Verifying signatures of pdf files ====<br />
<br />
'''Brief explanation:''' Okular should provide information about signatures if a pdf document has been signed. The poppler library used by Okular to render pdf files does support verification of signed pdf files and the retrieval of signature information. However, this functionality is not used by Okular. Goal of the project is to extend the Okular GUI to show whether a document is signed, and to show the signature details.<br />
<br />
Bonus points for any steps towards signing pdf files in Okular.<br />
<br />
'''Expected results:''' When opening a signed document, Okular should show that the document is signed, and whether the signature is valid, expired, etc. Detailed information about the signature(s) should be made available, through a new menu entry (all signatures) or by a context menu for individual signatures.<br />
<br />
'''Knowledge prerequisite:''' C++ and Qt, very little cryptography skills<br />
<br />
<br />
==== Project: Implement the FreeText annotation ====<br />
<br />
'''Brief explanation:''' Okular implements various annotations from the pdf standard, but a few are still missing. Goal of this project is to implement the FreeText annotation. It allows to write text anywhere directly on a pdf file [0]. There is partial support in poppler [1], the library that is used for the actual pdf rendering. Okular shows such annotations, but they cannot be manipulated. Goal is to implement full support for editing FreeText annotations in Okular.<br />
<br />
[0] https://bugs.kde.org/show_bug.cgi?id=353401<br />
[1] https://bugs.freedesktop.org/show_bug.cgi?id=93213<br />
<br />
'''Expected results:''' The Okular annotation toolbar gains a new entry 'FreeText', where users can create new FreeText annotations. Additionally, existing FreeText annotations can be moved, deleted and modified.<br />
<br />
'''Knowledge prerequisite:''' C++ and Qt, and a bit about the pdf format<br />
<br />
==== Project: Improve custom stamp annotation handling ====<br />
<br />
'''Brief explanation:''' Okular does display stamp annotations, but the support<br />
is somewhat incomplete. This particularly shows when trying to use stamp<br />
annotations with a custom image. For example, such annotations can be<br />
added in Okular, but they cannot be saved to the pdf file in a way<br />
that any other pdf viewer can read. Also, they will not appear on print-outs.<br />
<br />
The underlying reason for this is that Okular renders these stamps itself,<br />
rather than relying on the poppler library, which does all other pdf<br />
rendering. Goal of this project is therefore to teach poppler how to<br />
render stamp annotations, and then make Okular use that new functionality.<br />
More details can be found in the bug report [0].<br />
<br />
[0] https://bugs.kde.org/show_bug.cgi?id=383651<br />
<br />
'''Expected results:''' Poppler should render stamp annotations. Annotations<br />
should be printable from Okular. Custom stamps inserted via the Okular GUI<br />
should be visible in other pdf readers.<br />
<br />
'''Knowledge prerequisite:''' C++, and a bit about the pdf format.<br />
<br />
<br />
==== Project: Annotation improvements ====<br />
<br />
'''Brief explanation:''' Okular supports convenient editing of pdf annotations, but quite a number of paper-cut bugs are known. Examples are [0,1,2], but many more can be found in the bugtracker. Goal of this project is to fix as many of these bugs as possible, which should improve the Okular user experience greatly.<br />
<br />
[0] https://bugs.kde.org/show_bug.cgi?id=275371<br />
[1] https://bugs.freedesktop.org/show_bug.cgi?id=102635<br />
[2] https://bugs.freedesktop.org/show_bug.cgi?id=52010<br />
<br />
'''Expected results:''' Lots of annotation-related bugs fixed. Annotation rendering and manipulation should be more enjoyable.<br />
<br />
'''Knowledge prerequisite:''' C++ and Qt, and a bit about the pdf format<br />
<br />
<br />
=== WikiToLearn ===<br />
<br />
You can find all of the WikiToLearn community on [https://chat.wikitolearn.org chat.wikitolearn.org]. We have many other ideas: get in touch with us to discuss them further!<br />
<br />
==== Project: Progressive Web App ====<br />
<br />
'''Brief explanation:''' [https://cgit.kde.org/scratch/cristianbaldi/wikitolearn-frontend.git Current PWA] is being used in the first iteration of the new WikiToLearn architecture. It needs some improvement in terms of testing, offline-experience and organization to make it stable and ready for a first stable release. We want, also, to create a cohesive ecosystem of resources and design guidelines that can be easily reused. Main goal of this project is to enhance the existing project to provide a tested, functional and production-ready PWA. <br />
<br />
'''Expected results:'''<br />
<br />
* Improve documentation<br />
* Write design guidelines for people who want to contribute<br />
* Organize shared resources in a reusable manner<br />
* Write unit and integration test<br />
* Implement functional offline browsing<br />
* Enhance UX for a production-ready release<br />
<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
* Knowledge of Vue<br />
* Knowledge of HTML5, CSS3 (Sass/Less), JS (ES6 and Browser Apis)<br />
* Responsive design<br />
* Build Tools (WebPack)<br />
* Standards and best practices in Web Development<br />
<br />
<br />
'''Mentor:''' Gianluca Rigoletti (@rigolo)<br />
<br />
=== Falkon ===<br />
<br />
Falkon is a web browser previously known as QupZilla.<br />
<br />
==== JavaScript/QML extensions support ====<br />
<br />
'''Brief explanation:''' Falkon supports additional application extensions to be installed. Currently, it only supports compiled C++ extensions, which makes it complicated to develop and distribute. Adding support for JavaScript extensions would make it more accessible and easier for developers.<br />
<br />
Qt includes own JavaScript engine (QJSEngine/QQmlEngine), so this task is about integrating it into Falkon code base and exposing the browser function to JavaScript extensions.<br />
<br />
'''Expected results:''' Extensions can be written in JavaScript and use QML for GUI. JavaScript extensions should be able to access and interact with all important browser functions.<br />
<br />
'''Knowledge Prerequisite:''' C++/Qt, JavaScript/QML basics<br />
<br />
'''Mentor:''' David Rosca (nowrep@gmail.com, IRC: nowrep on #falkon)<br />
<br />
==== Plasma integration ====<br />
<br />
'''Brief explanation:''' Falkon is Qt application and as such it integrates quite well into Plasma desktop environment. There is also an extension that allows to store passwords in KWallet. Plasma desktop provides some services that could be useful to use from browser, like showing the progress of downloads as jobs in notification applet or searching for bookmarks or open tabs from KRunner.<br />
<br />
There is already existing extension for Chrome that implements these features - [https://cgit.kde.org/plasma-browser-integration.git plasma-browser-integration] that can be used as a base for the Falkon extension.<br />
<br />
'''Expected results:''' Falkon C++ extension and additional helpers improves the integration with Plasma desktop.<br />
<br />
'''Knowledge Prerequisite:''' C++/Qt, JavaScript basics<br />
<br />
'''Mentor:''' David Rosca (nowrep@gmail.com, IRC: nowrep on #falkon)<br />
<br />
=== Cantor ===<br />
<br />
Cantor provides a graphical frontend for different open source computer algebra systems and scientific programming languages [https://edu.kde.org/cantor/].<br />
<br />
==== Project: Improve Cantor's worksheet ====<br />
'''Brief explanation''': One of the central components in Cantor is the worksheet - the place where the calculations are triggered and the results are shown. The worksheet is basically a collection of "cells" of different types which can carry user inputs or the results of the calculations. There are many features that are available in similar (free and commercial) products and that are still missing in this area in Cantor. The goal of this project is to close couple of most obvious gaps and to greatly improve the user experience in Cantor. To name couple of things that need to be implemented:<br />
* collapsible cells to hide the output of the calculations<br />
* additional styling for the cells like setting the color and the font<br />
* highlighting of the cell being currently calculated<br />
* use optionally different background colors for different cell types for an easier identification of e.g. text cells and cells used for calculations<br />
* show timings<br />
* context menu for the cells and for the cells outputs, provide their things like differentiate, simplify, etc. as well as things like "copy as text/latex/image"<br />
* copy&paste of cells<br />
* etc.<br />
<br />
'''Expected results''': Cantor's worksheet with an improved the usability extended functionality.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Qt Graphics Framework<br />
<br />
'''Mentor''': tbd<br />
<br />
=== Plasma Mobile ===<br />
Plasma Mobile is KDE's software stack for mobile devices that includes Plasma phone components, Kirigami and a set of mobile-friendly applications.<br />
<br />
==== Project: Mobile-friendly Locale & Language configuration module ==== <br />
<br />
'''Brief Explanation''': System Settings are built of modules (KCMs) which allow users to configure specific aspects of their system. KCMs that are programmed using Qt Quick and designed to look good on any screen sizes can be shared between desktop and mobile. This project's goal is to create such a universal Locale & Language configuration module.<br />
<br />
'''Expected results''': the student has designed and programmed a configuration module that<br />
*Allows users to change system locale & language, install translation packages and configure keyboard layouts<br />
*Has a flexible and user-friendly interface<br />
*Can be used on both desktop and mobile platforms<br />
<br />
'''Knowledge Prerequisite''': Qt 5, QML, C++<br />
<br />
'''Mentor''': Eike Hein (Sho_ on IRC)<br />
<br />
==== Project: Mobile-friendly Storage configuration module ==== <br />
<br />
'''Brief Explanation''': System Settings are built of modules (KCMs) which allow users to configure specific aspects of their system. KCMs that are programmed using Qt Quick and designed to look good on any screen sizes can be shared between desktop and mobile. This project's goal is to create such a universal Storage configuration module.<br />
<br />
'''Expected results''': the student has designed and programmed a configuration module that<br />
*Allows users to see their storage stats in an informative and friendly way<br />
*Can be used to configure USB/MTP storage: by plugging your phone to a desktop/laptop you should be able to access files on the phone. Even though this bit is mostly base system/hardware providing this, Plasma Mobile should offer a user interface to enable/disable the USB/MTP storage support by default and on-demand<br />
*Has a flexible and user-friendly interface<br />
*Can be used on both desktop and mobile platforms<br />
<br />
'''Knowledge Prerequisite''': Qt 5, QML, C++<br />
<br />
'''Mentor''': tbd<br />
<br />
==== Project: Mobile-friendly Network configuration module ==== <br />
<br />
'''Brief Explanation''': System Settings are built of modules (KCMs) which allow users to configure specific aspects of their system. KCMs that are programmed using Qt Quick and designed to look good on any screen sizes can be shared between desktop and mobile. This project's goal is to create such a universal Network configuration module.<br />
<br />
'''Expected results''': the student has designed and programmed a configuration module that<br />
* Allows users to configure their wireless and mobile connections<br />
* Allows users to easily create hotspots <br />
* Gives users possibility to see statistics about transmitted/recieved data and control their limits for mobile connections<br />
<br />
<br />
'''Additional information''': There is currently one mobile-friendly KCM for network configuration in progress. In case it's not completely finished before GSoC coding period starts, then the student is supposed to finish it and add something else on top of that (like support for VPN connections), there will be definitely some interesting things to add and improve. <br />
<br />
'''Knowledge Prerequisite''': Qt, QML, C++<br />
<br />
'''Mentor''': Jan Grulich (email: jgrulich@redhat.com; irc: jgrulich)<br />
<br />
==== Project: Telephony applications set ==== <br />
<br />
'''Brief Explanation''': In accordance with Plasma Mobile roadmap (https://vizzzion.org/blog/2017/10/plasma-mobile-roadmap/) and the goal of usability and productivity for basic software (https://phabricator.kde.org/T6831), we need to enable Plasma Mobile users to perform basic tasks on their phone effortlessly. To achieve that, we should provide a set of telephony applications: Dialer, SMS, Contact book. All of those apps already exist but are extremely basic and hardly usable. The goal of this project is to bring them to a state when they can be used for telephony tasks on a day-to-day basis.<br />
<br />
'''Expected results''': the student has designed and programmed the telephony application set that:<br />
*Allows users to perform telephony tasks on a daily basis<br />
*Has a flexible and user-friendly interface (usage of Kirigami is highly recommended)<br />
<br />
'''Knowledge Prerequisite''': Qt 5, QML, C++<br />
<br />
'''Mentor''': Dan Leinir Turthra Jensen (leinir on IRC)<br />
<br />
=== KDevelop ===<br />
==== Project: Improve development on docker containers ==== <br />
<br />
'''Brief Explanation''': We have been working on integrating properly docker containers usage into the IDE so they can be developed transparently. This project should help polishing the rough edges and make sure everything integrates properly.<br />
Some ideas would be improving the build systems, debuggers, language support in general, etc. We expect whoever sends the proposal to have looked into the problem and formed an idea of what needs to happen. Here's some explanation of the status quo.<br />
<br />
http://www.proli.net/2017/05/23/kdevelop-runtimes-docker-and-flatpak-integration/<br />
http://www.proli.net/2017/12/18/docker-as-an-sdk-for-arm-distributions/<br />
<br />
'''Expected results''': Improved usability of the integration of docker into the IDE.<br />
<br />
'''Knowledge Prerequisite''': Qt 5, C++<br />
<br />
'''Mentor''': Aleix Pol<br />
<br />
=== Xdg-desktop-portal-kde ===<br />
==== Project: Remote desktop portal ====<br />
'''Brief explanation:''' Xdg-desktop-portal-kde is a portal backend implementation for [https://github.com/flatpak/xdg-desktop-portal xdg-desktop-portal], allowing sandboxed applications (flatpak, snap) to access system files, devices and many other things. One of the missing parts is an implementation of [https://github.com/flatpak/xdg-desktop-portal/blob/master/data/org.freedesktop.impl.portal.RemoteDesktop.xml remote desktop portal], which should allow sandboxed applications to use remote desktop. Xdg-desktop-portal-kde recently got support for screencast portal, which adds support for screen sharing, this together with missing remote desktop portal should bring complete support for remote desktop to sandboxed applications, but also for Plasma wayland session. The similar implementation for Gnome can be found [https://github.com/flatpak/xdg-desktop-portal-gtk here].<br />
<br />
'''Expected results:''' Applications with support for xdg-desktop-portal should be able to use remote desktop also with Plasma desktop.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt<br />
<br />
'''Mentor:''' Jan Grulich (Email: jgrulich@redhat.com; irc: jgrulich)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2018/Ideas&diff=79048GSoC/2018/Ideas2018-01-18T08:09:31Z<p>Cauliergilles: /* Project 3 : digiKam Web Services tools authentication with OAuth2 */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoc Instructions]], [[../../2016/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Being accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or other image'''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor)<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
===digiKam===<br />
digiKam is an advanced digital photo management application for Linux, Windows, and MacOS.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://plus.google.com/+digikam Google+ page]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
<br />
==== Project 1 : digiKam Web Services tools authentication with OAuth2 ==== <br />
<br />
'''Brief Explanation''': digiKam has many tools dedicated to share items on web services, as Facebook, Google Photo, Google Drive, SmugMug, etc...<br />
All tools use an older way to be authenticated through the web service using an external web browser instance to capture the token network session. This is a fastidious way to open a web service session.<br />
Currently, Flickr, DropBox, and Imgur tools use an embedded OAuth2 authentification without a web browser instance through O2 library for Qt.<br />
The goal of this project is to port all others web service tools to O2 library API.<br />
<br />
'''Expected results''':<br />
*Review code of current tools ported to OAuth2<br />
*Review current implementation of tools and list all web services compatible with OAuth standard.<br />
*Plan the amount of work to port tools by order of complexity, and identify possible problems.<br />
*Port code for each tools step by step, by writing unit tests independently.<br />
*Test all tools with all use cases, depending of tool options.<br />
*Write documentation.<br />
<br />
'''Knowledge Prerequisite''': Network, OAuth, C++, and Qt5<br />
<br />
'''Mentor''': Maik Qualmann and Gilles Caulier<br />
<br />
=== Krita ===<br />
[http://www.krita.org Krita]: digital painting for artists. It support creating images from scratch from begin to end. Krita is a complex application and developers need to have a fair amount of experience in order to be able to do something.<br />
<br />
Krita is a widely used digital painting application for professional artists. Last year, Krita gained the ability to create hand-drawn 2D animations, among other new features. For this year, projects that the Krita team would be interested in include the following ideas.<br />
<br />
Note that we're always open to ideas you bring in yourself: if you're passionate about something you've come up with yourself, that you want for Krita, that's a big plus for us.<br />
<br />
We also expect prospective students to submit at least three patchs for bugs or wishes or small features. We want to know how good you are! See https://phabricator.kde.org/T7724 for some smaller tasks that you could work on that are not bugs.<br />
<br />
==== Project: Optimize multithreading in Krita's Tile Manager (make the hash table lockfree) ====<br />
<br />
'''Brief explanation''': This is a hard-core project, only suitable for someone with deep knowledge of the problems of designing multi-threaded software. It involves Krita's core datamodel, where the tiles that compose image data are managed. The main problem is that at the moment the core utilizes QReadWriteLock and QMutex a lot, which means that Krita painting performance stops scaling well, when the number of CPU cores becomes larger than 8. The goal of this project is to locate all the bottlenecks (there are at least 4 of them) and resolve them in a lock-free. One of the bottlenecks involves KisTileHashTable which is used to access the tiles. Since this touches the very core of Krita, a thorough test plan is essential.<br />
<br />
'''Steps to apply''':<br />
The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
# Build Krita with unittests enabled<br />
# Install GNU Perf or VTune<br />
# Run FreehandStrokeBenchmark in a profiler and try to locate all the places where most of the locking/waits happen. The main one will be the hash table, but there are at least three more (your task is to locate them and add into your proposal!)<br />
# (optional) To test your coding abilities you can try to port one of the hash tables code from [https://github.com/preshing/junction Junction] library to Qt's primitives. If you don't feel overwhelmed with such code, you are perfectly fit for the project!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Expected results''': No bottlenecks anymore! <br />
<br />
'''Knowledge Prerequisite''': C++, Qt, threads, locks.<br />
<br />
'''Mentor''': Dmitry Kazakov (dmkitryK|log on irc)<br />
<br />
==== Project: Extending Animation Support for curves ====<br />
<br />
'''Brief Explanation''': In Krita, you can already add curves that could be applied to some properties of a layer, like opactity, animating those properties. We want the animation support extended by allowing users to place masks (filter masks, transformation masks, transparency masks) on the timeline and animate their properties using curves. Every property of a layer or mask placed on the timeline should be animatable.<br />
<br />
'''Expected results''':<br />
* Implementation of a gui for applying the curve settings to one or more properties of a mask or layer<br />
* Implementation of the actual rendering of the properties in the frames<br />
* Saving of these settings<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk_log)<br />
<br />
==== Project: Taking the Shape Brush to the next level ====<br />
'''Brief Explanation''': Krita has a number of interesting brush engines. One of them is the Shape Brush engine. Inspired by Alchemy, the shape brush "throws" shapes on the canvas. The current implementation is limited to geometric shapes. We want the brush engine to be extended to make it possible to load vector shapes defined as PDF or SVG and use those to draw on the canvas as well. Other improvements are the addition of Feathering, an outline mode, edge sharpening and background textures.<br />
<br />
'''Expected Results''': A revampted and exciting shapes brush<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Krita<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Lukas Tvrdy (IRC: LukasT)<br />
<br />
==== Project: Analysis of thoroughput of Krita Blending Modes and porting them to AVX2 ====<br />
<br />
'''Brief Explanation''': Blending modes is the hottest piece of code in Krita. It should process gigabytes of data per second, therefore it should be extremely optimized. Some of its parts are already optimized to use AVX instructions, but some (float16 color spaces) are not. We need to port the rest of the color spaces to AVX and make a research into the possibilities of using AXV2 instructions directly (int16 instructions). [https://github.com/VcDevel/Vc Vc library] supports AXV2 instructions, though we don't know to what extent, it might happen that you would need to extent the library itself to get the needed functionality. This is another hard-core project only suitable if you have a good deal of experience.<br />
<br />
'''Steps to apply''': The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
<br />
# Build Krita with unittests enabled<br />
# Install GNU Perf or VTune<br />
# Run KisCompositionBenchmark under a profiler and see the hottest places of blending modes code<br />
# Check the code of "Normal" blending mode for float32 color spaces (KoOptimizedCompositeOpOver128), copy the file and try to create you own blending mode for float16 color space. Hint: the only thing you should do is to implement correct unpacking/packing code that would convert the values to 32-bit float and back.<br />
# If you don't feel overwhelmed with such code, you are perfectly fit for the project!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Expected Results''': Float16 color spaces are ported to AVX, Integer8 and Integer16 colorspaces are ported to AVX2<br />
<br />
'''Knowledge Prerequisite''': C++, SEE/AVX (read [http://www.intel.eu/content/www/eu/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html Intel's manual])<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Port generic code for not-so-popular blending modes to AVX ====<br />
<br />
'''Brief Explanation''': In Krita we have a lot of blending modes, but only Normal and Alpha Darken are optimized and ported to AVX instructions. The reason for that is obvious, these two blending modes are the hottest and are used in every single image produced in Krita. But it doesn't mean that the other blending modes are less important for painters: they still use Multiply for painting shadows, and Linear Dodge for painting highlights, so they should also be fast! <br />
<br />
The good piece of news is that all these "non-popular" blending modes are implemented in Krita by means of a single class KoCompositeOpGenericSC, so, basically, as a result of your project you should provide one class only! The bad piece of news is that this single class implements about a hundred of blending modes using C++ templates... so be prepared! :)<br />
<br />
'''Steps to apply''': The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
<br />
# Build Krita with unittests enabled<br />
# Install GNU Perf or VTune<br />
# Run KisCompositionBenchmark under a profiler and see the hottest places of blending modes code<br />
# Check the code of "Copy" blending mode in KoCompositeOpCopy2 and try to port it into AVX for RGB8 colorspace. Use KoOptimizedCompositeOpOver32 as an example.<br />
# If you don't feel overwhelmed with such code, you are perfectly fit for the project!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Expected Results''': "Copy" blending mode is ported to AVX, all the "gereric" blending modes are ported to AVX<br />
<br />
'''Knowledge Prerequisite''': C++, SEE/AVX (read [http://www.intel.eu/content/www/eu/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html Intel's manual])<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Optimize Soft, Gaussian and Stamp brushes to use AVX ====<br />
<br />
'''Brief Explanation''': When the user draws a line in Krita, this line consists of thousands of small rectangular images (dabs) that are painted one over another. For each dab Krita generates its own mask (depending on the stylus pressure and tilt) and uses this mask for filling the layer. It happens thousands of times per second, which makes mask generation code one of the hottest places in Krita. We already have AVX optimization for Default brush mask engine and it works 5(!) times faster than Gaussian engine and 3(!) times faster than the Soft engine. The goal of this project is to port the rest of non-optimized engines to use AVX via [https://github.com/VcDevel/Vc Vc library] and make them faster.<br />
<br />
'''Steps to apply''': The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
<br />
# Build Krita with unittests enabled<br />
# Install GNU Perf or VTune<br />
# Run FreehandStrokeBenchmark under a profiler and compare the results for different types of brushes. You can see how faster Default brush tip is.<br />
# Check the code in kis_brush_mask_applicator_factories.cpp and try to implement your own version of FastRowProcessor for KisGaussCircleMaskGenerator '''without''' using any AVX. Even without any vector instruction the brush will become much faster, just because it will use less virtual calls.<br />
# If you don't feel overwhelmed with the amount of C++ templates in your code, you are perfectly fit for the project!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Expected Results''': Circular Soft, Gaussian and Stamp brush masks are ported to AVX-optimized code. Optionally, if there is enough time, rectangular brush masks are posted as well.<br />
<br />
'''Knowledge Prerequisite''': C++, SEE/AVX (read [http://www.intel.eu/content/www/eu/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html Intel's manual])<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
<br />
==== Project: Partial canvas updates and region of interest (performance optimization for huge (20k+) canvases) ====<br />
<br />
'''Brief Explanation''': We already have an optimization for huge canvases, which is called Instant Preview. But it woks only when the user has the canvas zoomed out to fit the screen. There are some usecases, when the user wants to work with a small "working area" of a huge image and he doesn't care what happens with the rest of the image. This project is targeted to optimize this case.<br />
<br />
'''Expected Results''': By the end of the summer we expect these features to be implemented:<br />
* Partial updates in openGL canvas. Right now we redraw all the image textures in every frame, which is not needed after porting to Qt5.<br />
* Region of Intereset (ROI) in KisImage. Updates should be reordered and the priority should be given to the areas that are currently visible to the user<br />
* Work Area Tool. The user is be able to define the area, where he would like to work in. The updates for other parts of the image are skipped until the user exits this special mode.<br />
* (if there is time) Optimize textures loading to use RIO as well. Theoretically, we can just skip uploading of the tiles that are not visible on the screen at the moment.<br />
<br />
'''Steps to apply''': The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
<br />
# Build Krita<br />
# Check the code in KisImage, pay attention to 'cropRect' parameter of the update calls. That is exactly what you need for limiting the updates in the work area tool<br />
# Try to write Work Area Tool: copy the code of KisToolCrop, connect it to Krita and make it override the cropRect paramenter in KisImage.<br />
# If you manage to make a draft of Work Area Tool, most probably, you will manage to complete the whole project successfully!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Knowledge Prerequisite''': C++, OpenGL<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log), Julian Thijssen (IRC: Nimmy)<br />
<br />
==== Project: Add 3D Painting Assistants ====<br />
<br />
'''Brief explanation''': One of the more innovative features in Krita are the painting assistants. These are shapes overlaid on the canvas that the artist can use to help him achieve perspective, straight lines and other shapes freehand. For complex drawings it would be useful to be able to place 3D models on the canvas, position and scale them and use those as guides for drawing.<br />
<br />
'''Expected results''': by the end of the summer, 3D models should be shown on canvas as canvas decorations, using OpenGL in hidden-line wireframe mode. The models should be manipulated using on-canvas controls like other assistants. Magnetic snapping is an optional extra.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, OpenGL, Assimp<br />
<br />
'''Mentor''': Julian Thijssen (IRC: Nimmy)<br />
<br />
=== KDE Student Programs ===<br />
<br />
KDE Student Programs is the working group responsible for running Season of KDE and managing KDE's participation in Google Summer of Code, Google Code-In, and other mentorship programmes.<br />
<br />
==== Project: A new Season of KDE Website ====<br />
<br />
'''Brief explanation''': Season of KDE will need a new website to make managing the project easier for us. The core feature set that we're looking to have comprises:<br />
<br />
* Student applications on the website<br />
* Mentors can mark themselves interested in projects during the application phase<br />
* Org admins will create slots and assign projects and mentors to slots<br />
* Manage mid-term evaluations and results<br />
* Bulk data export and import<br />
<br />
For maintainability by the rest of KDE we'd like the app to be in Python (Tornado or a WSGI framework). It would also be nice if the app was an SPA riding on top of a REST API server so we can have command-line tools interacting with the server as well.<br />
<br />
'''Expected results''': Easier project administration for KDE.<br />
<br />
'''Knowledge Prerequisite''': Python, Tornado/WSGI, LDAP, full-stack web development, Single-Page applications.<br />
<br />
'''Mentor''': Boudhayan Gupta <bgupta@kde.org>, BaloneyGeek on IRC<br />
<br />
=== GCompris ===<br />
==== Project: finishing started activities ====<br />
'''Brief explanation''': GCompris is a an educational software suite comprising of numerous activities for children aged 2 to 10. Originally written in Gtk+ it's development team started to rewrite it from scratch in Qt Quick.<br />
<br />
'''Expected results''':<br />
The aim of this year is to complete and getting merged activities that were started but have not been finished. You can find a list of tasks that you can work on at https://phabricator.kde.org/T7498. First phase is to check what is missing to be integrated (on code and graphic side) and then to complete them. You can find at https://cgit.kde.org/gcompris.git/refs/heads the list of the current branches (some of them need to be dropped, so contact us before starting working on one of them).<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education<br />
<br />
Be familiar with GCompris concept and content<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough)<br />
<br />
Be able to build the Qt Quick version of GCompris<br />
<br />
'''Application guide''':<br />
Continuing an activity already started or rewriting from scratch is something you have to check before writing your application. Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/An_exercise_for_new_contributors and http://gcompris.net/wiki/Reviewing_an_activity<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Divyam Madaan (IRC: dmadaan), Johnny Jazeix (IRC: JohnnyJ), Rudra Nil Basu (IRC: rudra), Timothée Giet (IRC: Animtim)<br />
<br />
==== Project: Unit test framework ====<br />
<br />
'''Expected results''':<br />
The aim of this project is to build the base for unit testing for GCompris. The student will have to think on what we can test (qml, js...) and how we can put this in place.<br />
More information can be found in https://phabricator.kde.org/T7668.<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education<br />
<br />
Be familiar with GCompris concept and content<br />
<br />
Basic knowledge in a programming language and CMake use (a 1 year school course is enough)<br />
<br />
Be able to build the Qt Quick version of GCompris<br />
<br />
Technologies used are CMake, C++, Qt.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Divyam Madaan (IRC: dmadaan), Johnny Jazeix (IRC: JohnnyJ), Rudra Nil Basu (IRC: rudra), Timothée Giet (IRC: Animtim)<br />
<br />
=== KDE Partition Manager ===<br />
==== Project: finishing KAuth support [Season of KDE]====<br />
'''Brief explanation''': KDE Partition Manager is a utility program to help you manage the disk devices, partitions and file systems on your computer. It allows you to easily create, copy, move, delete, resize without losing data, backup and restore partitions.<br />
<br />
'''Expected results''':<br />
Last year a lot of work was done to make KDE Partition Manager not to start as root and use KAuth to elevate privileges. The aim of this project is to finish required refactoring and make sure everything still works.<br />
<br />
The two main issues are:<br />
<br />
* SMART support needs to be ported from (unmaitained) libatasmart library to calling smartctl command. This task is likely to be fairly easy.<br />
<br />
* KDE Partition Manager operation runner should be refactored, instead of calling KAuth helper multiple times to run a single command it has to prepare a list of all commands and their inputs and call KAuth helper once. This needs some refactoring in how partition manager reads and writes disk data (e.g. when moving/copying/backing up or restoring partition). In particular we don't want to transfer all the disk data back from the helper to the main application and back to the helper as DBus transport is fairly slow.<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
* Be able to build the KPMcore and KDE Partition Manager from source.<br />
<br />
* Knowledge of C++ / Qt (No knowledge of KDE Frameworks is required).<br />
<br />
'''Application guide''':<br />
Get in touch on IRC (#kde-devel or #calamares).<br />
<br />
'''Mentors''': Andrius Štikonas (IRC:stikonas)<br />
<br />
=== Kopete ===<br />
<br />
==== Project: Write tests and Improve protocol support ====<br />
<br />
'''Brief explanation''': Kopete is an instant messaging client that has the modular architecture and supports many messaging services with useful plugins to complement them. <br />
<br />
'''Expected results''':<br />
The aim of this project is to fix the bugs due to porting and improve the frontend and the test coverage.<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
* Be interested in test-driven development.<br />
<br />
* Be familiar with the codebase of KDE in general.<br />
<br />
* Knowledge of C++ / Qt.<br />
<br />
'''Application guide''':<br />
<br />
Get in touch with us on mailing-list and start hacking KDE and fix bugs. Teams of two people is preferred for this project as it is a lot of work :)<br />
<br />
You can contact on IRC also but it is better to discuss over mailing list as not many people are in IRC on #kopete channel.<br />
<br />
'''Mentors''': Vijay <vijaykrishnavanshi@gmail.com> (vijay_ on IRC), Kopete Mailing List <kopete-devel@kde.org><br />
<br />
=== LabPlot ===<br />
[http://www.labplot.kde.org LabPlot] is a KDE-application for interactive graphing and analysis of scientific data. LabPlot provides an easy way to create, manage and edit plots and to perform data analysis.<br />
<br />
==== Project: Plotting of live MQTT data ====<br />
'''Brief explanation''': LabPlot has already some support for plotting of live-data (http://krajszgsoc.blogspot.de/2017/09/in-finish-line-but-not-in-end.html). To cover more use-cases we want to also support MQTT sources. We need to investigate the available MQTT libraries for Qt:<br />
* https://blog.qt.io/blog/2017/08/14/introducing-qtmqtt-protocol/<br />
* https://github.com/emqtt/qmqtt<br />
and to add some support for MQTT to LabPlot.<br />
<br />
'''Expected results''': Similar to the currently supported data sources (files, sockets, serial port, SQL databases) we want to support the subscription to MQTT brockers and plotting of their data. <br />
<br />
'''Knowledge Prerequisite''': C++, Qt, (optional) knowledge and experience with MQTT<br />
<br />
'''Mentor''': Fábián Kristóf - Szabolcs (mailto:fkristofszabolcs@gmail.com)<br />
<br />
==== Project: Import of educational data sets available on the internet ====<br />
'''Brief explanation''': There are many internet pages providing data sets for educational and study purposes for many different areas (astrophysics, statistics, medicine, etc.). Some tools used in the scientific area provide some "wrappers" for such online sources and allow the user to easily play around with those data sets in the applications whereas the technical details like fetching of data from the server and parsing are done completely transparent for the user. The goal of this project is to add similar functionality to LabPlot. There will be a wizard where the user can select from a thematically grouped list of data sets available online. The internal description of such an online data set should contain the URL with the actual file that needs to be downloaded and the settings for LabPlot's data parser (separator, column names and data types, etc.). The data fetched once should be cached so there is no need to fetch from the web again. Here we can have a look maybe at KStars for how to implement such a caching strategy and maybe even re-use some code from KStars.<br />
In addition to the list of pre-defined online sources, we need to elaborate how the user can add new online data sets (together with all the required parametrization) and publish the settings to make them available for everybody.<br />
<br />
'''Expected results''': We want to be able to easily import the educational data sets available on the internet.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt<br />
<br />
'''Mentor''': Stefan Gerlach<br />
<br />
==== Project: Import of data from web-services ====<br />
'''Brief explanation''': Brief explanation: This goal of this project is to extend the number of supported data sources by adding the possibility to import the data from web services (live and historical financial data, weather, etc.). Most web services expose their data via JSON. We need to add a "JSON filter" to LabPlot capable to connect to a web service, to fetch the data, to parse it and to import into LabPlot's internal data containers. In the GUI the user should be guided through the entry of the service URL, additional services parameters like API token, etc. and through the settings for the actual parsing (which JSON fields to consume and how). Also, it should be possible to refresh the data periodically like it is already possible for the live data (http://krajszgsoc.blogspot.de/2017/09/in-finish-line-but-not-in-end.html). The goal is also to provide a set of widely known web services so the user can select and import the data from a list of pre-defined services. In addition to this, we need to elaborate the possibility to "publish" the settings for a web-service done by the user and make them publicly available to every LabPlot user.<br />
<br />
<br />
'''Expected results''': Similar to the currently supported data sources (files, sockets, serial port, SQL databases) we want to import the data from web services and visualize it.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, (optional) JSON support in Qt<br />
<br />
'''Mentor''': Alexander Semke<br />
<br />
=== Kdenlive ===<br />
[https://kdenlive.org Kdenlive] is a KDE-application for professionnal video editors. It supports hundreds of video formats, and all the features you can expect from a non-linear video editor, including some advanced features like timeline preview rendering, proxy clips and more. <br />
<br />
=== Choqok ===<br />
==== Project: Port Choqok to Kirigami ====<br />
<br />
'''Brief explanation:''' Current Choqok UI doesn't make use of QML and creates interfaces in C++ files. The idea is to rewrite the interface in QML. At this point is better doing it with Kirigami since this means it will work on Plasma Mobile too.<br />
<br />
'''Expected results:''' Choqok UI makes use of Kirigami.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, Qml<br />
<br />
'''Mentor:''' Andrea Scarpino (IRC: ilpianista)<br />
<br />
'''Application guide''':<br />
Get in touch on IRC (#choqok).<br />
<br />
=== KStars ===<br />
<br />
[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time. <br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can supported addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Implementing Ekos in KStars Lite ====<br />
'''Brief explanation''': Ekos is KStars premier tool for observatory control and automation. KStars Lite was successfully developed in GSoC 2016 and is available for Android phones and tablets. We would like to extend KStars Lite to include basic support for Ekos. Currently, KStars Lite supports basic telescope and capture controls, but it could be extended to support a richer experience for users who are performing observatory control and astrophotography.<br />
<br />
'''Expected results''': <br />
* Telescope floating motion controls including speed controls.<br />
* Like video feed display from supported devices.<br />
* Image capture with binning, count, exposure, ISO..etc controls similar to Ekos desktop client.<br />
* Focus controls.<br />
* Alignment using remote astrometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, QML<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Ekos Web Client ====<br />
'''Brief explanation''': Ekos is KStars premier tool for observatory control and automation. A web client port of Ekos is desired where it communicates with the underlying INDI servers and drivers without a direct dependency on thick desktop clients. Ekos includes many modules including setup, capture, focus, guide, align, and mount. All functionalities of the desktop Ekos client are expected in the web client version using Python+Ajax or similar framework technologies suitable for online dynamic driven clients.<br />
<br />
'''Expected results''': <br />
* Online Ekos web client with all the thick client feature set.<br />
* Authentication and Registration framework.<br />
* Support for notifications similar to desktop client.<br />
* Ajax dynamic driven interface with near real time updates for framing and captures.<br />
* Multi-user support with granular permissions.<br />
* Web based INDI Control Panel with all the driver controls as in the desktop version.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Django/Ajax or similar technology framework.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Akarsh Simha ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: kstar)<br />
<br />
=== Peruse ===<br />
<br />
Peruse is a comic book reader application by KDE, which is designed to work both on touch based devices, and on the traditional desktop. Additionally, it has a tool called Peruse Creator which is designed to create comic books for use with Peruse and any other CBZ capable comic book reader. It has rudimentary support for the [http://acbf.wikia.com/wiki/Specifications Advanced Comic Book Format], which is a metadata container for comic book archives (CBR, CBZ and so on).<br />
<br />
See also the Peruse website for more detailed information: https://peruse.kde.org/<br />
<br />
==== Project: Expand Creator's Abilities ====<br />
<br />
'''Brief explanation:''' Peruse Creator is currently very simple, and will allow the user to create a CBZ comic book archive annotated with a subset of the [http://acbf.wikia.com/wiki/Specifications Advanced Comic Book Format] (ACBF) metainfo, such as authors, publisher information, characters and so on. It does not allow for the creation or editing of the viewport based navigation that ACBF describes, nor does it support the text layers system ACBF proposes for comic book translation. It also lacks editor components for a variety of the general metainformation ACBF suggests.<br />
<br />
Your project proposal should include explicit descriptions of which of these you wish to build support for, and how you propose to do so. It should further include timeframes for each.<br />
<br />
'''Expected results:''' A more capable Peruse Creator.<br />
<br />
'''Knowledge Prerequisite:''' C++ and Qt required, additionally QML/QtQuick knowledge is preferred<br />
<br />
'''Mentor:''' Dan Leinir Turthra Jensen (admin@leinir.dk, IRC: leinir, Telegram and twitter: @leinir)<br />
<br />
==== Project: New Viewer Component ====<br />
<br />
'''Brief explanation:''' The current viewer component for Comic Book Archives (CBR) in Peruse is a simple full-page viewer, which only supports page-by-page navigation. The [http://acbf.wikia.com/wiki/Specifications Advanced Comic Book Format] (ACBF) metadata container brings with it support for a viewport system, which describes how the application should present [http://acbf.wikia.com/wiki/Body_Section_Definition#Frame specific sub-sections of each page], as well as a system for [http://acbf.wikia.com/wiki/Body_Section_Definition#Jump navigating between arbitrary pages in the comic].<br />
<br />
Your project proposal should include explicit descriptions of how you would suggest to implement this, as well as a schedule for the work.<br />
<br />
'''Expected results:''' A viewer component which is able to consume and display the viewport based navigation metadata from the ACBF container, as well as present the general metainformation to the user.<br />
<br />
'''Knowledge Prerequisite:''' C++ and Qt required, additionally QML/QtQuick knowledge is preferred<br />
<br />
'''Mentor:''' Dan Leinir Turthra Jensen (admin@leinir.dk, IRC: leinir, Telegram and twitter: @leinir)<br />
<br />
=== KGpg ===<br />
<br />
[https://utils.kde.org/projects/kgpg KGpg] is a frontend for GnuPG key management.<br />
<br />
'''Brief explanation:''' KGpg currently consists of one application with a very narrow external interface, which is available via DBus. The goal is to split out parts of the code into a static library that is used both by the KGpg binary as well as to-be-written unit tests, which should also cover at least all of the "[https://cgit.kde.org/kgpg.git/tree/transactions transaction]" classes.<br />
<br />
'''Expected results:''' unit tests that can be called via CTest, and are integrated into the KDE CI jobs<br />
<br />
'''Knowledge Prerequisite:''' basic C++, CMake, and GnuPG usage<br />
<br />
'''Mentor:''' Rolf Eike Beer (kde@opensource.sf-tec.de, IRC: Dakon)<br />
<br />
=== Plasma ===<br />
==== Improve handling for touchpads and mice with Libinput ====<br />
<br />
'''Brief explanation:''' [https://www.freedesktop.org/wiki/Software/libinput/ Libinput] is now used as the driver for input devices in most distros. However, System Settings does not present the user with good interfaces for configuring input devices with libinput. Currently the only well-supported use case is for [https://bugsfiles.kde.org/attachment.cgi?id=108954 touchpads in a Wayland session]. For touchpads on X11, and mice on both X11 and Wayland, the user experience is sub-optimal or non-existent.<br />
<br />
'''Expected results:''' System Settings should expose good user interfaces for configuring both touchpads and mice when using Libinput, and for both Wayland and X11.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt<br />
<br />
'''Mentor:''' Nate Graham (Email: pointedstick@zoho.com; Telegram: @nggraham)<br />
<br />
'''Application guide''':<br />
* https://wayland.freedesktop.org/libinput/doc/latest/developers.html<br />
* https://bugs.kde.org/show_bug.cgi?id=383379<br />
<br />
==== Discover: fwupd integration ====<br />
<br />
'''Brief explanation:''' Discover Software Center is in charge of offering different kinds of assets at the moment. Applications, Add-ons, etc as well as serving updates. At the moment it's still not able to update our devices' firmwares. There's a tool for GNU/Linux called FWUPD to do so: https://fwupd.org/developers<br />
<br />
Despite the description specifying plasma, the end goal is to provide a seamless solution to have your hardware's firmware up to date.<br />
If the proposal is too short, other improvements suggested to add to the idea will be welcome.<br />
<br />
'''Expected results:''' Plasma being great at having an up to date system, also with hardware.<br />
<br />
'''Knowledge Prerequisite:''' C++ and Qt, also notions of how glib works, to understand upstream FWUPD.<br />
<br />
'''Mentor:''' Aleix Pol: apol, @AleixPol, aleixpol@kde.org<br />
<br />
<br />
=== Okular ===<br />
==== Add support for showing and adding replies to sticky notes ====<br />
<br />
'''Brief explanation:''' PDF files can contain replies to certain annotations, you would need to add support to Okular and potential poppler so that they show the same way they do on other PDF readers. Once they are shown and if there is enough time adding the capability to add replies is also welcome.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt<br />
<br />
'''Mentor:''' Okular developers https://mail.kde.org/mailman/listinfo/okular-devel<br />
<br />
'''Application guide''':<br />
* https://bugs.kde.org/show_bug.cgi?id=387834<br />
<br />
=== WikiToLearn ===<br />
<br />
You can find all of the WikiToLearn community on [https://chat.wikitolearn.org chat.wikitolearn.org]. We have many other ideas: get in touch with us to discuss them further!<br />
<br />
==== Project: WTL as a progressive web app ====<br />
<br />
'''Brief explanation:''' [https://cgit.kde.org/scratch/cristianbaldi/wikitolearn-frontend.git Current PWA] is being used in the first iteration of the new WikiToLearn architecture. It needs some improvement in terms of testing, offline-experience and organization to make it stable and ready for a first stable release. We want, also, to create a cohesively ecosystem of resources and design guidelines that can be easily reused. Main goal of this project is to enhance the existing project to provide a tested, functional and production-ready PWA. <br />
<br />
'''Expected results:'''<br />
* Improve documentation<br />
* Write design guidelines for people who want to contribute<br />
* Organize shared resources in a reusable manner<br />
* Write unit and integration test<br />
* Implement functional offline browsing<br />
* Enhance UX for a production-ready release<br />
<br />
'''Knowledge Prerequisite:'''<br />
* Knowledge of Vue<br />
* Knowledge of HTML5, CSS3 (Sass/Less), JS (ES6 and Browser Apis)<br />
* Responsive design<br />
* Build Tools (WebPack)<br />
* Standards and best practices in Web Development<br />
<br />
'''Mentor:''' Gianluca Rigoletti (@rigolo)</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2018/Ideas&diff=79047GSoC/2018/Ideas2018-01-18T08:08:58Z<p>Cauliergilles: /* Ideas */</p>
<hr />
<div>[[File:Mascot konqi-app-presentation.png|thumbnail|right|[[Konqi]] is giving a lesson!]]<br />
See also: [[../../|GSoc Instructions]], [[../../2016/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Being accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
{{Note|'''These are all proposals! We are open to new ideas you might have!!''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE.}}<br />
<br />
__TOC__<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or other image'''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor)<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
===digiKam===<br />
digiKam is an advanced digital photo management application for Linux, Windows, and MacOS.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://plus.google.com/+digikam Google+ page]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
<br />
==== Project 3 : digiKam Web Services tools authentication with OAuth2 ==== <br />
<br />
'''Brief Explanation''': digiKam has many tools dedicated to share items on web services, as Facebook, Google Photo, Google Drive, SmugMug, etc...<br />
All tools use an older way to be authenticated through the web service using an external web browser instance to capture the token network session. This is a fastidious way to open a web service session.<br />
Currently, Flickr, DropBox, and Imgur tools use an embedded OAuth2 authentification without a web browser instance through O2 library for Qt.<br />
The goal of this project is to port all others web service tools to O2 library API.<br />
<br />
'''Expected results''':<br />
*Review code of current tools ported to OAuth2<br />
*Review current implementation of tools and list all web services compatible with OAuth standard.<br />
*Plan the amount of work to port tools by order of complexity, and identify possible problems.<br />
*Port code for each tools step by step, by writing unit tests independently.<br />
*Test all tools with all use cases, depending of tool options.<br />
*Write documentation.<br />
<br />
'''Knowledge Prerequisite''': Network, OAuth, C++, and Qt5<br />
<br />
'''Mentor''': Maik Qualmann and Gilles Caulier<br />
<br />
=== Krita ===<br />
[http://www.krita.org Krita]: digital painting for artists. It support creating images from scratch from begin to end. Krita is a complex application and developers need to have a fair amount of experience in order to be able to do something.<br />
<br />
Krita is a widely used digital painting application for professional artists. Last year, Krita gained the ability to create hand-drawn 2D animations, among other new features. For this year, projects that the Krita team would be interested in include the following ideas.<br />
<br />
Note that we're always open to ideas you bring in yourself: if you're passionate about something you've come up with yourself, that you want for Krita, that's a big plus for us.<br />
<br />
We also expect prospective students to submit at least three patchs for bugs or wishes or small features. We want to know how good you are! See https://phabricator.kde.org/T7724 for some smaller tasks that you could work on that are not bugs.<br />
<br />
==== Project: Optimize multithreading in Krita's Tile Manager (make the hash table lockfree) ====<br />
<br />
'''Brief explanation''': This is a hard-core project, only suitable for someone with deep knowledge of the problems of designing multi-threaded software. It involves Krita's core datamodel, where the tiles that compose image data are managed. The main problem is that at the moment the core utilizes QReadWriteLock and QMutex a lot, which means that Krita painting performance stops scaling well, when the number of CPU cores becomes larger than 8. The goal of this project is to locate all the bottlenecks (there are at least 4 of them) and resolve them in a lock-free. One of the bottlenecks involves KisTileHashTable which is used to access the tiles. Since this touches the very core of Krita, a thorough test plan is essential.<br />
<br />
'''Steps to apply''':<br />
The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
# Build Krita with unittests enabled<br />
# Install GNU Perf or VTune<br />
# Run FreehandStrokeBenchmark in a profiler and try to locate all the places where most of the locking/waits happen. The main one will be the hash table, but there are at least three more (your task is to locate them and add into your proposal!)<br />
# (optional) To test your coding abilities you can try to port one of the hash tables code from [https://github.com/preshing/junction Junction] library to Qt's primitives. If you don't feel overwhelmed with such code, you are perfectly fit for the project!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Expected results''': No bottlenecks anymore! <br />
<br />
'''Knowledge Prerequisite''': C++, Qt, threads, locks.<br />
<br />
'''Mentor''': Dmitry Kazakov (dmkitryK|log on irc)<br />
<br />
==== Project: Extending Animation Support for curves ====<br />
<br />
'''Brief Explanation''': In Krita, you can already add curves that could be applied to some properties of a layer, like opactity, animating those properties. We want the animation support extended by allowing users to place masks (filter masks, transformation masks, transparency masks) on the timeline and animate their properties using curves. Every property of a layer or mask placed on the timeline should be animatable.<br />
<br />
'''Expected results''':<br />
* Implementation of a gui for applying the curve settings to one or more properties of a mask or layer<br />
* Implementation of the actual rendering of the properties in the frames<br />
* Saving of these settings<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk_log)<br />
<br />
==== Project: Taking the Shape Brush to the next level ====<br />
'''Brief Explanation''': Krita has a number of interesting brush engines. One of them is the Shape Brush engine. Inspired by Alchemy, the shape brush "throws" shapes on the canvas. The current implementation is limited to geometric shapes. We want the brush engine to be extended to make it possible to load vector shapes defined as PDF or SVG and use those to draw on the canvas as well. Other improvements are the addition of Feathering, an outline mode, edge sharpening and background textures.<br />
<br />
'''Expected Results''': A revampted and exciting shapes brush<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Krita<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Lukas Tvrdy (IRC: LukasT)<br />
<br />
==== Project: Analysis of thoroughput of Krita Blending Modes and porting them to AVX2 ====<br />
<br />
'''Brief Explanation''': Blending modes is the hottest piece of code in Krita. It should process gigabytes of data per second, therefore it should be extremely optimized. Some of its parts are already optimized to use AVX instructions, but some (float16 color spaces) are not. We need to port the rest of the color spaces to AVX and make a research into the possibilities of using AXV2 instructions directly (int16 instructions). [https://github.com/VcDevel/Vc Vc library] supports AXV2 instructions, though we don't know to what extent, it might happen that you would need to extent the library itself to get the needed functionality. This is another hard-core project only suitable if you have a good deal of experience.<br />
<br />
'''Steps to apply''': The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
<br />
# Build Krita with unittests enabled<br />
# Install GNU Perf or VTune<br />
# Run KisCompositionBenchmark under a profiler and see the hottest places of blending modes code<br />
# Check the code of "Normal" blending mode for float32 color spaces (KoOptimizedCompositeOpOver128), copy the file and try to create you own blending mode for float16 color space. Hint: the only thing you should do is to implement correct unpacking/packing code that would convert the values to 32-bit float and back.<br />
# If you don't feel overwhelmed with such code, you are perfectly fit for the project!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Expected Results''': Float16 color spaces are ported to AVX, Integer8 and Integer16 colorspaces are ported to AVX2<br />
<br />
'''Knowledge Prerequisite''': C++, SEE/AVX (read [http://www.intel.eu/content/www/eu/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html Intel's manual])<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Port generic code for not-so-popular blending modes to AVX ====<br />
<br />
'''Brief Explanation''': In Krita we have a lot of blending modes, but only Normal and Alpha Darken are optimized and ported to AVX instructions. The reason for that is obvious, these two blending modes are the hottest and are used in every single image produced in Krita. But it doesn't mean that the other blending modes are less important for painters: they still use Multiply for painting shadows, and Linear Dodge for painting highlights, so they should also be fast! <br />
<br />
The good piece of news is that all these "non-popular" blending modes are implemented in Krita by means of a single class KoCompositeOpGenericSC, so, basically, as a result of your project you should provide one class only! The bad piece of news is that this single class implements about a hundred of blending modes using C++ templates... so be prepared! :)<br />
<br />
'''Steps to apply''': The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
<br />
# Build Krita with unittests enabled<br />
# Install GNU Perf or VTune<br />
# Run KisCompositionBenchmark under a profiler and see the hottest places of blending modes code<br />
# Check the code of "Copy" blending mode in KoCompositeOpCopy2 and try to port it into AVX for RGB8 colorspace. Use KoOptimizedCompositeOpOver32 as an example.<br />
# If you don't feel overwhelmed with such code, you are perfectly fit for the project!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Expected Results''': "Copy" blending mode is ported to AVX, all the "gereric" blending modes are ported to AVX<br />
<br />
'''Knowledge Prerequisite''': C++, SEE/AVX (read [http://www.intel.eu/content/www/eu/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html Intel's manual])<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Optimize Soft, Gaussian and Stamp brushes to use AVX ====<br />
<br />
'''Brief Explanation''': When the user draws a line in Krita, this line consists of thousands of small rectangular images (dabs) that are painted one over another. For each dab Krita generates its own mask (depending on the stylus pressure and tilt) and uses this mask for filling the layer. It happens thousands of times per second, which makes mask generation code one of the hottest places in Krita. We already have AVX optimization for Default brush mask engine and it works 5(!) times faster than Gaussian engine and 3(!) times faster than the Soft engine. The goal of this project is to port the rest of non-optimized engines to use AVX via [https://github.com/VcDevel/Vc Vc library] and make them faster.<br />
<br />
'''Steps to apply''': The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
<br />
# Build Krita with unittests enabled<br />
# Install GNU Perf or VTune<br />
# Run FreehandStrokeBenchmark under a profiler and compare the results for different types of brushes. You can see how faster Default brush tip is.<br />
# Check the code in kis_brush_mask_applicator_factories.cpp and try to implement your own version of FastRowProcessor for KisGaussCircleMaskGenerator '''without''' using any AVX. Even without any vector instruction the brush will become much faster, just because it will use less virtual calls.<br />
# If you don't feel overwhelmed with the amount of C++ templates in your code, you are perfectly fit for the project!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Expected Results''': Circular Soft, Gaussian and Stamp brush masks are ported to AVX-optimized code. Optionally, if there is enough time, rectangular brush masks are posted as well.<br />
<br />
'''Knowledge Prerequisite''': C++, SEE/AVX (read [http://www.intel.eu/content/www/eu/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html Intel's manual])<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
<br />
==== Project: Partial canvas updates and region of interest (performance optimization for huge (20k+) canvases) ====<br />
<br />
'''Brief Explanation''': We already have an optimization for huge canvases, which is called Instant Preview. But it woks only when the user has the canvas zoomed out to fit the screen. There are some usecases, when the user wants to work with a small "working area" of a huge image and he doesn't care what happens with the rest of the image. This project is targeted to optimize this case.<br />
<br />
'''Expected Results''': By the end of the summer we expect these features to be implemented:<br />
* Partial updates in openGL canvas. Right now we redraw all the image textures in every frame, which is not needed after porting to Qt5.<br />
* Region of Intereset (ROI) in KisImage. Updates should be reordered and the priority should be given to the areas that are currently visible to the user<br />
* Work Area Tool. The user is be able to define the area, where he would like to work in. The updates for other parts of the image are skipped until the user exits this special mode.<br />
* (if there is time) Optimize textures loading to use RIO as well. Theoretically, we can just skip uploading of the tiles that are not visible on the screen at the moment.<br />
<br />
'''Steps to apply''': The topic of the project is quite advanced, so we recommend you to do the following steps before writing a proposal:<br />
<br />
# Build Krita<br />
# Check the code in KisImage, pay attention to 'cropRect' parameter of the update calls. That is exactly what you need for limiting the updates in the work area tool<br />
# Try to write Work Area Tool: copy the code of KisToolCrop, connect it to Krita and make it override the cropRect paramenter in KisImage.<br />
# If you manage to make a draft of Work Area Tool, most probably, you will manage to complete the whole project successfully!<br />
# And feel free to contact Krita developers, if you have any question during these steps!<br />
<br />
'''Knowledge Prerequisite''': C++, OpenGL<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log), Julian Thijssen (IRC: Nimmy)<br />
<br />
==== Project: Add 3D Painting Assistants ====<br />
<br />
'''Brief explanation''': One of the more innovative features in Krita are the painting assistants. These are shapes overlaid on the canvas that the artist can use to help him achieve perspective, straight lines and other shapes freehand. For complex drawings it would be useful to be able to place 3D models on the canvas, position and scale them and use those as guides for drawing.<br />
<br />
'''Expected results''': by the end of the summer, 3D models should be shown on canvas as canvas decorations, using OpenGL in hidden-line wireframe mode. The models should be manipulated using on-canvas controls like other assistants. Magnetic snapping is an optional extra.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, OpenGL, Assimp<br />
<br />
'''Mentor''': Julian Thijssen (IRC: Nimmy)<br />
<br />
=== KDE Student Programs ===<br />
<br />
KDE Student Programs is the working group responsible for running Season of KDE and managing KDE's participation in Google Summer of Code, Google Code-In, and other mentorship programmes.<br />
<br />
==== Project: A new Season of KDE Website ====<br />
<br />
'''Brief explanation''': Season of KDE will need a new website to make managing the project easier for us. The core feature set that we're looking to have comprises:<br />
<br />
* Student applications on the website<br />
* Mentors can mark themselves interested in projects during the application phase<br />
* Org admins will create slots and assign projects and mentors to slots<br />
* Manage mid-term evaluations and results<br />
* Bulk data export and import<br />
<br />
For maintainability by the rest of KDE we'd like the app to be in Python (Tornado or a WSGI framework). It would also be nice if the app was an SPA riding on top of a REST API server so we can have command-line tools interacting with the server as well.<br />
<br />
'''Expected results''': Easier project administration for KDE.<br />
<br />
'''Knowledge Prerequisite''': Python, Tornado/WSGI, LDAP, full-stack web development, Single-Page applications.<br />
<br />
'''Mentor''': Boudhayan Gupta <bgupta@kde.org>, BaloneyGeek on IRC<br />
<br />
=== GCompris ===<br />
==== Project: finishing started activities ====<br />
'''Brief explanation''': GCompris is a an educational software suite comprising of numerous activities for children aged 2 to 10. Originally written in Gtk+ it's development team started to rewrite it from scratch in Qt Quick.<br />
<br />
'''Expected results''':<br />
The aim of this year is to complete and getting merged activities that were started but have not been finished. You can find a list of tasks that you can work on at https://phabricator.kde.org/T7498. First phase is to check what is missing to be integrated (on code and graphic side) and then to complete them. You can find at https://cgit.kde.org/gcompris.git/refs/heads the list of the current branches (some of them need to be dropped, so contact us before starting working on one of them).<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education<br />
<br />
Be familiar with GCompris concept and content<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough)<br />
<br />
Be able to build the Qt Quick version of GCompris<br />
<br />
'''Application guide''':<br />
Continuing an activity already started or rewriting from scratch is something you have to check before writing your application. Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/An_exercise_for_new_contributors and http://gcompris.net/wiki/Reviewing_an_activity<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Divyam Madaan (IRC: dmadaan), Johnny Jazeix (IRC: JohnnyJ), Rudra Nil Basu (IRC: rudra), Timothée Giet (IRC: Animtim)<br />
<br />
==== Project: Unit test framework ====<br />
<br />
'''Expected results''':<br />
The aim of this project is to build the base for unit testing for GCompris. The student will have to think on what we can test (qml, js...) and how we can put this in place.<br />
More information can be found in https://phabricator.kde.org/T7668.<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
Be interested in children’s education<br />
<br />
Be familiar with GCompris concept and content<br />
<br />
Basic knowledge in a programming language and CMake use (a 1 year school course is enough)<br />
<br />
Be able to build the Qt Quick version of GCompris<br />
<br />
Technologies used are CMake, C++, Qt.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Divyam Madaan (IRC: dmadaan), Johnny Jazeix (IRC: JohnnyJ), Rudra Nil Basu (IRC: rudra), Timothée Giet (IRC: Animtim)<br />
<br />
=== KDE Partition Manager ===<br />
==== Project: finishing KAuth support [Season of KDE]====<br />
'''Brief explanation''': KDE Partition Manager is a utility program to help you manage the disk devices, partitions and file systems on your computer. It allows you to easily create, copy, move, delete, resize without losing data, backup and restore partitions.<br />
<br />
'''Expected results''':<br />
Last year a lot of work was done to make KDE Partition Manager not to start as root and use KAuth to elevate privileges. The aim of this project is to finish required refactoring and make sure everything still works.<br />
<br />
The two main issues are:<br />
<br />
* SMART support needs to be ported from (unmaitained) libatasmart library to calling smartctl command. This task is likely to be fairly easy.<br />
<br />
* KDE Partition Manager operation runner should be refactored, instead of calling KAuth helper multiple times to run a single command it has to prepare a list of all commands and their inputs and call KAuth helper once. This needs some refactoring in how partition manager reads and writes disk data (e.g. when moving/copying/backing up or restoring partition). In particular we don't want to transfer all the disk data back from the helper to the main application and back to the helper as DBus transport is fairly slow.<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
* Be able to build the KPMcore and KDE Partition Manager from source.<br />
<br />
* Knowledge of C++ / Qt (No knowledge of KDE Frameworks is required).<br />
<br />
'''Application guide''':<br />
Get in touch on IRC (#kde-devel or #calamares).<br />
<br />
'''Mentors''': Andrius Štikonas (IRC:stikonas)<br />
<br />
=== Kopete ===<br />
<br />
==== Project: Write tests and Improve protocol support ====<br />
<br />
'''Brief explanation''': Kopete is an instant messaging client that has the modular architecture and supports many messaging services with useful plugins to complement them. <br />
<br />
'''Expected results''':<br />
The aim of this project is to fix the bugs due to porting and improve the frontend and the test coverage.<br />
<br />
'''Knowledge Prerequisite''':<br />
<br />
* Be interested in test-driven development.<br />
<br />
* Be familiar with the codebase of KDE in general.<br />
<br />
* Knowledge of C++ / Qt.<br />
<br />
'''Application guide''':<br />
<br />
Get in touch with us on mailing-list and start hacking KDE and fix bugs. Teams of two people is preferred for this project as it is a lot of work :)<br />
<br />
You can contact on IRC also but it is better to discuss over mailing list as not many people are in IRC on #kopete channel.<br />
<br />
'''Mentors''': Vijay <vijaykrishnavanshi@gmail.com> (vijay_ on IRC), Kopete Mailing List <kopete-devel@kde.org><br />
<br />
=== LabPlot ===<br />
[http://www.labplot.kde.org LabPlot] is a KDE-application for interactive graphing and analysis of scientific data. LabPlot provides an easy way to create, manage and edit plots and to perform data analysis.<br />
<br />
==== Project: Plotting of live MQTT data ====<br />
'''Brief explanation''': LabPlot has already some support for plotting of live-data (http://krajszgsoc.blogspot.de/2017/09/in-finish-line-but-not-in-end.html). To cover more use-cases we want to also support MQTT sources. We need to investigate the available MQTT libraries for Qt:<br />
* https://blog.qt.io/blog/2017/08/14/introducing-qtmqtt-protocol/<br />
* https://github.com/emqtt/qmqtt<br />
and to add some support for MQTT to LabPlot.<br />
<br />
'''Expected results''': Similar to the currently supported data sources (files, sockets, serial port, SQL databases) we want to support the subscription to MQTT brockers and plotting of their data. <br />
<br />
'''Knowledge Prerequisite''': C++, Qt, (optional) knowledge and experience with MQTT<br />
<br />
'''Mentor''': Fábián Kristóf - Szabolcs (mailto:fkristofszabolcs@gmail.com)<br />
<br />
==== Project: Import of educational data sets available on the internet ====<br />
'''Brief explanation''': There are many internet pages providing data sets for educational and study purposes for many different areas (astrophysics, statistics, medicine, etc.). Some tools used in the scientific area provide some "wrappers" for such online sources and allow the user to easily play around with those data sets in the applications whereas the technical details like fetching of data from the server and parsing are done completely transparent for the user. The goal of this project is to add similar functionality to LabPlot. There will be a wizard where the user can select from a thematically grouped list of data sets available online. The internal description of such an online data set should contain the URL with the actual file that needs to be downloaded and the settings for LabPlot's data parser (separator, column names and data types, etc.). The data fetched once should be cached so there is no need to fetch from the web again. Here we can have a look maybe at KStars for how to implement such a caching strategy and maybe even re-use some code from KStars.<br />
In addition to the list of pre-defined online sources, we need to elaborate how the user can add new online data sets (together with all the required parametrization) and publish the settings to make them available for everybody.<br />
<br />
'''Expected results''': We want to be able to easily import the educational data sets available on the internet.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt<br />
<br />
'''Mentor''': Stefan Gerlach<br />
<br />
==== Project: Import of data from web-services ====<br />
'''Brief explanation''': Brief explanation: This goal of this project is to extend the number of supported data sources by adding the possibility to import the data from web services (live and historical financial data, weather, etc.). Most web services expose their data via JSON. We need to add a "JSON filter" to LabPlot capable to connect to a web service, to fetch the data, to parse it and to import into LabPlot's internal data containers. In the GUI the user should be guided through the entry of the service URL, additional services parameters like API token, etc. and through the settings for the actual parsing (which JSON fields to consume and how). Also, it should be possible to refresh the data periodically like it is already possible for the live data (http://krajszgsoc.blogspot.de/2017/09/in-finish-line-but-not-in-end.html). The goal is also to provide a set of widely known web services so the user can select and import the data from a list of pre-defined services. In addition to this, we need to elaborate the possibility to "publish" the settings for a web-service done by the user and make them publicly available to every LabPlot user.<br />
<br />
<br />
'''Expected results''': Similar to the currently supported data sources (files, sockets, serial port, SQL databases) we want to import the data from web services and visualize it.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, (optional) JSON support in Qt<br />
<br />
'''Mentor''': Alexander Semke<br />
<br />
=== Kdenlive ===<br />
[https://kdenlive.org Kdenlive] is a KDE-application for professionnal video editors. It supports hundreds of video formats, and all the features you can expect from a non-linear video editor, including some advanced features like timeline preview rendering, proxy clips and more. <br />
<br />
=== Choqok ===<br />
==== Project: Port Choqok to Kirigami ====<br />
<br />
'''Brief explanation:''' Current Choqok UI doesn't make use of QML and creates interfaces in C++ files. The idea is to rewrite the interface in QML. At this point is better doing it with Kirigami since this means it will work on Plasma Mobile too.<br />
<br />
'''Expected results:''' Choqok UI makes use of Kirigami.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, Qml<br />
<br />
'''Mentor:''' Andrea Scarpino (IRC: ilpianista)<br />
<br />
'''Application guide''':<br />
Get in touch on IRC (#choqok).<br />
<br />
=== KStars ===<br />
<br />
[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time. <br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can supported addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Implementing Ekos in KStars Lite ====<br />
'''Brief explanation''': Ekos is KStars premier tool for observatory control and automation. KStars Lite was successfully developed in GSoC 2016 and is available for Android phones and tablets. We would like to extend KStars Lite to include basic support for Ekos. Currently, KStars Lite supports basic telescope and capture controls, but it could be extended to support a richer experience for users who are performing observatory control and astrophotography.<br />
<br />
'''Expected results''': <br />
* Telescope floating motion controls including speed controls.<br />
* Like video feed display from supported devices.<br />
* Image capture with binning, count, exposure, ISO..etc controls similar to Ekos desktop client.<br />
* Focus controls.<br />
* Alignment using remote astrometry.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, QML<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Ekos Web Client ====<br />
'''Brief explanation''': Ekos is KStars premier tool for observatory control and automation. A web client port of Ekos is desired where it communicates with the underlying INDI servers and drivers without a direct dependency on thick desktop clients. Ekos includes many modules including setup, capture, focus, guide, align, and mount. All functionalities of the desktop Ekos client are expected in the web client version using Python+Ajax or similar framework technologies suitable for online dynamic driven clients.<br />
<br />
'''Expected results''': <br />
* Online Ekos web client with all the thick client feature set.<br />
* Authentication and Registration framework.<br />
* Support for notifications similar to desktop client.<br />
* Ajax dynamic driven interface with near real time updates for framing and captures.<br />
* Multi-user support with granular permissions.<br />
* Web based INDI Control Panel with all the driver controls as in the desktop version.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Django/Ajax or similar technology framework.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Akarsh Simha ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: kstar)<br />
<br />
=== Peruse ===<br />
<br />
Peruse is a comic book reader application by KDE, which is designed to work both on touch based devices, and on the traditional desktop. Additionally, it has a tool called Peruse Creator which is designed to create comic books for use with Peruse and any other CBZ capable comic book reader. It has rudimentary support for the [http://acbf.wikia.com/wiki/Specifications Advanced Comic Book Format], which is a metadata container for comic book archives (CBR, CBZ and so on).<br />
<br />
See also the Peruse website for more detailed information: https://peruse.kde.org/<br />
<br />
==== Project: Expand Creator's Abilities ====<br />
<br />
'''Brief explanation:''' Peruse Creator is currently very simple, and will allow the user to create a CBZ comic book archive annotated with a subset of the [http://acbf.wikia.com/wiki/Specifications Advanced Comic Book Format] (ACBF) metainfo, such as authors, publisher information, characters and so on. It does not allow for the creation or editing of the viewport based navigation that ACBF describes, nor does it support the text layers system ACBF proposes for comic book translation. It also lacks editor components for a variety of the general metainformation ACBF suggests.<br />
<br />
Your project proposal should include explicit descriptions of which of these you wish to build support for, and how you propose to do so. It should further include timeframes for each.<br />
<br />
'''Expected results:''' A more capable Peruse Creator.<br />
<br />
'''Knowledge Prerequisite:''' C++ and Qt required, additionally QML/QtQuick knowledge is preferred<br />
<br />
'''Mentor:''' Dan Leinir Turthra Jensen (admin@leinir.dk, IRC: leinir, Telegram and twitter: @leinir)<br />
<br />
==== Project: New Viewer Component ====<br />
<br />
'''Brief explanation:''' The current viewer component for Comic Book Archives (CBR) in Peruse is a simple full-page viewer, which only supports page-by-page navigation. The [http://acbf.wikia.com/wiki/Specifications Advanced Comic Book Format] (ACBF) metadata container brings with it support for a viewport system, which describes how the application should present [http://acbf.wikia.com/wiki/Body_Section_Definition#Frame specific sub-sections of each page], as well as a system for [http://acbf.wikia.com/wiki/Body_Section_Definition#Jump navigating between arbitrary pages in the comic].<br />
<br />
Your project proposal should include explicit descriptions of how you would suggest to implement this, as well as a schedule for the work.<br />
<br />
'''Expected results:''' A viewer component which is able to consume and display the viewport based navigation metadata from the ACBF container, as well as present the general metainformation to the user.<br />
<br />
'''Knowledge Prerequisite:''' C++ and Qt required, additionally QML/QtQuick knowledge is preferred<br />
<br />
'''Mentor:''' Dan Leinir Turthra Jensen (admin@leinir.dk, IRC: leinir, Telegram and twitter: @leinir)<br />
<br />
=== KGpg ===<br />
<br />
[https://utils.kde.org/projects/kgpg KGpg] is a frontend for GnuPG key management.<br />
<br />
'''Brief explanation:''' KGpg currently consists of one application with a very narrow external interface, which is available via DBus. The goal is to split out parts of the code into a static library that is used both by the KGpg binary as well as to-be-written unit tests, which should also cover at least all of the "[https://cgit.kde.org/kgpg.git/tree/transactions transaction]" classes.<br />
<br />
'''Expected results:''' unit tests that can be called via CTest, and are integrated into the KDE CI jobs<br />
<br />
'''Knowledge Prerequisite:''' basic C++, CMake, and GnuPG usage<br />
<br />
'''Mentor:''' Rolf Eike Beer (kde@opensource.sf-tec.de, IRC: Dakon)<br />
<br />
=== Plasma ===<br />
==== Improve handling for touchpads and mice with Libinput ====<br />
<br />
'''Brief explanation:''' [https://www.freedesktop.org/wiki/Software/libinput/ Libinput] is now used as the driver for input devices in most distros. However, System Settings does not present the user with good interfaces for configuring input devices with libinput. Currently the only well-supported use case is for [https://bugsfiles.kde.org/attachment.cgi?id=108954 touchpads in a Wayland session]. For touchpads on X11, and mice on both X11 and Wayland, the user experience is sub-optimal or non-existent.<br />
<br />
'''Expected results:''' System Settings should expose good user interfaces for configuring both touchpads and mice when using Libinput, and for both Wayland and X11.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt<br />
<br />
'''Mentor:''' Nate Graham (Email: pointedstick@zoho.com; Telegram: @nggraham)<br />
<br />
'''Application guide''':<br />
* https://wayland.freedesktop.org/libinput/doc/latest/developers.html<br />
* https://bugs.kde.org/show_bug.cgi?id=383379<br />
<br />
==== Discover: fwupd integration ====<br />
<br />
'''Brief explanation:''' Discover Software Center is in charge of offering different kinds of assets at the moment. Applications, Add-ons, etc as well as serving updates. At the moment it's still not able to update our devices' firmwares. There's a tool for GNU/Linux called FWUPD to do so: https://fwupd.org/developers<br />
<br />
Despite the description specifying plasma, the end goal is to provide a seamless solution to have your hardware's firmware up to date.<br />
If the proposal is too short, other improvements suggested to add to the idea will be welcome.<br />
<br />
'''Expected results:''' Plasma being great at having an up to date system, also with hardware.<br />
<br />
'''Knowledge Prerequisite:''' C++ and Qt, also notions of how glib works, to understand upstream FWUPD.<br />
<br />
'''Mentor:''' Aleix Pol: apol, @AleixPol, aleixpol@kde.org<br />
<br />
<br />
=== Okular ===<br />
==== Add support for showing and adding replies to sticky notes ====<br />
<br />
'''Brief explanation:''' PDF files can contain replies to certain annotations, you would need to add support to Okular and potential poppler so that they show the same way they do on other PDF readers. Once they are shown and if there is enough time adding the capability to add replies is also welcome.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt<br />
<br />
'''Mentor:''' Okular developers https://mail.kde.org/mailman/listinfo/okular-devel<br />
<br />
'''Application guide''':<br />
* https://bugs.kde.org/show_bug.cgi?id=387834<br />
<br />
=== WikiToLearn ===<br />
<br />
You can find all of the WikiToLearn community on [https://chat.wikitolearn.org chat.wikitolearn.org]. We have many other ideas: get in touch with us to discuss them further!<br />
<br />
==== Project: WTL as a progressive web app ====<br />
<br />
'''Brief explanation:''' [https://cgit.kde.org/scratch/cristianbaldi/wikitolearn-frontend.git Current PWA] is being used in the first iteration of the new WikiToLearn architecture. It needs some improvement in terms of testing, offline-experience and organization to make it stable and ready for a first stable release. We want, also, to create a cohesively ecosystem of resources and design guidelines that can be easily reused. Main goal of this project is to enhance the existing project to provide a tested, functional and production-ready PWA. <br />
<br />
'''Expected results:'''<br />
* Improve documentation<br />
* Write design guidelines for people who want to contribute<br />
* Organize shared resources in a reusable manner<br />
* Write unit and integration test<br />
* Implement functional offline browsing<br />
* Enhance UX for a production-ready release<br />
<br />
'''Knowledge Prerequisite:'''<br />
* Knowledge of Vue<br />
* Knowledge of HTML5, CSS3 (Sass/Less), JS (ES6 and Browser Apis)<br />
* Responsive design<br />
* Build Tools (WebPack)<br />
* Standards and best practices in Web Development<br />
<br />
'''Mentor:''' Gianluca Rigoletti (@rigolo)</div>Cauliergilleshttps://community.kde.org/index.php?title=Mac&diff=78666Mac2017-10-14T08:19:43Z<p>Cauliergilles: /* Application Bundles */</p>
<hr />
<div>== Application Bundles ==<br />
<br />
Several KDE applications have downloads with application bundles for Mac OS X available.<br />
<br />
* [https://www.digikam.org/download/binary/#MacOS digiKam]<br />
<br />
* [https://kate-editor.org/get-it/ Kate & KWrite]<br />
<br />
* [https://krita.org/en/download/krita-desktop/ Krita]<br />
<br />
* [http://edu.kde.org/marble/download.php Marble Virtual Globe]<br />
<br />
== Getting in Touch ==<br />
<br />
* IRC: [irc://irc.freenode.net/kde-mac #kde-mac] on Freenode<br />
<br />
* Mailing list: [mailto:kde-mac@kde.org kde-mac@kde.org] ([https://mail.kde.org/mailman/listinfo/kde-mac subscribe], [http://lists.kde.org/?l=kde-mac&r=1&w=2 archives])<br />
<br />
* Forums: http://forum.kde.org/viewforum.php?f=60<br />
<br />
== Development & Alternative Installation Methodes ==<br />
<br />
* [[Guidelines_and_HOWTOs/Build_from_source/Mac|Build from source]]<br />
* [[Mac/MacPorts_Fink_Homebrew|Installing KDE software via MacPorts/Fink/Homebrew]]<br />
<br />
__NOTOC__</div>Cauliergilleshttps://community.kde.org/index.php?title=Sprints/Randa/2017/Travel&diff=78439Sprints/Randa/2017/Travel2017-09-09T12:18:36Z<p>Cauliergilles: /* Departure */</p>
<hr />
<div>Please add below the information about your date and time of arrival and departure. By type we mean the means of your transportation.<br />
<br />
== Arrival ==<br />
<br />
{| class="sortable" border="1" cellpadding="5" cellspacing="0" style="border: gray solid 1px; border-collapse: collapse; text-align: left; width:100%;"<br />
|- style="background: #ececec; white-space:nowrap;"<br />
! Name<br />
! Type<br />
! Date<br />
! Time<br />
! Comment<br />
|- <br />
|Volker Krause<br />
|flight to ZRH<br />
|Sun Sep 10th<br />
|08:15<br />
|<br />
|- <br />
|Gilles Caulier<br />
|car from France<br />
|Mon Sep 11th<br />
|16:00<br />
|<br />
|- <br />
|Sagar Chand Agarwal<br />
|flight to ZRH<br />
|Sun Sep 10th<br />
|morning-ish<br />
|<br />
|-<br />
|Jayaditya Gupta<br />
| flight to ZRH<br />
|Sun sep 10th<br />
|morning-ish<br />
|<br />
|-<br />
|Łukasz Wojniłowicz<br />
| flight to ZRH<br />
|Sun sep 10th<br />
|morning-ish<br />
|<br />
|-<br />
|Adriaan de Groot<br />
| flying to ZRH<br />
| Friday sep 8th<br />
| taking train to Randa sunday 10th<br />
|<br />
|-<br />
|Thomas Baumgart<br />
|train from FRA<br />
|Sun Sep 10th<br />
|15:53 @Randa Central<br />
|<br />
|-<br />
|Sanjiban Bairagya<br />
|flight to ZRH<br />
|Sat Sep 9th<br />
|19:25<br />
|<br />
|-<br />
|José Millán<br />
|flight to BSL<br />
|Sat Sep 9th<br />
|Morning<br />
|<br />
|- <br />
|Joseph and Grace<br />
|by flight to GVA<br />
|Sun 10th sep<br />
|Morning<br />
|<br />
|-<br />
|Daniel Vrátil<br />
|flight to ZRH<br />
|Sun Sep 10th<br />
| 8:55<br />
|<br />
|- <br />
|Scarlett Clark<br />
|by flight to ZRH<br />
|Sun 10th sep<br />
|Morning 8:05<br />
|<br />
|-<br />
|Bhushan Shah<br />
|by flight to ZRH<br />
|Sat 10th September<br />
|Morning 6 AM-ish<br />
|<br />
|-<br />
|Emmanuel Lepage<br />
|by flight to ZRH<br />
|Sat 10th September<br />
|The day before (jet lag)<br />
|<br />
|-<br />
|Frederik Gladhorn<br />
|by flight to ZRH<br />
|Sun 10th of September<br />
|14:00<br />
|<br />
|-<br />
|R. Harish Navnit<br />
| by flight to ZRH<br />
| Sat 10th September<br />
| 6:55 AM<br />
| <br />
|<br />
|-<br />
|Aniketh Girish<br />
| by flight to ZRH<br />
| Sat 9th September<br />
| late morning/noon<br />
| Just a tentative plan yet now.<br />
|<br />
|-<br />
|Swati Lodha<br />
|by flight to ZRH<br />
|Sat 10th September<br />
|Morning (around 6-7)<br />
|<br />
|-<br />
|David Edmundson<br />
|by flight to Geneva<br />
|Sat 10th September<br />
|Morning (around 9)<br />
|<br />
|-<br />
|manuel muzzurru<br />
|by my car<br />
|10 sept at morning<br />
|around to time 8 - 10am<br />
|no comment<br />
|<br />
|}<br />
<br />
== Departure ==<br />
<br />
{| class="sortable" border="1" cellpadding="5" cellspacing="0" style="border: gray solid 1px; border-collapse: collapse; text-align: left; width:100%;"<br />
|- style="background: #ececec; white-space:nowrap;"<br />
! Name<br />
! Type<br />
! Date<br />
! Time<br />
! Comment<br />
|- <br />
|Volker Krause<br />
|flight from ZRH<br />
|Fri Sep 15th<br />
|20:50<br />
|<br />
|- <br />
|Gilles Caulier<br />
|car to France<br />
|Sun Sep 17th<br />
|8:00<br />
|<br />
|- <br />
|Sagar Chand Agarwal<br />
|flight to ZRH<br />
|Sun Sep 17th<br />
|evening<br />
|<br />
|-<br />
|Jayaditya Gupta<br />
| flight to ZRH<br />
|Sun sep 17th<br />
|evening<br />
|<br />
|-<br />
|Łukasz Wojniłowicz<br />
| flight from ZRH<br />
|Sat sep 16th<br />
|afternoon<br />
|<br />
|-<br />
|Adriaan de Groot<br />
| flight from ZRH<br />
| saturday 16th, 17:35<br />
| morning-ish<br />
|<br />
|-<br />
|Thomas Baumgart<br />
| train to FRA<br />
|Fri Sep 15th<br />
|9:54<br />
|<br />
|-<br />
|Sanjiban Bairagya<br />
|flight from ZRH<br />
|Sun Sep 17th<br />
|21:55<br />
|<br />
|-<br />
|José Millán<br />
|train<br />
|Sat Sep 16th<br />
|evening<br />
|<br />
|- <br />
|Joseph and Grace<br />
|by flight from GVA<br />
|Sat 16th Sep<br />
|Morning<br />
|<br />
|-<br />
|Daniel Vrátil<br />
|flight from ZRH<br />
|Sat Sep 16th<br />
|Evening<br />
|<br />
|-<br />
|Scarlett Clark<br />
|flight from ZRH<br />
|Sun Sep 17th<br />
|Noon<br />
|<br />
|-<br />
|Bhushan Shah<br />
|flight from ZRH<br />
|Sun Sep 17th<br />
|10 AM-ish<br />
|I'll leave Randa on 16th morning-ish, will stay for 16-17th morning in ZRH (Mostly will book ibis budget hotel, if you want to share room ping me).<br />
|-<br />
|Frederik Gladhorn<br />
|by flight from ZRH<br />
|Sat 16th of September<br />
|<br />
| I need to leave on Saturday morning to Bern, will continue to Zurich on Sunday<br />
|-<br />
|R. Harish Navnit<br />
| by flight from ZRH<br />
| 16th or 17th<br />
| Some time between 16th afternoon to 17th early morning<br />
| Listing down the tentative travel plan for now<br />
|-<br />
|Aniketh Girish<br />
| by flight from ZRH<br />
| 16th or 17th<br />
| sometime between 16th afternoon to 17th early morning<br />
| Tentative travel plan for now<br />
|-<br />
|Swati Lodha<br />
|by flight from ZRH<br />
|Sun Sep 17th<br />
|Noon<br />
|Departure is tentative. <br />
|-<br />
|David Edmundson<br />
|by flight from Geneva<br />
|Sat Sep 16th<br />
|15:00<br />
| <br />
|-<br />
|manuel muzzurru<br />
|by my car<br />
|Sat Sep 16th<br />
|any time<br />
|no comment<br />
|-<br />
|}</div>Cauliergilleshttps://community.kde.org/index.php?title=Sprints/Randa/2017/Travel&diff=78438Sprints/Randa/2017/Travel2017-09-09T12:18:15Z<p>Cauliergilles: /* Arrival */</p>
<hr />
<div>Please add below the information about your date and time of arrival and departure. By type we mean the means of your transportation.<br />
<br />
== Arrival ==<br />
<br />
{| class="sortable" border="1" cellpadding="5" cellspacing="0" style="border: gray solid 1px; border-collapse: collapse; text-align: left; width:100%;"<br />
|- style="background: #ececec; white-space:nowrap;"<br />
! Name<br />
! Type<br />
! Date<br />
! Time<br />
! Comment<br />
|- <br />
|Volker Krause<br />
|flight to ZRH<br />
|Sun Sep 10th<br />
|08:15<br />
|<br />
|- <br />
|Gilles Caulier<br />
|car from France<br />
|Mon Sep 11th<br />
|16:00<br />
|<br />
|- <br />
|Sagar Chand Agarwal<br />
|flight to ZRH<br />
|Sun Sep 10th<br />
|morning-ish<br />
|<br />
|-<br />
|Jayaditya Gupta<br />
| flight to ZRH<br />
|Sun sep 10th<br />
|morning-ish<br />
|<br />
|-<br />
|Łukasz Wojniłowicz<br />
| flight to ZRH<br />
|Sun sep 10th<br />
|morning-ish<br />
|<br />
|-<br />
|Adriaan de Groot<br />
| flying to ZRH<br />
| Friday sep 8th<br />
| taking train to Randa sunday 10th<br />
|<br />
|-<br />
|Thomas Baumgart<br />
|train from FRA<br />
|Sun Sep 10th<br />
|15:53 @Randa Central<br />
|<br />
|-<br />
|Sanjiban Bairagya<br />
|flight to ZRH<br />
|Sat Sep 9th<br />
|19:25<br />
|<br />
|-<br />
|José Millán<br />
|flight to BSL<br />
|Sat Sep 9th<br />
|Morning<br />
|<br />
|- <br />
|Joseph and Grace<br />
|by flight to GVA<br />
|Sun 10th sep<br />
|Morning<br />
|<br />
|-<br />
|Daniel Vrátil<br />
|flight to ZRH<br />
|Sun Sep 10th<br />
| 8:55<br />
|<br />
|- <br />
|Scarlett Clark<br />
|by flight to ZRH<br />
|Sun 10th sep<br />
|Morning 8:05<br />
|<br />
|-<br />
|Bhushan Shah<br />
|by flight to ZRH<br />
|Sat 10th September<br />
|Morning 6 AM-ish<br />
|<br />
|-<br />
|Emmanuel Lepage<br />
|by flight to ZRH<br />
|Sat 10th September<br />
|The day before (jet lag)<br />
|<br />
|-<br />
|Frederik Gladhorn<br />
|by flight to ZRH<br />
|Sun 10th of September<br />
|14:00<br />
|<br />
|-<br />
|R. Harish Navnit<br />
| by flight to ZRH<br />
| Sat 10th September<br />
| 6:55 AM<br />
| <br />
|<br />
|-<br />
|Aniketh Girish<br />
| by flight to ZRH<br />
| Sat 9th September<br />
| late morning/noon<br />
| Just a tentative plan yet now.<br />
|<br />
|-<br />
|Swati Lodha<br />
|by flight to ZRH<br />
|Sat 10th September<br />
|Morning (around 6-7)<br />
|<br />
|-<br />
|David Edmundson<br />
|by flight to Geneva<br />
|Sat 10th September<br />
|Morning (around 9)<br />
|<br />
|-<br />
|manuel muzzurru<br />
|by my car<br />
|10 sept at morning<br />
|around to time 8 - 10am<br />
|no comment<br />
|<br />
|}<br />
<br />
== Departure ==<br />
<br />
{| class="sortable" border="1" cellpadding="5" cellspacing="0" style="border: gray solid 1px; border-collapse: collapse; text-align: left; width:100%;"<br />
|- style="background: #ececec; white-space:nowrap;"<br />
! Name<br />
! Type<br />
! Date<br />
! Time<br />
! Comment<br />
|- <br />
|Volker Krause<br />
|flight from ZRH<br />
|Fri Sep 15th<br />
|20:50<br />
|<br />
|- <br />
|Gilles Caulier<br />
|car to FRA<br />
|Sun Sep 17th<br />
|8:00<br />
|<br />
|- <br />
|Sagar Chand Agarwal<br />
|flight to ZRH<br />
|Sun Sep 17th<br />
|evening<br />
|<br />
|-<br />
|Jayaditya Gupta<br />
| flight to ZRH<br />
|Sun sep 17th<br />
|evening<br />
|<br />
|-<br />
|Łukasz Wojniłowicz<br />
| flight from ZRH<br />
|Sat sep 16th<br />
|afternoon<br />
|<br />
|-<br />
|Adriaan de Groot<br />
| flight from ZRH<br />
| saturday 16th, 17:35<br />
| morning-ish<br />
|<br />
|-<br />
|Thomas Baumgart<br />
| train to FRA<br />
|Fri Sep 15th<br />
|9:54<br />
|<br />
|-<br />
|Sanjiban Bairagya<br />
|flight from ZRH<br />
|Sun Sep 17th<br />
|21:55<br />
|<br />
|-<br />
|José Millán<br />
|train<br />
|Sat Sep 16th<br />
|evening<br />
|<br />
|- <br />
|Joseph and Grace<br />
|by flight from GVA<br />
|Sat 16th Sep<br />
|Morning<br />
|<br />
|-<br />
|Daniel Vrátil<br />
|flight from ZRH<br />
|Sat Sep 16th<br />
|Evening<br />
|<br />
|-<br />
|Scarlett Clark<br />
|flight from ZRH<br />
|Sun Sep 17th<br />
|Noon<br />
|<br />
|-<br />
|Bhushan Shah<br />
|flight from ZRH<br />
|Sun Sep 17th<br />
|10 AM-ish<br />
|I'll leave Randa on 16th morning-ish, will stay for 16-17th morning in ZRH (Mostly will book ibis budget hotel, if you want to share room ping me).<br />
|-<br />
|Frederik Gladhorn<br />
|by flight from ZRH<br />
|Sat 16th of September<br />
|<br />
| I need to leave on Saturday morning to Bern, will continue to Zurich on Sunday<br />
|-<br />
|R. Harish Navnit<br />
| by flight from ZRH<br />
| 16th or 17th<br />
| Some time between 16th afternoon to 17th early morning<br />
| Listing down the tentative travel plan for now<br />
|-<br />
|Aniketh Girish<br />
| by flight from ZRH<br />
| 16th or 17th<br />
| sometime between 16th afternoon to 17th early morning<br />
| Tentative travel plan for now<br />
|-<br />
|Swati Lodha<br />
|by flight from ZRH<br />
|Sun Sep 17th<br />
|Noon<br />
|Departure is tentative. <br />
|-<br />
|David Edmundson<br />
|by flight from Geneva<br />
|Sat Sep 16th<br />
|15:00<br />
| <br />
|-<br />
|manuel muzzurru<br />
|by my car<br />
|Sat Sep 16th<br />
|any time<br />
|no comment<br />
|-<br />
|}</div>Cauliergilleshttps://community.kde.org/index.php?title=Sprints/Randa/2017/Travel&diff=78437Sprints/Randa/2017/Travel2017-09-09T10:54:06Z<p>Cauliergilles: /* Arrival */</p>
<hr />
<div>Please add below the information about your date and time of arrival and departure. By type we mean the means of your transportation.<br />
<br />
== Arrival ==<br />
<br />
{| class="sortable" border="1" cellpadding="5" cellspacing="0" style="border: gray solid 1px; border-collapse: collapse; text-align: left; width:100%;"<br />
|- style="background: #ececec; white-space:nowrap;"<br />
! Name<br />
! Type<br />
! Date<br />
! Time<br />
! Comment<br />
|- <br />
|Volker Krause<br />
|flight to ZRH<br />
|Sun Sep 10th<br />
|08:15<br />
|<br />
|- <br />
|Gilles Caulier<br />
|car from FRA<br />
|Mon Sep 11th<br />
|16:00<br />
|<br />
|- <br />
|Sagar Chand Agarwal<br />
|flight to ZRH<br />
|Sun Sep 10th<br />
|morning-ish<br />
|<br />
|-<br />
|Jayaditya Gupta<br />
| flight to ZRH<br />
|Sun sep 10th<br />
|morning-ish<br />
|<br />
|-<br />
|Łukasz Wojniłowicz<br />
| flight to ZRH<br />
|Sun sep 10th<br />
|morning-ish<br />
|<br />
|-<br />
|Adriaan de Groot<br />
| flying to ZRH<br />
| Friday sep 8th<br />
| taking train to Randa sunday 10th<br />
|<br />
|-<br />
|Thomas Baumgart<br />
|train from FRA<br />
|Sun Sep 10th<br />
|15:53 @Randa Central<br />
|<br />
|-<br />
|Sanjiban Bairagya<br />
|flight to ZRH<br />
|Sat Sep 9th<br />
|19:25<br />
|<br />
|-<br />
|José Millán<br />
|flight to BSL<br />
|Sat Sep 9th<br />
|Morning<br />
|<br />
|- <br />
|Joseph and Grace<br />
|by flight to GVA<br />
|Sun 10th sep<br />
|Morning<br />
|<br />
|-<br />
|Daniel Vrátil<br />
|flight to ZRH<br />
|Sun Sep 10th<br />
| 8:55<br />
|<br />
|- <br />
|Scarlett Clark<br />
|by flight to ZRH<br />
|Sun 10th sep<br />
|Morning 8:05<br />
|<br />
|-<br />
|Bhushan Shah<br />
|by flight to ZRH<br />
|Sat 10th September<br />
|Morning 6 AM-ish<br />
|<br />
|-<br />
|Emmanuel Lepage<br />
|by flight to ZRH<br />
|Sat 10th September<br />
|The day before (jet lag)<br />
|<br />
|-<br />
|Frederik Gladhorn<br />
|by flight to ZRH<br />
|Sun 10th of September<br />
|14:00<br />
|<br />
|-<br />
|R. Harish Navnit<br />
| by flight to ZRH<br />
| Sat 10th September<br />
| 6:55 AM<br />
| <br />
|<br />
|-<br />
|Aniketh Girish<br />
| by flight to ZRH<br />
| Sat 9th September<br />
| late morning/noon<br />
| Just a tentative plan yet now.<br />
|<br />
|-<br />
|Swati Lodha<br />
|by flight to ZRH<br />
|Sat 10th September<br />
|Morning (around 6-7)<br />
|<br />
|-<br />
|David Edmundson<br />
|by flight to Geneva<br />
|Sat 10th September<br />
|Morning (around 9)<br />
|<br />
|-<br />
|manuel muzzurru<br />
|by my car<br />
|10 sept at morning<br />
|around to time 8 - 10am<br />
|no comment<br />
|<br />
|}<br />
<br />
== Departure ==<br />
<br />
{| class="sortable" border="1" cellpadding="5" cellspacing="0" style="border: gray solid 1px; border-collapse: collapse; text-align: left; width:100%;"<br />
|- style="background: #ececec; white-space:nowrap;"<br />
! Name<br />
! Type<br />
! Date<br />
! Time<br />
! Comment<br />
|- <br />
|Volker Krause<br />
|flight from ZRH<br />
|Fri Sep 15th<br />
|20:50<br />
|<br />
|- <br />
|Gilles Caulier<br />
|car to FRA<br />
|Sun Sep 17th<br />
|8:00<br />
|<br />
|- <br />
|Sagar Chand Agarwal<br />
|flight to ZRH<br />
|Sun Sep 17th<br />
|evening<br />
|<br />
|-<br />
|Jayaditya Gupta<br />
| flight to ZRH<br />
|Sun sep 17th<br />
|evening<br />
|<br />
|-<br />
|Łukasz Wojniłowicz<br />
| flight from ZRH<br />
|Sat sep 16th<br />
|afternoon<br />
|<br />
|-<br />
|Adriaan de Groot<br />
| flight from ZRH<br />
| saturday 16th, 17:35<br />
| morning-ish<br />
|<br />
|-<br />
|Thomas Baumgart<br />
| train to FRA<br />
|Fri Sep 15th<br />
|9:54<br />
|<br />
|-<br />
|Sanjiban Bairagya<br />
|flight from ZRH<br />
|Sun Sep 17th<br />
|21:55<br />
|<br />
|-<br />
|José Millán<br />
|train<br />
|Sat Sep 16th<br />
|evening<br />
|<br />
|- <br />
|Joseph and Grace<br />
|by flight from GVA<br />
|Sat 16th Sep<br />
|Morning<br />
|<br />
|-<br />
|Daniel Vrátil<br />
|flight from ZRH<br />
|Sat Sep 16th<br />
|Evening<br />
|<br />
|-<br />
|Scarlett Clark<br />
|flight from ZRH<br />
|Sun Sep 17th<br />
|Noon<br />
|<br />
|-<br />
|Bhushan Shah<br />
|flight from ZRH<br />
|Sun Sep 17th<br />
|10 AM-ish<br />
|I'll leave Randa on 16th morning-ish, will stay for 16-17th morning in ZRH (Mostly will book ibis budget hotel, if you want to share room ping me).<br />
|-<br />
|Frederik Gladhorn<br />
|by flight from ZRH<br />
|Sat 16th of September<br />
|<br />
| I need to leave on Saturday morning to Bern, will continue to Zurich on Sunday<br />
|-<br />
|R. Harish Navnit<br />
| by flight from ZRH<br />
| 16th or 17th<br />
| Some time between 16th afternoon to 17th early morning<br />
| Listing down the tentative travel plan for now<br />
|-<br />
|Aniketh Girish<br />
| by flight from ZRH<br />
| 16th or 17th<br />
| sometime between 16th afternoon to 17th early morning<br />
| Tentative travel plan for now<br />
|-<br />
|Swati Lodha<br />
|by flight from ZRH<br />
|Sun Sep 17th<br />
|Noon<br />
|Departure is tentative. <br />
|-<br />
|David Edmundson<br />
|by flight from Geneva<br />
|Sat Sep 16th<br />
|15:00<br />
| <br />
|-<br />
|manuel muzzurru<br />
|by my car<br />
|Sat Sep 16th<br />
|any time<br />
|no comment<br />
|-<br />
|}</div>Cauliergilleshttps://community.kde.org/index.php?title=Sprints/Randa/2017/Travel&diff=78436Sprints/Randa/2017/Travel2017-09-09T10:53:34Z<p>Cauliergilles: /* Departure */</p>
<hr />
<div>Please add below the information about your date and time of arrival and departure. By type we mean the means of your transportation.<br />
<br />
== Arrival ==<br />
<br />
{| class="sortable" border="1" cellpadding="5" cellspacing="0" style="border: gray solid 1px; border-collapse: collapse; text-align: left; width:100%;"<br />
|- style="background: #ececec; white-space:nowrap;"<br />
! Name<br />
! Type<br />
! Date<br />
! Time<br />
! Comment<br />
|- <br />
|Volker Krause<br />
|flight to ZRH<br />
|Sun Sep 10th<br />
|08:15<br />
|<br />
|- <br />
|Gilles Caulier<br />
|car to Randa<br />
|Mon Sep 11th<br />
|16:00<br />
|<br />
|- <br />
|Sagar Chand Agarwal<br />
|flight to ZRH<br />
|Sun Sep 10th<br />
|morning-ish<br />
|<br />
|-<br />
|Jayaditya Gupta<br />
| flight to ZRH<br />
|Sun sep 10th<br />
|morning-ish<br />
|<br />
|-<br />
|Łukasz Wojniłowicz<br />
| flight to ZRH<br />
|Sun sep 10th<br />
|morning-ish<br />
|<br />
|-<br />
|Adriaan de Groot<br />
| flying to ZRH<br />
| Friday sep 8th<br />
| taking train to Randa sunday 10th<br />
|<br />
|-<br />
|Thomas Baumgart<br />
|train from FRA<br />
|Sun Sep 10th<br />
|15:53 @Randa Central<br />
|<br />
|-<br />
|Sanjiban Bairagya<br />
|flight to ZRH<br />
|Sat Sep 9th<br />
|19:25<br />
|<br />
|-<br />
|José Millán<br />
|flight to BSL<br />
|Sat Sep 9th<br />
|Morning<br />
|<br />
|- <br />
|Joseph and Grace<br />
|by flight to GVA<br />
|Sun 10th sep<br />
|Morning<br />
|<br />
|-<br />
|Daniel Vrátil<br />
|flight to ZRH<br />
|Sun Sep 10th<br />
| 8:55<br />
|<br />
|- <br />
|Scarlett Clark<br />
|by flight to ZRH<br />
|Sun 10th sep<br />
|Morning 8:05<br />
|<br />
|-<br />
|Bhushan Shah<br />
|by flight to ZRH<br />
|Sat 10th September<br />
|Morning 6 AM-ish<br />
|<br />
|-<br />
|Emmanuel Lepage<br />
|by flight to ZRH<br />
|Sat 10th September<br />
|The day before (jet lag)<br />
|<br />
|-<br />
|Frederik Gladhorn<br />
|by flight to ZRH<br />
|Sun 10th of September<br />
|14:00<br />
|<br />
|-<br />
|R. Harish Navnit<br />
| by flight to ZRH<br />
| Sat 10th September<br />
| 6:55 AM<br />
| <br />
|<br />
|-<br />
|Aniketh Girish<br />
| by flight to ZRH<br />
| Sat 9th September<br />
| late morning/noon<br />
| Just a tentative plan yet now.<br />
|<br />
|-<br />
|Swati Lodha<br />
|by flight to ZRH<br />
|Sat 10th September<br />
|Morning (around 6-7)<br />
|<br />
|-<br />
|David Edmundson<br />
|by flight to Geneva<br />
|Sat 10th September<br />
|Morning (around 9)<br />
|<br />
|-<br />
|manuel muzzurru<br />
|by my car<br />
|10 sept at morning<br />
|around to time 8 - 10am<br />
|no comment<br />
|<br />
|}<br />
<br />
== Departure ==<br />
<br />
{| class="sortable" border="1" cellpadding="5" cellspacing="0" style="border: gray solid 1px; border-collapse: collapse; text-align: left; width:100%;"<br />
|- style="background: #ececec; white-space:nowrap;"<br />
! Name<br />
! Type<br />
! Date<br />
! Time<br />
! Comment<br />
|- <br />
|Volker Krause<br />
|flight from ZRH<br />
|Fri Sep 15th<br />
|20:50<br />
|<br />
|- <br />
|Gilles Caulier<br />
|car to FRA<br />
|Sun Sep 17th<br />
|8:00<br />
|<br />
|- <br />
|Sagar Chand Agarwal<br />
|flight to ZRH<br />
|Sun Sep 17th<br />
|evening<br />
|<br />
|-<br />
|Jayaditya Gupta<br />
| flight to ZRH<br />
|Sun sep 17th<br />
|evening<br />
|<br />
|-<br />
|Łukasz Wojniłowicz<br />
| flight from ZRH<br />
|Sat sep 16th<br />
|afternoon<br />
|<br />
|-<br />
|Adriaan de Groot<br />
| flight from ZRH<br />
| saturday 16th, 17:35<br />
| morning-ish<br />
|<br />
|-<br />
|Thomas Baumgart<br />
| train to FRA<br />
|Fri Sep 15th<br />
|9:54<br />
|<br />
|-<br />
|Sanjiban Bairagya<br />
|flight from ZRH<br />
|Sun Sep 17th<br />
|21:55<br />
|<br />
|-<br />
|José Millán<br />
|train<br />
|Sat Sep 16th<br />
|evening<br />
|<br />
|- <br />
|Joseph and Grace<br />
|by flight from GVA<br />
|Sat 16th Sep<br />
|Morning<br />
|<br />
|-<br />
|Daniel Vrátil<br />
|flight from ZRH<br />
|Sat Sep 16th<br />
|Evening<br />
|<br />
|-<br />
|Scarlett Clark<br />
|flight from ZRH<br />
|Sun Sep 17th<br />
|Noon<br />
|<br />
|-<br />
|Bhushan Shah<br />
|flight from ZRH<br />
|Sun Sep 17th<br />
|10 AM-ish<br />
|I'll leave Randa on 16th morning-ish, will stay for 16-17th morning in ZRH (Mostly will book ibis budget hotel, if you want to share room ping me).<br />
|-<br />
|Frederik Gladhorn<br />
|by flight from ZRH<br />
|Sat 16th of September<br />
|<br />
| I need to leave on Saturday morning to Bern, will continue to Zurich on Sunday<br />
|-<br />
|R. Harish Navnit<br />
| by flight from ZRH<br />
| 16th or 17th<br />
| Some time between 16th afternoon to 17th early morning<br />
| Listing down the tentative travel plan for now<br />
|-<br />
|Aniketh Girish<br />
| by flight from ZRH<br />
| 16th or 17th<br />
| sometime between 16th afternoon to 17th early morning<br />
| Tentative travel plan for now<br />
|-<br />
|Swati Lodha<br />
|by flight from ZRH<br />
|Sun Sep 17th<br />
|Noon<br />
|Departure is tentative. <br />
|-<br />
|David Edmundson<br />
|by flight from Geneva<br />
|Sat Sep 16th<br />
|15:00<br />
| <br />
|-<br />
|manuel muzzurru<br />
|by my car<br />
|Sat Sep 16th<br />
|any time<br />
|no comment<br />
|-<br />
|}</div>Cauliergilleshttps://community.kde.org/index.php?title=Sprints/Randa/2017/Travel&diff=78435Sprints/Randa/2017/Travel2017-09-09T10:51:16Z<p>Cauliergilles: /* Arrival */</p>
<hr />
<div>Please add below the information about your date and time of arrival and departure. By type we mean the means of your transportation.<br />
<br />
== Arrival ==<br />
<br />
{| class="sortable" border="1" cellpadding="5" cellspacing="0" style="border: gray solid 1px; border-collapse: collapse; text-align: left; width:100%;"<br />
|- style="background: #ececec; white-space:nowrap;"<br />
! Name<br />
! Type<br />
! Date<br />
! Time<br />
! Comment<br />
|- <br />
|Volker Krause<br />
|flight to ZRH<br />
|Sun Sep 10th<br />
|08:15<br />
|<br />
|- <br />
|Gilles Caulier<br />
|car to Randa<br />
|Mon Sep 11th<br />
|16:00<br />
|<br />
|- <br />
|Sagar Chand Agarwal<br />
|flight to ZRH<br />
|Sun Sep 10th<br />
|morning-ish<br />
|<br />
|-<br />
|Jayaditya Gupta<br />
| flight to ZRH<br />
|Sun sep 10th<br />
|morning-ish<br />
|<br />
|-<br />
|Łukasz Wojniłowicz<br />
| flight to ZRH<br />
|Sun sep 10th<br />
|morning-ish<br />
|<br />
|-<br />
|Adriaan de Groot<br />
| flying to ZRH<br />
| Friday sep 8th<br />
| taking train to Randa sunday 10th<br />
|<br />
|-<br />
|Thomas Baumgart<br />
|train from FRA<br />
|Sun Sep 10th<br />
|15:53 @Randa Central<br />
|<br />
|-<br />
|Sanjiban Bairagya<br />
|flight to ZRH<br />
|Sat Sep 9th<br />
|19:25<br />
|<br />
|-<br />
|José Millán<br />
|flight to BSL<br />
|Sat Sep 9th<br />
|Morning<br />
|<br />
|- <br />
|Joseph and Grace<br />
|by flight to GVA<br />
|Sun 10th sep<br />
|Morning<br />
|<br />
|-<br />
|Daniel Vrátil<br />
|flight to ZRH<br />
|Sun Sep 10th<br />
| 8:55<br />
|<br />
|- <br />
|Scarlett Clark<br />
|by flight to ZRH<br />
|Sun 10th sep<br />
|Morning 8:05<br />
|<br />
|-<br />
|Bhushan Shah<br />
|by flight to ZRH<br />
|Sat 10th September<br />
|Morning 6 AM-ish<br />
|<br />
|-<br />
|Emmanuel Lepage<br />
|by flight to ZRH<br />
|Sat 10th September<br />
|The day before (jet lag)<br />
|<br />
|-<br />
|Frederik Gladhorn<br />
|by flight to ZRH<br />
|Sun 10th of September<br />
|14:00<br />
|<br />
|-<br />
|R. Harish Navnit<br />
| by flight to ZRH<br />
| Sat 10th September<br />
| 6:55 AM<br />
| <br />
|<br />
|-<br />
|Aniketh Girish<br />
| by flight to ZRH<br />
| Sat 9th September<br />
| late morning/noon<br />
| Just a tentative plan yet now.<br />
|<br />
|-<br />
|Swati Lodha<br />
|by flight to ZRH<br />
|Sat 10th September<br />
|Morning (around 6-7)<br />
|<br />
|-<br />
|David Edmundson<br />
|by flight to Geneva<br />
|Sat 10th September<br />
|Morning (around 9)<br />
|<br />
|-<br />
|manuel muzzurru<br />
|by my car<br />
|10 sept at morning<br />
|around to time 8 - 10am<br />
|no comment<br />
|<br />
|}<br />
<br />
== Departure ==<br />
<br />
{| class="sortable" border="1" cellpadding="5" cellspacing="0" style="border: gray solid 1px; border-collapse: collapse; text-align: left; width:100%;"<br />
|- style="background: #ececec; white-space:nowrap;"<br />
! Name<br />
! Type<br />
! Date<br />
! Time<br />
! Comment<br />
|- <br />
|Volker Krause<br />
|flight from ZRH<br />
|Fri Sep 15th<br />
|20:50<br />
|<br />
|- <br />
|Sagar Chand Agarwal<br />
|flight to ZRH<br />
|Sun Sep 17th<br />
|evening<br />
|<br />
|-<br />
|Jayaditya Gupta<br />
| flight to ZRH<br />
|Sun sep 17th<br />
|evening<br />
|<br />
|-<br />
|Łukasz Wojniłowicz<br />
| flight from ZRH<br />
|Sat sep 16th<br />
|afternoon<br />
|<br />
|-<br />
|Adriaan de Groot<br />
| flight from ZRH<br />
| saturday 16th, 17:35<br />
| morning-ish<br />
|<br />
|-<br />
|Thomas Baumgart<br />
| train to FRA<br />
|Fri Sep 15th<br />
|9:54<br />
|<br />
|-<br />
|Sanjiban Bairagya<br />
|flight from ZRH<br />
|Sun Sep 17th<br />
|21:55<br />
|<br />
|-<br />
|José Millán<br />
|train<br />
|Sat Sep 16th<br />
|evening<br />
|<br />
|- <br />
|Joseph and Grace<br />
|by flight from GVA<br />
|Sat 16th Sep<br />
|Morning<br />
|<br />
|-<br />
|Daniel Vrátil<br />
|flight from ZRH<br />
|Sat Sep 16th<br />
|Evening<br />
|<br />
|-<br />
|Scarlett Clark<br />
|flight from ZRH<br />
|Sun Sep 17th<br />
|Noon<br />
|<br />
|-<br />
|Bhushan Shah<br />
|flight from ZRH<br />
|Sun Sep 17th<br />
|10 AM-ish<br />
|I'll leave Randa on 16th morning-ish, will stay for 16-17th morning in ZRH (Mostly will book ibis budget hotel, if you want to share room ping me).<br />
|-<br />
|Frederik Gladhorn<br />
|by flight from ZRH<br />
|Sat 16th of September<br />
|<br />
| I need to leave on Saturday morning to Bern, will continue to Zurich on Sunday<br />
|-<br />
|R. Harish Navnit<br />
| by flight from ZRH<br />
| 16th or 17th<br />
| Some time between 16th afternoon to 17th early morning<br />
| Listing down the tentative travel plan for now<br />
|-<br />
|Aniketh Girish<br />
| by flight from ZRH<br />
| 16th or 17th<br />
| sometime between 16th afternoon to 17th early morning<br />
| Tentative travel plan for now<br />
|-<br />
|Swati Lodha<br />
|by flight from ZRH<br />
|Sun Sep 17th<br />
|Noon<br />
|Departure is tentative. <br />
|-<br />
|David Edmundson<br />
|by flight from Geneva<br />
|Sat Sep 16th<br />
|15:00<br />
| <br />
|-<br />
|manuel muzzurru<br />
|by my car<br />
|Sat Sep 16th<br />
|any time<br />
|no comment<br />
|-<br />
|}</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2017/Ideas&diff=76163GSoC/2017/Ideas2017-02-05T14:06:38Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:GSoC2016Logo.jpg |400px|thumb|right|GSoC 2016 logo]]<br />
See also: [[../../|GSoc Instructions]], [[../../2016/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Being accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or other image'''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor)<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
===digiKam===<br />
digiKam is an advanced digital photo management application for Linux, Windows, and MacOS.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://plus.google.com/+digikam Google+ page]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
<br />
==== Project 1 : digiKam database export to remote devices ====<br />
<br />
'''Brief Explanation''': In the past, Kipi-plugins provided a way to export KIPI host data to DLNA/UPNP by a plugin using HUpnp library for Qt. Since porting this tool to Qt5 will not work as HUpnp project is unmaintained and its code is not ported to Qt5, even if we have tested some implementation from GitHub ported to Qt5. The goal of this project is to find a new way to restore this feature in digiKam core directly (not as a plugin), using a suitable solution to support UPNP/DLNA in the long term.<br />
<br />
'''Expected results''':<br />
*Review old plugin code DLNA Export. Review all required features to export digiKam contents through a DLNA server.<br />
*Implement a DLNA server in digiKam core to export photo and video hosted in physical and virtual collections. The server must have the capability to be restored at each digiKam session.<br />
*Implement the server configuration panel in digiKam setup.<br />
*Test the new implementation with DLNA compliant devices, as smartphones, tablets, TVs.<br />
*Test the new implementation under Windows and MacOS.<br />
*Write unit tests and documentation.<br />
<br />
'''Knowledge Prerequisite''': DLNA/UPNP, C++, and Qt5<br />
<br />
'''Mentor''': Gilles Caulier, Mohamed Anwer, and Maik Qualmann<br />
<br />
==== Project 2 : digiKam Database separation for similarity information ==== <br />
<br />
'''Brief Explanation''': digiKam has a feature to search items by similarity.This require to compute image fingerprints stored in main database.These data can take space on disk especially with huge collection. This can bloat the main database a lots and increase complexity to backup main database which include all main information for each item registered, as tags, label, comments, etc.<br />
As for Face management database, which store face histograms in a dedicated database, the similarity fingerprints must be stored in a dedicated database.<br />
<br />
'''Expected results''':<br />
*Review current whole database implementation including database schema hosted as XML.<br />
*Isolate tables and schemas relevant of similarity fingerprints.<br />
*Create a new schema for similarity features.<br />
*Create a new database access interface inspired of Faces Management database interface.<br />
*Implement code to drive fingerprints for Sqlite and MySQL/MariaDB.<br />
*Write unit tests for database interface and documentation.<br />
<br />
'''Knowledge Prerequisite''': Database, Sqlite, MySQL/MariaDB, C++, and Qt5<br />
<br />
'''Mentor''': Gilles Caulier, Mario Frank, and Maik Qualmann<br />
<br />
==== Project 3 : digiKam Web Services tools authentication with OAuth ==== <br />
<br />
'''Brief Explanation''': digiKam has many tools hosted in Kipi-plugins project dedicated to share items on web services, as Facebook, Google, Flickr, Dropbox, Imgur, etc...<br />
All tools use an older way to be authenticated through the web service using an external web browser instance to capture the token network session. This is a fastidious way to open a web service session.<br />
Only Imgur tool use an embedded OAuth authentification without a web browser instance through O2 library for Qt.<br />
The goal of this project is to port all others web service tools to O2 library API.<br />
<br />
'''Expected results''':<br />
*Review current implementation of Kipi-plugins tools and identificate all web service compatible with OAuth standard.<br />
*Plan the amount of work to port tools by order of complexity, and identify possible problems.<br />
*Port code for each tools step by step, by writing unit tests independently.<br />
*Test all tools with all use cases, depending of tool options.<br />
*Write documentation.<br />
<br />
'''Knowledge Prerequisite''': Network, OAuth, C++, and Qt5<br />
<br />
'''Mentor''': Maik Qualmann and Gilles Caulier<br />
<br />
==== Project 4 : digiKam Face Management improvements ==== <br />
<br />
'''Brief Explanation''': digiKam is already able to detect well faces in photos, through a core interface based on OpenCV shared library. However the face management needs amelioration:<br />
<br />
* Face Recognition is implemented using Eigenfaces algorithm to identify the person depicted and automatically tag the region on the photo with the person's name, but the algorithm require improvements to get better automatized results.<br />
* The user workflow in GUI need also some improvements and fixes to have a better usability in graphical interface.<br />
* The face region registered in database and image metadata need to be synchronized accordingly with image transformations.<br />
* See relevant [https://bugs.kde.org/buglist.cgi?bug_status=__open__&component=Faces-Management&list_id=1420390&product=digikam entries in bugzilla].<br />
<br />
'''Expected results''':<br />
* Review current implementation of Face Recognition and Improve existing Eigenfaces implementation. <br />
* Fisherfaces recognition method is partially implemented. Finalize this algorithm digiKam face engine.<br />
* Patch digiKam faces management to be able to switch between recognition methods.<br />
* Review main reports from bugzilla about face management usability.<br />
* Propose solutions to solve main face management usability issues.<br />
* Propose solutions to solve face management metadata issues with face regions.<br />
* Write unit test tools.<br />
* Write documentation.<br />
<br />
'''Knowledge Prerequisite''': Database, C++ and Qt. Knowledge of matrices and working with them. Some idea of clustering algorithms and previous OpenCV experience would be useful.<br />
<br />
'''Mentor''': Gilles Caulier, Mario Frank, and Maik Qualmann<br />
<br />
=== Dolphin ===<br />
<br />
Dolphin is a lightweight file manager. It has been designed with ease of use and simplicity in mind, while still allowing flexibility and customisation.<br />
<br />
==== Project: Polkit support in KIO/Dolphin ====<br />
<br />
'''Brief explanation''': Dolphin currently doesn‘t support manipulating files owned by the root user. Many people work-around this limitation by starting Dolphin with root permissions, which is dangerous and not supported. The goal of this project is to provide a Dolphin implementation that opens a nice authentication dialog whenever a file needs to be deleted/moved/created in a folder owned by root. On Linux, this kind of authentication dialogs is provided through Polkit.<br />
<br />
Dolphin doesn‘t touch the filesystem directly, it uses KIO jobs for this task. This means that Polkit support needs to go in KIO itself. Note that this will benefit all KDE applications, not just Dolphin! This project is divided into two steps:<br />
<br />
* KDE provides the KAuth library to easily integrate Polkit in KDE projects. You will be expected to refactor the <tt>file</tt> ioslave with KAuth actions. More details in https://phabricator.kde.org/T5202<br />
* Once KIO is ready to rock with KAuth, Dolphin needs to relax the assumption that root-owned locations cannot be edited. See also https://phabricator.kde.org/T5203<br />
<br />
<br />
'''Expected results''': by the end of the summer, a user should be able to delete/move/create a file or a folder in a root-owned location (say, <tt>/opt</tt>) from Dolphin, after having typed their password in a polkit authentication dialog. Dolphin should also exit if it detects it has been started with root privileges.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt<br />
<br />
'''Mentor''': Elvis Angelaccio (IRC: eang on #kde-devel; mail: elvis.angelaccio@kde.org)<br />
<br />
=== Krita ===<br />
[http://www.krita.org Krita]: digital painting for artists. It support creating images from scratch from begin to end. Krita is a complex application and developers need to have a fair amount of experience in order to be able to do something.<br />
<br />
Krita is a widely used digital painting application for professional artists. Last year, Krita gained the ability to create hand-drawn 2D animations, among other new features. For this year, projects that the Krita team would be interested in include:<br />
<br />
<br />
==== Project: Integrate with share.krita.org ====<br />
<br />
'''Brief explanation''': Share.krita.org is a place where users can share krita scripts, images, brush packs and more. Krita used to use GHNS (Get Hot New Stuff) to integrate with the predecessor of share.krita.org, but that support has disappeared. This project has two parts: integrate with the knewstuff framework (or reimplement the protocol) and create a gui for sharing. The second part is improving the support for creating and editing bundles. Bundles can contain brushes, patterns, gradients and so on. Krita has basic support for creating and editing bundles, but it doesn't work very well in practice. For this part the student must work together with our UX design team to create a better gui design, then implement it. We also want to be able to publish images directly to share.krita.org<br />
<br />
'''Expected results''': by the end of the summer, a user should be able to create a bundle from resources registered with Krita, upload it to share.krita.org and install bundles that have been uploaded to share.krita.org.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud), Scott Petrovic (IRC: scottyp)<br />
<br />
==== Project: Extending Animation Support for curves ====<br />
<br />
'''Brief Explanation''': Last year, we added curves that could be applied to some properties of a layer, like opactity. We want the animation support extended by allowing users to place masks (filter masks, transformation masks, transparency masks) on the timeline and animate their properties using curves. Every property of a layer or mask placed on the timeline should be animatable.<br />
<br />
'''Expected results''':<br />
* Implementation of a gui for applying the curve settings to one or more properties of a mask or layer<br />
* Implementation of the actual rendering of the properties in the frames<br />
* Saving of these settings<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk_log)<br />
<br />
==== Project: Taking the Shape Brush to the next level ====<br />
'''Brief Explanation''': Krita has a number of interesting brush engines. One of them is the Shape Brush engine. Inspired by Alchemy, the shape brush "throws" shapes on the canvas. The current implementation is limited to geometric shapes. We want the brush engine to be extended to make it possible to load vector shapes defined as PDF or SVG and use those to draw on the canvas as well. Other improvements are the addition of Feathering, an outline mode, edge sharpening and background textures.<br />
<br />
'''Expected Results''': A revampted and exciting shapes brush<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Krita<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Lukas Tvrdy (IRC: LukasT)<br />
<br />
==== Project: Implementation of experimental OpenCL support for layer composition, filtering and painting ====<br />
'''Brief Explanation''': Krita in the current state relies purely on CPU power for vast majority of operations. Many of them can be offloaded onto GPU. This will improve performance due to high throughput of parallel operations and potentially will enable power-efficient port of Krita for mobile devices.<br />
<br />
'''Expected Results''': Architecture for OpenCL module which allows to interact with existing code seamlessly and preliminary support for GPU acceleration. Ideally, there should be a separate tool that paints directly on a OpenCL/OpenGL buffer stored in GPU memory. This buffer should be painted over the existing Krita canvas.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, OpenCL<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Implementation of experimental OpenGL-enabled brush ====<br />
'''Brief Explanation''': Krita in the current state relies purely on CPU power for vast majority of operations. Many of them can be offloaded onto GPU. This will improve performance due to high throughput of parallel operations and potentially will enable power-efficient port of Krita for mobile devices.<br />
<br />
'''Expected Results''': this is another experimental GPU-related project that allows the user to paint over the canvas purely on GPU. But this project relies on a different technology: openGL. There should be a special kind of layer that is stored in GPU memory and a special tool that is capable of painting over this layer. The tool should be able to use basic Krita brush presets (for the Pixel Brush engine) to paint over the canvas with the speed of lightning. To make this project easier, we put a limitation: this special layer should be on the top of the layers stack and therefore, just painted over the Krita openGL canvas.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, OpenGL<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Analysis of thoroughput of Krita Blending Modes and porting them to AVX2 ====<br />
'''Brief Explanation''': Blending modes is the hottest piece of code in Krita. It should process gigabytes of data per second, therefore it should be extremely optimized. Some of its parts are already optimized to use AVX instructions, but some (float16 color spaces) are not. We need to port the rest of the color spaces to AVX and make a research into the possibilities of using AXV2 instructions directly (int16 instructions). It might happen that you will have to extend VC library to get full AVX support.<br />
<br />
'''Expected Results''': Ported Float16 color spaces to AVX, extended Vc library to support int16 AVX2 instructions and adopted it in Krita<br />
<br />
'''Knowledge Prerequisite''': C++, SEE/AVX (read [http://www.intel.eu/content/www/eu/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html Intel's manual])<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Using cubic splines to create a very quick brush ====<br />
'''Brief Explanation''': This is a research project. The student should find a way to convert a usual (X,Y) coordinates into a curved coordinate system (l,h) associated with a cubic curve: l (position at the curve), h (distance to the curve). If we have such a mapping, we can create an extremely quick brush that is up to 10 times faster than the current Krita's Pixel Brush.<br />
<br />
'''Expected Results''': It is expected that the student has done at least a part of the research before doing the proposal and is kind of sure that such mapping is possible. If the mapping is impossible or not quick enough, then the student can change the project and implement a "quick brush" engine from [https://www.youtube.com/watch?v=WGFXdFkGjqI here].<br />
<br />
'''Knowledge Prerequisite''': C++, analytical geometry<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Partial canvas updates and region of interest (performance optimization for huge (20k+) canvases) ====<br />
'''Brief Explanation''': We already have an optimization for huge canvases, which is called Instant Preview. But it woks only when the user has the canvas zoomed out to fit the screen. There are some usecases, when the user wants to work with a small "working area" of a huge image and he doesn't care what happens with the rest of the image. This project is targeted to optimizer this case.<br />
<br />
'''Expected Results''': By the end of the summer we expect these features to be implemented:<br />
* Partial updates in openGL canvas. Right now we redraw all the image textures in every frame, which is not needed after porting to Qt5.<br />
* Region of Intereset (ROI) in KisImage. Updates should be reordered and the priority should be given to the areas that are currently visible to the user<br />
* Work Area Tool. The user is be able to define the area, where he would like to work in. The updates for other parts of the image are skipped until the user exits this special mode.<br />
* (if there is time) Optimize textures loading to use RIO as well. Theoretically, we can just skip uploading of the tiles that are not visible on the screen at the moment.<br />
<br />
'''Knowledge Prerequisite''': C++, OpenGL<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log), Julian Thijssen (IRC: Nimmy)<br />
<br />
==== Project: Lazy Selection Tool ====<br />
'''Brief Explanation''': We already have a Colorize Mask for filling line art. Now we need to extend it to support easy selection of the objects. The final tool should look something like Gimp's [https://www.youtube.com/watch?v=PzW8eJ_bDgA Foregroud Selection Tool] but quicker and more intuitive to use.<br />
<br />
'''Expected Results''': By the end of the summer we expect the selection tool to be merged into master and ready for use by the users.<br />
<br />
'''Knowledge Prerequisite''': C++, analytical geometry<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Add 3D Painting Assistants ====<br />
'''Brief explanation''': One of the more innovative features in Krita are the painting assistants. These are shapes overlaid on the canvas that the artist can use to help him achieve perspective, straight lines and other shapes freehand. For complex drawings it would be useful to be able to place 3D models on the canvas, position and scale them and use those as guides for drawing.<br />
<br />
'''Expected results''': by the end of the summer, 3D models should be shown on canvas as canvas decorations, using OpenGL in hidden-line wireframe mode. The models should be manipulated using on-canvas controls like other assistants. Magnetic snapping is an optional extra.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, OpenGL, Assimp<br />
<br />
'''Mentor''': Julian Thijssen (IRC: Nimmy)<br />
<br />
=== KStars ===<br />
<br />
[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time. <br />
<br />
==== Project: All-sky DSS/SDSS overlay ====<br />
'''Brief explanation''': KStars is a very good '''simulation''' of the night sky where it draws many objects including stars, planets, galaxies, nebulae and more. However, observers sometimes would like to see how the '''real''' sky looks at a particular location. Fortunately, we have [https://en.wikipedia.org/wiki/Digitized_Sky_Survey Digitized Sky Survey] that covers large swaths of the night sky. Second-generation DSS2 contains plates for several filters enabling full-color images to be overlayed unto KStars sky map.<br />
<br />
'''Expected results''': Ability to toggle DSS2 color overlay on and off covering all the sky. User can utilize the data either by downloading a specific set of files (expected to be a large data set), or by progressively downloading and caching the data files and displaying them as necessary given the zoom level. Student must optimize memory, bandwidth, and CPU usage throughout the whole process as it should not affect the performance of KStars. A complete API must be developed to enable customized overlay generation given equatorial coordinates, field of view, number of required components...etc so that it can be used for any tool within KStars. The user should be able to configure overlay parameters including transparency, online/offline modes..etc.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can supported addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Ekos Web Client ====<br />
'''Brief explanation''': Ekos is KStars premier tool for observatory control and automation. A web client port of Ekos is desired where it communicates with the underlying INDI servers and drivers without a direct dependency on thick desktop clients. Ekos includes many modules including setup, capture, focus, guide, align, and mount. All functionalities of the desktop Ekos client are expected in the web client version using Python+Ajax or similar framework technologies suitable for online dynamic driven clients.<br />
<br />
'''Expected results''': <br />
* Online Ekos web client with all the thick client feature set.<br />
* Authentication and Registration framework.<br />
* Support for notifications similar to desktop client.<br />
* Ajax dynamic driven interface with near real time updates for framing and captures.<br />
* Multi-user support with granular permissions.<br />
* Web based INDI Control Panel with all the driver controls as in the desktop version.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Django/Ajax or similar technology framework.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Improving Comets and new Meteor Showers component ====<br />
'''Brief explanation''': Currently KStars supports display of comets within the solar system. The data is fetched from JPL and computed to show the position, magnitude, sun-distance, among other parameters. However, there are many inconsistencies and incorrect results in the produced results making the comets data in KStars unreliable. Furthermore, comets are drawn as simple point objects and not as comets with physical nucleolus and tail. This reduces the realism of such object within KStars. Additionally, KStars only displays the current position of the comet in the sky, while it may be desirable for the user to see the expected path (arc) of the comet through out the night sky as a function of time. Finally, KStars does not show any information on meteor showers at all. A new meteors shower components needs to be developed. The component should display meteor shows using suitable animation and presents metadata to describe the event to the end user. Such information may include seeing quality (if affected by Moon presence), expected number of meteors per hours, constellation epicenter, rise/transit/set times..etc.<br />
<br />
'''Expected results''': <br />
* All the results are expected to work in both the KStars desktop version (Qt Widgets) and the KStars Lite mobile version (QML)<br />
* Fix all comets data to agree with JPL and Minor Planet Center sources.<br />
* Draw comet with approximate physical size for nucleus and tail that fits physical parameters. Option to draw exaggerated size for display purposes.<br />
* Draw current vs. predicted path (from the last few hours to the next few hours) of the comet.<br />
* Draw meteor showers animation from epicenter. Show metadata about the meteor shower and quality of observing.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, QML, solid mathematical background<br />
<br />
'''Mentor''': Akarsh Simha ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: kstar)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Akarsh Simha ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: kstar)<br />
<br />
=== Kopete ===<br />
<br />
Kopete is an instant messenger supporting AIM, Bonjour, Gadu-Gadu, GroupWise, ICQ, Jabber (XMPP, Google Talk, Facebook, ...), Meanwhile, QQ, Skype, Windows Live Messenger, WinPopup, Yahoo and more. It is designed to be a flexible and extensible multi-protocol system suitable for personal and enterprise use.<br />
<br />
Mailing list: kopete-devel@kde.org (archive at: lists.kde.org or gmane.org)<br />
<br />
==== Project: Jabber message archive ====<br />
<br />
Brief explanation: When you use more jabber clients and you want to have full chat history in all clients, you need to synchronize message history between all clients. To make it easier for different jabber clients, there is jabber protocol extension for storing history directly on jabber servers which allows clients to download (missing) messages:<br />
<br />
XEP-0136: Message Archiving<br />
<br />
XEP-0313: Message Archive Management<br />
<br />
Expected results: Working support for XEP-0136 or XEP-0313<br />
<br />
Knowledge Prerequisite: C++/Qt, Jabber protocol<br />
<br />
Mentor: Pali Rohár <pali.rohar@gmail.com>, Pali on #kopete<br />
<br />
<br />
==== Project: IRC protocol ====<br />
<br />
Brief explanation: Kopete KDE3 version had plugin for IRC protocol. Porting that IRC plugin to new KDE versions was never finished and Kopete does not have working support for IRC yet.<br />
<br />
Expected results: Restore IRC protocol into Kopete<br />
<br />
Knowledge Prerequisite: C++/Qt, IRC protocol<br />
<br />
Mentor: Pali Rohár <pali.rohar@gmail.com>, Pali on #kopete<br />
<br />
<br />
==== Project: Chat history improvements ====<br />
<br />
Brief explanation: Kopete can archive chat history via built-in plugin. There are more plugins which implement such archive functionality and use different storages. There are also problems with API how chat history is used... This project is for improving status of chat history in Kopete.<br />
<br />
Expected results: Come up with idea 1) what to store from chat session 2) how to store it 3) where to store it and 4) how to provide chat history to user. Part of result is of course full implementation and ideally also conversion from current history plugins.<br />
<br />
Knowledge Prerequisite: C++/Qt, some knowledge of storing chat history<br />
<br />
Mentor: Pali Rohár <pali.rohar@gmail.com>, Pali on #kopete<br />
<br />
Note: Part of GSoC proposal must be ideas or solutions to these problems. I suggest to read mailing list discussion from last year.<br />
<br />
=== Marble ===<br />
The [https://marble.kde.org/ Marble] community combines free data and open source to produce awesome map software. Find your way and explore the world!<br />
<br />
==== Project: Marble Indoor Maps ====<br />
'''Brief Explanation''': [https://play.google.com/store/apps/details?id=org.kde.marble.maps Marble Maps] brings the highly detailed OpenStreetMap to your Android devices. It features a crisp, beautiful map with an intuitive user interface. This project is about extending it to support indoor maps (e.g. selecting and showing different levels of a building).<br />
<br />
'''Expected Results''':<br />
* Marble extracts [https://wiki.openstreetmap.org/wiki/Simple_Indoor_Tagging indoor related OSM tags]<br />
* Floor and connection elements (e.g. room, wall, door, staircase) are shown in the map. Similar to [http://openlevelup.net/?lat=42.80043008955188&lon=-1.6367550194263458&zoom=19&tiles=0&level=0&transcend=1&unrendered=0&buildings=0&photos=0&notes=0 OpenLevelUp].<br />
* User interface to select floor levels and filtering of the map view based on the active floor level<br />
* Automatic adjustment of the floor level user interface (hide it when there are no indoor map elements in the view, select minimum/maximum floor level automatically)<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, optionally [https://wiki.openstreetmap.org/wiki/Map_Features OSM] and [https://doc.qt.io/qt-5/qtqml-index.html QML].<br />
<br />
'''Mentor''': Dennis Nienhüser (IRC: Earthwings in #marble)<br />
<br />
'''Interested?''' Please read the [https://community.kde.org/GSoC#Instructions_for_students general KDE instructions], try to [https://community.kde.org/Marble/AndroidCompiling build Marble Maps on your own], have a look at our [https://phabricator.kde.org/project/view/38/ task board] and contact your prospective mentor, Dennis.<br />
<br />
==== Project: Material Marble Maps ====<br />
'''Brief Explanation''': [https://play.google.com/store/apps/details?id=org.kde.marble.maps Marble Maps] brings the highly detailed OpenStreetMap to your Android devices. It features a crisp, beautiful map with an intuitive user interface. This project is about redesigning it in [https://material.io/ Material Design].<br />
<br />
'''Expected Results''':<br />
* Marble Maps on Android follows the Google [https://material.io/ Material Design] Guidelines<br />
* Switch to the [https://doc-snapshots.qt.io/qt5-5.8/qtquickcontrols2-material.html Qt Material Style] as a base<br />
* Incorporate useful ideas and patterns from other resources, e.g. [http://papyros.io/qml-material/ Papyros]<br />
<br />
'''Knowledge Prerequisite''':<br />
* [https://doc.qt.io/qt-5/qtqml-index.html QML]. A background in design and basic knowledge in C++ and Qt will be helpful.<br />
<br />
'''Mentor''': Dennis Nienhüser (IRC: Earthwings in #marble)<br />
<br />
'''Interested?''' Please read the [https://community.kde.org/GSoC#Instructions_for_students general KDE instructions], try to [https://community.kde.org/Marble/AndroidCompiling build Marble Maps on your own], have a look at our [https://phabricator.kde.org/project/view/38/ task board] and contact your prospective mentor, Dennis.<br />
<br />
=== GCompris ===<br />
==== Project: finishing started activities ====<br />
'''Brief explanation''': GCompris is a an educational software suite comprising of numerous activities for children aged 2 to 10. Originally written in Gtk+ it's development team started to rewrite it from scratch in Qt Quick.<br />
<br />
'''Expected results''':<br />
The aim of this year is to complete and getting merged activities that were started but have not been finished.<br />
First phase is to check which activities can be continued, what is missing to be integrated (on code and graphic side) and then to complete them. You can find at https://cgit.kde.org/gcompris.git/refs/heads the list of the current branches (some of them need to be dropped, so contact us before starting working on one of them) and more information on <br />
https://phabricator.kde.org/project/profile/1/.<br />
<br />
The second aim is to refine current activities: some can be improved, whether improving the animation, adding sounds, tutorials... Some tasks already defined in the improvement section of phabricator are quite interesting.<br />
<br />
'''Knowledge Prerequisite''': By the start of GSoC you should<br />
<br />
Be interested in children’s education<br />
<br />
Be familiar with GCompris concept and content<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough)<br />
<br />
Be able to build the Qt Quick version of GCompris<br />
<br />
'''Application guide''':<br />
Continuing an activity already started or rewriting from scratch is something you have to check before writing your application. Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/An_exercise_for_new_contributors.<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Johnny Jazeix (IRC: JohnnyJ), Emmanuel Charruau (IRC: Allon1)<br />
<br />
=== LabPlot ===<br />
==== Project: Statistical analysis ====<br />
Currently LabPlot has only basic support for statistical data analysis by providing some basic measures of desciptive statistics in the spreadsheet. The goal of the project is to add more statistics relevant features (hypothesis tests, cluster analysis, ets.) to LabPlot.<br />
<br />
'''Expected results''':<br />
* evaluate available statistical open-source libraries which can be used for this project<br />
* determine a reasonable set of features and algorithms that can be added to LabPlot, compare here with other similar projects, and implement them<br />
* for the visualization of results of statictical calculations, implement new kind of reports for this, comparable to other similar projects<br />
<br />
'''Knowledge Prerequisite''':<br />
C++, Qt, basic statistics knowledge<br />
<br />
'''Mentor''': Alexander Semke and Stefan Gerlach<br />
<br />
<br />
==== Project: plotting of real-time data ====<br />
Currently, the visualization and analysis of data is only possible on static data that was imported into or generated in one of LabPlot's data containers. The goal of the project is to add support for streaming data.<br />
<br />
'''Expected results''':<br />
* adjust and extend the data containers, analysis algorithms and the plotting part of the application to support streaming data<br />
* add dialogs and wizards to configure this new kind of data sources<br />
<br />
'''Knowledge Prerequisite''':<br />
C++, Qt<br />
<br />
'''Mentor''': Stefan Gerlach and Alexander Semke<br />
<br />
=== Minuet (Software for Music Education) ===<br />
<br />
Minuet is a member of KDE-edu suite of educational applications and was first released in KDE Applications 16.04. Minuet aims at supporting students and teachers in many aspects of music education, such as ear training, first-sight reading, solfa, scales, rhythm, harmony, and improvisation. Minuet makes extensive use of MIDI capabilities to provide a full-fledged set of features regarding volume, tempo, and pitch changes, which makes Minuet a valuable tool for both novice and experienced musicians. Minuet features a rich set of ear training exercises and new ones can be seamlessly added in order to extend its functionalities and adapt it to several music education contexts.<br />
<br />
Minuet currently runs on Linux, Android ([https://ayushashah.wordpress.com/2016/08/20/it-only-takes-a-minuet-to-change-your-life/ Ayush Shah's 2016 Google Summer of Code project]), and Windows.<br />
<br />
Additional Information:<br />
* [https://minuet.kde.org Website (minuet.kde.org)]<br />
* [http://sandroandrade.org/tag/minuet/ Blog posts]<br />
* [https://www.youtube.com/watch?v=IxmyevpFErU (watch in HD) Demonstration video]<br />
* IRC channel: #kde-edu (nickname: sandroandrade)<br />
* [https://mail.kde.org/mailman/listinfo/kde-edu Mailing list]<br />
* Contacts:<br />
** sandroandrade AT kde DOT org<br />
** [https://t.me/andradesandro Telegram]<br />
<br />
===== Project: Singing and Clapping Capabilities =====<br />
<br />
'''Brief explanation''': current Minuet human-interaction mechanism comes down to the use of mouse clicks to point out the answer for a given ear training exercise. Obviously, singers and drummers/percussionists wouldn't have any valuable benefit of using Minuet unless it provides some mechanism to get exercises' answer from singing and clapping data captured from a computer-connected microphone. This project aims at implementing the features for recognizing pitch from voice data and hits from clapping data, both acquired from the computer microphone.<br />
<br />
'''Expected results''':<br />
* A reliable (to some extent) mechanism for detecting pitch from voice data.<br />
* A reliable mechanism for detecting clapping from audio data.<br />
* Both mechanisms may require calibration.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++/Qt/QML.<br />
* Digital Signal Processing.<br />
<br />
'''Mentor''': Sandro Andrade (IRC: sandroandrade)<br />
<br />
===== Project: Chord-melody Arrangement Generator =====<br />
<br />
'''Brief explanation''': Chord melody is an music arrangement style, generally adopted by guitarists, where melody is play alongside with some pieces of harmony (example [https://www.youtube.com/watch?v=2OX96DaOVV8 here]). Whilst the generation of chord melody arrangements is quite a creative task, some basic rules enables the implementation of automatic generators with satisfactory and interesting results. The generator works by receiving two input data: the melody and the harmonic progression (sequence of chords) and then generates a chord melody arrangement for such a song. The generation should consider parameters such as maximum distance between fingers, use of not of tensions, and others. Input and output can be handled for example by using the [https://www.musicxml.com/ MusicXML] format. Displaying the arrangement in a spreadsheet is also expected (spreadsheet support in Minuet is in progress).<br />
<br />
'''Expected results''':<br />
* Design and implementation of MusicXML I/O capabilities in Minuet (libraries already available).<br />
* Design and implementation of the chord melody generator<br />
* Spreadsheet integration for exhibiting the final generated arrangement.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++/Qt/QML.<br />
* Minimal background regarding music harmony.<br />
<br />
'''Mentor''': Sandro Andrade (IRC: sandroandrade)<br />
<br />
===== Project: Multiple-Instrument View Framework =====<br />
<br />
'''Brief explanation''': Minuet is currently able to visually represent intervals, chords, and scales only on the piano keyboard. Supporting other musical instruments, with the accurate handling of their particular idiosyncrasies, is a feature of paramount importance. Aspects such as fingering and execution techniques are highly dependent on which musical instrument they were created to. A flexible architecture should be designed to allow the seamless integration of new musical instruments as Minuet plugins. Minuet's core should not only provide all information generally required by all musical instruments, but also support the handling of instrument-specific information, when available.<br />
<br />
'''Expected results''':<br />
* Design and implementation of a multiple-instrument visualization framework.<br />
* Refactoring of piano keyboard view as a framework plugin.<br />
* Implementation of a framework plugin for a new instrument (e.g. guitar or bass).<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++/Qt/QML.<br />
* Minimal music background for a instrument other than the piano.<br />
<br />
'''Mentor''': Sandro Andrade (IRC: sandroandrade)<br />
<br />
===Trojitá===<br />
<br />
[http://trojita.flaska.net/ Trojitá] is a fast IMAP e-mail client. Since late 2012, it is a part of KDE's extragear. The project focuses on delivering a usable, fast, standards-compliant, cross-platform and reliable e-mail client which can scale from cell phones to huge e-mail archives without annoying slowdowns.<br />
<br />
==== Project: Multiaccount support ====<br />
<br />
'''Brief explanation:'''<br />
Trojitá's GUI only shows one IMAP account at once. The scope of this task is to analyze what needs to be done, and implement the required changes for making it possible to show multiple IMAP accounts. General bugfixes are expected in the rest of the time.<br />
<br />
'''Expected results:''' Full support for multiple IMAP accounts, including unit test coverage.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, contributing to Trojitá prior to GSoC<br />
<br />
'''Mentor:''' Jan Kundrát <jkt@kde.org><br />
<br />
===KDevelop===<br />
==== Project: Improve QML/JS integration ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Improve QML/JS integration: Module path dialog, proper handling of QRC imports, navigation for 'import ...' lines, etc.<br />
<br />
'''Knowledge Prerequisite:'''<br />
QML, Qt and C++.<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Go Integration ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Proper semantic highlighting, code completion and projects integration.<br />
<br />
'''Knowledge Prerequisite:'''<br />
Go, C++, some Qt<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Rust integration ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Proper semantic highlighting, code completion and projects integration.<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Windows Debugger integration (CDB) ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Make it possible to debug applications using CDB. That is managing breakpoints and analyzing the state when the debug session is paused.<br />
<br />
'''Knowledge Prerequisite:'''<br />
CDB, C++, some Qt<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Bundling systems integration in KDevelop====<br />
<br />
'''Brief explanation:'''<br />
Nowadays these systems' adoption is more and more common in GNU/Linux, it would be interesting to integrate the development of applications under these systems.<br />
This project could address Flatpak, Snap and/or Docker systems.<br />
<br />
'''Expected results:''' <br />
Full project manager integration, application execution and debugging.<br />
<br />
'''Knowledge Prerequisite:'''<br />
C++, some Qt, experience with the implemented systems would be welcome.<br />
<br />
'''Mentor:''' Aleix</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2017/Ideas&diff=76160GSoC/2017/Ideas2017-02-05T13:17:57Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:GSoC2016Logo.jpg |400px|thumb|right|GSoC 2016 logo]]<br />
See also: [[../../|GSoc Instructions]], [[../../2016/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Being accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or other image'''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor)<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
===digiKam===<br />
digiKam is an advanced digital photo management application for Linux, Windows, and MacOS.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://plus.google.com/+digikam Google+ page]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
<br />
==== Project 1 : digiKam database export to remote devices ====<br />
<br />
'''Brief Explanation''': In the past, Kipi-plugins provided a way to export KIPI host data to DLNA/UPNP by a plugin using HUpnp library for Qt. Since porting this tool to Qt5 will not work as HUpnp project is unmaintained and its code is not ported to Qt5, even if we have tested some implementation from GitHub ported to Qt5. The goal of this project is to find a new way to restore this feature in digiKam core directly (not as a plugin), using a suitable solution to support UPNP/DLNA in the long term.<br />
<br />
'''Expected results''':<br />
*Review old plugin code DLNA Export. Review all required features to export digiKam contents through a DLNA server.<br />
*Implement a DLNA server in digiKam core to export photo and video hosted in physical and virtual collections. The server must have the capability to be restored at each digiKam session.<br />
*Implement the server configuration panel in digiKam setup.<br />
*Test the new implementation with DLNA compliant devices, as smartphones, tablets, TVs.<br />
*Test the new implementation under Windows and MacOS.<br />
*Write unit tests and documentation.<br />
<br />
'''Knowledge Prerequisite''': DLNA/UPNP, C++, and Qt5<br />
<br />
'''Mentor''': Gilles Caulier, Mohamed Anwer, and Maik Qualmann<br />
<br />
==== Project 2 : digiKam Database separation for similarity information ==== <br />
<br />
'''Brief Explanation''': digiKam has a feature to search items by similarity.This require to compute image fingerprints stored in main database.These data can take space on disk especially with huge collection. This can bloat the main database a lots and increase complexity to backup main database which include all main information for each item registered, as tags, label, comments, etc.<br />
As for Face management database, which store face histograms in a dedicated database, the similarity fingerprints must be stored in a dedicated database.<br />
<br />
'''Expected results''':<br />
*Review current whole database implementation including database schema hosted as XML.<br />
*Isolate tables and schemas relevant of similarity fingerprints.<br />
*Create a new schema for similarity features.<br />
*Create a new database access interface inspired of Faces Management database interface.<br />
*Implement code to drive fingerprints for Sqlite and MySQL/MariaDB.<br />
*Write unit tests for database interface and documentation.<br />
<br />
'''Knowledge Prerequisite''': Database, Sqlite, MySQL/MariaDB, C++, and Qt5<br />
<br />
'''Mentor''': Gilles Caulier, Mario Frank, and Maik Qualmann<br />
<br />
==== Project 3 : digiKam Web Services tools authentication with OAuth ==== <br />
<br />
'''Brief Explanation''': digiKam has many tools hosted in Kipi-plugins project dedicated to share items on web services, as Facebook, Google, Flickr, Dropbox, Imgur, etc...<br />
All tools use an older way to be authenticated through the web service using an external web browser instance to capture the token network session. This is a fastidious way to open a web service session.<br />
Only Imgur tool use an embedded OAuth authentification without a web browser instance through O2 library for Qt.<br />
The goal of this project is to port all others web service tools to O2 library API.<br />
<br />
'''Expected results''':<br />
*Review current implementation of Kipi-plugins tools and identificate all web service compatible with OAuth standard.<br />
*Plan the amount of work to port tools by order of complexity, and identify possible problems.<br />
*Port code for each tools step by step, by writing unit tests independently.<br />
*Test all tools with all use cases, depending of tool options.<br />
*Write documentation.<br />
<br />
'''Knowledge Prerequisite''': Network, OAuth, C++, and Qt5<br />
<br />
'''Mentor''': Maik Qualmann and Gilles Caulier<br />
<br />
=== Dolphin ===<br />
<br />
Dolphin is a lightweight file manager. It has been designed with ease of use and simplicity in mind, while still allowing flexibility and customisation.<br />
<br />
==== Project: Polkit support in KIO/Dolphin ====<br />
<br />
'''Brief explanation''': Dolphin currently doesn‘t support manipulating files owned by the root user. Many people work-around this limitation by starting Dolphin with root permissions, which is dangerous and not supported. The goal of this project is to provide a Dolphin implementation that opens a nice authentication dialog whenever a file needs to be deleted/moved/created in a folder owned by root. On Linux, this kind of authentication dialogs is provided through Polkit.<br />
<br />
Dolphin doesn‘t touch the filesystem directly, it uses KIO jobs for this task. This means that Polkit support needs to go in KIO itself. Note that this will benefit all KDE applications, not just Dolphin! This project is divided into two steps:<br />
<br />
* KDE provides the KAuth library to easily integrate Polkit in KDE projects. You will be expected to refactor the <tt>file</tt> ioslave with KAuth actions. More details in https://phabricator.kde.org/T5202<br />
* Once KIO is ready to rock with KAuth, Dolphin needs to relax the assumption that root-owned locations cannot be edited. See also https://phabricator.kde.org/T5203<br />
<br />
<br />
'''Expected results''': by the end of the summer, a user should be able to delete/move/create a file or a folder in a root-owned location (say, <tt>/opt</tt>) from Dolphin, after having typed their password in a polkit authentication dialog. Dolphin should also exit if it detects it has been started with root privileges.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt<br />
<br />
'''Mentor''': Elvis Angelaccio (IRC: eang on #kde-devel; mail: elvis.angelaccio@kde.org)<br />
<br />
=== Krita ===<br />
[http://www.krita.org Krita]: digital painting for artists. It support creating images from scratch from begin to end. Krita is a complex application and developers need to have a fair amount of experience in order to be able to do something.<br />
<br />
Krita is a widely used digital painting application for professional artists. Last year, Krita gained the ability to create hand-drawn 2D animations, among other new features. For this year, projects that the Krita team would be interested in include:<br />
<br />
<br />
==== Project: Integrate with share.krita.org ====<br />
<br />
'''Brief explanation''': Share.krita.org is a place where users can share krita scripts, images, brush packs and more. Krita used to use GHNS (Get Hot New Stuff) to integrate with the predecessor of share.krita.org, but that support has disappeared. This project has two parts: integrate with the knewstuff framework (or reimplement the protocol) and create a gui for sharing. The second part is improving the support for creating and editing bundles. Bundles can contain brushes, patterns, gradients and so on. Krita has basic support for creating and editing bundles, but it doesn't work very well in practice. For this part the student must work together with our UX design team to create a better gui design, then implement it. We also want to be able to publish images directly to share.krita.org<br />
<br />
'''Expected results''': by the end of the summer, a user should be able to create a bundle from resources registered with Krita, upload it to share.krita.org and install bundles that have been uploaded to share.krita.org.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud), Scott Petrovic (IRC: scottyp)<br />
<br />
==== Project: Extending Animation Support for curves ====<br />
<br />
'''Brief Explanation''': Last year, we added curves that could be applied to some properties of a layer, like opactity. We want the animation support extended by allowing users to place masks (filter masks, transformation masks, transparency masks) on the timeline and animate their properties using curves. Every property of a layer or mask placed on the timeline should be animatable.<br />
<br />
'''Expected results''':<br />
* Implementation of a gui for applying the curve settings to one or more properties of a mask or layer<br />
* Implementation of the actual rendering of the properties in the frames<br />
* Saving of these settings<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk_log)<br />
<br />
==== Project: Taking the Shape Brush to the next level ====<br />
'''Brief Explanation''': Krita has a number of interesting brush engines. One of them is the Shape Brush engine. Inspired by Alchemy, the shape brush "throws" shapes on the canvas. The current implementation is limited to geometric shapes. We want the brush engine to be extended to make it possible to load vector shapes defined as PDF or SVG and use those to draw on the canvas as well. Other improvements are the addition of Feathering, an outline mode, edge sharpening and background textures.<br />
<br />
'''Expected Results''': A revampted and exciting shapes brush<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Krita<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Lukas Tvrdy (IRC: LukasT)<br />
<br />
==== Project: Implementation of experimental OpenCL support for layer composition, filtering and painting ====<br />
'''Brief Explanation''': Krita in the current state relies purely on CPU power for vast majority of operations. Many of them can be offloaded onto GPU. This will improve performance due to high throughput of parallel operations and potentially will enable power-efficient port of Krita for mobile devices.<br />
<br />
'''Expected Results''': Architecture for OpenCL module which allows to interact with existing code seamlessly and preliminary support for GPU acceleration. Ideally, there should be a separate tool that paints directly on a OpenCL/OpenGL buffer stored in GPU memory. This buffer should be painted over the existing Krita canvas.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, OpenCL<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Implementation of experimental OpenGL-enabled brush ====<br />
'''Brief Explanation''': Krita in the current state relies purely on CPU power for vast majority of operations. Many of them can be offloaded onto GPU. This will improve performance due to high throughput of parallel operations and potentially will enable power-efficient port of Krita for mobile devices.<br />
<br />
'''Expected Results''': this is another experimental GPU-related project that allows the user to paint over the canvas purely on GPU. But this project relies on a different technology: openGL. There should be a special kind of layer that is stored in GPU memory and a special tool that is capable of painting over this layer. The tool should be able to use basic Krita brush presets (for the Pixel Brush engine) to paint over the canvas with the speed of lightning. To make this project easier, we put a limitation: this special layer should be on the top of the layers stack and therefore, just painted over the Krita openGL canvas.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, OpenGL<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Analysis of thoroughput of Krita Blending Modes and porting them to AVX2 ====<br />
'''Brief Explanation''': Blending modes is the hottest piece of code in Krita. It should process gigabytes of data per second, therefore it should be extremely optimized. Some of its parts are already optimized to use AVX instructions, but some (float16 color spaces) are not. We need to port the rest of the color spaces to AVX and make a research into the possibilities of using AXV2 instructions directly (int16 instructions). It might happen that you will have to extend VC library to get full AVX support.<br />
<br />
'''Expected Results''': Ported Float16 color spaces to AVX, extended Vc library to support int16 AVX2 instructions and adopted it in Krita<br />
<br />
'''Knowledge Prerequisite''': C++, SEE/AVX (read [http://www.intel.eu/content/www/eu/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html Intel's manual])<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Using cubic splines to create a very quick brush ====<br />
'''Brief Explanation''': This is a research project. The student should find a way to convert a usual (X,Y) coordinates into a curved coordinate system (l,h) associated with a cubic curve: l (position at the curve), h (distance to the curve). If we have such a mapping, we can create an extremely quick brush that is up to 10 times faster than the current Krita's Pixel Brush.<br />
<br />
'''Expected Results''': It is expected that the student has done at least a part of the research before doing the proposal and is kind of sure that such mapping is possible. If the mapping is impossible or not quick enough, then the student can change the project and implement a "quick brush" engine from [https://www.youtube.com/watch?v=WGFXdFkGjqI here].<br />
<br />
'''Knowledge Prerequisite''': C++, analytical geometry<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Partial canvas updates and region of interest (performance optimization for huge (20k+) canvases) ====<br />
'''Brief Explanation''': We already have an optimization for huge canvases, which is called Instant Preview. But it woks only when the user has the canvas zoomed out to fit the screen. There are some usecases, when the user wants to work with a small "working area" of a huge image and he doesn't care what happens with the rest of the image. This project is targeted to optimizer this case.<br />
<br />
'''Expected Results''': By the end of the summer we expect these features to be implemented:<br />
* Partial updates in openGL canvas. Right now we redraw all the image textures in every frame, which is not needed after porting to Qt5.<br />
* Region of Intereset (ROI) in KisImage. Updates should be reordered and the priority should be given to the areas that are currently visible to the user<br />
* Work Area Tool. The user is be able to define the area, where he would like to work in. The updates for other parts of the image are skipped until the user exits this special mode.<br />
* (if there is time) Optimize textures loading to use RIO as well. Theoretically, we can just skip uploading of the tiles that are not visible on the screen at the moment.<br />
<br />
'''Knowledge Prerequisite''': C++, OpenGL<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log), Julian Thijssen (IRC: Nimmy)<br />
<br />
==== Project: Lazy Selection Tool ====<br />
'''Brief Explanation''': We already have a Colorize Mask for filling line art. Now we need to extend it to support easy selection of the objects. The final tool should look something like Gimp's [https://www.youtube.com/watch?v=PzW8eJ_bDgA Foregroud Selection Tool] but quicker and more intuitive to use.<br />
<br />
'''Expected Results''': By the end of the summer we expect the selection tool to be merged into master and ready for use by the users.<br />
<br />
'''Knowledge Prerequisite''': C++, analytical geometry<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Add 3D Painting Assistants ====<br />
'''Brief explanation''': One of the more innovative features in Krita are the painting assistants. These are shapes overlaid on the canvas that the artist can use to help him achieve perspective, straight lines and other shapes freehand. For complex drawings it would be useful to be able to place 3D models on the canvas, position and scale them and use those as guides for drawing.<br />
<br />
'''Expected results''': by the end of the summer, 3D models should be shown on canvas as canvas decorations, using OpenGL in hidden-line wireframe mode. The models should be manipulated using on-canvas controls like other assistants. Magnetic snapping is an optional extra.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, OpenGL, Assimp<br />
<br />
'''Mentor''': Julian Thijssen (IRC: Nimmy)<br />
<br />
=== KStars ===<br />
<br />
[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time. <br />
<br />
==== Project: All-sky DSS/SDSS overlay ====<br />
'''Brief explanation''': KStars is a very good '''simulation''' of the night sky where it draws many objects including stars, planets, galaxies, nebulae and more. However, observers sometimes would like to see how the '''real''' sky looks at a particular location. Fortunately, we have [https://en.wikipedia.org/wiki/Digitized_Sky_Survey Digitized Sky Survey] that covers large swaths of the night sky. Second-generation DSS2 contains plates for several filters enabling full-color images to be overlayed unto KStars sky map.<br />
<br />
'''Expected results''': Ability to toggle DSS2 color overlay on and off covering all the sky. User can utilize the data either by downloading a specific set of files (expected to be a large data set), or by progressively downloading and caching the data files and displaying them as necessary given the zoom level. Student must optimize memory, bandwidth, and CPU usage throughout the whole process as it should not affect the performance of KStars. A complete API must be developed to enable customized overlay generation given equatorial coordinates, field of view, number of required components...etc so that it can be used for any tool within KStars. The user should be able to configure overlay parameters including transparency, online/offline modes..etc.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can supported addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Ekos Web Client ====<br />
'''Brief explanation''': Ekos is KStars premier tool for observatory control and automation. A web client port of Ekos is desired where it communicates with the underlying INDI servers and drivers without a direct dependency on thick desktop clients. Ekos includes many modules including setup, capture, focus, guide, align, and mount. All functionalities of the desktop Ekos client are expected in the web client version using Python+Ajax or similar framework technologies suitable for online dynamic driven clients.<br />
<br />
'''Expected results''': <br />
* Online Ekos web client with all the thick client feature set.<br />
* Authentication and Registration framework.<br />
* Support for notifications similar to desktop client.<br />
* Ajax dynamic driven interface with near real time updates for framing and captures.<br />
* Multi-user support with granular permissions.<br />
* Web based INDI Control Panel with all the driver controls as in the desktop version.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Django/Ajax or similar technology framework.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Improving Comets and new Meteor Showers component ====<br />
'''Brief explanation''': Currently KStars supports display of comets within the solar system. The data is fetched from JPL and computed to show the position, magnitude, sun-distance, among other parameters. However, there are many inconsistencies and incorrect results in the produced results making the comets data in KStars unreliable. Furthermore, comets are drawn as simple point objects and not as comets with physical nucleolus and tail. This reduces the realism of such object within KStars. Additionally, KStars only displays the current position of the comet in the sky, while it may be desirable for the user to see the expected path (arc) of the comet through out the night sky as a function of time. Finally, KStars does not show any information on meteor showers at all. A new meteors shower components needs to be developed. The component should display meteor shows using suitable animation and presents metadata to describe the event to the end user. Such information may include seeing quality (if affected by Moon presence), expected number of meteors per hours, constellation epicenter, rise/transit/set times..etc.<br />
<br />
'''Expected results''': <br />
* All the results are expected to work in both the KStars desktop version (Qt Widgets) and the KStars Lite mobile version (QML)<br />
* Fix all comets data to agree with JPL and Minor Planet Center sources.<br />
* Draw comet with approximate physical size for nucleus and tail that fits physical parameters. Option to draw exaggerated size for display purposes.<br />
* Draw current vs. predicted path (from the last few hours to the next few hours) of the comet.<br />
* Draw meteor showers animation from epicenter. Show metadata about the meteor shower and quality of observing.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, QML, solid mathematical background<br />
<br />
'''Mentor''': Akarsh Simha ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: kstar)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Akarsh Simha ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: kstar)<br />
<br />
=== Kopete ===<br />
<br />
Kopete is an instant messenger supporting AIM, Bonjour, Gadu-Gadu, GroupWise, ICQ, Jabber (XMPP, Google Talk, Facebook, ...), Meanwhile, QQ, Skype, Windows Live Messenger, WinPopup, Yahoo and more. It is designed to be a flexible and extensible multi-protocol system suitable for personal and enterprise use.<br />
<br />
Mailing list: kopete-devel@kde.org (archive at: lists.kde.org or gmane.org)<br />
<br />
==== Project: Jabber message archive ====<br />
<br />
Brief explanation: When you use more jabber clients and you want to have full chat history in all clients, you need to synchronize message history between all clients. To make it easier for different jabber clients, there is jabber protocol extension for storing history directly on jabber servers which allows clients to download (missing) messages:<br />
<br />
XEP-0136: Message Archiving<br />
<br />
XEP-0313: Message Archive Management<br />
<br />
Expected results: Working support for XEP-0136 or XEP-0313<br />
<br />
Knowledge Prerequisite: C++/Qt, Jabber protocol<br />
<br />
Mentor: Pali Rohár <pali.rohar@gmail.com>, Pali on #kopete<br />
<br />
<br />
==== Project: IRC protocol ====<br />
<br />
Brief explanation: Kopete KDE3 version had plugin for IRC protocol. Porting that IRC plugin to new KDE versions was never finished and Kopete does not have working support for IRC yet.<br />
<br />
Expected results: Restore IRC protocol into Kopete<br />
<br />
Knowledge Prerequisite: C++/Qt, IRC protocol<br />
<br />
Mentor: Pali Rohár <pali.rohar@gmail.com>, Pali on #kopete<br />
<br />
<br />
==== Project: Chat history improvements ====<br />
<br />
Brief explanation: Kopete can archive chat history via built-in plugin. There are more plugins which implement such archive functionality and use different storages. There are also problems with API how chat history is used... This project is for improving status of chat history in Kopete.<br />
<br />
Expected results: Come up with idea 1) what to store from chat session 2) how to store it 3) where to store it and 4) how to provide chat history to user. Part of result is of course full implementation and ideally also conversion from current history plugins.<br />
<br />
Knowledge Prerequisite: C++/Qt, some knowledge of storing chat history<br />
<br />
Mentor: Pali Rohár <pali.rohar@gmail.com>, Pali on #kopete<br />
<br />
Note: Part of GSoC proposal must be ideas or solutions to these problems. I suggest to read mailing list discussion from last year.<br />
<br />
=== Marble ===<br />
The [https://marble.kde.org/ Marble] community combines free data and open source to produce awesome map software. Find your way and explore the world!<br />
<br />
==== Project: Marble Indoor Maps ====<br />
'''Brief Explanation''': [https://play.google.com/store/apps/details?id=org.kde.marble.maps Marble Maps] brings the highly detailed OpenStreetMap to your Android devices. It features a crisp, beautiful map with an intuitive user interface. This project is about extending it to support indoor maps (e.g. selecting and showing different levels of a building).<br />
<br />
'''Expected Results''':<br />
* Marble extracts [https://wiki.openstreetmap.org/wiki/Simple_Indoor_Tagging indoor related OSM tags]<br />
* Floor and connection elements (e.g. room, wall, door, staircase) are shown in the map. Similar to [http://openlevelup.net/?lat=42.80043008955188&lon=-1.6367550194263458&zoom=19&tiles=0&level=0&transcend=1&unrendered=0&buildings=0&photos=0&notes=0 OpenLevelUp].<br />
* User interface to select floor levels and filtering of the map view based on the active floor level<br />
* Automatic adjustment of the floor level user interface (hide it when there are no indoor map elements in the view, select minimum/maximum floor level automatically)<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, optionally [https://wiki.openstreetmap.org/wiki/Map_Features OSM] and [https://doc.qt.io/qt-5/qtqml-index.html QML].<br />
<br />
'''Mentor''': Dennis Nienhüser (IRC: Earthwings in #marble)<br />
<br />
'''Interested?''' Please read the [https://community.kde.org/GSoC#Instructions_for_students general KDE instructions], try to [https://community.kde.org/Marble/AndroidCompiling build Marble Maps on your own], have a look at our [https://phabricator.kde.org/project/view/38/ task board] and contact your prospective mentor, Dennis.<br />
<br />
==== Project: Material Marble Maps ====<br />
'''Brief Explanation''': [https://play.google.com/store/apps/details?id=org.kde.marble.maps Marble Maps] brings the highly detailed OpenStreetMap to your Android devices. It features a crisp, beautiful map with an intuitive user interface. This project is about redesigning it in [https://material.io/ Material Design].<br />
<br />
'''Expected Results''':<br />
* Marble Maps on Android follows the Google [https://material.io/ Material Design] Guidelines<br />
* Switch to the [https://doc-snapshots.qt.io/qt5-5.8/qtquickcontrols2-material.html Qt Material Style] as a base<br />
* Incorporate useful ideas and patterns from other resources, e.g. [http://papyros.io/qml-material/ Papyros]<br />
<br />
'''Knowledge Prerequisite''':<br />
* [https://doc.qt.io/qt-5/qtqml-index.html QML]. A background in design and basic knowledge in C++ and Qt will be helpful.<br />
<br />
'''Mentor''': Dennis Nienhüser (IRC: Earthwings in #marble)<br />
<br />
'''Interested?''' Please read the [https://community.kde.org/GSoC#Instructions_for_students general KDE instructions], try to [https://community.kde.org/Marble/AndroidCompiling build Marble Maps on your own], have a look at our [https://phabricator.kde.org/project/view/38/ task board] and contact your prospective mentor, Dennis.<br />
<br />
=== GCompris ===<br />
==== Project: finishing started activities ====<br />
'''Brief explanation''': GCompris is a an educational software suite comprising of numerous activities for children aged 2 to 10. Originally written in Gtk+ it's development team started to rewrite it from scratch in Qt Quick.<br />
<br />
'''Expected results''':<br />
The aim of this year is to complete and getting merged activities that were started but have not been finished.<br />
First phase is to check which activities can be continued, what is missing to be integrated (on code and graphic side) and then to complete them. You can find at https://cgit.kde.org/gcompris.git/refs/heads the list of the current branches (some of them need to be dropped, so contact us before starting working on one of them) and more information on <br />
https://phabricator.kde.org/project/profile/1/.<br />
<br />
The second aim is to refine current activities: some can be improved, whether improving the animation, adding sounds, tutorials... Some tasks already defined in the improvement section of phabricator are quite interesting.<br />
<br />
'''Knowledge Prerequisite''': By the start of GSoC you should<br />
<br />
Be interested in children’s education<br />
<br />
Be familiar with GCompris concept and content<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough)<br />
<br />
Be able to build the Qt Quick version of GCompris<br />
<br />
'''Application guide''':<br />
Continuing an activity already started or rewriting from scratch is something you have to check before writing your application. Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/An_exercise_for_new_contributors.<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Johnny Jazeix (IRC: JohnnyJ), Emmanuel Charruau (IRC: Allon1)<br />
<br />
=== LabPlot ===<br />
==== Project: Statistical analysis ====<br />
Currently LabPlot has only basic support for statistical data analysis by providing some basic measures of desciptive statistics in the spreadsheet. The goal of the project is to add more statistics relevant features (hypothesis tests, cluster analysis, ets.) to LabPlot.<br />
<br />
'''Expected results''':<br />
* evaluate available statistical open-source libraries which can be used for this project<br />
* determine a reasonable set of features and algorithms that can be added to LabPlot, compare here with other similar projects, and implement them<br />
* for the visualization of results of statictical calculations, implement new kind of reports for this, comparable to other similar projects<br />
<br />
'''Knowledge Prerequisite''':<br />
C++, Qt, basic statistics knowledge<br />
<br />
'''Mentor''': Alexander Semke and Stefan Gerlach<br />
<br />
<br />
==== Project: plotting of real-time data ====<br />
Currently, the visualization and analysis of data is only possible on static data that was imported into or generated in one of LabPlot's data containers. The goal of the project is to add support for streaming data.<br />
<br />
'''Expected results''':<br />
* adjust and extend the data containers, analysis algorithms and the plotting part of the application to support streaming data<br />
* add dialogs and wizards to configure this new kind of data sources<br />
<br />
'''Knowledge Prerequisite''':<br />
C++, Qt<br />
<br />
'''Mentor''': Stefan Gerlach and Alexander Semke<br />
<br />
=== Minuet (Software for Music Education) ===<br />
<br />
Minuet is a member of KDE-edu suite of educational applications and was first released in KDE Applications 16.04. Minuet aims at supporting students and teachers in many aspects of music education, such as ear training, first-sight reading, solfa, scales, rhythm, harmony, and improvisation. Minuet makes extensive use of MIDI capabilities to provide a full-fledged set of features regarding volume, tempo, and pitch changes, which makes Minuet a valuable tool for both novice and experienced musicians. Minuet features a rich set of ear training exercises and new ones can be seamlessly added in order to extend its functionalities and adapt it to several music education contexts.<br />
<br />
Minuet currently runs on Linux, Android ([https://ayushashah.wordpress.com/2016/08/20/it-only-takes-a-minuet-to-change-your-life/ Ayush Shah's 2016 Google Summer of Code project]), and Windows.<br />
<br />
Additional Information:<br />
* [https://minuet.kde.org Website (minuet.kde.org)]<br />
* [http://sandroandrade.org/tag/minuet/ Blog posts]<br />
* [https://www.youtube.com/watch?v=IxmyevpFErU (watch in HD) Demonstration video]<br />
* IRC channel: #kde-edu (nickname: sandroandrade)<br />
* [https://mail.kde.org/mailman/listinfo/kde-edu Mailing list]<br />
* Contacts:<br />
** sandroandrade AT kde DOT org<br />
** [https://t.me/andradesandro Telegram]<br />
<br />
===== Project: Singing and Clapping Capabilities =====<br />
<br />
'''Brief explanation''': current Minuet human-interaction mechanism comes down to the use of mouse clicks to point out the answer for a given ear training exercise. Obviously, singers and drummers/percussionists wouldn't have any valuable benefit of using Minuet unless it provides some mechanism to get exercises' answer from singing and clapping data captured from a computer-connected microphone. This project aims at implementing the features for recognizing pitch from voice data and hits from clapping data, both acquired from the computer microphone.<br />
<br />
'''Expected results''':<br />
* A reliable (to some extent) mechanism for detecting pitch from voice data.<br />
* A reliable mechanism for detecting clapping from audio data.<br />
* Both mechanisms may require calibration.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++/Qt/QML.<br />
* Digital Signal Processing.<br />
<br />
'''Mentor''': Sandro Andrade (IRC: sandroandrade)<br />
<br />
===== Project: Chord-melody Arrangement Generator =====<br />
<br />
'''Brief explanation''': Chord melody is an music arrangement style, generally adopted by guitarists, where melody is play alongside with some pieces of harmony (example [https://www.youtube.com/watch?v=2OX96DaOVV8 here]). Whilst the generation of chord melody arrangements is quite a creative task, some basic rules enables the implementation of automatic generators with satisfactory and interesting results. The generator works by receiving two input data: the melody and the harmonic progression (sequence of chords) and then generates a chord melody arrangement for such a song. The generation should consider parameters such as maximum distance between fingers, use of not of tensions, and others. Input and output can be handled for example by using the [https://www.musicxml.com/ MusicXML] format. Displaying the arrangement in a spreadsheet is also expected (spreadsheet support in Minuet is in progress).<br />
<br />
'''Expected results''':<br />
* Design and implementation of MusicXML I/O capabilities in Minuet (libraries already available).<br />
* Design and implementation of the chord melody generator<br />
* Spreadsheet integration for exhibiting the final generated arrangement.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++/Qt/QML.<br />
* Minimal background regarding music harmony.<br />
<br />
'''Mentor''': Sandro Andrade (IRC: sandroandrade)<br />
<br />
===== Project: Multiple-Instrument View Framework =====<br />
<br />
'''Brief explanation''': Minuet is currently able to visually represent intervals, chords, and scales only on the piano keyboard. Supporting other musical instruments, with the accurate handling of their particular idiosyncrasies, is a feature of paramount importance. Aspects such as fingering and execution techniques are highly dependent on which musical instrument they were created to. A flexible architecture should be designed to allow the seamless integration of new musical instruments as Minuet plugins. Minuet's core should not only provide all information generally required by all musical instruments, but also support the handling of instrument-specific information, when available.<br />
<br />
'''Expected results''':<br />
* Design and implementation of a multiple-instrument visualization framework.<br />
* Refactoring of piano keyboard view as a framework plugin.<br />
* Implementation of a framework plugin for a new instrument (e.g. guitar or bass).<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++/Qt/QML.<br />
* Minimal music background for a instrument other than the piano.<br />
<br />
'''Mentor''': Sandro Andrade (IRC: sandroandrade)<br />
<br />
===Trojitá===<br />
<br />
[http://trojita.flaska.net/ Trojitá] is a fast IMAP e-mail client. Since late 2012, it is a part of KDE's extragear. The project focuses on delivering a usable, fast, standards-compliant, cross-platform and reliable e-mail client which can scale from cell phones to huge e-mail archives without annoying slowdowns.<br />
<br />
==== Project: Multiaccount support ====<br />
<br />
'''Brief explanation:'''<br />
Trojitá's GUI only shows one IMAP account at once. The scope of this task is to analyze what needs to be done, and implement the required changes for making it possible to show multiple IMAP accounts. General bugfixes are expected in the rest of the time.<br />
<br />
'''Expected results:''' Full support for multiple IMAP accounts, including unit test coverage.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, contributing to Trojitá prior to GSoC<br />
<br />
'''Mentor:''' Jan Kundrát <jkt@kde.org><br />
<br />
===KDevelop===<br />
==== Project: Improve QML/JS integration ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Improve QML/JS integration: Module path dialog, proper handling of QRC imports, navigation for 'import ...' lines, etc.<br />
<br />
'''Knowledge Prerequisite:'''<br />
QML, Qt and C++.<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Go Integration ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Proper semantic highlighting, code completion and projects integration.<br />
<br />
'''Knowledge Prerequisite:'''<br />
Go, C++, some Qt<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Rust integration ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Proper semantic highlighting, code completion and projects integration.<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Windows Debugger integration (CDB) ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Make it possible to debug applications using CDB. That is managing breakpoints and analyzing the state when the debug session is paused.<br />
<br />
'''Knowledge Prerequisite:'''<br />
CDB, C++, some Qt<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Bundling systems integration in KDevelop====<br />
<br />
'''Brief explanation:'''<br />
Nowadays these systems' adoption is more and more common in GNU/Linux, it would be interesting to integrate the development of applications under these systems.<br />
This project could address Flatpak, Snap and/or Docker systems.<br />
<br />
'''Expected results:''' <br />
Full project manager integration, application execution and debugging.<br />
<br />
'''Knowledge Prerequisite:'''<br />
C++, some Qt, experience with the implemented systems would be welcome.<br />
<br />
'''Mentor:''' Aleix</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2017/Ideas&diff=76159GSoC/2017/Ideas2017-02-05T13:17:13Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:GSoC2016Logo.jpg |400px|thumb|right|GSoC 2016 logo]]<br />
See also: [[../../|GSoc Instructions]], [[../../2016/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Being accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or other image'''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor)<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
===digiKam===<br />
digiKam is an advanced digital photo management application for Linux, Windows, and MacOS.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://plus.google.com/+digikam Google+ page]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
<br />
==== Project 1 : digiKam database export to remote devices ====<br />
'''Brief Explanation''': In the past, Kipi-plugins provided a way to export KIPI host data to DLNA/UPNP by a plugin using HUpnp library for Qt. Since porting this tool to Qt5 will not work as HUpnp project is unmaintained and its code is not ported to Qt5, even if we have tested some implementation from GitHub ported to Qt5. The goal of this project is to find a new way to restore this feature in digiKam core directly (not as a plugin), using a suitable solution to support UPNP/DLNA in the long term.<br />
<br />
'''Expected results''':<br />
*Review old plugin code DLNA Export. Review all required features to export digiKam contents through a DLNA server.<br />
*Implement a DLNA server in digiKam core to export photo and video hosted in physical and virtual collections. The server must have the capability to be restored at each digiKam session.<br />
*Implement the server configuration panel in digiKam setup.<br />
*Test the new implementation with DLNA compliant devices, as smartphones, tablets, TVs.<br />
*Test the new implementation under Windows and MacOS.<br />
*Write unit tests and documentation.<br />
<br />
'''Knowledge Prerequisite''': DLNA/UPNP, C++, and Qt5<br />
<br />
'''Mentor''': Gilles Caulier, Mohamed Anwer, and Maik Qualmann<br />
<br />
�<br />
==== Project 2 : digiKam Database separation for similarity information ==== <br />
'''Brief Explanation''': digiKam has a feature to search items by similarity.This require to compute image fingerprints stored in main database.These data can take space on disk especially with huge collection. This can bloat the main database a lots and increase complexity to backup main database which include all main information for each item registered, as tags, label, comments, etc.<br />
As for Face management database, which store face histograms in a dedicated database, the similarity fingerprints must be stored in a dedicated database.<br />
<br />
'''Expected results''':<br />
*Review current whole database implementation including database schema hosted as XML.<br />
*Isolate tables and schemas relevant of similarity fingerprints.<br />
*Create a new schema for similarity features.<br />
*Create a new database access interface inspired of Faces Management database interface.<br />
*Implement code to drive fingerprints for Sqlite and MySQL/MariaDB.<br />
*Write unit tests for database interface and documentation.<br />
<br />
'''Knowledge Prerequisite''': Database, Sqlite, MySQL/MariaDB, C++, and Qt5<br />
<br />
'''Mentor''': Gilles Caulier, Mario Frank, and Maik Qualmann<br />
<br />
�<br />
==== Project 3 : digiKam Web Services tools authentication with OAuth ==== <br />
'''Brief Explanation''': digiKam has many tools hosted in Kipi-plugins project dedicated to share items on web services, as Facebook, Google, Flickr, Dropbox, Imgur, etc...<br />
All tools use an older way to be authenticated through the web service using an external web browser instance to capture the token network session. This is a fastidious way to open a web service session.<br />
Only Imgur tool use an embedded OAuth authentification without a web browser instance through O2 library for Qt.<br />
The goal of this project is to port all others web service tools to O2 library API.<br />
<br />
'''Expected results''':<br />
*Review current implementation of Kipi-plugins tools and identificate all web service compatible with OAuth standard.<br />
*Plan the amount of work to port tools by order of complexity, and identify possible problems.<br />
*Port code for each tools step by step, by writing unit tests independently.<br />
*Test all tools with all use cases, depending of tool options.<br />
*Write documentation.<br />
<br />
'''Knowledge Prerequisite''': Network, OAuth, C++, and Qt5<br />
<br />
'''Mentor''': Maik Qualmann and Gilles Caulier<br />
<br />
=== Dolphin ===<br />
<br />
Dolphin is a lightweight file manager. It has been designed with ease of use and simplicity in mind, while still allowing flexibility and customisation.<br />
<br />
==== Project: Polkit support in KIO/Dolphin ====<br />
<br />
'''Brief explanation''': Dolphin currently doesn‘t support manipulating files owned by the root user. Many people work-around this limitation by starting Dolphin with root permissions, which is dangerous and not supported. The goal of this project is to provide a Dolphin implementation that opens a nice authentication dialog whenever a file needs to be deleted/moved/created in a folder owned by root. On Linux, this kind of authentication dialogs is provided through Polkit.<br />
<br />
Dolphin doesn‘t touch the filesystem directly, it uses KIO jobs for this task. This means that Polkit support needs to go in KIO itself. Note that this will benefit all KDE applications, not just Dolphin! This project is divided into two steps:<br />
<br />
* KDE provides the KAuth library to easily integrate Polkit in KDE projects. You will be expected to refactor the <tt>file</tt> ioslave with KAuth actions. More details in https://phabricator.kde.org/T5202<br />
* Once KIO is ready to rock with KAuth, Dolphin needs to relax the assumption that root-owned locations cannot be edited. See also https://phabricator.kde.org/T5203<br />
<br />
<br />
'''Expected results''': by the end of the summer, a user should be able to delete/move/create a file or a folder in a root-owned location (say, <tt>/opt</tt>) from Dolphin, after having typed their password in a polkit authentication dialog. Dolphin should also exit if it detects it has been started with root privileges.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt<br />
<br />
'''Mentor''': Elvis Angelaccio (IRC: eang on #kde-devel; mail: elvis.angelaccio@kde.org)<br />
<br />
=== Krita ===<br />
[http://www.krita.org Krita]: digital painting for artists. It support creating images from scratch from begin to end. Krita is a complex application and developers need to have a fair amount of experience in order to be able to do something.<br />
<br />
Krita is a widely used digital painting application for professional artists. Last year, Krita gained the ability to create hand-drawn 2D animations, among other new features. For this year, projects that the Krita team would be interested in include:<br />
<br />
<br />
==== Project: Integrate with share.krita.org ====<br />
<br />
'''Brief explanation''': Share.krita.org is a place where users can share krita scripts, images, brush packs and more. Krita used to use GHNS (Get Hot New Stuff) to integrate with the predecessor of share.krita.org, but that support has disappeared. This project has two parts: integrate with the knewstuff framework (or reimplement the protocol) and create a gui for sharing. The second part is improving the support for creating and editing bundles. Bundles can contain brushes, patterns, gradients and so on. Krita has basic support for creating and editing bundles, but it doesn't work very well in practice. For this part the student must work together with our UX design team to create a better gui design, then implement it. We also want to be able to publish images directly to share.krita.org<br />
<br />
'''Expected results''': by the end of the summer, a user should be able to create a bundle from resources registered with Krita, upload it to share.krita.org and install bundles that have been uploaded to share.krita.org.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud), Scott Petrovic (IRC: scottyp)<br />
<br />
==== Project: Extending Animation Support for curves ====<br />
<br />
'''Brief Explanation''': Last year, we added curves that could be applied to some properties of a layer, like opactity. We want the animation support extended by allowing users to place masks (filter masks, transformation masks, transparency masks) on the timeline and animate their properties using curves. Every property of a layer or mask placed on the timeline should be animatable.<br />
<br />
'''Expected results''':<br />
* Implementation of a gui for applying the curve settings to one or more properties of a mask or layer<br />
* Implementation of the actual rendering of the properties in the frames<br />
* Saving of these settings<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk_log)<br />
<br />
==== Project: Taking the Shape Brush to the next level ====<br />
'''Brief Explanation''': Krita has a number of interesting brush engines. One of them is the Shape Brush engine. Inspired by Alchemy, the shape brush "throws" shapes on the canvas. The current implementation is limited to geometric shapes. We want the brush engine to be extended to make it possible to load vector shapes defined as PDF or SVG and use those to draw on the canvas as well. Other improvements are the addition of Feathering, an outline mode, edge sharpening and background textures.<br />
<br />
'''Expected Results''': A revampted and exciting shapes brush<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Krita<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Lukas Tvrdy (IRC: LukasT)<br />
<br />
==== Project: Implementation of experimental OpenCL support for layer composition, filtering and painting ====<br />
'''Brief Explanation''': Krita in the current state relies purely on CPU power for vast majority of operations. Many of them can be offloaded onto GPU. This will improve performance due to high throughput of parallel operations and potentially will enable power-efficient port of Krita for mobile devices.<br />
<br />
'''Expected Results''': Architecture for OpenCL module which allows to interact with existing code seamlessly and preliminary support for GPU acceleration. Ideally, there should be a separate tool that paints directly on a OpenCL/OpenGL buffer stored in GPU memory. This buffer should be painted over the existing Krita canvas.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, OpenCL<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Implementation of experimental OpenGL-enabled brush ====<br />
'''Brief Explanation''': Krita in the current state relies purely on CPU power for vast majority of operations. Many of them can be offloaded onto GPU. This will improve performance due to high throughput of parallel operations and potentially will enable power-efficient port of Krita for mobile devices.<br />
<br />
'''Expected Results''': this is another experimental GPU-related project that allows the user to paint over the canvas purely on GPU. But this project relies on a different technology: openGL. There should be a special kind of layer that is stored in GPU memory and a special tool that is capable of painting over this layer. The tool should be able to use basic Krita brush presets (for the Pixel Brush engine) to paint over the canvas with the speed of lightning. To make this project easier, we put a limitation: this special layer should be on the top of the layers stack and therefore, just painted over the Krita openGL canvas.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, OpenGL<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Analysis of thoroughput of Krita Blending Modes and porting them to AVX2 ====<br />
'''Brief Explanation''': Blending modes is the hottest piece of code in Krita. It should process gigabytes of data per second, therefore it should be extremely optimized. Some of its parts are already optimized to use AVX instructions, but some (float16 color spaces) are not. We need to port the rest of the color spaces to AVX and make a research into the possibilities of using AXV2 instructions directly (int16 instructions). It might happen that you will have to extend VC library to get full AVX support.<br />
<br />
'''Expected Results''': Ported Float16 color spaces to AVX, extended Vc library to support int16 AVX2 instructions and adopted it in Krita<br />
<br />
'''Knowledge Prerequisite''': C++, SEE/AVX (read [http://www.intel.eu/content/www/eu/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html Intel's manual])<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Using cubic splines to create a very quick brush ====<br />
'''Brief Explanation''': This is a research project. The student should find a way to convert a usual (X,Y) coordinates into a curved coordinate system (l,h) associated with a cubic curve: l (position at the curve), h (distance to the curve). If we have such a mapping, we can create an extremely quick brush that is up to 10 times faster than the current Krita's Pixel Brush.<br />
<br />
'''Expected Results''': It is expected that the student has done at least a part of the research before doing the proposal and is kind of sure that such mapping is possible. If the mapping is impossible or not quick enough, then the student can change the project and implement a "quick brush" engine from [https://www.youtube.com/watch?v=WGFXdFkGjqI here].<br />
<br />
'''Knowledge Prerequisite''': C++, analytical geometry<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Partial canvas updates and region of interest (performance optimization for huge (20k+) canvases) ====<br />
'''Brief Explanation''': We already have an optimization for huge canvases, which is called Instant Preview. But it woks only when the user has the canvas zoomed out to fit the screen. There are some usecases, when the user wants to work with a small "working area" of a huge image and he doesn't care what happens with the rest of the image. This project is targeted to optimizer this case.<br />
<br />
'''Expected Results''': By the end of the summer we expect these features to be implemented:<br />
* Partial updates in openGL canvas. Right now we redraw all the image textures in every frame, which is not needed after porting to Qt5.<br />
* Region of Intereset (ROI) in KisImage. Updates should be reordered and the priority should be given to the areas that are currently visible to the user<br />
* Work Area Tool. The user is be able to define the area, where he would like to work in. The updates for other parts of the image are skipped until the user exits this special mode.<br />
* (if there is time) Optimize textures loading to use RIO as well. Theoretically, we can just skip uploading of the tiles that are not visible on the screen at the moment.<br />
<br />
'''Knowledge Prerequisite''': C++, OpenGL<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log), Julian Thijssen (IRC: Nimmy)<br />
<br />
==== Project: Lazy Selection Tool ====<br />
'''Brief Explanation''': We already have a Colorize Mask for filling line art. Now we need to extend it to support easy selection of the objects. The final tool should look something like Gimp's [https://www.youtube.com/watch?v=PzW8eJ_bDgA Foregroud Selection Tool] but quicker and more intuitive to use.<br />
<br />
'''Expected Results''': By the end of the summer we expect the selection tool to be merged into master and ready for use by the users.<br />
<br />
'''Knowledge Prerequisite''': C++, analytical geometry<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Add 3D Painting Assistants ====<br />
'''Brief explanation''': One of the more innovative features in Krita are the painting assistants. These are shapes overlaid on the canvas that the artist can use to help him achieve perspective, straight lines and other shapes freehand. For complex drawings it would be useful to be able to place 3D models on the canvas, position and scale them and use those as guides for drawing.<br />
<br />
'''Expected results''': by the end of the summer, 3D models should be shown on canvas as canvas decorations, using OpenGL in hidden-line wireframe mode. The models should be manipulated using on-canvas controls like other assistants. Magnetic snapping is an optional extra.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, OpenGL, Assimp<br />
<br />
'''Mentor''': Julian Thijssen (IRC: Nimmy)<br />
<br />
=== KStars ===<br />
<br />
[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time. <br />
<br />
==== Project: All-sky DSS/SDSS overlay ====<br />
'''Brief explanation''': KStars is a very good '''simulation''' of the night sky where it draws many objects including stars, planets, galaxies, nebulae and more. However, observers sometimes would like to see how the '''real''' sky looks at a particular location. Fortunately, we have [https://en.wikipedia.org/wiki/Digitized_Sky_Survey Digitized Sky Survey] that covers large swaths of the night sky. Second-generation DSS2 contains plates for several filters enabling full-color images to be overlayed unto KStars sky map.<br />
<br />
'''Expected results''': Ability to toggle DSS2 color overlay on and off covering all the sky. User can utilize the data either by downloading a specific set of files (expected to be a large data set), or by progressively downloading and caching the data files and displaying them as necessary given the zoom level. Student must optimize memory, bandwidth, and CPU usage throughout the whole process as it should not affect the performance of KStars. A complete API must be developed to enable customized overlay generation given equatorial coordinates, field of view, number of required components...etc so that it can be used for any tool within KStars. The user should be able to configure overlay parameters including transparency, online/offline modes..etc.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can supported addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Ekos Web Client ====<br />
'''Brief explanation''': Ekos is KStars premier tool for observatory control and automation. A web client port of Ekos is desired where it communicates with the underlying INDI servers and drivers without a direct dependency on thick desktop clients. Ekos includes many modules including setup, capture, focus, guide, align, and mount. All functionalities of the desktop Ekos client are expected in the web client version using Python+Ajax or similar framework technologies suitable for online dynamic driven clients.<br />
<br />
'''Expected results''': <br />
* Online Ekos web client with all the thick client feature set.<br />
* Authentication and Registration framework.<br />
* Support for notifications similar to desktop client.<br />
* Ajax dynamic driven interface with near real time updates for framing and captures.<br />
* Multi-user support with granular permissions.<br />
* Web based INDI Control Panel with all the driver controls as in the desktop version.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Django/Ajax or similar technology framework.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Improving Comets and new Meteor Showers component ====<br />
'''Brief explanation''': Currently KStars supports display of comets within the solar system. The data is fetched from JPL and computed to show the position, magnitude, sun-distance, among other parameters. However, there are many inconsistencies and incorrect results in the produced results making the comets data in KStars unreliable. Furthermore, comets are drawn as simple point objects and not as comets with physical nucleolus and tail. This reduces the realism of such object within KStars. Additionally, KStars only displays the current position of the comet in the sky, while it may be desirable for the user to see the expected path (arc) of the comet through out the night sky as a function of time. Finally, KStars does not show any information on meteor showers at all. A new meteors shower components needs to be developed. The component should display meteor shows using suitable animation and presents metadata to describe the event to the end user. Such information may include seeing quality (if affected by Moon presence), expected number of meteors per hours, constellation epicenter, rise/transit/set times..etc.<br />
<br />
'''Expected results''': <br />
* All the results are expected to work in both the KStars desktop version (Qt Widgets) and the KStars Lite mobile version (QML)<br />
* Fix all comets data to agree with JPL and Minor Planet Center sources.<br />
* Draw comet with approximate physical size for nucleus and tail that fits physical parameters. Option to draw exaggerated size for display purposes.<br />
* Draw current vs. predicted path (from the last few hours to the next few hours) of the comet.<br />
* Draw meteor showers animation from epicenter. Show metadata about the meteor shower and quality of observing.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, QML, solid mathematical background<br />
<br />
'''Mentor''': Akarsh Simha ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: kstar)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Akarsh Simha ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: kstar)<br />
<br />
=== Kopete ===<br />
<br />
Kopete is an instant messenger supporting AIM, Bonjour, Gadu-Gadu, GroupWise, ICQ, Jabber (XMPP, Google Talk, Facebook, ...), Meanwhile, QQ, Skype, Windows Live Messenger, WinPopup, Yahoo and more. It is designed to be a flexible and extensible multi-protocol system suitable for personal and enterprise use.<br />
<br />
Mailing list: kopete-devel@kde.org (archive at: lists.kde.org or gmane.org)<br />
<br />
==== Project: Jabber message archive ====<br />
<br />
Brief explanation: When you use more jabber clients and you want to have full chat history in all clients, you need to synchronize message history between all clients. To make it easier for different jabber clients, there is jabber protocol extension for storing history directly on jabber servers which allows clients to download (missing) messages:<br />
<br />
XEP-0136: Message Archiving<br />
<br />
XEP-0313: Message Archive Management<br />
<br />
Expected results: Working support for XEP-0136 or XEP-0313<br />
<br />
Knowledge Prerequisite: C++/Qt, Jabber protocol<br />
<br />
Mentor: Pali Rohár <pali.rohar@gmail.com>, Pali on #kopete<br />
<br />
<br />
==== Project: IRC protocol ====<br />
<br />
Brief explanation: Kopete KDE3 version had plugin for IRC protocol. Porting that IRC plugin to new KDE versions was never finished and Kopete does not have working support for IRC yet.<br />
<br />
Expected results: Restore IRC protocol into Kopete<br />
<br />
Knowledge Prerequisite: C++/Qt, IRC protocol<br />
<br />
Mentor: Pali Rohár <pali.rohar@gmail.com>, Pali on #kopete<br />
<br />
<br />
==== Project: Chat history improvements ====<br />
<br />
Brief explanation: Kopete can archive chat history via built-in plugin. There are more plugins which implement such archive functionality and use different storages. There are also problems with API how chat history is used... This project is for improving status of chat history in Kopete.<br />
<br />
Expected results: Come up with idea 1) what to store from chat session 2) how to store it 3) where to store it and 4) how to provide chat history to user. Part of result is of course full implementation and ideally also conversion from current history plugins.<br />
<br />
Knowledge Prerequisite: C++/Qt, some knowledge of storing chat history<br />
<br />
Mentor: Pali Rohár <pali.rohar@gmail.com>, Pali on #kopete<br />
<br />
Note: Part of GSoC proposal must be ideas or solutions to these problems. I suggest to read mailing list discussion from last year.<br />
<br />
=== Marble ===<br />
The [https://marble.kde.org/ Marble] community combines free data and open source to produce awesome map software. Find your way and explore the world!<br />
<br />
==== Project: Marble Indoor Maps ====<br />
'''Brief Explanation''': [https://play.google.com/store/apps/details?id=org.kde.marble.maps Marble Maps] brings the highly detailed OpenStreetMap to your Android devices. It features a crisp, beautiful map with an intuitive user interface. This project is about extending it to support indoor maps (e.g. selecting and showing different levels of a building).<br />
<br />
'''Expected Results''':<br />
* Marble extracts [https://wiki.openstreetmap.org/wiki/Simple_Indoor_Tagging indoor related OSM tags]<br />
* Floor and connection elements (e.g. room, wall, door, staircase) are shown in the map. Similar to [http://openlevelup.net/?lat=42.80043008955188&lon=-1.6367550194263458&zoom=19&tiles=0&level=0&transcend=1&unrendered=0&buildings=0&photos=0&notes=0 OpenLevelUp].<br />
* User interface to select floor levels and filtering of the map view based on the active floor level<br />
* Automatic adjustment of the floor level user interface (hide it when there are no indoor map elements in the view, select minimum/maximum floor level automatically)<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, optionally [https://wiki.openstreetmap.org/wiki/Map_Features OSM] and [https://doc.qt.io/qt-5/qtqml-index.html QML].<br />
<br />
'''Mentor''': Dennis Nienhüser (IRC: Earthwings in #marble)<br />
<br />
'''Interested?''' Please read the [https://community.kde.org/GSoC#Instructions_for_students general KDE instructions], try to [https://community.kde.org/Marble/AndroidCompiling build Marble Maps on your own], have a look at our [https://phabricator.kde.org/project/view/38/ task board] and contact your prospective mentor, Dennis.<br />
<br />
==== Project: Material Marble Maps ====<br />
'''Brief Explanation''': [https://play.google.com/store/apps/details?id=org.kde.marble.maps Marble Maps] brings the highly detailed OpenStreetMap to your Android devices. It features a crisp, beautiful map with an intuitive user interface. This project is about redesigning it in [https://material.io/ Material Design].<br />
<br />
'''Expected Results''':<br />
* Marble Maps on Android follows the Google [https://material.io/ Material Design] Guidelines<br />
* Switch to the [https://doc-snapshots.qt.io/qt5-5.8/qtquickcontrols2-material.html Qt Material Style] as a base<br />
* Incorporate useful ideas and patterns from other resources, e.g. [http://papyros.io/qml-material/ Papyros]<br />
<br />
'''Knowledge Prerequisite''':<br />
* [https://doc.qt.io/qt-5/qtqml-index.html QML]. A background in design and basic knowledge in C++ and Qt will be helpful.<br />
<br />
'''Mentor''': Dennis Nienhüser (IRC: Earthwings in #marble)<br />
<br />
'''Interested?''' Please read the [https://community.kde.org/GSoC#Instructions_for_students general KDE instructions], try to [https://community.kde.org/Marble/AndroidCompiling build Marble Maps on your own], have a look at our [https://phabricator.kde.org/project/view/38/ task board] and contact your prospective mentor, Dennis.<br />
<br />
=== GCompris ===<br />
==== Project: finishing started activities ====<br />
'''Brief explanation''': GCompris is a an educational software suite comprising of numerous activities for children aged 2 to 10. Originally written in Gtk+ it's development team started to rewrite it from scratch in Qt Quick.<br />
<br />
'''Expected results''':<br />
The aim of this year is to complete and getting merged activities that were started but have not been finished.<br />
First phase is to check which activities can be continued, what is missing to be integrated (on code and graphic side) and then to complete them. You can find at https://cgit.kde.org/gcompris.git/refs/heads the list of the current branches (some of them need to be dropped, so contact us before starting working on one of them) and more information on <br />
https://phabricator.kde.org/project/profile/1/.<br />
<br />
The second aim is to refine current activities: some can be improved, whether improving the animation, adding sounds, tutorials... Some tasks already defined in the improvement section of phabricator are quite interesting.<br />
<br />
'''Knowledge Prerequisite''': By the start of GSoC you should<br />
<br />
Be interested in children’s education<br />
<br />
Be familiar with GCompris concept and content<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough)<br />
<br />
Be able to build the Qt Quick version of GCompris<br />
<br />
'''Application guide''':<br />
Continuing an activity already started or rewriting from scratch is something you have to check before writing your application. Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/An_exercise_for_new_contributors.<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Johnny Jazeix (IRC: JohnnyJ), Emmanuel Charruau (IRC: Allon1)<br />
<br />
=== LabPlot ===<br />
==== Project: Statistical analysis ====<br />
Currently LabPlot has only basic support for statistical data analysis by providing some basic measures of desciptive statistics in the spreadsheet. The goal of the project is to add more statistics relevant features (hypothesis tests, cluster analysis, ets.) to LabPlot.<br />
<br />
'''Expected results''':<br />
* evaluate available statistical open-source libraries which can be used for this project<br />
* determine a reasonable set of features and algorithms that can be added to LabPlot, compare here with other similar projects, and implement them<br />
* for the visualization of results of statictical calculations, implement new kind of reports for this, comparable to other similar projects<br />
<br />
'''Knowledge Prerequisite''':<br />
C++, Qt, basic statistics knowledge<br />
<br />
'''Mentor''': Alexander Semke and Stefan Gerlach<br />
<br />
<br />
==== Project: plotting of real-time data ====<br />
Currently, the visualization and analysis of data is only possible on static data that was imported into or generated in one of LabPlot's data containers. The goal of the project is to add support for streaming data.<br />
<br />
'''Expected results''':<br />
* adjust and extend the data containers, analysis algorithms and the plotting part of the application to support streaming data<br />
* add dialogs and wizards to configure this new kind of data sources<br />
<br />
'''Knowledge Prerequisite''':<br />
C++, Qt<br />
<br />
'''Mentor''': Stefan Gerlach and Alexander Semke<br />
<br />
=== Minuet (Software for Music Education) ===<br />
<br />
Minuet is a member of KDE-edu suite of educational applications and was first released in KDE Applications 16.04. Minuet aims at supporting students and teachers in many aspects of music education, such as ear training, first-sight reading, solfa, scales, rhythm, harmony, and improvisation. Minuet makes extensive use of MIDI capabilities to provide a full-fledged set of features regarding volume, tempo, and pitch changes, which makes Minuet a valuable tool for both novice and experienced musicians. Minuet features a rich set of ear training exercises and new ones can be seamlessly added in order to extend its functionalities and adapt it to several music education contexts.<br />
<br />
Minuet currently runs on Linux, Android ([https://ayushashah.wordpress.com/2016/08/20/it-only-takes-a-minuet-to-change-your-life/ Ayush Shah's 2016 Google Summer of Code project]), and Windows.<br />
<br />
Additional Information:<br />
* [https://minuet.kde.org Website (minuet.kde.org)]<br />
* [http://sandroandrade.org/tag/minuet/ Blog posts]<br />
* [https://www.youtube.com/watch?v=IxmyevpFErU (watch in HD) Demonstration video]<br />
* IRC channel: #kde-edu (nickname: sandroandrade)<br />
* [https://mail.kde.org/mailman/listinfo/kde-edu Mailing list]<br />
* Contacts:<br />
** sandroandrade AT kde DOT org<br />
** [https://t.me/andradesandro Telegram]<br />
<br />
===== Project: Singing and Clapping Capabilities =====<br />
<br />
'''Brief explanation''': current Minuet human-interaction mechanism comes down to the use of mouse clicks to point out the answer for a given ear training exercise. Obviously, singers and drummers/percussionists wouldn't have any valuable benefit of using Minuet unless it provides some mechanism to get exercises' answer from singing and clapping data captured from a computer-connected microphone. This project aims at implementing the features for recognizing pitch from voice data and hits from clapping data, both acquired from the computer microphone.<br />
<br />
'''Expected results''':<br />
* A reliable (to some extent) mechanism for detecting pitch from voice data.<br />
* A reliable mechanism for detecting clapping from audio data.<br />
* Both mechanisms may require calibration.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++/Qt/QML.<br />
* Digital Signal Processing.<br />
<br />
'''Mentor''': Sandro Andrade (IRC: sandroandrade)<br />
<br />
===== Project: Chord-melody Arrangement Generator =====<br />
<br />
'''Brief explanation''': Chord melody is an music arrangement style, generally adopted by guitarists, where melody is play alongside with some pieces of harmony (example [https://www.youtube.com/watch?v=2OX96DaOVV8 here]). Whilst the generation of chord melody arrangements is quite a creative task, some basic rules enables the implementation of automatic generators with satisfactory and interesting results. The generator works by receiving two input data: the melody and the harmonic progression (sequence of chords) and then generates a chord melody arrangement for such a song. The generation should consider parameters such as maximum distance between fingers, use of not of tensions, and others. Input and output can be handled for example by using the [https://www.musicxml.com/ MusicXML] format. Displaying the arrangement in a spreadsheet is also expected (spreadsheet support in Minuet is in progress).<br />
<br />
'''Expected results''':<br />
* Design and implementation of MusicXML I/O capabilities in Minuet (libraries already available).<br />
* Design and implementation of the chord melody generator<br />
* Spreadsheet integration for exhibiting the final generated arrangement.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++/Qt/QML.<br />
* Minimal background regarding music harmony.<br />
<br />
'''Mentor''': Sandro Andrade (IRC: sandroandrade)<br />
<br />
===== Project: Multiple-Instrument View Framework =====<br />
<br />
'''Brief explanation''': Minuet is currently able to visually represent intervals, chords, and scales only on the piano keyboard. Supporting other musical instruments, with the accurate handling of their particular idiosyncrasies, is a feature of paramount importance. Aspects such as fingering and execution techniques are highly dependent on which musical instrument they were created to. A flexible architecture should be designed to allow the seamless integration of new musical instruments as Minuet plugins. Minuet's core should not only provide all information generally required by all musical instruments, but also support the handling of instrument-specific information, when available.<br />
<br />
'''Expected results''':<br />
* Design and implementation of a multiple-instrument visualization framework.<br />
* Refactoring of piano keyboard view as a framework plugin.<br />
* Implementation of a framework plugin for a new instrument (e.g. guitar or bass).<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++/Qt/QML.<br />
* Minimal music background for a instrument other than the piano.<br />
<br />
'''Mentor''': Sandro Andrade (IRC: sandroandrade)<br />
<br />
===Trojitá===<br />
<br />
[http://trojita.flaska.net/ Trojitá] is a fast IMAP e-mail client. Since late 2012, it is a part of KDE's extragear. The project focuses on delivering a usable, fast, standards-compliant, cross-platform and reliable e-mail client which can scale from cell phones to huge e-mail archives without annoying slowdowns.<br />
<br />
==== Project: Multiaccount support ====<br />
<br />
'''Brief explanation:'''<br />
Trojitá's GUI only shows one IMAP account at once. The scope of this task is to analyze what needs to be done, and implement the required changes for making it possible to show multiple IMAP accounts. General bugfixes are expected in the rest of the time.<br />
<br />
'''Expected results:''' Full support for multiple IMAP accounts, including unit test coverage.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, contributing to Trojitá prior to GSoC<br />
<br />
'''Mentor:''' Jan Kundrát <jkt@kde.org><br />
<br />
===KDevelop===<br />
==== Project: Improve QML/JS integration ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Improve QML/JS integration: Module path dialog, proper handling of QRC imports, navigation for 'import ...' lines, etc.<br />
<br />
'''Knowledge Prerequisite:'''<br />
QML, Qt and C++.<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Go Integration ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Proper semantic highlighting, code completion and projects integration.<br />
<br />
'''Knowledge Prerequisite:'''<br />
Go, C++, some Qt<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Rust integration ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Proper semantic highlighting, code completion and projects integration.<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Windows Debugger integration (CDB) ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Make it possible to debug applications using CDB. That is managing breakpoints and analyzing the state when the debug session is paused.<br />
<br />
'''Knowledge Prerequisite:'''<br />
CDB, C++, some Qt<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Bundling systems integration in KDevelop====<br />
<br />
'''Brief explanation:'''<br />
Nowadays these systems' adoption is more and more common in GNU/Linux, it would be interesting to integrate the development of applications under these systems.<br />
This project could address Flatpak, Snap and/or Docker systems.<br />
<br />
'''Expected results:''' <br />
Full project manager integration, application execution and debugging.<br />
<br />
'''Knowledge Prerequisite:'''<br />
C++, some Qt, experience with the implemented systems would be welcome.<br />
<br />
'''Mentor:''' Aleix</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2017/Ideas&diff=76158GSoC/2017/Ideas2017-02-05T13:16:06Z<p>Cauliergilles: /* digiKam */</p>
<hr />
<div>[[File:GSoC2016Logo.jpg |400px|thumb|right|GSoC 2016 logo]]<br />
See also: [[../../|GSoc Instructions]], [[../../2016/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Being accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or other image'''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor)<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
===digiKam===<br />
digiKam is an advanced digital photo management application for Linux, Windows, and MacOS.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://plus.google.com/+digikam Google+ page]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
<br />
==== Project 1 : digiKam database export to remote devices ====<br />
'''Brief Explanation''': In the past, Kipi-plugins provided a way to export KIPI host data to DLNA/UPNP by a plugin using HUpnp library for Qt. Since porting this tool to Qt5 will not work as HUpnp project is unmaintained and its code is not ported to Qt5, even if we have tested some implementation from GitHub ported to Qt5. The goal of this project is to find a new way to restore this feature in digiKam core directly (not as a plugin), using a suitable solution to support UPNP/DLNA in the long term.<br />
'''Expected results''':<br />
*Review old plugin code DLNA Export. Review all required features to export digiKam contents through a DLNA server.<br />
*Implement a DLNA server in digiKam core to export photo and video hosted in physical and virtual collections. The server must have the capability to be restored at each digiKam session.<br />
*Implement the server configuration panel in digiKam setup.<br />
*Test the new implementation with DLNA compliant devices, as smartphones, tablets, TVs.<br />
*Test the new implementation under Windows and MacOS.<br />
*Write unit tests and documentation.<br />
'''Knowledge Prerequisite''': DLNA/UPNP, C++, and Qt5<br />
'''Mentor''': Gilles Caulier, Mohamed Anwer, and Maik Qualmann<br />
<br />
�<br />
==== Project 2 : digiKam Database separation for similarity information ==== <br />
'''Brief Explanation''': digiKam has a feature to search items by similarity.This require to compute image fingerprints stored in main database.These data can take space on disk especially with huge collection. This can bloat the main database a lots and increase complexity to backup main database which include all main information for each item registered, as tags, label, comments, etc.<br />
As for Face management database, which store face histograms in a dedicated database, the similarity fingerprints must be stored in a dedicated database.<br />
'''Expected results''':<br />
*Review current whole database implementation including database schema hosted as XML.<br />
*Isolate tables and schemas relevant of similarity fingerprints.<br />
*Create a new schema for similarity features.<br />
*Create a new database access interface inspired of Faces Management database interface.<br />
*Implement code to drive fingerprints for Sqlite and MySQL/MariaDB.<br />
*Write unit tests for database interface and documentation.<br />
'''Knowledge Prerequisite''': Database, Sqlite, MySQL/MariaDB, C++, and Qt5<br />
'''Mentor''': Gilles Caulier, Mario Frank, and Maik Qualmann<br />
<br />
�<br />
==== Project 3 : digiKam Web Services tools authentication with OAuth ==== <br />
'''Brief Explanation''': digiKam has many tools hosted in Kipi-plugins project dedicated to share items on web services, as Facebook, Google, Flickr, Dropbox, Imgur, etc...<br />
All tools use an older way to be authenticated through the web service using an external web browser instance to capture the token network session. This is a fastidious way to open a web service session.<br />
Only Imgur tool use an embedded OAuth authentification without a web browser instance through O2 library for Qt.<br />
The goal of this project is to port all others web service tools to O2 library API.<br />
'''Expected results''':<br />
*Review current implementation of Kipi-plugins tools and identificate all web service compatible with OAuth standard.<br />
*Plan the amount of work to port tools by order of complexity, and identify possible problems.<br />
*Port code for each tools step by step, by writing unit tests independently.<br />
*Test all tools with all use cases, depending of tool options.<br />
*Write documentation.<br />
'''Knowledge Prerequisite''': Network, OAuth, C++, and Qt5<br />
'''Mentor''': Maik Qualmann and Gilles Caulier<br />
<br />
=== Dolphin ===<br />
<br />
Dolphin is a lightweight file manager. It has been designed with ease of use and simplicity in mind, while still allowing flexibility and customisation.<br />
<br />
==== Project: Polkit support in KIO/Dolphin ====<br />
<br />
'''Brief explanation''': Dolphin currently doesn‘t support manipulating files owned by the root user. Many people work-around this limitation by starting Dolphin with root permissions, which is dangerous and not supported. The goal of this project is to provide a Dolphin implementation that opens a nice authentication dialog whenever a file needs to be deleted/moved/created in a folder owned by root. On Linux, this kind of authentication dialogs is provided through Polkit.<br />
<br />
Dolphin doesn‘t touch the filesystem directly, it uses KIO jobs for this task. This means that Polkit support needs to go in KIO itself. Note that this will benefit all KDE applications, not just Dolphin! This project is divided into two steps:<br />
<br />
* KDE provides the KAuth library to easily integrate Polkit in KDE projects. You will be expected to refactor the <tt>file</tt> ioslave with KAuth actions. More details in https://phabricator.kde.org/T5202<br />
* Once KIO is ready to rock with KAuth, Dolphin needs to relax the assumption that root-owned locations cannot be edited. See also https://phabricator.kde.org/T5203<br />
<br />
<br />
'''Expected results''': by the end of the summer, a user should be able to delete/move/create a file or a folder in a root-owned location (say, <tt>/opt</tt>) from Dolphin, after having typed their password in a polkit authentication dialog. Dolphin should also exit if it detects it has been started with root privileges.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt<br />
<br />
'''Mentor''': Elvis Angelaccio (IRC: eang on #kde-devel; mail: elvis.angelaccio@kde.org)<br />
<br />
=== Krita ===<br />
[http://www.krita.org Krita]: digital painting for artists. It support creating images from scratch from begin to end. Krita is a complex application and developers need to have a fair amount of experience in order to be able to do something.<br />
<br />
Krita is a widely used digital painting application for professional artists. Last year, Krita gained the ability to create hand-drawn 2D animations, among other new features. For this year, projects that the Krita team would be interested in include:<br />
<br />
<br />
==== Project: Integrate with share.krita.org ====<br />
<br />
'''Brief explanation''': Share.krita.org is a place where users can share krita scripts, images, brush packs and more. Krita used to use GHNS (Get Hot New Stuff) to integrate with the predecessor of share.krita.org, but that support has disappeared. This project has two parts: integrate with the knewstuff framework (or reimplement the protocol) and create a gui for sharing. The second part is improving the support for creating and editing bundles. Bundles can contain brushes, patterns, gradients and so on. Krita has basic support for creating and editing bundles, but it doesn't work very well in practice. For this part the student must work together with our UX design team to create a better gui design, then implement it. We also want to be able to publish images directly to share.krita.org<br />
<br />
'''Expected results''': by the end of the summer, a user should be able to create a bundle from resources registered with Krita, upload it to share.krita.org and install bundles that have been uploaded to share.krita.org.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud), Scott Petrovic (IRC: scottyp)<br />
<br />
==== Project: Extending Animation Support for curves ====<br />
<br />
'''Brief Explanation''': Last year, we added curves that could be applied to some properties of a layer, like opactity. We want the animation support extended by allowing users to place masks (filter masks, transformation masks, transparency masks) on the timeline and animate their properties using curves. Every property of a layer or mask placed on the timeline should be animatable.<br />
<br />
'''Expected results''':<br />
* Implementation of a gui for applying the curve settings to one or more properties of a mask or layer<br />
* Implementation of the actual rendering of the properties in the frames<br />
* Saving of these settings<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk_log)<br />
<br />
==== Project: Taking the Shape Brush to the next level ====<br />
'''Brief Explanation''': Krita has a number of interesting brush engines. One of them is the Shape Brush engine. Inspired by Alchemy, the shape brush "throws" shapes on the canvas. The current implementation is limited to geometric shapes. We want the brush engine to be extended to make it possible to load vector shapes defined as PDF or SVG and use those to draw on the canvas as well. Other improvements are the addition of Feathering, an outline mode, edge sharpening and background textures.<br />
<br />
'''Expected Results''': A revampted and exciting shapes brush<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Krita<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Lukas Tvrdy (IRC: LukasT)<br />
<br />
==== Project: Implementation of experimental OpenCL support for layer composition, filtering and painting ====<br />
'''Brief Explanation''': Krita in the current state relies purely on CPU power for vast majority of operations. Many of them can be offloaded onto GPU. This will improve performance due to high throughput of parallel operations and potentially will enable power-efficient port of Krita for mobile devices.<br />
<br />
'''Expected Results''': Architecture for OpenCL module which allows to interact with existing code seamlessly and preliminary support for GPU acceleration. Ideally, there should be a separate tool that paints directly on a OpenCL/OpenGL buffer stored in GPU memory. This buffer should be painted over the existing Krita canvas.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, OpenCL<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Implementation of experimental OpenGL-enabled brush ====<br />
'''Brief Explanation''': Krita in the current state relies purely on CPU power for vast majority of operations. Many of them can be offloaded onto GPU. This will improve performance due to high throughput of parallel operations and potentially will enable power-efficient port of Krita for mobile devices.<br />
<br />
'''Expected Results''': this is another experimental GPU-related project that allows the user to paint over the canvas purely on GPU. But this project relies on a different technology: openGL. There should be a special kind of layer that is stored in GPU memory and a special tool that is capable of painting over this layer. The tool should be able to use basic Krita brush presets (for the Pixel Brush engine) to paint over the canvas with the speed of lightning. To make this project easier, we put a limitation: this special layer should be on the top of the layers stack and therefore, just painted over the Krita openGL canvas.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, OpenGL<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Analysis of thoroughput of Krita Blending Modes and porting them to AVX2 ====<br />
'''Brief Explanation''': Blending modes is the hottest piece of code in Krita. It should process gigabytes of data per second, therefore it should be extremely optimized. Some of its parts are already optimized to use AVX instructions, but some (float16 color spaces) are not. We need to port the rest of the color spaces to AVX and make a research into the possibilities of using AXV2 instructions directly (int16 instructions). It might happen that you will have to extend VC library to get full AVX support.<br />
<br />
'''Expected Results''': Ported Float16 color spaces to AVX, extended Vc library to support int16 AVX2 instructions and adopted it in Krita<br />
<br />
'''Knowledge Prerequisite''': C++, SEE/AVX (read [http://www.intel.eu/content/www/eu/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html Intel's manual])<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Using cubic splines to create a very quick brush ====<br />
'''Brief Explanation''': This is a research project. The student should find a way to convert a usual (X,Y) coordinates into a curved coordinate system (l,h) associated with a cubic curve: l (position at the curve), h (distance to the curve). If we have such a mapping, we can create an extremely quick brush that is up to 10 times faster than the current Krita's Pixel Brush.<br />
<br />
'''Expected Results''': It is expected that the student has done at least a part of the research before doing the proposal and is kind of sure that such mapping is possible. If the mapping is impossible or not quick enough, then the student can change the project and implement a "quick brush" engine from [https://www.youtube.com/watch?v=WGFXdFkGjqI here].<br />
<br />
'''Knowledge Prerequisite''': C++, analytical geometry<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Partial canvas updates and region of interest (performance optimization for huge (20k+) canvases) ====<br />
'''Brief Explanation''': We already have an optimization for huge canvases, which is called Instant Preview. But it woks only when the user has the canvas zoomed out to fit the screen. There are some usecases, when the user wants to work with a small "working area" of a huge image and he doesn't care what happens with the rest of the image. This project is targeted to optimizer this case.<br />
<br />
'''Expected Results''': By the end of the summer we expect these features to be implemented:<br />
* Partial updates in openGL canvas. Right now we redraw all the image textures in every frame, which is not needed after porting to Qt5.<br />
* Region of Intereset (ROI) in KisImage. Updates should be reordered and the priority should be given to the areas that are currently visible to the user<br />
* Work Area Tool. The user is be able to define the area, where he would like to work in. The updates for other parts of the image are skipped until the user exits this special mode.<br />
* (if there is time) Optimize textures loading to use RIO as well. Theoretically, we can just skip uploading of the tiles that are not visible on the screen at the moment.<br />
<br />
'''Knowledge Prerequisite''': C++, OpenGL<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log), Julian Thijssen (IRC: Nimmy)<br />
<br />
==== Project: Lazy Selection Tool ====<br />
'''Brief Explanation''': We already have a Colorize Mask for filling line art. Now we need to extend it to support easy selection of the objects. The final tool should look something like Gimp's [https://www.youtube.com/watch?v=PzW8eJ_bDgA Foregroud Selection Tool] but quicker and more intuitive to use.<br />
<br />
'''Expected Results''': By the end of the summer we expect the selection tool to be merged into master and ready for use by the users.<br />
<br />
'''Knowledge Prerequisite''': C++, analytical geometry<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Add 3D Painting Assistants ====<br />
'''Brief explanation''': One of the more innovative features in Krita are the painting assistants. These are shapes overlaid on the canvas that the artist can use to help him achieve perspective, straight lines and other shapes freehand. For complex drawings it would be useful to be able to place 3D models on the canvas, position and scale them and use those as guides for drawing.<br />
<br />
'''Expected results''': by the end of the summer, 3D models should be shown on canvas as canvas decorations, using OpenGL in hidden-line wireframe mode. The models should be manipulated using on-canvas controls like other assistants. Magnetic snapping is an optional extra.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, OpenGL, Assimp<br />
<br />
'''Mentor''': Julian Thijssen (IRC: Nimmy)<br />
<br />
=== KStars ===<br />
<br />
[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time. <br />
<br />
==== Project: All-sky DSS/SDSS overlay ====<br />
'''Brief explanation''': KStars is a very good '''simulation''' of the night sky where it draws many objects including stars, planets, galaxies, nebulae and more. However, observers sometimes would like to see how the '''real''' sky looks at a particular location. Fortunately, we have [https://en.wikipedia.org/wiki/Digitized_Sky_Survey Digitized Sky Survey] that covers large swaths of the night sky. Second-generation DSS2 contains plates for several filters enabling full-color images to be overlayed unto KStars sky map.<br />
<br />
'''Expected results''': Ability to toggle DSS2 color overlay on and off covering all the sky. User can utilize the data either by downloading a specific set of files (expected to be a large data set), or by progressively downloading and caching the data files and displaying them as necessary given the zoom level. Student must optimize memory, bandwidth, and CPU usage throughout the whole process as it should not affect the performance of KStars. A complete API must be developed to enable customized overlay generation given equatorial coordinates, field of view, number of required components...etc so that it can be used for any tool within KStars. The user should be able to configure overlay parameters including transparency, online/offline modes..etc.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can supported addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Ekos Web Client ====<br />
'''Brief explanation''': Ekos is KStars premier tool for observatory control and automation. A web client port of Ekos is desired where it communicates with the underlying INDI servers and drivers without a direct dependency on thick desktop clients. Ekos includes many modules including setup, capture, focus, guide, align, and mount. All functionalities of the desktop Ekos client are expected in the web client version using Python+Ajax or similar framework technologies suitable for online dynamic driven clients.<br />
<br />
'''Expected results''': <br />
* Online Ekos web client with all the thick client feature set.<br />
* Authentication and Registration framework.<br />
* Support for notifications similar to desktop client.<br />
* Ajax dynamic driven interface with near real time updates for framing and captures.<br />
* Multi-user support with granular permissions.<br />
* Web based INDI Control Panel with all the driver controls as in the desktop version.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Django/Ajax or similar technology framework.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Improving Comets and new Meteor Showers component ====<br />
'''Brief explanation''': Currently KStars supports display of comets within the solar system. The data is fetched from JPL and computed to show the position, magnitude, sun-distance, among other parameters. However, there are many inconsistencies and incorrect results in the produced results making the comets data in KStars unreliable. Furthermore, comets are drawn as simple point objects and not as comets with physical nucleolus and tail. This reduces the realism of such object within KStars. Additionally, KStars only displays the current position of the comet in the sky, while it may be desirable for the user to see the expected path (arc) of the comet through out the night sky as a function of time. Finally, KStars does not show any information on meteor showers at all. A new meteors shower components needs to be developed. The component should display meteor shows using suitable animation and presents metadata to describe the event to the end user. Such information may include seeing quality (if affected by Moon presence), expected number of meteors per hours, constellation epicenter, rise/transit/set times..etc.<br />
<br />
'''Expected results''': <br />
* All the results are expected to work in both the KStars desktop version (Qt Widgets) and the KStars Lite mobile version (QML)<br />
* Fix all comets data to agree with JPL and Minor Planet Center sources.<br />
* Draw comet with approximate physical size for nucleus and tail that fits physical parameters. Option to draw exaggerated size for display purposes.<br />
* Draw current vs. predicted path (from the last few hours to the next few hours) of the comet.<br />
* Draw meteor showers animation from epicenter. Show metadata about the meteor shower and quality of observing.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, QML, solid mathematical background<br />
<br />
'''Mentor''': Akarsh Simha ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: kstar)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Akarsh Simha ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: kstar)<br />
<br />
=== Kopete ===<br />
<br />
Kopete is an instant messenger supporting AIM, Bonjour, Gadu-Gadu, GroupWise, ICQ, Jabber (XMPP, Google Talk, Facebook, ...), Meanwhile, QQ, Skype, Windows Live Messenger, WinPopup, Yahoo and more. It is designed to be a flexible and extensible multi-protocol system suitable for personal and enterprise use.<br />
<br />
Mailing list: kopete-devel@kde.org (archive at: lists.kde.org or gmane.org)<br />
<br />
==== Project: Jabber message archive ====<br />
<br />
Brief explanation: When you use more jabber clients and you want to have full chat history in all clients, you need to synchronize message history between all clients. To make it easier for different jabber clients, there is jabber protocol extension for storing history directly on jabber servers which allows clients to download (missing) messages:<br />
<br />
XEP-0136: Message Archiving<br />
<br />
XEP-0313: Message Archive Management<br />
<br />
Expected results: Working support for XEP-0136 or XEP-0313<br />
<br />
Knowledge Prerequisite: C++/Qt, Jabber protocol<br />
<br />
Mentor: Pali Rohár <pali.rohar@gmail.com>, Pali on #kopete<br />
<br />
<br />
==== Project: IRC protocol ====<br />
<br />
Brief explanation: Kopete KDE3 version had plugin for IRC protocol. Porting that IRC plugin to new KDE versions was never finished and Kopete does not have working support for IRC yet.<br />
<br />
Expected results: Restore IRC protocol into Kopete<br />
<br />
Knowledge Prerequisite: C++/Qt, IRC protocol<br />
<br />
Mentor: Pali Rohár <pali.rohar@gmail.com>, Pali on #kopete<br />
<br />
<br />
==== Project: Chat history improvements ====<br />
<br />
Brief explanation: Kopete can archive chat history via built-in plugin. There are more plugins which implement such archive functionality and use different storages. There are also problems with API how chat history is used... This project is for improving status of chat history in Kopete.<br />
<br />
Expected results: Come up with idea 1) what to store from chat session 2) how to store it 3) where to store it and 4) how to provide chat history to user. Part of result is of course full implementation and ideally also conversion from current history plugins.<br />
<br />
Knowledge Prerequisite: C++/Qt, some knowledge of storing chat history<br />
<br />
Mentor: Pali Rohár <pali.rohar@gmail.com>, Pali on #kopete<br />
<br />
Note: Part of GSoC proposal must be ideas or solutions to these problems. I suggest to read mailing list discussion from last year.<br />
<br />
=== Marble ===<br />
The [https://marble.kde.org/ Marble] community combines free data and open source to produce awesome map software. Find your way and explore the world!<br />
<br />
==== Project: Marble Indoor Maps ====<br />
'''Brief Explanation''': [https://play.google.com/store/apps/details?id=org.kde.marble.maps Marble Maps] brings the highly detailed OpenStreetMap to your Android devices. It features a crisp, beautiful map with an intuitive user interface. This project is about extending it to support indoor maps (e.g. selecting and showing different levels of a building).<br />
<br />
'''Expected Results''':<br />
* Marble extracts [https://wiki.openstreetmap.org/wiki/Simple_Indoor_Tagging indoor related OSM tags]<br />
* Floor and connection elements (e.g. room, wall, door, staircase) are shown in the map. Similar to [http://openlevelup.net/?lat=42.80043008955188&lon=-1.6367550194263458&zoom=19&tiles=0&level=0&transcend=1&unrendered=0&buildings=0&photos=0&notes=0 OpenLevelUp].<br />
* User interface to select floor levels and filtering of the map view based on the active floor level<br />
* Automatic adjustment of the floor level user interface (hide it when there are no indoor map elements in the view, select minimum/maximum floor level automatically)<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, optionally [https://wiki.openstreetmap.org/wiki/Map_Features OSM] and [https://doc.qt.io/qt-5/qtqml-index.html QML].<br />
<br />
'''Mentor''': Dennis Nienhüser (IRC: Earthwings in #marble)<br />
<br />
'''Interested?''' Please read the [https://community.kde.org/GSoC#Instructions_for_students general KDE instructions], try to [https://community.kde.org/Marble/AndroidCompiling build Marble Maps on your own], have a look at our [https://phabricator.kde.org/project/view/38/ task board] and contact your prospective mentor, Dennis.<br />
<br />
==== Project: Material Marble Maps ====<br />
'''Brief Explanation''': [https://play.google.com/store/apps/details?id=org.kde.marble.maps Marble Maps] brings the highly detailed OpenStreetMap to your Android devices. It features a crisp, beautiful map with an intuitive user interface. This project is about redesigning it in [https://material.io/ Material Design].<br />
<br />
'''Expected Results''':<br />
* Marble Maps on Android follows the Google [https://material.io/ Material Design] Guidelines<br />
* Switch to the [https://doc-snapshots.qt.io/qt5-5.8/qtquickcontrols2-material.html Qt Material Style] as a base<br />
* Incorporate useful ideas and patterns from other resources, e.g. [http://papyros.io/qml-material/ Papyros]<br />
<br />
'''Knowledge Prerequisite''':<br />
* [https://doc.qt.io/qt-5/qtqml-index.html QML]. A background in design and basic knowledge in C++ and Qt will be helpful.<br />
<br />
'''Mentor''': Dennis Nienhüser (IRC: Earthwings in #marble)<br />
<br />
'''Interested?''' Please read the [https://community.kde.org/GSoC#Instructions_for_students general KDE instructions], try to [https://community.kde.org/Marble/AndroidCompiling build Marble Maps on your own], have a look at our [https://phabricator.kde.org/project/view/38/ task board] and contact your prospective mentor, Dennis.<br />
<br />
=== GCompris ===<br />
==== Project: finishing started activities ====<br />
'''Brief explanation''': GCompris is a an educational software suite comprising of numerous activities for children aged 2 to 10. Originally written in Gtk+ it's development team started to rewrite it from scratch in Qt Quick.<br />
<br />
'''Expected results''':<br />
The aim of this year is to complete and getting merged activities that were started but have not been finished.<br />
First phase is to check which activities can be continued, what is missing to be integrated (on code and graphic side) and then to complete them. You can find at https://cgit.kde.org/gcompris.git/refs/heads the list of the current branches (some of them need to be dropped, so contact us before starting working on one of them) and more information on <br />
https://phabricator.kde.org/project/profile/1/.<br />
<br />
The second aim is to refine current activities: some can be improved, whether improving the animation, adding sounds, tutorials... Some tasks already defined in the improvement section of phabricator are quite interesting.<br />
<br />
'''Knowledge Prerequisite''': By the start of GSoC you should<br />
<br />
Be interested in children’s education<br />
<br />
Be familiar with GCompris concept and content<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough)<br />
<br />
Be able to build the Qt Quick version of GCompris<br />
<br />
'''Application guide''':<br />
Continuing an activity already started or rewriting from scratch is something you have to check before writing your application. Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/An_exercise_for_new_contributors.<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Johnny Jazeix (IRC: JohnnyJ), Emmanuel Charruau (IRC: Allon1)<br />
<br />
=== LabPlot ===<br />
==== Project: Statistical analysis ====<br />
Currently LabPlot has only basic support for statistical data analysis by providing some basic measures of desciptive statistics in the spreadsheet. The goal of the project is to add more statistics relevant features (hypothesis tests, cluster analysis, ets.) to LabPlot.<br />
<br />
'''Expected results''':<br />
* evaluate available statistical open-source libraries which can be used for this project<br />
* determine a reasonable set of features and algorithms that can be added to LabPlot, compare here with other similar projects, and implement them<br />
* for the visualization of results of statictical calculations, implement new kind of reports for this, comparable to other similar projects<br />
<br />
'''Knowledge Prerequisite''':<br />
C++, Qt, basic statistics knowledge<br />
<br />
'''Mentor''': Alexander Semke and Stefan Gerlach<br />
<br />
<br />
==== Project: plotting of real-time data ====<br />
Currently, the visualization and analysis of data is only possible on static data that was imported into or generated in one of LabPlot's data containers. The goal of the project is to add support for streaming data.<br />
<br />
'''Expected results''':<br />
* adjust and extend the data containers, analysis algorithms and the plotting part of the application to support streaming data<br />
* add dialogs and wizards to configure this new kind of data sources<br />
<br />
'''Knowledge Prerequisite''':<br />
C++, Qt<br />
<br />
'''Mentor''': Stefan Gerlach and Alexander Semke<br />
<br />
=== Minuet (Software for Music Education) ===<br />
<br />
Minuet is a member of KDE-edu suite of educational applications and was first released in KDE Applications 16.04. Minuet aims at supporting students and teachers in many aspects of music education, such as ear training, first-sight reading, solfa, scales, rhythm, harmony, and improvisation. Minuet makes extensive use of MIDI capabilities to provide a full-fledged set of features regarding volume, tempo, and pitch changes, which makes Minuet a valuable tool for both novice and experienced musicians. Minuet features a rich set of ear training exercises and new ones can be seamlessly added in order to extend its functionalities and adapt it to several music education contexts.<br />
<br />
Minuet currently runs on Linux, Android ([https://ayushashah.wordpress.com/2016/08/20/it-only-takes-a-minuet-to-change-your-life/ Ayush Shah's 2016 Google Summer of Code project]), and Windows.<br />
<br />
Additional Information:<br />
* [https://minuet.kde.org Website (minuet.kde.org)]<br />
* [http://sandroandrade.org/tag/minuet/ Blog posts]<br />
* [https://www.youtube.com/watch?v=IxmyevpFErU (watch in HD) Demonstration video]<br />
* IRC channel: #kde-edu (nickname: sandroandrade)<br />
* [https://mail.kde.org/mailman/listinfo/kde-edu Mailing list]<br />
* Contacts:<br />
** sandroandrade AT kde DOT org<br />
** [https://t.me/andradesandro Telegram]<br />
<br />
===== Project: Singing and Clapping Capabilities =====<br />
<br />
'''Brief explanation''': current Minuet human-interaction mechanism comes down to the use of mouse clicks to point out the answer for a given ear training exercise. Obviously, singers and drummers/percussionists wouldn't have any valuable benefit of using Minuet unless it provides some mechanism to get exercises' answer from singing and clapping data captured from a computer-connected microphone. This project aims at implementing the features for recognizing pitch from voice data and hits from clapping data, both acquired from the computer microphone.<br />
<br />
'''Expected results''':<br />
* A reliable (to some extent) mechanism for detecting pitch from voice data.<br />
* A reliable mechanism for detecting clapping from audio data.<br />
* Both mechanisms may require calibration.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++/Qt/QML.<br />
* Digital Signal Processing.<br />
<br />
'''Mentor''': Sandro Andrade (IRC: sandroandrade)<br />
<br />
===== Project: Chord-melody Arrangement Generator =====<br />
<br />
'''Brief explanation''': Chord melody is an music arrangement style, generally adopted by guitarists, where melody is play alongside with some pieces of harmony (example [https://www.youtube.com/watch?v=2OX96DaOVV8 here]). Whilst the generation of chord melody arrangements is quite a creative task, some basic rules enables the implementation of automatic generators with satisfactory and interesting results. The generator works by receiving two input data: the melody and the harmonic progression (sequence of chords) and then generates a chord melody arrangement for such a song. The generation should consider parameters such as maximum distance between fingers, use of not of tensions, and others. Input and output can be handled for example by using the [https://www.musicxml.com/ MusicXML] format. Displaying the arrangement in a spreadsheet is also expected (spreadsheet support in Minuet is in progress).<br />
<br />
'''Expected results''':<br />
* Design and implementation of MusicXML I/O capabilities in Minuet (libraries already available).<br />
* Design and implementation of the chord melody generator<br />
* Spreadsheet integration for exhibiting the final generated arrangement.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++/Qt/QML.<br />
* Minimal background regarding music harmony.<br />
<br />
'''Mentor''': Sandro Andrade (IRC: sandroandrade)<br />
<br />
===== Project: Multiple-Instrument View Framework =====<br />
<br />
'''Brief explanation''': Minuet is currently able to visually represent intervals, chords, and scales only on the piano keyboard. Supporting other musical instruments, with the accurate handling of their particular idiosyncrasies, is a feature of paramount importance. Aspects such as fingering and execution techniques are highly dependent on which musical instrument they were created to. A flexible architecture should be designed to allow the seamless integration of new musical instruments as Minuet plugins. Minuet's core should not only provide all information generally required by all musical instruments, but also support the handling of instrument-specific information, when available.<br />
<br />
'''Expected results''':<br />
* Design and implementation of a multiple-instrument visualization framework.<br />
* Refactoring of piano keyboard view as a framework plugin.<br />
* Implementation of a framework plugin for a new instrument (e.g. guitar or bass).<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++/Qt/QML.<br />
* Minimal music background for a instrument other than the piano.<br />
<br />
'''Mentor''': Sandro Andrade (IRC: sandroandrade)<br />
<br />
===Trojitá===<br />
<br />
[http://trojita.flaska.net/ Trojitá] is a fast IMAP e-mail client. Since late 2012, it is a part of KDE's extragear. The project focuses on delivering a usable, fast, standards-compliant, cross-platform and reliable e-mail client which can scale from cell phones to huge e-mail archives without annoying slowdowns.<br />
<br />
==== Project: Multiaccount support ====<br />
<br />
'''Brief explanation:'''<br />
Trojitá's GUI only shows one IMAP account at once. The scope of this task is to analyze what needs to be done, and implement the required changes for making it possible to show multiple IMAP accounts. General bugfixes are expected in the rest of the time.<br />
<br />
'''Expected results:''' Full support for multiple IMAP accounts, including unit test coverage.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, contributing to Trojitá prior to GSoC<br />
<br />
'''Mentor:''' Jan Kundrát <jkt@kde.org><br />
<br />
===KDevelop===<br />
==== Project: Improve QML/JS integration ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Improve QML/JS integration: Module path dialog, proper handling of QRC imports, navigation for 'import ...' lines, etc.<br />
<br />
'''Knowledge Prerequisite:'''<br />
QML, Qt and C++.<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Go Integration ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Proper semantic highlighting, code completion and projects integration.<br />
<br />
'''Knowledge Prerequisite:'''<br />
Go, C++, some Qt<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Rust integration ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Proper semantic highlighting, code completion and projects integration.<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Windows Debugger integration (CDB) ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Make it possible to debug applications using CDB. That is managing breakpoints and analyzing the state when the debug session is paused.<br />
<br />
'''Knowledge Prerequisite:'''<br />
CDB, C++, some Qt<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Bundling systems integration in KDevelop====<br />
<br />
'''Brief explanation:'''<br />
Nowadays these systems' adoption is more and more common in GNU/Linux, it would be interesting to integrate the development of applications under these systems.<br />
This project could address Flatpak, Snap and/or Docker systems.<br />
<br />
'''Expected results:''' <br />
Full project manager integration, application execution and debugging.<br />
<br />
'''Knowledge Prerequisite:'''<br />
C++, some Qt, experience with the implemented systems would be welcome.<br />
<br />
'''Mentor:''' Aleix</div>Cauliergilleshttps://community.kde.org/index.php?title=GSoC/2017/Ideas&diff=76157GSoC/2017/Ideas2017-02-05T13:12:35Z<p>Cauliergilles: /* Ideas */</p>
<hr />
<div>[[File:GSoC2016Logo.jpg |400px|thumb|right|GSoC 2016 logo]]<br />
See also: [[../../|GSoc Instructions]], [[../../2016/Ideas|Last year ideas]]<br />
<br />
== Guidelines ==<br />
<br />
=== Information for Students ===<br />
<br />
These ideas were contributed by our developers and users. They are sometimes vague or incomplete. If you wish to submit a proposal based on these ideas, you may wish to contact the developers and find out more about the particular suggestion you're looking at.<br />
<br />
Being accepted as a Google Summer of Code student is quite competitive. Accepted students typically have thoroughly researched the technologies of their proposed project and have been in frequent contact with potential mentors. '''Simply copying and pasting an idea here will not work.''' On the other hand, creating a completely new idea without first consulting potential mentors is unlikely to work out.<br />
<br />
When writing your proposal or asking for help from the general KDE community don't assume people are familiar with the ideas here. KDE is really big!<br />
<br />
If there is no specific contact given you can ask questions on the general KDE development list kde-devel@kde.org. See [http://www.kde.org/mailinglists/ the KDE mailing lists page] for information on available mailing lists and how to subscribe.<br />
<br />
=== Adding a Proposal ===<br />
<br />
{{Note|Follow the template of other proposals!}}<br />
<br />
==== Project: ====<br />
<br />
'''If appropriate, screenshot or other image'''<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:'''<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
When adding an idea to this section, please try to include the following data:<br />
<br />
:*if the application is not widely known, a description of what it does and where its code lives<br />
:*a brief explanation<br />
:*the expected results<br />
:*pre-requisites for working on your project<br />
:*if applicable, links to more information or discussions<br />
:*mailing list or IRC channel for your application/library/module<br />
:*your name and email address for contact (if you're willing to be a mentor)<br />
<br />
If you are not a developer but have a good idea for a proposal, get in contact with relevant developers first.<br />
<br />
==Ideas==<br />
<br />
===Your Own Idea ===<br />
<br />
==== Project: Something that you're totally excited about ====<br />
<br />
'''Brief explanation:''' Do you have an awesome idea you want to work on with KDE but that is not among the ideas below? That's cool. We love that! But please do us a favor: Get in touch with a mentor early on and make sure your project is realistic and within the scope of KDE. That will spare you and us a lot of frustration.<br />
<br />
'''Expected results:''' Something you and KDE loves<br />
<br />
'''Knowledge Prerequisite:''' Probably C++ and Qt but depends on your project<br />
<br />
'''Mentor:''' Try to see who in KDE is interested in what you want to work on and approach them. If you are unsure you can always ask in #kde-soc on Freenode IRC.<br />
<br />
===digiKam===<br />
digiKam is an advanced digital photo management application for Linux, Windows, and MacOS.<br />
<br />
* [http://www.digikam.org digiKam project web site]<br />
* [https://mail.kde.org/mailman/listinfo/digikam-devel Mailinglist]<br />
* [https://plus.google.com/+digikam Google+ page]<br />
* [http://webchat.freenode.net/?channels=digikam #digikam IRC channel on Freenode]<br />
<br />
=== Dolphin ===<br />
<br />
Dolphin is a lightweight file manager. It has been designed with ease of use and simplicity in mind, while still allowing flexibility and customisation.<br />
<br />
==== Project: Polkit support in KIO/Dolphin ====<br />
<br />
'''Brief explanation''': Dolphin currently doesn‘t support manipulating files owned by the root user. Many people work-around this limitation by starting Dolphin with root permissions, which is dangerous and not supported. The goal of this project is to provide a Dolphin implementation that opens a nice authentication dialog whenever a file needs to be deleted/moved/created in a folder owned by root. On Linux, this kind of authentication dialogs is provided through Polkit.<br />
<br />
Dolphin doesn‘t touch the filesystem directly, it uses KIO jobs for this task. This means that Polkit support needs to go in KIO itself. Note that this will benefit all KDE applications, not just Dolphin! This project is divided into two steps:<br />
<br />
* KDE provides the KAuth library to easily integrate Polkit in KDE projects. You will be expected to refactor the <tt>file</tt> ioslave with KAuth actions. More details in https://phabricator.kde.org/T5202<br />
* Once KIO is ready to rock with KAuth, Dolphin needs to relax the assumption that root-owned locations cannot be edited. See also https://phabricator.kde.org/T5203<br />
<br />
<br />
'''Expected results''': by the end of the summer, a user should be able to delete/move/create a file or a folder in a root-owned location (say, <tt>/opt</tt>) from Dolphin, after having typed their password in a polkit authentication dialog. Dolphin should also exit if it detects it has been started with root privileges.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt<br />
<br />
'''Mentor''': Elvis Angelaccio (IRC: eang on #kde-devel; mail: elvis.angelaccio@kde.org)<br />
<br />
=== Krita ===<br />
[http://www.krita.org Krita]: digital painting for artists. It support creating images from scratch from begin to end. Krita is a complex application and developers need to have a fair amount of experience in order to be able to do something.<br />
<br />
Krita is a widely used digital painting application for professional artists. Last year, Krita gained the ability to create hand-drawn 2D animations, among other new features. For this year, projects that the Krita team would be interested in include:<br />
<br />
<br />
==== Project: Integrate with share.krita.org ====<br />
<br />
'''Brief explanation''': Share.krita.org is a place where users can share krita scripts, images, brush packs and more. Krita used to use GHNS (Get Hot New Stuff) to integrate with the predecessor of share.krita.org, but that support has disappeared. This project has two parts: integrate with the knewstuff framework (or reimplement the protocol) and create a gui for sharing. The second part is improving the support for creating and editing bundles. Bundles can contain brushes, patterns, gradients and so on. Krita has basic support for creating and editing bundles, but it doesn't work very well in practice. For this part the student must work together with our UX design team to create a better gui design, then implement it. We also want to be able to publish images directly to share.krita.org<br />
<br />
'''Expected results''': by the end of the summer, a user should be able to create a bundle from resources registered with Krita, upload it to share.krita.org and install bundles that have been uploaded to share.krita.org.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud), Scott Petrovic (IRC: scottyp)<br />
<br />
==== Project: Extending Animation Support for curves ====<br />
<br />
'''Brief Explanation''': Last year, we added curves that could be applied to some properties of a layer, like opactity. We want the animation support extended by allowing users to place masks (filter masks, transformation masks, transparency masks) on the timeline and animate their properties using curves. Every property of a layer or mask placed on the timeline should be animatable.<br />
<br />
'''Expected results''':<br />
* Implementation of a gui for applying the curve settings to one or more properties of a mask or layer<br />
* Implementation of the actual rendering of the properties in the frames<br />
* Saving of these settings<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++ and Qt<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk_log)<br />
<br />
==== Project: Taking the Shape Brush to the next level ====<br />
'''Brief Explanation''': Krita has a number of interesting brush engines. One of them is the Shape Brush engine. Inspired by Alchemy, the shape brush "throws" shapes on the canvas. The current implementation is limited to geometric shapes. We want the brush engine to be extended to make it possible to load vector shapes defined as PDF or SVG and use those to draw on the canvas as well. Other improvements are the addition of Feathering, an outline mode, edge sharpening and background textures.<br />
<br />
'''Expected Results''': A revampted and exciting shapes brush<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, Krita<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Lukas Tvrdy (IRC: LukasT)<br />
<br />
==== Project: Implementation of experimental OpenCL support for layer composition, filtering and painting ====<br />
'''Brief Explanation''': Krita in the current state relies purely on CPU power for vast majority of operations. Many of them can be offloaded onto GPU. This will improve performance due to high throughput of parallel operations and potentially will enable power-efficient port of Krita for mobile devices.<br />
<br />
'''Expected Results''': Architecture for OpenCL module which allows to interact with existing code seamlessly and preliminary support for GPU acceleration. Ideally, there should be a separate tool that paints directly on a OpenCL/OpenGL buffer stored in GPU memory. This buffer should be painted over the existing Krita canvas.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, OpenCL<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Implementation of experimental OpenGL-enabled brush ====<br />
'''Brief Explanation''': Krita in the current state relies purely on CPU power for vast majority of operations. Many of them can be offloaded onto GPU. This will improve performance due to high throughput of parallel operations and potentially will enable power-efficient port of Krita for mobile devices.<br />
<br />
'''Expected Results''': this is another experimental GPU-related project that allows the user to paint over the canvas purely on GPU. But this project relies on a different technology: openGL. There should be a special kind of layer that is stored in GPU memory and a special tool that is capable of painting over this layer. The tool should be able to use basic Krita brush presets (for the Pixel Brush engine) to paint over the canvas with the speed of lightning. To make this project easier, we put a limitation: this special layer should be on the top of the layers stack and therefore, just painted over the Krita openGL canvas.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, OpenGL<br />
<br />
'''Mentor''': Boudewijn Rempt (IRC: boud) or Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Analysis of thoroughput of Krita Blending Modes and porting them to AVX2 ====<br />
'''Brief Explanation''': Blending modes is the hottest piece of code in Krita. It should process gigabytes of data per second, therefore it should be extremely optimized. Some of its parts are already optimized to use AVX instructions, but some (float16 color spaces) are not. We need to port the rest of the color spaces to AVX and make a research into the possibilities of using AXV2 instructions directly (int16 instructions). It might happen that you will have to extend VC library to get full AVX support.<br />
<br />
'''Expected Results''': Ported Float16 color spaces to AVX, extended Vc library to support int16 AVX2 instructions and adopted it in Krita<br />
<br />
'''Knowledge Prerequisite''': C++, SEE/AVX (read [http://www.intel.eu/content/www/eu/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html Intel's manual])<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Using cubic splines to create a very quick brush ====<br />
'''Brief Explanation''': This is a research project. The student should find a way to convert a usual (X,Y) coordinates into a curved coordinate system (l,h) associated with a cubic curve: l (position at the curve), h (distance to the curve). If we have such a mapping, we can create an extremely quick brush that is up to 10 times faster than the current Krita's Pixel Brush.<br />
<br />
'''Expected Results''': It is expected that the student has done at least a part of the research before doing the proposal and is kind of sure that such mapping is possible. If the mapping is impossible or not quick enough, then the student can change the project and implement a "quick brush" engine from [https://www.youtube.com/watch?v=WGFXdFkGjqI here].<br />
<br />
'''Knowledge Prerequisite''': C++, analytical geometry<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Partial canvas updates and region of interest (performance optimization for huge (20k+) canvases) ====<br />
'''Brief Explanation''': We already have an optimization for huge canvases, which is called Instant Preview. But it woks only when the user has the canvas zoomed out to fit the screen. There are some usecases, when the user wants to work with a small "working area" of a huge image and he doesn't care what happens with the rest of the image. This project is targeted to optimizer this case.<br />
<br />
'''Expected Results''': By the end of the summer we expect these features to be implemented:<br />
* Partial updates in openGL canvas. Right now we redraw all the image textures in every frame, which is not needed after porting to Qt5.<br />
* Region of Intereset (ROI) in KisImage. Updates should be reordered and the priority should be given to the areas that are currently visible to the user<br />
* Work Area Tool. The user is be able to define the area, where he would like to work in. The updates for other parts of the image are skipped until the user exits this special mode.<br />
* (if there is time) Optimize textures loading to use RIO as well. Theoretically, we can just skip uploading of the tiles that are not visible on the screen at the moment.<br />
<br />
'''Knowledge Prerequisite''': C++, OpenGL<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log), Julian Thijssen (IRC: Nimmy)<br />
<br />
==== Project: Lazy Selection Tool ====<br />
'''Brief Explanation''': We already have a Colorize Mask for filling line art. Now we need to extend it to support easy selection of the objects. The final tool should look something like Gimp's [https://www.youtube.com/watch?v=PzW8eJ_bDgA Foregroud Selection Tool] but quicker and more intuitive to use.<br />
<br />
'''Expected Results''': By the end of the summer we expect the selection tool to be merged into master and ready for use by the users.<br />
<br />
'''Knowledge Prerequisite''': C++, analytical geometry<br />
<br />
'''Mentor''': Dmitry Kazakov (IRC: dmitryk|log)<br />
<br />
==== Project: Add 3D Painting Assistants ====<br />
'''Brief explanation''': One of the more innovative features in Krita are the painting assistants. These are shapes overlaid on the canvas that the artist can use to help him achieve perspective, straight lines and other shapes freehand. For complex drawings it would be useful to be able to place 3D models on the canvas, position and scale them and use those as guides for drawing.<br />
<br />
'''Expected results''': by the end of the summer, 3D models should be shown on canvas as canvas decorations, using OpenGL in hidden-line wireframe mode. The models should be manipulated using on-canvas controls like other assistants. Magnetic snapping is an optional extra.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, OpenGL, Assimp<br />
<br />
'''Mentor''': Julian Thijssen (IRC: Nimmy)<br />
<br />
=== KStars ===<br />
<br />
[https://edu.kde.org/kstars KStars] is free, open source, cross-platform Astronomy Software. It provides an accurate graphical simulation of the night sky, from any location on Earth, at any date and time. <br />
<br />
==== Project: All-sky DSS/SDSS overlay ====<br />
'''Brief explanation''': KStars is a very good '''simulation''' of the night sky where it draws many objects including stars, planets, galaxies, nebulae and more. However, observers sometimes would like to see how the '''real''' sky looks at a particular location. Fortunately, we have [https://en.wikipedia.org/wiki/Digitized_Sky_Survey Digitized Sky Survey] that covers large swaths of the night sky. Second-generation DSS2 contains plates for several filters enabling full-color images to be overlayed unto KStars sky map.<br />
<br />
'''Expected results''': Ability to toggle DSS2 color overlay on and off covering all the sky. User can utilize the data either by downloading a specific set of files (expected to be a large data set), or by progressively downloading and caching the data files and displaying them as necessary given the zoom level. Student must optimize memory, bandwidth, and CPU usage throughout the whole process as it should not affect the performance of KStars. A complete API must be developed to enable customized overlay generation given equatorial coordinates, field of view, number of required components...etc so that it can be used for any tool within KStars. The user should be able to configure overlay parameters including transparency, online/offline modes..etc.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Deep Sky Object Overhaul ====<br />
'''Brief explanation''': KStars supports many deep sky objects (DSOs) including galaxies, nebulae, supernovae, clusters and more. Currently, some deep sky catalogs are stored in simple space separated text format where they are parsed into KStars directly or into KStars Deep Sky Component SQLite3 database which is then loaded in KStars. However, since all DSOs are loaded at once into memory, this limits the size of catalogs within KStars. A solution similar to how dynamic stars are cached in and out of memory must be developed for DSOs. Furthermore, all catalog entries should have their trixels indexed so that they can be efficiently drawn unto the sky map. Another issue is that catalogs can overlap since there is no cross-identification of various catalogs. For example, Andromeda galaxy exists in Messier catalog as M31, and exists in NGC catalog as NGC 224. The database should support ability to cross-identify objects from all supported and future catalogs.<br />
<br />
'''Expected results''': <br />
* Convert all text-format catalogs to SQLite3 database.<br />
* Develop master DSO database where cross-identification of objects is supported. Master database can supported addon downloadable catalogs where they can be merged once downloaded by the user.<br />
* Import of The Principal Galaxy Catalog, 2003 Version (PGC2003) which contains ~1 million galaxies into KStars as a downloadable addon.<br />
* Caching and drawing optimizations for large catalogs.<br />
* Cross-identification for all supported DSO catalogs including, but not limited too: NGC/IC/Messier/Arp/PGC/LDN<br />
* Trixel indexation for all DSOs. Implementation of improved drawing cached routine in KStars for DSOs similar to stars.<br />
* All necessary updates within KStars maps, tools and dialogs to reflect the above changes.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Data Structures<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Ekos Web Client ====<br />
'''Brief explanation''': Ekos is KStars premier tool for observatory control and automation. A web client port of Ekos is desired where it communicates with the underlying INDI servers and drivers without a direct dependency on thick desktop clients. Ekos includes many modules including setup, capture, focus, guide, align, and mount. All functionalities of the desktop Ekos client are expected in the web client version using Python+Ajax or similar framework technologies suitable for online dynamic driven clients.<br />
<br />
'''Expected results''': <br />
* Online Ekos web client with all the thick client feature set.<br />
* Authentication and Registration framework.<br />
* Support for notifications similar to desktop client.<br />
* Ajax dynamic driven interface with near real time updates for framing and captures.<br />
* Multi-user support with granular permissions.<br />
* Web based INDI Control Panel with all the driver controls as in the desktop version.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, Django/Ajax or similar technology framework.<br />
<br />
'''Mentor''': Jasem Mutlaq ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: Jasem)<br />
<br />
==== Project: Improving Comets and new Meteor Showers component ====<br />
'''Brief explanation''': Currently KStars supports display of comets within the solar system. The data is fetched from JPL and computed to show the position, magnitude, sun-distance, among other parameters. However, there are many inconsistencies and incorrect results in the produced results making the comets data in KStars unreliable. Furthermore, comets are drawn as simple point objects and not as comets with physical nucleolus and tail. This reduces the realism of such object within KStars. Additionally, KStars only displays the current position of the comet in the sky, while it may be desirable for the user to see the expected path (arc) of the comet through out the night sky as a function of time. Finally, KStars does not show any information on meteor showers at all. A new meteors shower components needs to be developed. The component should display meteor shows using suitable animation and presents metadata to describe the event to the end user. Such information may include seeing quality (if affected by Moon presence), expected number of meteors per hours, constellation epicenter, rise/transit/set times..etc.<br />
<br />
'''Expected results''': <br />
* All the results are expected to work in both the KStars desktop version (Qt Widgets) and the KStars Lite mobile version (QML)<br />
* Fix all comets data to agree with JPL and Minor Planet Center sources.<br />
* Draw comet with approximate physical size for nucleus and tail that fits physical parameters. Option to draw exaggerated size for display purposes.<br />
* Draw current vs. predicted path (from the last few hours to the next few hours) of the comet.<br />
* Draw meteor showers animation from epicenter. Show metadata about the meteor shower and quality of observing.<br />
<br />
'''Knowledge Prerequisite''': C++, Qt, QML, solid mathematical background<br />
<br />
'''Mentor''': Akarsh Simha ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: kstar)<br />
<br />
==== Project: Implement Qt3D backend for KStars ====<br />
'''Brief explanation''': The Skymap in KStars desktop version is currently built using QPainter and 2D drawing primitives. In order to take advantage of advances in modern GPU hardware and to present a stunning visual view of the night sky, a 3D backend is desired. Qt 3D provides functionality for near-realtime simulation systems with support for 2D and 3D rendering in both Qt C++ and Qt Quick applications. Within KStars, SkyPainter provides a backend-agnostic class for drawing object unto the skymap regardless of the backend. Previously, an experimental OpenGL backend was developed but was later deprecated due to drawing issues. Since Qt3D provides an abstraction to the backend framework (OpenGL/Vulkan/DirectX), it presents a very flexible framework for building future-proof 3D applications.<br />
<br />
'''Expected results''': <br />
* Create Qt3D based backend to draw all objects currently implemented by QPainter backend.<br />
* Create realistic colors, shares, textures, meshes, lighting for all stars, solar system, and deep sky objects.<br />
* Create animations for meteor shows, comet tails, stars twinkle..etc<br />
'''Knowledge Prerequisite''': C++, Qt, Prior experience working with 3D applications/games.<br />
<br />
'''Mentor''': Akarsh Simha ([https://riot.im/app/#/room/#kstars:matrix.org Matrix]: kstar)<br />
<br />
=== Kopete ===<br />
<br />
Kopete is an instant messenger supporting AIM, Bonjour, Gadu-Gadu, GroupWise, ICQ, Jabber (XMPP, Google Talk, Facebook, ...), Meanwhile, QQ, Skype, Windows Live Messenger, WinPopup, Yahoo and more. It is designed to be a flexible and extensible multi-protocol system suitable for personal and enterprise use.<br />
<br />
Mailing list: kopete-devel@kde.org (archive at: lists.kde.org or gmane.org)<br />
<br />
==== Project: Jabber message archive ====<br />
<br />
Brief explanation: When you use more jabber clients and you want to have full chat history in all clients, you need to synchronize message history between all clients. To make it easier for different jabber clients, there is jabber protocol extension for storing history directly on jabber servers which allows clients to download (missing) messages:<br />
<br />
XEP-0136: Message Archiving<br />
<br />
XEP-0313: Message Archive Management<br />
<br />
Expected results: Working support for XEP-0136 or XEP-0313<br />
<br />
Knowledge Prerequisite: C++/Qt, Jabber protocol<br />
<br />
Mentor: Pali Rohár <pali.rohar@gmail.com>, Pali on #kopete<br />
<br />
<br />
==== Project: IRC protocol ====<br />
<br />
Brief explanation: Kopete KDE3 version had plugin for IRC protocol. Porting that IRC plugin to new KDE versions was never finished and Kopete does not have working support for IRC yet.<br />
<br />
Expected results: Restore IRC protocol into Kopete<br />
<br />
Knowledge Prerequisite: C++/Qt, IRC protocol<br />
<br />
Mentor: Pali Rohár <pali.rohar@gmail.com>, Pali on #kopete<br />
<br />
<br />
==== Project: Chat history improvements ====<br />
<br />
Brief explanation: Kopete can archive chat history via built-in plugin. There are more plugins which implement such archive functionality and use different storages. There are also problems with API how chat history is used... This project is for improving status of chat history in Kopete.<br />
<br />
Expected results: Come up with idea 1) what to store from chat session 2) how to store it 3) where to store it and 4) how to provide chat history to user. Part of result is of course full implementation and ideally also conversion from current history plugins.<br />
<br />
Knowledge Prerequisite: C++/Qt, some knowledge of storing chat history<br />
<br />
Mentor: Pali Rohár <pali.rohar@gmail.com>, Pali on #kopete<br />
<br />
Note: Part of GSoC proposal must be ideas or solutions to these problems. I suggest to read mailing list discussion from last year.<br />
<br />
=== Marble ===<br />
The [https://marble.kde.org/ Marble] community combines free data and open source to produce awesome map software. Find your way and explore the world!<br />
<br />
==== Project: Marble Indoor Maps ====<br />
'''Brief Explanation''': [https://play.google.com/store/apps/details?id=org.kde.marble.maps Marble Maps] brings the highly detailed OpenStreetMap to your Android devices. It features a crisp, beautiful map with an intuitive user interface. This project is about extending it to support indoor maps (e.g. selecting and showing different levels of a building).<br />
<br />
'''Expected Results''':<br />
* Marble extracts [https://wiki.openstreetmap.org/wiki/Simple_Indoor_Tagging indoor related OSM tags]<br />
* Floor and connection elements (e.g. room, wall, door, staircase) are shown in the map. Similar to [http://openlevelup.net/?lat=42.80043008955188&lon=-1.6367550194263458&zoom=19&tiles=0&level=0&transcend=1&unrendered=0&buildings=0&photos=0&notes=0 OpenLevelUp].<br />
* User interface to select floor levels and filtering of the map view based on the active floor level<br />
* Automatic adjustment of the floor level user interface (hide it when there are no indoor map elements in the view, select minimum/maximum floor level automatically)<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++, Qt, optionally [https://wiki.openstreetmap.org/wiki/Map_Features OSM] and [https://doc.qt.io/qt-5/qtqml-index.html QML].<br />
<br />
'''Mentor''': Dennis Nienhüser (IRC: Earthwings in #marble)<br />
<br />
'''Interested?''' Please read the [https://community.kde.org/GSoC#Instructions_for_students general KDE instructions], try to [https://community.kde.org/Marble/AndroidCompiling build Marble Maps on your own], have a look at our [https://phabricator.kde.org/project/view/38/ task board] and contact your prospective mentor, Dennis.<br />
<br />
==== Project: Material Marble Maps ====<br />
'''Brief Explanation''': [https://play.google.com/store/apps/details?id=org.kde.marble.maps Marble Maps] brings the highly detailed OpenStreetMap to your Android devices. It features a crisp, beautiful map with an intuitive user interface. This project is about redesigning it in [https://material.io/ Material Design].<br />
<br />
'''Expected Results''':<br />
* Marble Maps on Android follows the Google [https://material.io/ Material Design] Guidelines<br />
* Switch to the [https://doc-snapshots.qt.io/qt5-5.8/qtquickcontrols2-material.html Qt Material Style] as a base<br />
* Incorporate useful ideas and patterns from other resources, e.g. [http://papyros.io/qml-material/ Papyros]<br />
<br />
'''Knowledge Prerequisite''':<br />
* [https://doc.qt.io/qt-5/qtqml-index.html QML]. A background in design and basic knowledge in C++ and Qt will be helpful.<br />
<br />
'''Mentor''': Dennis Nienhüser (IRC: Earthwings in #marble)<br />
<br />
'''Interested?''' Please read the [https://community.kde.org/GSoC#Instructions_for_students general KDE instructions], try to [https://community.kde.org/Marble/AndroidCompiling build Marble Maps on your own], have a look at our [https://phabricator.kde.org/project/view/38/ task board] and contact your prospective mentor, Dennis.<br />
<br />
=== GCompris ===<br />
==== Project: finishing started activities ====<br />
'''Brief explanation''': GCompris is a an educational software suite comprising of numerous activities for children aged 2 to 10. Originally written in Gtk+ it's development team started to rewrite it from scratch in Qt Quick.<br />
<br />
'''Expected results''':<br />
The aim of this year is to complete and getting merged activities that were started but have not been finished.<br />
First phase is to check which activities can be continued, what is missing to be integrated (on code and graphic side) and then to complete them. You can find at https://cgit.kde.org/gcompris.git/refs/heads the list of the current branches (some of them need to be dropped, so contact us before starting working on one of them) and more information on <br />
https://phabricator.kde.org/project/profile/1/.<br />
<br />
The second aim is to refine current activities: some can be improved, whether improving the animation, adding sounds, tutorials... Some tasks already defined in the improvement section of phabricator are quite interesting.<br />
<br />
'''Knowledge Prerequisite''': By the start of GSoC you should<br />
<br />
Be interested in children’s education<br />
<br />
Be familiar with GCompris concept and content<br />
<br />
Basic knowledge in a programming language (a 1 year school course is enough)<br />
<br />
Be able to build the Qt Quick version of GCompris<br />
<br />
'''Application guide''':<br />
Continuing an activity already started or rewriting from scratch is something you have to check before writing your application. Provide a timeline in your application. If you haven't contributed yet please read http://gcompris.net/wiki/An_exercise_for_new_contributors.<br />
<br />
There are several info in the wiki: http://gcompris.net/wiki/Developer%27s_corner.<br />
<br />
''Feel free to contact us either on irc or by mail (gcompris-devel@kde.org)''<br />
<br />
'''Mentors''': Johnny Jazeix (IRC: JohnnyJ), Emmanuel Charruau (IRC: Allon1)<br />
<br />
=== LabPlot ===<br />
==== Project: Statistical analysis ====<br />
Currently LabPlot has only basic support for statistical data analysis by providing some basic measures of desciptive statistics in the spreadsheet. The goal of the project is to add more statistics relevant features (hypothesis tests, cluster analysis, ets.) to LabPlot.<br />
<br />
'''Expected results''':<br />
* evaluate available statistical open-source libraries which can be used for this project<br />
* determine a reasonable set of features and algorithms that can be added to LabPlot, compare here with other similar projects, and implement them<br />
* for the visualization of results of statictical calculations, implement new kind of reports for this, comparable to other similar projects<br />
<br />
'''Knowledge Prerequisite''':<br />
C++, Qt, basic statistics knowledge<br />
<br />
'''Mentor''': Alexander Semke and Stefan Gerlach<br />
<br />
<br />
==== Project: plotting of real-time data ====<br />
Currently, the visualization and analysis of data is only possible on static data that was imported into or generated in one of LabPlot's data containers. The goal of the project is to add support for streaming data.<br />
<br />
'''Expected results''':<br />
* adjust and extend the data containers, analysis algorithms and the plotting part of the application to support streaming data<br />
* add dialogs and wizards to configure this new kind of data sources<br />
<br />
'''Knowledge Prerequisite''':<br />
C++, Qt<br />
<br />
'''Mentor''': Stefan Gerlach and Alexander Semke<br />
<br />
=== Minuet (Software for Music Education) ===<br />
<br />
Minuet is a member of KDE-edu suite of educational applications and was first released in KDE Applications 16.04. Minuet aims at supporting students and teachers in many aspects of music education, such as ear training, first-sight reading, solfa, scales, rhythm, harmony, and improvisation. Minuet makes extensive use of MIDI capabilities to provide a full-fledged set of features regarding volume, tempo, and pitch changes, which makes Minuet a valuable tool for both novice and experienced musicians. Minuet features a rich set of ear training exercises and new ones can be seamlessly added in order to extend its functionalities and adapt it to several music education contexts.<br />
<br />
Minuet currently runs on Linux, Android ([https://ayushashah.wordpress.com/2016/08/20/it-only-takes-a-minuet-to-change-your-life/ Ayush Shah's 2016 Google Summer of Code project]), and Windows.<br />
<br />
Additional Information:<br />
* [https://minuet.kde.org Website (minuet.kde.org)]<br />
* [http://sandroandrade.org/tag/minuet/ Blog posts]<br />
* [https://www.youtube.com/watch?v=IxmyevpFErU (watch in HD) Demonstration video]<br />
* IRC channel: #kde-edu (nickname: sandroandrade)<br />
* [https://mail.kde.org/mailman/listinfo/kde-edu Mailing list]<br />
* Contacts:<br />
** sandroandrade AT kde DOT org<br />
** [https://t.me/andradesandro Telegram]<br />
<br />
===== Project: Singing and Clapping Capabilities =====<br />
<br />
'''Brief explanation''': current Minuet human-interaction mechanism comes down to the use of mouse clicks to point out the answer for a given ear training exercise. Obviously, singers and drummers/percussionists wouldn't have any valuable benefit of using Minuet unless it provides some mechanism to get exercises' answer from singing and clapping data captured from a computer-connected microphone. This project aims at implementing the features for recognizing pitch from voice data and hits from clapping data, both acquired from the computer microphone.<br />
<br />
'''Expected results''':<br />
* A reliable (to some extent) mechanism for detecting pitch from voice data.<br />
* A reliable mechanism for detecting clapping from audio data.<br />
* Both mechanisms may require calibration.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++/Qt/QML.<br />
* Digital Signal Processing.<br />
<br />
'''Mentor''': Sandro Andrade (IRC: sandroandrade)<br />
<br />
===== Project: Chord-melody Arrangement Generator =====<br />
<br />
'''Brief explanation''': Chord melody is an music arrangement style, generally adopted by guitarists, where melody is play alongside with some pieces of harmony (example [https://www.youtube.com/watch?v=2OX96DaOVV8 here]). Whilst the generation of chord melody arrangements is quite a creative task, some basic rules enables the implementation of automatic generators with satisfactory and interesting results. The generator works by receiving two input data: the melody and the harmonic progression (sequence of chords) and then generates a chord melody arrangement for such a song. The generation should consider parameters such as maximum distance between fingers, use of not of tensions, and others. Input and output can be handled for example by using the [https://www.musicxml.com/ MusicXML] format. Displaying the arrangement in a spreadsheet is also expected (spreadsheet support in Minuet is in progress).<br />
<br />
'''Expected results''':<br />
* Design and implementation of MusicXML I/O capabilities in Minuet (libraries already available).<br />
* Design and implementation of the chord melody generator<br />
* Spreadsheet integration for exhibiting the final generated arrangement.<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++/Qt/QML.<br />
* Minimal background regarding music harmony.<br />
<br />
'''Mentor''': Sandro Andrade (IRC: sandroandrade)<br />
<br />
===== Project: Multiple-Instrument View Framework =====<br />
<br />
'''Brief explanation''': Minuet is currently able to visually represent intervals, chords, and scales only on the piano keyboard. Supporting other musical instruments, with the accurate handling of their particular idiosyncrasies, is a feature of paramount importance. Aspects such as fingering and execution techniques are highly dependent on which musical instrument they were created to. A flexible architecture should be designed to allow the seamless integration of new musical instruments as Minuet plugins. Minuet's core should not only provide all information generally required by all musical instruments, but also support the handling of instrument-specific information, when available.<br />
<br />
'''Expected results''':<br />
* Design and implementation of a multiple-instrument visualization framework.<br />
* Refactoring of piano keyboard view as a framework plugin.<br />
* Implementation of a framework plugin for a new instrument (e.g. guitar or bass).<br />
<br />
'''Knowledge Prerequisite''':<br />
* C++/Qt/QML.<br />
* Minimal music background for a instrument other than the piano.<br />
<br />
'''Mentor''': Sandro Andrade (IRC: sandroandrade)<br />
<br />
===Trojitá===<br />
<br />
[http://trojita.flaska.net/ Trojitá] is a fast IMAP e-mail client. Since late 2012, it is a part of KDE's extragear. The project focuses on delivering a usable, fast, standards-compliant, cross-platform and reliable e-mail client which can scale from cell phones to huge e-mail archives without annoying slowdowns.<br />
<br />
==== Project: Multiaccount support ====<br />
<br />
'''Brief explanation:'''<br />
Trojitá's GUI only shows one IMAP account at once. The scope of this task is to analyze what needs to be done, and implement the required changes for making it possible to show multiple IMAP accounts. General bugfixes are expected in the rest of the time.<br />
<br />
'''Expected results:''' Full support for multiple IMAP accounts, including unit test coverage.<br />
<br />
'''Knowledge Prerequisite:''' C++, Qt, contributing to Trojitá prior to GSoC<br />
<br />
'''Mentor:''' Jan Kundrát <jkt@kde.org><br />
<br />
===KDevelop===<br />
==== Project: Improve QML/JS integration ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Improve QML/JS integration: Module path dialog, proper handling of QRC imports, navigation for 'import ...' lines, etc.<br />
<br />
'''Knowledge Prerequisite:'''<br />
QML, Qt and C++.<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Go Integration ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Proper semantic highlighting, code completion and projects integration.<br />
<br />
'''Knowledge Prerequisite:'''<br />
Go, C++, some Qt<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Rust integration ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Proper semantic highlighting, code completion and projects integration.<br />
<br />
'''Knowledge Prerequisite:'''<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Windows Debugger integration (CDB) ====<br />
<br />
'''Brief explanation:'''<br />
<br />
'''Expected results:''' <br />
Make it possible to debug applications using CDB. That is managing breakpoints and analyzing the state when the debug session is paused.<br />
<br />
'''Knowledge Prerequisite:'''<br />
CDB, C++, some Qt<br />
<br />
'''Mentor:'''<br />
<br />
==== Project: Bundling systems integration in KDevelop====<br />
<br />
'''Brief explanation:'''<br />
Nowadays these systems' adoption is more and more common in GNU/Linux, it would be interesting to integrate the development of applications under these systems.<br />
This project could address Flatpak, Snap and/or Docker systems.<br />
<br />
'''Expected results:''' <br />
Full project manager integration, application execution and debugging.<br />
<br />
'''Knowledge Prerequisite:'''<br />
C++, some Qt, experience with the implemented systems would be welcome.<br />
<br />
'''Mentor:''' Aleix</div>Cauliergilleshttps://community.kde.org/index.php?title=Digikam/CodingSprint2014&diff=56399Digikam/CodingSprint20142015-03-14T21:52:29Z<p>Cauliergilles: /* digiKam Core */</p>
<hr />
<div>== KDE Framework Port ==<br />
<br />
=== Branches Creation ===<br />
<br />
All port code must be stored in dedicated "frameworks" git branch for each project. Branch must be created from master.<br />
<br />
<source lang="bash"><br />
$>git checkout master<br />
$>git pull --rebase<br />
$>git checkout -b frameworks<br />
$>git push origin frameworks:frameworks<br />
$>git branch -a<br />
* frameworks<br />
master<br />
remotes/origin/HEAD -> origin/master<br />
remotes/origin/frameworks<br />
remotes/origin/master<br />
</source><br />
<br />
<br />
KF5 Repositories list is given below :<br />
<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkexiv2/repository/show?rev=frameworks Libkexiv2]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkdcraw/repository/show?rev=frameworks Libkdcraw]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkipi/repository/show?rev=frameworks Libkipi]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkface/repository/show?rev=frameworks Libkface]<br />
* [https://projects.kde.org/projects/extragear/libs/libkgeomap/repository/show?rev=frameworks Libkgeomap]<br />
* [https://projects.kde.org/projects/extragear/graphics/digikam/digikam-software-compilation/repository/show?rev=frameworks digiKam Software Compilation]<br />
* [https://projects.kde.org/projects/extragear/graphics/kipi-plugins/repository/show?rev=frameworks Kipi-plugins]<br />
* [https://projects.kde.org/projects/extragear/graphics/digikam/repository/show?rev=frameworks digiKam]<br />
<br />
=== Kipi-plugins Refactoring ===<br />
<br />
A lots of tools are not maintained since a while, other one have been never finalized. See the list of plugins which will be ported or not :<br />
<br />
* Tools which can be ported as well :<br />
** panorama<br />
** expoblending<br />
** gpssync<br />
** sendimages<br />
** timeadjust<br />
** metadataedit<br />
** videoslideshow<br />
** advancedslideshow<br />
** flashexport<br />
** kmlexport<br />
** acquireimages<br />
** calendar<br />
** dngconverter<br />
** printimages<br />
** imageviewer<br />
<br />
* Tools in pending stage :<br />
** dlnaexport <=== Needs HUpnp lib Qt5 port<br />
** htmlexport <=== Nobody maintain this code since a while, but tool still used.<br />
** photolayoutseditor <=== A complex but powerful tool. Will be complex to port.<br />
** removeredeyes <=== We can share red eyes removal core implementation in libkface in way to share with other KDE applications and replace digiKam Image Editor tool by this code. A new digiKam BQM tool must be created. A GSoC 2015 project can be planned about this topic.<br />
<br />
* Web export tools which must be factored (same settings widgets, common dialog, common high level interface to process import/export). Another GSoC 2015 project can be planned about this topic.<br />
** facebook<br />
** picasawebexport<br />
** rajceexport<br />
** shwup<br />
** debianscreenshots<br />
** dropbox<br />
** googledrive<br />
** imageshackexport<br />
** kioexportimport<br />
** piwigoexport<br />
** smug<br />
** flickrexport<br />
** yandexfotki<br />
** mediawiki <=== need to port libmediawiki from extragear/libs/.<br />
** vkontakte <=== require libkvkontakte from extragear/libs/.<br />
<br />
* Tools never finalized (can be moved to attic for the moment) :<br />
** imgurexport <=== require libqtkoauth from SF.net<br />
** photivointegration<br />
** jalbumexport<br />
** wallpaper<br />
<br />
* Tools obsolete (can be moved to attic for the moment) :<br />
** batchprocessimages <=== replaced by digiKam BQM<br />
** rawconverter <=== replaced by digiKam BQM<br />
** jpeglossless <=== replaced by new digiKam core tool<br />
** kopete <=== KF5 will use new API<br />
** ipodexport <=== work only with very old Apple devices.<br />
** galleryexport <=== Gallery web service is not maintained since a while. Gallery project is dead.<br />
<br />
=== KF5/Qt5 Port Status ===<br />
<br />
==== Libkexiv2 ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkexiv2/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|<br />
* C++ auto_ptr warnings from Exiv2 API disabled.<br />
* Library depend of :<br />
** KF5::I18n (translations)<br />
** KF5::TextWidgets (MsgTextEdit is based on KTextEdit)<br />
|-<br />
| '''libkexiv2/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|Code do not depend of KF5<br />
|}<br />
<br />
==== Libkdcraw ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkdcraw/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Veaceslav<br />
|<br />
* C++ auto_ptr warnings from Libraw API disabled.<br />
* ThreadWeaver and Solid dependencies removed.<br />
* RActionThreadBase is ported to QThreadPool + QRunnable API instead ThreadWeaver.<br />
* KIntNumInput and KDoubleNumInput are deprecated and removed as dependencies. We use Krita Int and Double input widgets instead. See [https://bugs.kde.org/show_bug.cgi?id=284216 bug #284216] for details.<br />
* Library depend of:<br />
** KF5::I18n (translations).<br />
** KF5::ConfigCore (KConfigGroup used in widgets).<br />
|-<br />
| '''libkdcraw/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Veaceslav<br />
|<br />
* Code do not depend of KF5<br />
*Multithreaded RAW to PNG GUI test program now use DCrawSettingsWidget to tune Raw decoding settings, and is ported to RActionThreadBase to process conversions on all core CPU.<br />
|}<br />
<br />
==== Libkipi ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkipi/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Mohamed<br />
|<br />
* libkipi/version.h file renamed as libkipi_config.h to host only SO version ID shared with kipi plugins.<br />
* API changes a little bit : path() => url().<br />
*Library depend of :<br />
** KF5::I18n (translations)<br />
** KF5::Config (KConfigGroup and KSharedConfig)<br />
** KF5::XmlGui (plugins based on KXMLGuiCLient)<br />
** KF5::Service (plugins use KService)<br />
|-<br />
| '''libkipi/test'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Mohamed<br />
|<br />
* moc header must be placed at end of plugin implementation. See all plugin_helloworld.cpp comments for details.<br />
* K_PLUGIN_EXPORT macro at start of plugin implementation can be dropped.<br />
* '''kbuildsycoca5 --noincremental''' must be run to found new plugin installed on the system if KF5 is not the current active desktop.<br />
|}<br />
<br />
==== Libkface ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkface/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|Library only depend of KF5::I18n<br />
|-<br />
| '''libkface/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
| Code do not depend of KF5<br />
|}<br />
<br />
==== Libkgeomap ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkgeomap/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Mohamed<br />
|<br />
* Library depend of:<br />
** KF5::I18n (translations).<br />
** KF5::Config (KConfigGroup used in widgets).<br />
* Needs Marble code from [https://projects.kde.org/projects/kde/kdeedu/marble/repository/show?rev=master master git branch] compiled with cmake option '''-DQT5BUILD=ON'''.<br />
* <span style="background:salmon">TODO</span> We need to detect the Marble version somehow, to avoid linking KF5 build against Qt4 version of Marble. We still use FindMarble cmake script from KDE4. Marble need to be ported as pure KF5 frameworks component.<br />
* <span style="background:lightgreen">DONE</span> KHTML based class HTMLWidget must be ported to Qt5::Webkit.<br />
|-<br />
| '''libkgeomap/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''libkgeomap/calibrator'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''libkgeomap/demo'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* Needs libkexiv2 from KF5 to compile (optional).<br />
|}<br />
<br />
==== Kipi-plugins ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''Kipi-plugins/common'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| yes<br />
|Gilles, Laurent<br />
|<br />
* New MacroLocalLibs.cmake wrapper added to handle local or system wide shared libraries.<br />
* Plugins must be linked at least with:<br />
**KF5::Parts<br />
**KF5::KDELibs4Support<br />
**${KF5Kipi_LIBRARIES}<br />
**${KF5KExiv2_LIBRARIES}<br />
**${KF5KDcraw_LIBRARIES}<br />
**KF5kipiplugins<br />
* Use '''kipiplugins_debug.h''' header in plugins to handle debug space.<br />
* ${KF5*_LIBRARIES} are populated by MacroLocalLibs.cmake<br />
* Add a new common class to process images resizement based SendImage::ImageResize<br />
|-<br />
| '''Kipi-plugins/tests'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins Documentation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles<br />
|<br />
|-<br />
| '''Kipi-plugins/timeadjust'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/sendimages'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/kmlexport'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/printimages'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
| Postscript support have been removed from QPrinter. Option is now removed from assistant.<br />
|-<br />
| '''Kipi-plugins/flashexport'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|}<br />
<br />
==== digiKam Software Compilation ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''digiKam Software Compilation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| not applicable<br />
| not applicable<br />
| Gilles<br />
|<br />
* 2 new Cmake options have been add to enable/disable digiKam core and Kipi-plugins compilation (digiKam still disabled by default for the moment).<br />
* List of checkout repositories managed by "download-repos" scripts is reduced to current sub projects already ready to support KF5. "frameworks" branches are automatically switched. See ".gitslaves" for details.<br />
* New MacroLocalLibs.cmake must be used in Kipi-plugins and digiKam Core to wrap local or system libraries (libkipi, likdcraw, libkexiv2, etc) when compilation is done under SC or not.<br />
|-<br />
| '''digiKam Documentation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles<br />
|<br />
|}<br />
<br />
==== digiKam Core ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''digiKam/data'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|<br />
|-<br />
| '''digiKam/libs'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Alin, Veaceslav<br />
|<br />
* <span style="background:salmon">TODO</span> ProxyLineEdit is based on KLineEdit and must be ported to QLineEdit, but it use KLineEdit::clearButtonUsedSize() which do not exist with QLineEdit.<br />
* <span style="background:orange">UNCOMPLETE</span> SearchTextBar is based on KLineEdit and must be ported to QLineEdit, but it use completion model class ModelCompletion based on KCompletion Which must be ported to QCompleter.<br />
* <span style="background:lightgreen">DONE</span> ICCSettings : Q_WS__X11 have been removed with Qt5. X11 detection is performed by CMake and rules are set as definition into digikam_config.h<br />
* <span style="background:salmon">TODO</span> Port LoadingCache from KDirWatch to QFileSystemWatcher.<br />
* <span style="background:salmon">TODO</span> When QFileSystemWtyacher port is complete, check if KInotify still mandatory.<br />
|-<br />
| '''digiKam/app'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:orange">UNCOMPLETE</span> AddTagsLineEdit is based on KLineEdit and must be ported to QLineEdit, but it use completion model class ModelCompletion based on KCompletion Which must be ported to QCompleter.<br />
* <span style="background:lightgreen">DONE</span> WelcomePageView ported from KHTMLPart to QWebView. KParts and KHtml dependencies removed from digiKam.<br />
* <span style="background:lightgreen">DONE</span> WelcomePageView HTML rendering is completly broken. Check if CSS and HTML code are conform. Note : this is not due to Qt5 port as KHTML done the same result. New layout introduced to host best users photo as background image. [https://www.flickr.com/photos/digikam/16628134940/ See example here for details].<br />
* <span style="background:lightgreen">DONE</span> MediaPlayerView ported from Phonon to QMediaPlayer. Phonon dependency removed from digiKam. New CMake option add to enable/disable QMediaPlayer support.<br />
* <span style="background:salmon">TODO</span> Port AlbumWatch from KDirWatch to QFileSystemWatcher<br />
|-<br />
| '''digiKam/utilities'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Alin, Mohamed<br />
|<br />
* <span style="background:salmon">TODO</span> CameraController use KProcess and KMacroExpander and need to be ported to QProcess.<br />
|-<br />
| '''digiKam/imageplugins'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> Remove editor plugins interface and move tools directly to editor implementation.<br />
|-<br />
| '''digiKam/kioslave'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> Remove KIO-Slaves and move code to database core using multithreading. See this [https://community.kde.org/GSoC/2015/Ideas#Project:_Re-write_database_KIO-slaves_as_pure_Qt5_using_multithreading GoSC 2015 project for details].<br />
|-<br />
| '''digiKam/showfoto'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''digiKam/databaseserver'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''digiKam/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> 2 test tools do not link yet and are disable from compilation rules<br />
|}<br />
<br />
=== Recommendations ===<br />
<br />
Porting to KF5 is divided in 4 stages:<br />
<br />
1/ Change CMake files. Some Laurent scripts do this stuff. We use now<br />
ECM scripts collection from KDE core to manage dependencies and report on the<br />
console. Some macros disappear, and are replaced by new ones. For this<br />
job, it's recommended to look well all done in CMake files from libkexiv2<br />
and libkdcraw already ported and polished.<br />
<br />
2/ Port C++ code using KDE4Support. This include older classes from Qt4<br />
and KDE4 to make transition faster. This will help to have quickly a<br />
code compilable, but this will generate a lots of deprecated warnings.<br />
First regression tests must be done at this stage to see if nothing is broken.<br />
<br />
3/ Port C++ code to pure KF5. The goal of KF5 is to reduce KDELibs<br />
fingerprint everywhere, when it's possible. Qt API will be used in<br />
priority against KF5 API. But sometime, this will be not possible as<br />
well, without big changes. A lot of KDE API have migrated to Qt5<br />
(as for ex : KUrl -> QUrl and kDebug ->qDebug). It's sound like KDELibs<br />
will become an incubator for new implementations which will move later<br />
to Qt. Also, to have the most of code using pure Qt5 will simplify<br />
future transitions more easy to do. Removing KDE4Support dependency<br />
will force to use non-deprecated KF5 API.<br />
<br />
4/ Port C++ code to pure Qt5. Porting most of KF5 Api to use Qt5 instead is<br />
prefered, when it's possible. Another important change in Qt5 is the non-support<br />
of char pointer with QString.<br />
<br />
In first stage we must use '''remove_definitions(-DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII)'''<br />
in CMake script to compile code. These definitions force to not use deprecated QString methods.<br />
<br />
Another definition to add while Qt5 porting is '''add_definitions(-DQT_NO_URL_CAST_FROM_STRING)''' about cast between QString and QUrl.<br />
<br />
In last stage we must use '''remove_definition(-DQT_DEPRECATED_SINCE(5,0))''' in CMake script to compile code. These definitions force to disable deprecated methods in Qt API.<br />
<br />
=== Common changes to port code ===<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Original Code<br />
! Ported Code<br />
! Remarks<br />
|-<br />
| ...section of code not yet ported...<br />
|<br />
<source lang="cpp-qt"><br />
#pragma message("PORT QT5")<br />
/*<br />
...section of code not yet ported...<br />
*/<br />
</source><br />
| Not yet ported code sections must be commented with compiler warnings printed on the console<br />
|-<br />
| KDE4_BUILD_TESTS=ON<br />
| '''BUILD_TESTING=ON'''<br />
| CMake flag to build tests sub-dir.<br />
|-<br />
| CMAKE_BUILD_TYPE=debugfull<br />
| '''CMAKE_BUILD_TYPE=debug'''<br />
| CMake flag to build code with debug symbols.<br />
|-<br />
| kDebug() / kWarning() / kError()<br />
| '''qCDebug(FOO_LOG) / qCWarning(FOO_LOG) / qCCritical(FOO_LOG)'''<br />
|<br />
* New "foo_debug.h" and "foo_debug.cpp" files must be created to declare debug space.<br />
* "foo_debug.h" is not shared. For shared a library, this header must be placed as private in implementation files, not header files.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
#include "foo.moc"<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
#include "foo.h"<br />
</source><br />
|<br />
* To prevent compilation errors with Qt5. Qt will generate moc_foo.h files instead. Header file of a class declaration must be placed on top of included header files list from implementation file.<br />
* Special case : KF5 plugin factory needs moc header file included at end of plugin implementation to prevent broken linking.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::directory()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl::adjusted(QUrl::RemoveFilename).path()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDiskFreeSpaceInfo<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStorageInfo<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::setFileName(newFileName)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl::setPath(QUrl::path() + newFileName)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl url;<br />
url.adjustPath(KUrl::AddTrailingSlash);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
url.setPath(url.path() + '/');<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDialog::spacingHint()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDialog::marginHint()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::style()->pixelMetric(QStyle::PM_DefaultChildMargin)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KComponentData::mainComponent().componentName()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::applicationName()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KComponentData::mainComponent().aboutData()->homepage()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KAboutData::applicationData().homepage()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KIconLoader::SmallIcon("icon_name", size)<br />
</source><br />
or<br />
<source lang="cpp-qt"><br />
KIconLoader::global()->loadIcon("icon_name", size)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QIcon::fromTheme("icon_name").pixmap(size)<br />
</source><br />
|<br />
*Adjust size value :<br />
**Small = 16 (default from KIconLoader::SmallIcon()),<br />
**SmallMedium = 22,<br />
**Medium = 32,<br />
**Large = 48,<br />
**Huge = 64,<br />
**Enormous = 128<br />
* Icon must be installed with desktop theme icons.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::installPath("data") + QString("filename")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::GenericDataLocation,<br />
QString("filename"))<br />
</source><br />
| File to open in read-only. File already exist.<br />
<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::installPath("xdgdata-apps") + QString("filename")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::ApplicationsLocation,<br />
QString("filename"))<br />
</source><br />
| File to open in read-only. File already exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("data", QString("filename"))<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ '/' + QString("filename")<br />
</source><br />
| File to open in read-only. File already exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QString dir = KStandardDirs::locateLocal("data",<br />
QString("dirname"), true)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QString dir =<br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ '/' + QString("dirname");<br />
QDir().mkpath(dir);<br />
</source><br />
| Dir to open in read-write. Create dir if it do not exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrlLabel<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RActiveLabel<br />
</source><br />
|<br />
* Slot used to process url can be dropped.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KSeparator<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RLineWidget<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KXmlGuiWindow::restoreWindowSize(group);<br />
<br />
KDialog::restoreDialogSize(group);<br />
</source><br />
and<br />
<source lang="cpp-qt"><br />
KXmlGuiWindow::saveWindowSize(group);<br />
<br />
KDialog::saveDialogSize(group);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KWindowConfig::restoreWindowSize(windowHandle(), group);<br />
</source><br />
and<br />
<source lang="cpp-qt"><br />
KWindowConfig::saveWindowSize(windowHandle(), group);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KVBox* const vbox = new KVBox(this);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RVBox* const vbox = new KDcrawIface::RVBox(this);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KHBox* const hbox = new KHBox(this);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RHBox* const hbox = new KDcrawIface::RHBox(this);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KIO::NetAccess::del(url, QApplication::activeWindow());<br />
<br />
KIO::NetAccess::mkdir(url, QApplication::activeWindow());<br />
<br />
KIO::NetAccess::dircopy(srcUrl, dstUrl, QApplication::activeWindow())<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
auto deleteJob = KIO::file_delete(url);<br />
KJobWidgets::setWindow(deleteJob, QApplication::activeWindow());<br />
deleteJob->exec();<br />
<br />
auto mkdirJob = KIO::mkdir(url);<br />
KJobWidgets::setWindow(mkdirJob, QApplication::activeWindow());<br />
mkdirJob->exec();<br />
<br />
auto dircopyJob = KIO::copy(srcUrl, dstUrl);<br />
KJobWidgets::setWindow(dircopyJob, QApplication::activeWindow());<br />
dircopyJob->exec();<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KD::rename(src, dst)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QFile::rename(src, dst)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KToolInvocation::invokeBrowser(url)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QDesktopServices::openUrl(url)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KGlobalSettings::singleClick()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
qApp->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::directory(KUrl::ObeyTrailingSlash)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url = adjusted(QUrl::RemoveFilename);<br />
url.adjusted(QUrl::StripTrailingSlash).path()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KImageIO::typeForMime(str)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMimeDatabase().mimeTypeForName(str)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KTemporaryFile temp;<br />
temp.setPrefix(prefixStr);<br />
temp.setSuffix(suffixStr);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QTemporaryFile temp;<br />
temp.setFileTemplate(prefixStr + QLatin1String("XXXXXX") + suffixStr);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
K_GLOBAL_STATIC<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
Q_GLOBAL_STATIC<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KMenu::addTitle()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMenu::addSection()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locate("data", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::GenericDataLocation, "file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("data", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("appdata", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::DataLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("cache", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("tmp", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QDir::tempPath() + QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::makeDir(path, permission);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
if (!QDir(path).exists())<br />
{<br />
if (QDir().mkpath(path))<br />
{<br />
QFile f(path);<br />
f.setPermissions(permission);<br />
}<br />
}<br />
</source><br />
|<br />
permission = QFile::ReadUser | QFile::WriteUser | QFile::ExeUser = 0700<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrlRequester<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RFileSelector<br />
</source><br />
|<br />
To select local only file or path, no need KUrlRequester.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KActionMenu<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMenu<br />
</source><br />
|<br />
Use QMenu::menuAction() to get Action instance of menu to plug in action collection.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KToggleAction<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QAction<br />
</source><br />
|<br />
Use QAction::setCheckable(true) to switch Action as toggle state.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
url.addQueryItem(key, value);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
QUrlQuery q(url);<br />
q.addQueryItem(key, value);<br />
url.setQuery(q);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QPixmap pix, alphaMask;<br />
pix.setAlphaChannel(mask);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QPixmap pix, alphaMask;<br />
QPainter p(&pix);<br />
p.setOpacity(0.2);<br />
p.drawPixmap(0, 0, alphaMask);<br />
p.end();<br />
</source><br />
|<br />
|}<br />
<br />
=== Link to documentation to port code ===<br />
<br />
* [https://community.kde.org/Frameworks/Porting_Notes KDE4 to KF5 porting guide]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/kdelibs4support/html/deprecated.html KDE4 deprecated list]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/kdelibs4support/html/classKCalendarSystem.html#a6853ea0521ea23923d3a104b1a178782 KCalendarSystem format strings] to port to [http://doc.qt.io/qt-5/qdate.html#toString QDate format strings] and [http://doc.qt.io/qt-5/qtime.html#toString QTime format strings]<br />
<br />
* [https://community.kde.org/Frameworks/Porting_Notes/KStandardDirs KStandardDirs to Qt5 porting guide]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/index.html KF5 API]<br />
<br />
* [http://qt-project.org/wiki/Transition_from_Qt_4.x_to_Qt5 Qt4 to Qt5 porting guide]<br />
<br />
* [http://qt-project.org/doc/qt-5/classes.html Qt5 API]<br />
<br />
* [https://projects.kde.org/projects/qt5?jump=repository Qt5 project]<br />
<br />
* [http://api.kde.org/ecm/index.html ECM - Documentation]<br />
<br />
* [https://techbase.kde.org/Development/ECM_SourceIncompatChanges ECM - KDELibs4 macro port]<br />
<br />
* [https://projects.kde.org/projects/kdesupport/extra-cmake-modules ECM - Extra CMake Module project]<br />
<br />
=== Scripts to port code ===<br />
<br />
Laurent Montel has written scripts to port CMake and C++ code to KF5/Qt5 and remove kdelibs4support dependency. There are available [https://projects.kde.org/projects/kde/kdesdk/kde-dev-scripts/repository/revisions/master/show/kf5 in this repository] (see kf5 sub-dir).<br />
<br />
Scripts must be applied in this order, with a test compilation between each one :<br />
<br />
* Full safe scripts :<br />
** convert-to-k4aboutdata.pl (first one to apply, this help to compile)<br />
** adapt_cmakelists_file.pl (to convert CMake scripts, but code must don't be capititalized)<br />
** remove-kde4support.pl<br />
** convert-kicon.pl<br />
** convert-kmenu.pl<br />
** convert-kshortcut.pl<br />
** convert-kcolordialog.pl<br />
** convert-klistwidget.pl<br />
** convert-kmd5.pl<br />
** convert-kmenubar.pl<br />
** convert-ksplashscreen.pl<br />
** convert-kdebug.pl<br />
<br />
* Less safe scripts :<br />
** convert-kintnuminput.pl<br />
** convert-kintspinbox.pl<br />
** convert-ktextbrowser.pl<br />
** convert-kfontcombobox.pl<br />
<br />
* Scripts which need to check in-deep all changes :<br />
** convert-kvbox.pl<br />
** convert-kdialog.pl<br />
** convert-kcmdlineargs.pl<br />
** convert-kdebug-with-argument.sh (this one change kDebug(1556) en qCDebug with some info after to convert)<br />
** convert-kmimetype.pl<br />
<br />
* Last scripts to apply :<br />
** clean-forward-declaration.sh (remove forward declaration, to do when all compile fine)<br />
** clean-includes.sh (try to remove not used includes, not safe to 100%)<br />
** port_to_autogenerate_export_header.sh (convert to new signal/slot API, not safe to 100%)</div>Cauliergilleshttps://community.kde.org/index.php?title=Digikam/CodingSprint2014&diff=56398Digikam/CodingSprint20142015-03-09T09:22:09Z<p>Cauliergilles: /* digiKam Core */</p>
<hr />
<div>== KDE Framework Port ==<br />
<br />
=== Branches Creation ===<br />
<br />
All port code must be stored in dedicated "frameworks" git branch for each project. Branch must be created from master.<br />
<br />
<source lang="bash"><br />
$>git checkout master<br />
$>git pull --rebase<br />
$>git checkout -b frameworks<br />
$>git push origin frameworks:frameworks<br />
$>git branch -a<br />
* frameworks<br />
master<br />
remotes/origin/HEAD -> origin/master<br />
remotes/origin/frameworks<br />
remotes/origin/master<br />
</source><br />
<br />
<br />
KF5 Repositories list is given below :<br />
<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkexiv2/repository/show?rev=frameworks Libkexiv2]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkdcraw/repository/show?rev=frameworks Libkdcraw]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkipi/repository/show?rev=frameworks Libkipi]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkface/repository/show?rev=frameworks Libkface]<br />
* [https://projects.kde.org/projects/extragear/libs/libkgeomap/repository/show?rev=frameworks Libkgeomap]<br />
* [https://projects.kde.org/projects/extragear/graphics/digikam/digikam-software-compilation/repository/show?rev=frameworks digiKam Software Compilation]<br />
* [https://projects.kde.org/projects/extragear/graphics/kipi-plugins/repository/show?rev=frameworks Kipi-plugins]<br />
* [https://projects.kde.org/projects/extragear/graphics/digikam/repository/show?rev=frameworks digiKam]<br />
<br />
=== Kipi-plugins Refactoring ===<br />
<br />
A lots of tools are not maintained since a while, other one have been never finalized. See the list of plugins which will be ported or not :<br />
<br />
* Tools which can be ported as well :<br />
** panorama<br />
** expoblending<br />
** gpssync<br />
** sendimages<br />
** timeadjust<br />
** metadataedit<br />
** videoslideshow<br />
** advancedslideshow<br />
** flashexport<br />
** kmlexport<br />
** acquireimages<br />
** calendar<br />
** dngconverter<br />
** printimages<br />
** imageviewer<br />
<br />
* Tools in pending stage :<br />
** dlnaexport <=== Needs HUpnp lib Qt5 port<br />
** htmlexport <=== Nobody maintain this code since a while, but tool still used.<br />
** photolayoutseditor <=== A complex but powerful tool. Will be complex to port.<br />
** removeredeyes <=== We can share red eyes removal core implementation in libkface in way to share with other KDE applications and replace digiKam Image Editor tool by this code. A new digiKam BQM tool must be created. A GSoC 2015 project can be planned about this topic.<br />
<br />
* Web export tools which must be factored (same settings widgets, common dialog, common high level interface to process import/export). Another GSoC 2015 project can be planned about this topic.<br />
** facebook<br />
** picasawebexport<br />
** rajceexport<br />
** shwup<br />
** debianscreenshots<br />
** dropbox<br />
** googledrive<br />
** imageshackexport<br />
** kioexportimport<br />
** piwigoexport<br />
** smug<br />
** flickrexport<br />
** yandexfotki<br />
** mediawiki <=== need to port libmediawiki from extragear/libs/.<br />
** vkontakte <=== require libkvkontakte from extragear/libs/.<br />
<br />
* Tools never finalized (can be moved to attic for the moment) :<br />
** imgurexport <=== require libqtkoauth from SF.net<br />
** photivointegration<br />
** jalbumexport<br />
** wallpaper<br />
<br />
* Tools obsolete (can be moved to attic for the moment) :<br />
** batchprocessimages <=== replaced by digiKam BQM<br />
** rawconverter <=== replaced by digiKam BQM<br />
** jpeglossless <=== replaced by new digiKam core tool<br />
** kopete <=== KF5 will use new API<br />
** ipodexport <=== work only with very old Apple devices.<br />
** galleryexport <=== Gallery web service is not maintained since a while. Gallery project is dead.<br />
<br />
=== KF5/Qt5 Port Status ===<br />
<br />
==== Libkexiv2 ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkexiv2/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|<br />
* C++ auto_ptr warnings from Exiv2 API disabled.<br />
* Library depend of :<br />
** KF5::I18n (translations)<br />
** KF5::TextWidgets (MsgTextEdit is based on KTextEdit)<br />
|-<br />
| '''libkexiv2/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|Code do not depend of KF5<br />
|}<br />
<br />
==== Libkdcraw ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkdcraw/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Veaceslav<br />
|<br />
* C++ auto_ptr warnings from Libraw API disabled.<br />
* ThreadWeaver and Solid dependencies removed.<br />
* RActionThreadBase is ported to QThreadPool + QRunnable API instead ThreadWeaver.<br />
* KIntNumInput and KDoubleNumInput are deprecated and removed as dependencies. We use Krita Int and Double input widgets instead. See [https://bugs.kde.org/show_bug.cgi?id=284216 bug #284216] for details.<br />
* Library depend of:<br />
** KF5::I18n (translations).<br />
** KF5::ConfigCore (KConfigGroup used in widgets).<br />
|-<br />
| '''libkdcraw/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Veaceslav<br />
|<br />
* Code do not depend of KF5<br />
*Multithreaded RAW to PNG GUI test program now use DCrawSettingsWidget to tune Raw decoding settings, and is ported to RActionThreadBase to process conversions on all core CPU.<br />
|}<br />
<br />
==== Libkipi ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkipi/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Mohamed<br />
|<br />
* libkipi/version.h file renamed as libkipi_config.h to host only SO version ID shared with kipi plugins.<br />
* API changes a little bit : path() => url().<br />
*Library depend of :<br />
** KF5::I18n (translations)<br />
** KF5::Config (KConfigGroup and KSharedConfig)<br />
** KF5::XmlGui (plugins based on KXMLGuiCLient)<br />
** KF5::Service (plugins use KService)<br />
|-<br />
| '''libkipi/test'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Mohamed<br />
|<br />
* moc header must be placed at end of plugin implementation. See all plugin_helloworld.cpp comments for details.<br />
* K_PLUGIN_EXPORT macro at start of plugin implementation can be dropped.<br />
* '''kbuildsycoca5 --noincremental''' must be run to found new plugin installed on the system if KF5 is not the current active desktop.<br />
|}<br />
<br />
==== Libkface ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkface/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|Library only depend of KF5::I18n<br />
|-<br />
| '''libkface/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
| Code do not depend of KF5<br />
|}<br />
<br />
==== Libkgeomap ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkgeomap/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Mohamed<br />
|<br />
* Library depend of:<br />
** KF5::I18n (translations).<br />
** KF5::Config (KConfigGroup used in widgets).<br />
* Needs Marble code from [https://projects.kde.org/projects/kde/kdeedu/marble/repository/show?rev=master master git branch] compiled with cmake option '''-DQT5BUILD=ON'''.<br />
* <span style="background:salmon">TODO</span> We need to detect the Marble version somehow, to avoid linking KF5 build against Qt4 version of Marble. We still use FindMarble cmake script from KDE4. Marble need to be ported as pure KF5 frameworks component.<br />
* <span style="background:lightgreen">DONE</span> KHTML based class HTMLWidget must be ported to Qt5::Webkit.<br />
|-<br />
| '''libkgeomap/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''libkgeomap/calibrator'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''libkgeomap/demo'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* Needs libkexiv2 from KF5 to compile (optional).<br />
|}<br />
<br />
==== Kipi-plugins ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''Kipi-plugins/common'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| yes<br />
|Gilles, Laurent<br />
|<br />
* New MacroLocalLibs.cmake wrapper added to handle local or system wide shared libraries.<br />
* Plugins must be linked at least with:<br />
**KF5::Parts<br />
**KF5::KDELibs4Support<br />
**${KF5Kipi_LIBRARIES}<br />
**${KF5KExiv2_LIBRARIES}<br />
**${KF5KDcraw_LIBRARIES}<br />
**KF5kipiplugins<br />
* Use '''kipiplugins_debug.h''' header in plugins to handle debug space.<br />
* ${KF5*_LIBRARIES} are populated by MacroLocalLibs.cmake<br />
* Add a new common class to process images resizement based SendImage::ImageResize<br />
|-<br />
| '''Kipi-plugins/tests'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins Documentation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles<br />
|<br />
|-<br />
| '''Kipi-plugins/timeadjust'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/sendimages'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/kmlexport'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/printimages'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
| Postscript support have been removed from QPrinter. Option is now removed from assistant.<br />
|-<br />
| '''Kipi-plugins/flashexport'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|}<br />
<br />
==== digiKam Software Compilation ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''digiKam Software Compilation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| not applicable<br />
| not applicable<br />
| Gilles<br />
|<br />
* 2 new Cmake options have been add to enable/disable digiKam core and Kipi-plugins compilation (digiKam still disabled by default for the moment).<br />
* List of checkout repositories managed by "download-repos" scripts is reduced to current sub projects already ready to support KF5. "frameworks" branches are automatically switched. See ".gitslaves" for details.<br />
* New MacroLocalLibs.cmake must be used in Kipi-plugins and digiKam Core to wrap local or system libraries (libkipi, likdcraw, libkexiv2, etc) when compilation is done under SC or not.<br />
|-<br />
| '''digiKam Documentation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles<br />
|<br />
|}<br />
<br />
==== digiKam Core ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''digiKam/data'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|<br />
|-<br />
| '''digiKam/libs'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Alin, Veaceslav<br />
|<br />
* <span style="background:salmon">TODO</span> ProxyLineEdit is based on KLineEdit and must be ported to QLineEdit, but it use KLineEdit::clearButtonUsedSize() which do not exist with QLineEdit.<br />
* <span style="background:orange">UNCOMPLETE</span> SearchTextBar is based on KLineEdit and must be ported to QLineEdit, but it use completion model class ModelCompletion based on KCompletion Which must be ported to QCompleter.<br />
* <span style="background:lightgreen">DONE</span> ICCSettings : Q_WS__X11 have been removed with Qt5. X11 detection is performed by CMake and rules are set as definition into digikam_config.h<br />
* <span style="background:salmon">TODO</span> Port LoadingCache from KDirWatch to QFileSystemWatcher.<br />
* <span style="background:salmon">TODO</span> When QFileSystemWtyacher port is complete, check if KInotify still mandatory.<br />
|-<br />
| '''digiKam/app'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:orange">UNCOMPLETE</span> AddTagsLineEdit is based on KLineEdit and must be ported to QLineEdit, but it use completion model class ModelCompletion based on KCompletion Which must be ported to QCompleter.<br />
* <span style="background:lightgreen">DONE</span> WelcomePageView ported from KHTMLPart to QWebView. KParts and KHtml dependencies removed from digiKam.<br />
* <span style="background:salmon">TODO</span> WelcomePageView HTML rendering is completly broken. Check if CSS and HTML code are conform. Note : this is not due to Qt5 port as KHTML done the same result.<br />
* <span style="background:lightgreen">DONE</span> MediaPlayerView ported from Phonon to QMediaPlayer. Phonon dependency removed from digiKam. New CMake option add to enable/disable QMediaPlayer support.<br />
* <span style="background:salmon">TODO</span> Port AlbumWatch from KDirWatch to QFileSystemWatcher<br />
|-<br />
| '''digiKam/utilities'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Alin, Mohamed<br />
|<br />
* <span style="background:salmon">TODO</span> CameraController use KProcess and KMacroExpander and need to be ported to QProcess.<br />
|-<br />
| '''digiKam/imageplugins'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> Remove editor plugins interface and move tools directly to editor implementation.<br />
|-<br />
| '''digiKam/kioslave'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> Remove KIO-Slaves and move code to database core using multithreading. See this [https://community.kde.org/GSoC/2015/Ideas#Project:_Re-write_database_KIO-slaves_as_pure_Qt5_using_multithreading GoSC 2015 project for details].<br />
|-<br />
| '''digiKam/showfoto'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''digiKam/databaseserver'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''digiKam/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> 2 test tools do not link yet and are disable from compilation rules<br />
|}<br />
<br />
=== Recommendations ===<br />
<br />
Porting to KF5 is divided in 4 stages:<br />
<br />
1/ Change CMake files. Some Laurent scripts do this stuff. We use now<br />
ECM scripts collection from KDE core to manage dependencies and report on the<br />
console. Some macros disappear, and are replaced by new ones. For this<br />
job, it's recommended to look well all done in CMake files from libkexiv2<br />
and libkdcraw already ported and polished.<br />
<br />
2/ Port C++ code using KDE4Support. This include older classes from Qt4<br />
and KDE4 to make transition faster. This will help to have quickly a<br />
code compilable, but this will generate a lots of deprecated warnings.<br />
First regression tests must be done at this stage to see if nothing is broken.<br />
<br />
3/ Port C++ code to pure KF5. The goal of KF5 is to reduce KDELibs<br />
fingerprint everywhere, when it's possible. Qt API will be used in<br />
priority against KF5 API. But sometime, this will be not possible as<br />
well, without big changes. A lot of KDE API have migrated to Qt5<br />
(as for ex : KUrl -> QUrl and kDebug ->qDebug). It's sound like KDELibs<br />
will become an incubator for new implementations which will move later<br />
to Qt. Also, to have the most of code using pure Qt5 will simplify<br />
future transitions more easy to do. Removing KDE4Support dependency<br />
will force to use non-deprecated KF5 API.<br />
<br />
4/ Port C++ code to pure Qt5. Porting most of KF5 Api to use Qt5 instead is<br />
prefered, when it's possible. Another important change in Qt5 is the non-support<br />
of char pointer with QString.<br />
<br />
In first stage we must use '''remove_definitions(-DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII)'''<br />
in CMake script to compile code. These definitions force to not use deprecated QString methods.<br />
<br />
Another definition to add while Qt5 porting is '''add_definitions(-DQT_NO_URL_CAST_FROM_STRING)''' about cast between QString and QUrl.<br />
<br />
In last stage we must use '''remove_definition(-DQT_DEPRECATED_SINCE(5,0))''' in CMake script to compile code. These definitions force to disable deprecated methods in Qt API.<br />
<br />
=== Common changes to port code ===<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Original Code<br />
! Ported Code<br />
! Remarks<br />
|-<br />
| ...section of code not yet ported...<br />
|<br />
<source lang="cpp-qt"><br />
#pragma message("PORT QT5")<br />
/*<br />
...section of code not yet ported...<br />
*/<br />
</source><br />
| Not yet ported code sections must be commented with compiler warnings printed on the console<br />
|-<br />
| KDE4_BUILD_TESTS=ON<br />
| '''BUILD_TESTING=ON'''<br />
| CMake flag to build tests sub-dir.<br />
|-<br />
| CMAKE_BUILD_TYPE=debugfull<br />
| '''CMAKE_BUILD_TYPE=debug'''<br />
| CMake flag to build code with debug symbols.<br />
|-<br />
| kDebug() / kWarning() / kError()<br />
| '''qCDebug(FOO_LOG) / qCWarning(FOO_LOG) / qCCritical(FOO_LOG)'''<br />
|<br />
* New "foo_debug.h" and "foo_debug.cpp" files must be created to declare debug space.<br />
* "foo_debug.h" is not shared. For shared a library, this header must be placed as private in implementation files, not header files.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
#include "foo.moc"<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
#include "foo.h"<br />
</source><br />
|<br />
* To prevent compilation errors with Qt5. Qt will generate moc_foo.h files instead. Header file of a class declaration must be placed on top of included header files list from implementation file.<br />
* Special case : KF5 plugin factory needs moc header file included at end of plugin implementation to prevent broken linking.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::directory()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl::adjusted(QUrl::RemoveFilename).path()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDiskFreeSpaceInfo<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStorageInfo<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::setFileName(newFileName)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl::setPath(QUrl::path() + newFileName)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl url;<br />
url.adjustPath(KUrl::AddTrailingSlash);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
url.setPath(url.path() + '/');<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDialog::spacingHint()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDialog::marginHint()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::style()->pixelMetric(QStyle::PM_DefaultChildMargin)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KComponentData::mainComponent().componentName()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::applicationName()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KComponentData::mainComponent().aboutData()->homepage()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KAboutData::applicationData().homepage()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KIconLoader::SmallIcon("icon_name", size)<br />
</source><br />
or<br />
<source lang="cpp-qt"><br />
KIconLoader::global()->loadIcon("icon_name", size)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QIcon::fromTheme("icon_name").pixmap(size)<br />
</source><br />
|<br />
*Adjust size value :<br />
**Small = 16 (default from KIconLoader::SmallIcon()),<br />
**SmallMedium = 22,<br />
**Medium = 32,<br />
**Large = 48,<br />
**Huge = 64,<br />
**Enormous = 128<br />
* Icon must be installed with desktop theme icons.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::installPath("data") + QString("filename")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::GenericDataLocation,<br />
QString("filename"))<br />
</source><br />
| File to open in read-only. File already exist.<br />
<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::installPath("xdgdata-apps") + QString("filename")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::ApplicationsLocation,<br />
QString("filename"))<br />
</source><br />
| File to open in read-only. File already exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("data", QString("filename"))<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ '/' + QString("filename")<br />
</source><br />
| File to open in read-only. File already exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QString dir = KStandardDirs::locateLocal("data",<br />
QString("dirname"), true)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QString dir =<br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ '/' + QString("dirname");<br />
QDir().mkpath(dir);<br />
</source><br />
| Dir to open in read-write. Create dir if it do not exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrlLabel<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RActiveLabel<br />
</source><br />
|<br />
* Slot used to process url can be dropped.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KSeparator<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RLineWidget<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KXmlGuiWindow::restoreWindowSize(group);<br />
<br />
KDialog::restoreDialogSize(group);<br />
</source><br />
and<br />
<source lang="cpp-qt"><br />
KXmlGuiWindow::saveWindowSize(group);<br />
<br />
KDialog::saveDialogSize(group);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KWindowConfig::restoreWindowSize(windowHandle(), group);<br />
</source><br />
and<br />
<source lang="cpp-qt"><br />
KWindowConfig::saveWindowSize(windowHandle(), group);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KVBox* const vbox = new KVBox(this);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RVBox* const vbox = new KDcrawIface::RVBox(this);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KHBox* const hbox = new KHBox(this);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RHBox* const hbox = new KDcrawIface::RHBox(this);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KIO::NetAccess::del(url, QApplication::activeWindow());<br />
<br />
KIO::NetAccess::mkdir(url, QApplication::activeWindow());<br />
<br />
KIO::NetAccess::dircopy(srcUrl, dstUrl, QApplication::activeWindow())<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
auto deleteJob = KIO::file_delete(url);<br />
KJobWidgets::setWindow(deleteJob, QApplication::activeWindow());<br />
deleteJob->exec();<br />
<br />
auto mkdirJob = KIO::mkdir(url);<br />
KJobWidgets::setWindow(mkdirJob, QApplication::activeWindow());<br />
mkdirJob->exec();<br />
<br />
auto dircopyJob = KIO::copy(srcUrl, dstUrl);<br />
KJobWidgets::setWindow(dircopyJob, QApplication::activeWindow());<br />
dircopyJob->exec();<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KD::rename(src, dst)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QFile::rename(src, dst)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KToolInvocation::invokeBrowser(url)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QDesktopServices::openUrl(url)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KGlobalSettings::singleClick()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
qApp->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::directory(KUrl::ObeyTrailingSlash)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url = adjusted(QUrl::RemoveFilename);<br />
url.adjusted(QUrl::StripTrailingSlash).path()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KImageIO::typeForMime(str)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMimeDatabase().mimeTypeForName(str)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KTemporaryFile temp;<br />
temp.setPrefix(prefixStr);<br />
temp.setSuffix(suffixStr);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QTemporaryFile temp;<br />
temp.setFileTemplate(prefixStr + QLatin1String("XXXXXX") + suffixStr);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
K_GLOBAL_STATIC<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
Q_GLOBAL_STATIC<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KMenu::addTitle()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMenu::addSection()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locate("data", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::GenericDataLocation, "file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("data", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("appdata", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::DataLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("cache", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("tmp", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QDir::tempPath() + QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::makeDir(path, permission);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
if (!QDir(path).exists())<br />
{<br />
if (QDir().mkpath(path))<br />
{<br />
QFile f(path);<br />
f.setPermissions(permission);<br />
}<br />
}<br />
</source><br />
|<br />
permission = QFile::ReadUser | QFile::WriteUser | QFile::ExeUser = 0700<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrlRequester<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RFileSelector<br />
</source><br />
|<br />
To select local only file or path, no need KUrlRequester.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KActionMenu<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMenu<br />
</source><br />
|<br />
Use QMenu::menuAction() to get Action instance of menu to plug in action collection.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KToggleAction<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QAction<br />
</source><br />
|<br />
Use QAction::setCheckable(true) to switch Action as toggle state.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
url.addQueryItem(key, value);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
QUrlQuery q(url);<br />
q.addQueryItem(key, value);<br />
url.setQuery(q);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QPixmap pix, alphaMask;<br />
pix.setAlphaChannel(mask);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QPixmap pix, alphaMask;<br />
QPainter p(&pix);<br />
p.setOpacity(0.2);<br />
p.drawPixmap(0, 0, alphaMask);<br />
p.end();<br />
</source><br />
|<br />
|}<br />
<br />
=== Link to documentation to port code ===<br />
<br />
* [https://community.kde.org/Frameworks/Porting_Notes KDE4 to KF5 porting guide]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/kdelibs4support/html/deprecated.html KDE4 deprecated list]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/kdelibs4support/html/classKCalendarSystem.html#a6853ea0521ea23923d3a104b1a178782 KCalendarSystem format strings] to port to [http://doc.qt.io/qt-5/qdate.html#toString QDate format strings] and [http://doc.qt.io/qt-5/qtime.html#toString QTime format strings]<br />
<br />
* [https://community.kde.org/Frameworks/Porting_Notes/KStandardDirs KStandardDirs to Qt5 porting guide]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/index.html KF5 API]<br />
<br />
* [http://qt-project.org/wiki/Transition_from_Qt_4.x_to_Qt5 Qt4 to Qt5 porting guide]<br />
<br />
* [http://qt-project.org/doc/qt-5/classes.html Qt5 API]<br />
<br />
* [https://projects.kde.org/projects/qt5?jump=repository Qt5 project]<br />
<br />
* [http://api.kde.org/ecm/index.html ECM - Documentation]<br />
<br />
* [https://techbase.kde.org/Development/ECM_SourceIncompatChanges ECM - KDELibs4 macro port]<br />
<br />
* [https://projects.kde.org/projects/kdesupport/extra-cmake-modules ECM - Extra CMake Module project]<br />
<br />
=== Scripts to port code ===<br />
<br />
Laurent Montel has written scripts to port CMake and C++ code to KF5/Qt5 and remove kdelibs4support dependency. There are available [https://projects.kde.org/projects/kde/kdesdk/kde-dev-scripts/repository/revisions/master/show/kf5 in this repository] (see kf5 sub-dir).<br />
<br />
Scripts must be applied in this order, with a test compilation between each one :<br />
<br />
* Full safe scripts :<br />
** convert-to-k4aboutdata.pl (first one to apply, this help to compile)<br />
** adapt_cmakelists_file.pl (to convert CMake scripts, but code must don't be capititalized)<br />
** remove-kde4support.pl<br />
** convert-kicon.pl<br />
** convert-kmenu.pl<br />
** convert-kshortcut.pl<br />
** convert-kcolordialog.pl<br />
** convert-klistwidget.pl<br />
** convert-kmd5.pl<br />
** convert-kmenubar.pl<br />
** convert-ksplashscreen.pl<br />
** convert-kdebug.pl<br />
<br />
* Less safe scripts :<br />
** convert-kintnuminput.pl<br />
** convert-kintspinbox.pl<br />
** convert-ktextbrowser.pl<br />
** convert-kfontcombobox.pl<br />
<br />
* Scripts which need to check in-deep all changes :<br />
** convert-kvbox.pl<br />
** convert-kdialog.pl<br />
** convert-kcmdlineargs.pl<br />
** convert-kdebug-with-argument.sh (this one change kDebug(1556) en qCDebug with some info after to convert)<br />
** convert-kmimetype.pl<br />
<br />
* Last scripts to apply :<br />
** clean-forward-declaration.sh (remove forward declaration, to do when all compile fine)<br />
** clean-includes.sh (try to remove not used includes, not safe to 100%)<br />
** port_to_autogenerate_export_header.sh (convert to new signal/slot API, not safe to 100%)</div>Cauliergilleshttps://community.kde.org/index.php?title=Digikam/CodingSprint2014&diff=56397Digikam/CodingSprint20142015-03-09T09:21:40Z<p>Cauliergilles: /* digiKam Core */</p>
<hr />
<div>== KDE Framework Port ==<br />
<br />
=== Branches Creation ===<br />
<br />
All port code must be stored in dedicated "frameworks" git branch for each project. Branch must be created from master.<br />
<br />
<source lang="bash"><br />
$>git checkout master<br />
$>git pull --rebase<br />
$>git checkout -b frameworks<br />
$>git push origin frameworks:frameworks<br />
$>git branch -a<br />
* frameworks<br />
master<br />
remotes/origin/HEAD -> origin/master<br />
remotes/origin/frameworks<br />
remotes/origin/master<br />
</source><br />
<br />
<br />
KF5 Repositories list is given below :<br />
<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkexiv2/repository/show?rev=frameworks Libkexiv2]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkdcraw/repository/show?rev=frameworks Libkdcraw]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkipi/repository/show?rev=frameworks Libkipi]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkface/repository/show?rev=frameworks Libkface]<br />
* [https://projects.kde.org/projects/extragear/libs/libkgeomap/repository/show?rev=frameworks Libkgeomap]<br />
* [https://projects.kde.org/projects/extragear/graphics/digikam/digikam-software-compilation/repository/show?rev=frameworks digiKam Software Compilation]<br />
* [https://projects.kde.org/projects/extragear/graphics/kipi-plugins/repository/show?rev=frameworks Kipi-plugins]<br />
* [https://projects.kde.org/projects/extragear/graphics/digikam/repository/show?rev=frameworks digiKam]<br />
<br />
=== Kipi-plugins Refactoring ===<br />
<br />
A lots of tools are not maintained since a while, other one have been never finalized. See the list of plugins which will be ported or not :<br />
<br />
* Tools which can be ported as well :<br />
** panorama<br />
** expoblending<br />
** gpssync<br />
** sendimages<br />
** timeadjust<br />
** metadataedit<br />
** videoslideshow<br />
** advancedslideshow<br />
** flashexport<br />
** kmlexport<br />
** acquireimages<br />
** calendar<br />
** dngconverter<br />
** printimages<br />
** imageviewer<br />
<br />
* Tools in pending stage :<br />
** dlnaexport <=== Needs HUpnp lib Qt5 port<br />
** htmlexport <=== Nobody maintain this code since a while, but tool still used.<br />
** photolayoutseditor <=== A complex but powerful tool. Will be complex to port.<br />
** removeredeyes <=== We can share red eyes removal core implementation in libkface in way to share with other KDE applications and replace digiKam Image Editor tool by this code. A new digiKam BQM tool must be created. A GSoC 2015 project can be planned about this topic.<br />
<br />
* Web export tools which must be factored (same settings widgets, common dialog, common high level interface to process import/export). Another GSoC 2015 project can be planned about this topic.<br />
** facebook<br />
** picasawebexport<br />
** rajceexport<br />
** shwup<br />
** debianscreenshots<br />
** dropbox<br />
** googledrive<br />
** imageshackexport<br />
** kioexportimport<br />
** piwigoexport<br />
** smug<br />
** flickrexport<br />
** yandexfotki<br />
** mediawiki <=== need to port libmediawiki from extragear/libs/.<br />
** vkontakte <=== require libkvkontakte from extragear/libs/.<br />
<br />
* Tools never finalized (can be moved to attic for the moment) :<br />
** imgurexport <=== require libqtkoauth from SF.net<br />
** photivointegration<br />
** jalbumexport<br />
** wallpaper<br />
<br />
* Tools obsolete (can be moved to attic for the moment) :<br />
** batchprocessimages <=== replaced by digiKam BQM<br />
** rawconverter <=== replaced by digiKam BQM<br />
** jpeglossless <=== replaced by new digiKam core tool<br />
** kopete <=== KF5 will use new API<br />
** ipodexport <=== work only with very old Apple devices.<br />
** galleryexport <=== Gallery web service is not maintained since a while. Gallery project is dead.<br />
<br />
=== KF5/Qt5 Port Status ===<br />
<br />
==== Libkexiv2 ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkexiv2/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|<br />
* C++ auto_ptr warnings from Exiv2 API disabled.<br />
* Library depend of :<br />
** KF5::I18n (translations)<br />
** KF5::TextWidgets (MsgTextEdit is based on KTextEdit)<br />
|-<br />
| '''libkexiv2/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|Code do not depend of KF5<br />
|}<br />
<br />
==== Libkdcraw ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkdcraw/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Veaceslav<br />
|<br />
* C++ auto_ptr warnings from Libraw API disabled.<br />
* ThreadWeaver and Solid dependencies removed.<br />
* RActionThreadBase is ported to QThreadPool + QRunnable API instead ThreadWeaver.<br />
* KIntNumInput and KDoubleNumInput are deprecated and removed as dependencies. We use Krita Int and Double input widgets instead. See [https://bugs.kde.org/show_bug.cgi?id=284216 bug #284216] for details.<br />
* Library depend of:<br />
** KF5::I18n (translations).<br />
** KF5::ConfigCore (KConfigGroup used in widgets).<br />
|-<br />
| '''libkdcraw/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Veaceslav<br />
|<br />
* Code do not depend of KF5<br />
*Multithreaded RAW to PNG GUI test program now use DCrawSettingsWidget to tune Raw decoding settings, and is ported to RActionThreadBase to process conversions on all core CPU.<br />
|}<br />
<br />
==== Libkipi ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkipi/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Mohamed<br />
|<br />
* libkipi/version.h file renamed as libkipi_config.h to host only SO version ID shared with kipi plugins.<br />
* API changes a little bit : path() => url().<br />
*Library depend of :<br />
** KF5::I18n (translations)<br />
** KF5::Config (KConfigGroup and KSharedConfig)<br />
** KF5::XmlGui (plugins based on KXMLGuiCLient)<br />
** KF5::Service (plugins use KService)<br />
|-<br />
| '''libkipi/test'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Mohamed<br />
|<br />
* moc header must be placed at end of plugin implementation. See all plugin_helloworld.cpp comments for details.<br />
* K_PLUGIN_EXPORT macro at start of plugin implementation can be dropped.<br />
* '''kbuildsycoca5 --noincremental''' must be run to found new plugin installed on the system if KF5 is not the current active desktop.<br />
|}<br />
<br />
==== Libkface ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkface/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|Library only depend of KF5::I18n<br />
|-<br />
| '''libkface/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
| Code do not depend of KF5<br />
|}<br />
<br />
==== Libkgeomap ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkgeomap/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Mohamed<br />
|<br />
* Library depend of:<br />
** KF5::I18n (translations).<br />
** KF5::Config (KConfigGroup used in widgets).<br />
* Needs Marble code from [https://projects.kde.org/projects/kde/kdeedu/marble/repository/show?rev=master master git branch] compiled with cmake option '''-DQT5BUILD=ON'''.<br />
* <span style="background:salmon">TODO</span> We need to detect the Marble version somehow, to avoid linking KF5 build against Qt4 version of Marble. We still use FindMarble cmake script from KDE4. Marble need to be ported as pure KF5 frameworks component.<br />
* <span style="background:lightgreen">DONE</span> KHTML based class HTMLWidget must be ported to Qt5::Webkit.<br />
|-<br />
| '''libkgeomap/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''libkgeomap/calibrator'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''libkgeomap/demo'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* Needs libkexiv2 from KF5 to compile (optional).<br />
|}<br />
<br />
==== Kipi-plugins ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''Kipi-plugins/common'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| yes<br />
|Gilles, Laurent<br />
|<br />
* New MacroLocalLibs.cmake wrapper added to handle local or system wide shared libraries.<br />
* Plugins must be linked at least with:<br />
**KF5::Parts<br />
**KF5::KDELibs4Support<br />
**${KF5Kipi_LIBRARIES}<br />
**${KF5KExiv2_LIBRARIES}<br />
**${KF5KDcraw_LIBRARIES}<br />
**KF5kipiplugins<br />
* Use '''kipiplugins_debug.h''' header in plugins to handle debug space.<br />
* ${KF5*_LIBRARIES} are populated by MacroLocalLibs.cmake<br />
* Add a new common class to process images resizement based SendImage::ImageResize<br />
|-<br />
| '''Kipi-plugins/tests'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins Documentation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles<br />
|<br />
|-<br />
| '''Kipi-plugins/timeadjust'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/sendimages'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/kmlexport'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/printimages'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
| Postscript support have been removed from QPrinter. Option is now removed from assistant.<br />
|-<br />
| '''Kipi-plugins/flashexport'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|}<br />
<br />
==== digiKam Software Compilation ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''digiKam Software Compilation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| not applicable<br />
| not applicable<br />
| Gilles<br />
|<br />
* 2 new Cmake options have been add to enable/disable digiKam core and Kipi-plugins compilation (digiKam still disabled by default for the moment).<br />
* List of checkout repositories managed by "download-repos" scripts is reduced to current sub projects already ready to support KF5. "frameworks" branches are automatically switched. See ".gitslaves" for details.<br />
* New MacroLocalLibs.cmake must be used in Kipi-plugins and digiKam Core to wrap local or system libraries (libkipi, likdcraw, libkexiv2, etc) when compilation is done under SC or not.<br />
|-<br />
| '''digiKam Documentation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles<br />
|<br />
|}<br />
<br />
==== digiKam Core ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''digiKam/data'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|<br />
|-<br />
| '''digiKam/libs'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Alin, Veaceslav<br />
|<br />
* <span style="background:salmon">TODO</span> ProxyLineEdit is based on KLineEdit and must be ported to QLineEdit, but it use KLineEdit::clearButtonUsedSize() which do not exist with QLineEdit.<br />
* <span style="background:orange">UNCOMPLETE</span> SearchTextBar is based on KLineEdit and must be ported to QLineEdit, but it use completion model class ModelCompletion based on KCompletion Which must be ported to QCompleter.<br />
* <span style="background:lightgreen">DONE</span> ICCSettings : Q_WS__X11 have been removed with Qt5. X11 detection is performed by CMake and rules are set as definition into digikam_config.h<br />
* <span style="background:salmon">TODO</span> Port LoadingCache from KDirWatch to QFileSystemWatcher.<br />
* <span style="background:salmon">TODO</span> When QFileSystemWtyacher port is complete, check if KInotify still mandatory.<br />
|-<br />
| '''digiKam/app'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:orange">UNCOMPLETE</span> AddTagsLineEdit is based on KLineEdit and must be ported to QLineEdit, but it use completion model class ModelCompletion based on KCompletion Which must be ported to QCompleter.<br />
* <span style="background:lightgreen">DONE</span> WelcomePageView ported from KHTMLPart to QWebView. KParts and KHtml dependencies removed from digiKam.<br />
* <span style="background:salmon">TODO</span> WelcomePageView HTML rendering is completly broken. Check if CSS and HTML code are conform. Note : this is not due to Qt5 port as KHTML done the same result.<br />
* <span style="background:lightgreen">DONE</span> MediaPlayerView ported from Phonon to QMediaPlayer. Phonon dependency removed from digiKam. New CMake option add to enable/disable QMediaPlayer support.<br />
* <span style="background:salmon">TODO</span> Port AlbumWatch from KDirWatch to QFileSystemWatcher<br />
|-<br />
| '''digiKam/utilities'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Alin, Mohamed<br />
|<br />
* <span style="background:salmon">TODO</span> CameraController use KProcess and KMacroExpander and need to be ported to QProcess.<br />
|-<br />
| '''digiKam/imageplugins'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> Remove editor plugins interface and move tools directly to editor implementation.<br />
|-<br />
| '''digiKam/kioslave'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> Remove KIO-Slaves and move code to database core using multithreading. See this [https://community.kde.org/GSoC/2015/Ideas#Project:_Re-write_database_KIO-slaves_as_pure_Qt5_using_multithreading GoSC 2015 project for details].<br />
|-<br />
| '''digiKam/showfoto'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''digiKam/databaseserver'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''digiKam/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
| * <span style="background:salmon">TODO</span> 2 test tools do not link yet and are disable from compilation rules<br />
|}<br />
<br />
=== Recommendations ===<br />
<br />
Porting to KF5 is divided in 4 stages:<br />
<br />
1/ Change CMake files. Some Laurent scripts do this stuff. We use now<br />
ECM scripts collection from KDE core to manage dependencies and report on the<br />
console. Some macros disappear, and are replaced by new ones. For this<br />
job, it's recommended to look well all done in CMake files from libkexiv2<br />
and libkdcraw already ported and polished.<br />
<br />
2/ Port C++ code using KDE4Support. This include older classes from Qt4<br />
and KDE4 to make transition faster. This will help to have quickly a<br />
code compilable, but this will generate a lots of deprecated warnings.<br />
First regression tests must be done at this stage to see if nothing is broken.<br />
<br />
3/ Port C++ code to pure KF5. The goal of KF5 is to reduce KDELibs<br />
fingerprint everywhere, when it's possible. Qt API will be used in<br />
priority against KF5 API. But sometime, this will be not possible as<br />
well, without big changes. A lot of KDE API have migrated to Qt5<br />
(as for ex : KUrl -> QUrl and kDebug ->qDebug). It's sound like KDELibs<br />
will become an incubator for new implementations which will move later<br />
to Qt. Also, to have the most of code using pure Qt5 will simplify<br />
future transitions more easy to do. Removing KDE4Support dependency<br />
will force to use non-deprecated KF5 API.<br />
<br />
4/ Port C++ code to pure Qt5. Porting most of KF5 Api to use Qt5 instead is<br />
prefered, when it's possible. Another important change in Qt5 is the non-support<br />
of char pointer with QString.<br />
<br />
In first stage we must use '''remove_definitions(-DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII)'''<br />
in CMake script to compile code. These definitions force to not use deprecated QString methods.<br />
<br />
Another definition to add while Qt5 porting is '''add_definitions(-DQT_NO_URL_CAST_FROM_STRING)''' about cast between QString and QUrl.<br />
<br />
In last stage we must use '''remove_definition(-DQT_DEPRECATED_SINCE(5,0))''' in CMake script to compile code. These definitions force to disable deprecated methods in Qt API.<br />
<br />
=== Common changes to port code ===<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Original Code<br />
! Ported Code<br />
! Remarks<br />
|-<br />
| ...section of code not yet ported...<br />
|<br />
<source lang="cpp-qt"><br />
#pragma message("PORT QT5")<br />
/*<br />
...section of code not yet ported...<br />
*/<br />
</source><br />
| Not yet ported code sections must be commented with compiler warnings printed on the console<br />
|-<br />
| KDE4_BUILD_TESTS=ON<br />
| '''BUILD_TESTING=ON'''<br />
| CMake flag to build tests sub-dir.<br />
|-<br />
| CMAKE_BUILD_TYPE=debugfull<br />
| '''CMAKE_BUILD_TYPE=debug'''<br />
| CMake flag to build code with debug symbols.<br />
|-<br />
| kDebug() / kWarning() / kError()<br />
| '''qCDebug(FOO_LOG) / qCWarning(FOO_LOG) / qCCritical(FOO_LOG)'''<br />
|<br />
* New "foo_debug.h" and "foo_debug.cpp" files must be created to declare debug space.<br />
* "foo_debug.h" is not shared. For shared a library, this header must be placed as private in implementation files, not header files.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
#include "foo.moc"<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
#include "foo.h"<br />
</source><br />
|<br />
* To prevent compilation errors with Qt5. Qt will generate moc_foo.h files instead. Header file of a class declaration must be placed on top of included header files list from implementation file.<br />
* Special case : KF5 plugin factory needs moc header file included at end of plugin implementation to prevent broken linking.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::directory()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl::adjusted(QUrl::RemoveFilename).path()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDiskFreeSpaceInfo<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStorageInfo<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::setFileName(newFileName)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl::setPath(QUrl::path() + newFileName)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl url;<br />
url.adjustPath(KUrl::AddTrailingSlash);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
url.setPath(url.path() + '/');<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDialog::spacingHint()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDialog::marginHint()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::style()->pixelMetric(QStyle::PM_DefaultChildMargin)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KComponentData::mainComponent().componentName()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::applicationName()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KComponentData::mainComponent().aboutData()->homepage()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KAboutData::applicationData().homepage()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KIconLoader::SmallIcon("icon_name", size)<br />
</source><br />
or<br />
<source lang="cpp-qt"><br />
KIconLoader::global()->loadIcon("icon_name", size)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QIcon::fromTheme("icon_name").pixmap(size)<br />
</source><br />
|<br />
*Adjust size value :<br />
**Small = 16 (default from KIconLoader::SmallIcon()),<br />
**SmallMedium = 22,<br />
**Medium = 32,<br />
**Large = 48,<br />
**Huge = 64,<br />
**Enormous = 128<br />
* Icon must be installed with desktop theme icons.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::installPath("data") + QString("filename")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::GenericDataLocation,<br />
QString("filename"))<br />
</source><br />
| File to open in read-only. File already exist.<br />
<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::installPath("xdgdata-apps") + QString("filename")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::ApplicationsLocation,<br />
QString("filename"))<br />
</source><br />
| File to open in read-only. File already exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("data", QString("filename"))<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ '/' + QString("filename")<br />
</source><br />
| File to open in read-only. File already exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QString dir = KStandardDirs::locateLocal("data",<br />
QString("dirname"), true)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QString dir =<br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ '/' + QString("dirname");<br />
QDir().mkpath(dir);<br />
</source><br />
| Dir to open in read-write. Create dir if it do not exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrlLabel<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RActiveLabel<br />
</source><br />
|<br />
* Slot used to process url can be dropped.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KSeparator<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RLineWidget<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KXmlGuiWindow::restoreWindowSize(group);<br />
<br />
KDialog::restoreDialogSize(group);<br />
</source><br />
and<br />
<source lang="cpp-qt"><br />
KXmlGuiWindow::saveWindowSize(group);<br />
<br />
KDialog::saveDialogSize(group);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KWindowConfig::restoreWindowSize(windowHandle(), group);<br />
</source><br />
and<br />
<source lang="cpp-qt"><br />
KWindowConfig::saveWindowSize(windowHandle(), group);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KVBox* const vbox = new KVBox(this);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RVBox* const vbox = new KDcrawIface::RVBox(this);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KHBox* const hbox = new KHBox(this);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RHBox* const hbox = new KDcrawIface::RHBox(this);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KIO::NetAccess::del(url, QApplication::activeWindow());<br />
<br />
KIO::NetAccess::mkdir(url, QApplication::activeWindow());<br />
<br />
KIO::NetAccess::dircopy(srcUrl, dstUrl, QApplication::activeWindow())<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
auto deleteJob = KIO::file_delete(url);<br />
KJobWidgets::setWindow(deleteJob, QApplication::activeWindow());<br />
deleteJob->exec();<br />
<br />
auto mkdirJob = KIO::mkdir(url);<br />
KJobWidgets::setWindow(mkdirJob, QApplication::activeWindow());<br />
mkdirJob->exec();<br />
<br />
auto dircopyJob = KIO::copy(srcUrl, dstUrl);<br />
KJobWidgets::setWindow(dircopyJob, QApplication::activeWindow());<br />
dircopyJob->exec();<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KD::rename(src, dst)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QFile::rename(src, dst)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KToolInvocation::invokeBrowser(url)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QDesktopServices::openUrl(url)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KGlobalSettings::singleClick()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
qApp->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::directory(KUrl::ObeyTrailingSlash)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url = adjusted(QUrl::RemoveFilename);<br />
url.adjusted(QUrl::StripTrailingSlash).path()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KImageIO::typeForMime(str)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMimeDatabase().mimeTypeForName(str)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KTemporaryFile temp;<br />
temp.setPrefix(prefixStr);<br />
temp.setSuffix(suffixStr);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QTemporaryFile temp;<br />
temp.setFileTemplate(prefixStr + QLatin1String("XXXXXX") + suffixStr);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
K_GLOBAL_STATIC<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
Q_GLOBAL_STATIC<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KMenu::addTitle()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMenu::addSection()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locate("data", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::GenericDataLocation, "file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("data", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("appdata", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::DataLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("cache", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("tmp", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QDir::tempPath() + QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::makeDir(path, permission);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
if (!QDir(path).exists())<br />
{<br />
if (QDir().mkpath(path))<br />
{<br />
QFile f(path);<br />
f.setPermissions(permission);<br />
}<br />
}<br />
</source><br />
|<br />
permission = QFile::ReadUser | QFile::WriteUser | QFile::ExeUser = 0700<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrlRequester<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RFileSelector<br />
</source><br />
|<br />
To select local only file or path, no need KUrlRequester.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KActionMenu<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMenu<br />
</source><br />
|<br />
Use QMenu::menuAction() to get Action instance of menu to plug in action collection.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KToggleAction<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QAction<br />
</source><br />
|<br />
Use QAction::setCheckable(true) to switch Action as toggle state.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
url.addQueryItem(key, value);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
QUrlQuery q(url);<br />
q.addQueryItem(key, value);<br />
url.setQuery(q);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QPixmap pix, alphaMask;<br />
pix.setAlphaChannel(mask);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QPixmap pix, alphaMask;<br />
QPainter p(&pix);<br />
p.setOpacity(0.2);<br />
p.drawPixmap(0, 0, alphaMask);<br />
p.end();<br />
</source><br />
|<br />
|}<br />
<br />
=== Link to documentation to port code ===<br />
<br />
* [https://community.kde.org/Frameworks/Porting_Notes KDE4 to KF5 porting guide]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/kdelibs4support/html/deprecated.html KDE4 deprecated list]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/kdelibs4support/html/classKCalendarSystem.html#a6853ea0521ea23923d3a104b1a178782 KCalendarSystem format strings] to port to [http://doc.qt.io/qt-5/qdate.html#toString QDate format strings] and [http://doc.qt.io/qt-5/qtime.html#toString QTime format strings]<br />
<br />
* [https://community.kde.org/Frameworks/Porting_Notes/KStandardDirs KStandardDirs to Qt5 porting guide]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/index.html KF5 API]<br />
<br />
* [http://qt-project.org/wiki/Transition_from_Qt_4.x_to_Qt5 Qt4 to Qt5 porting guide]<br />
<br />
* [http://qt-project.org/doc/qt-5/classes.html Qt5 API]<br />
<br />
* [https://projects.kde.org/projects/qt5?jump=repository Qt5 project]<br />
<br />
* [http://api.kde.org/ecm/index.html ECM - Documentation]<br />
<br />
* [https://techbase.kde.org/Development/ECM_SourceIncompatChanges ECM - KDELibs4 macro port]<br />
<br />
* [https://projects.kde.org/projects/kdesupport/extra-cmake-modules ECM - Extra CMake Module project]<br />
<br />
=== Scripts to port code ===<br />
<br />
Laurent Montel has written scripts to port CMake and C++ code to KF5/Qt5 and remove kdelibs4support dependency. There are available [https://projects.kde.org/projects/kde/kdesdk/kde-dev-scripts/repository/revisions/master/show/kf5 in this repository] (see kf5 sub-dir).<br />
<br />
Scripts must be applied in this order, with a test compilation between each one :<br />
<br />
* Full safe scripts :<br />
** convert-to-k4aboutdata.pl (first one to apply, this help to compile)<br />
** adapt_cmakelists_file.pl (to convert CMake scripts, but code must don't be capititalized)<br />
** remove-kde4support.pl<br />
** convert-kicon.pl<br />
** convert-kmenu.pl<br />
** convert-kshortcut.pl<br />
** convert-kcolordialog.pl<br />
** convert-klistwidget.pl<br />
** convert-kmd5.pl<br />
** convert-kmenubar.pl<br />
** convert-ksplashscreen.pl<br />
** convert-kdebug.pl<br />
<br />
* Less safe scripts :<br />
** convert-kintnuminput.pl<br />
** convert-kintspinbox.pl<br />
** convert-ktextbrowser.pl<br />
** convert-kfontcombobox.pl<br />
<br />
* Scripts which need to check in-deep all changes :<br />
** convert-kvbox.pl<br />
** convert-kdialog.pl<br />
** convert-kcmdlineargs.pl<br />
** convert-kdebug-with-argument.sh (this one change kDebug(1556) en qCDebug with some info after to convert)<br />
** convert-kmimetype.pl<br />
<br />
* Last scripts to apply :<br />
** clean-forward-declaration.sh (remove forward declaration, to do when all compile fine)<br />
** clean-includes.sh (try to remove not used includes, not safe to 100%)<br />
** port_to_autogenerate_export_header.sh (convert to new signal/slot API, not safe to 100%)</div>Cauliergilleshttps://community.kde.org/index.php?title=Digikam/CodingSprint2014&diff=56396Digikam/CodingSprint20142015-03-09T09:21:09Z<p>Cauliergilles: /* digiKam Core */</p>
<hr />
<div>== KDE Framework Port ==<br />
<br />
=== Branches Creation ===<br />
<br />
All port code must be stored in dedicated "frameworks" git branch for each project. Branch must be created from master.<br />
<br />
<source lang="bash"><br />
$>git checkout master<br />
$>git pull --rebase<br />
$>git checkout -b frameworks<br />
$>git push origin frameworks:frameworks<br />
$>git branch -a<br />
* frameworks<br />
master<br />
remotes/origin/HEAD -> origin/master<br />
remotes/origin/frameworks<br />
remotes/origin/master<br />
</source><br />
<br />
<br />
KF5 Repositories list is given below :<br />
<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkexiv2/repository/show?rev=frameworks Libkexiv2]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkdcraw/repository/show?rev=frameworks Libkdcraw]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkipi/repository/show?rev=frameworks Libkipi]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkface/repository/show?rev=frameworks Libkface]<br />
* [https://projects.kde.org/projects/extragear/libs/libkgeomap/repository/show?rev=frameworks Libkgeomap]<br />
* [https://projects.kde.org/projects/extragear/graphics/digikam/digikam-software-compilation/repository/show?rev=frameworks digiKam Software Compilation]<br />
* [https://projects.kde.org/projects/extragear/graphics/kipi-plugins/repository/show?rev=frameworks Kipi-plugins]<br />
* [https://projects.kde.org/projects/extragear/graphics/digikam/repository/show?rev=frameworks digiKam]<br />
<br />
=== Kipi-plugins Refactoring ===<br />
<br />
A lots of tools are not maintained since a while, other one have been never finalized. See the list of plugins which will be ported or not :<br />
<br />
* Tools which can be ported as well :<br />
** panorama<br />
** expoblending<br />
** gpssync<br />
** sendimages<br />
** timeadjust<br />
** metadataedit<br />
** videoslideshow<br />
** advancedslideshow<br />
** flashexport<br />
** kmlexport<br />
** acquireimages<br />
** calendar<br />
** dngconverter<br />
** printimages<br />
** imageviewer<br />
<br />
* Tools in pending stage :<br />
** dlnaexport <=== Needs HUpnp lib Qt5 port<br />
** htmlexport <=== Nobody maintain this code since a while, but tool still used.<br />
** photolayoutseditor <=== A complex but powerful tool. Will be complex to port.<br />
** removeredeyes <=== We can share red eyes removal core implementation in libkface in way to share with other KDE applications and replace digiKam Image Editor tool by this code. A new digiKam BQM tool must be created. A GSoC 2015 project can be planned about this topic.<br />
<br />
* Web export tools which must be factored (same settings widgets, common dialog, common high level interface to process import/export). Another GSoC 2015 project can be planned about this topic.<br />
** facebook<br />
** picasawebexport<br />
** rajceexport<br />
** shwup<br />
** debianscreenshots<br />
** dropbox<br />
** googledrive<br />
** imageshackexport<br />
** kioexportimport<br />
** piwigoexport<br />
** smug<br />
** flickrexport<br />
** yandexfotki<br />
** mediawiki <=== need to port libmediawiki from extragear/libs/.<br />
** vkontakte <=== require libkvkontakte from extragear/libs/.<br />
<br />
* Tools never finalized (can be moved to attic for the moment) :<br />
** imgurexport <=== require libqtkoauth from SF.net<br />
** photivointegration<br />
** jalbumexport<br />
** wallpaper<br />
<br />
* Tools obsolete (can be moved to attic for the moment) :<br />
** batchprocessimages <=== replaced by digiKam BQM<br />
** rawconverter <=== replaced by digiKam BQM<br />
** jpeglossless <=== replaced by new digiKam core tool<br />
** kopete <=== KF5 will use new API<br />
** ipodexport <=== work only with very old Apple devices.<br />
** galleryexport <=== Gallery web service is not maintained since a while. Gallery project is dead.<br />
<br />
=== KF5/Qt5 Port Status ===<br />
<br />
==== Libkexiv2 ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkexiv2/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|<br />
* C++ auto_ptr warnings from Exiv2 API disabled.<br />
* Library depend of :<br />
** KF5::I18n (translations)<br />
** KF5::TextWidgets (MsgTextEdit is based on KTextEdit)<br />
|-<br />
| '''libkexiv2/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|Code do not depend of KF5<br />
|}<br />
<br />
==== Libkdcraw ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkdcraw/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Veaceslav<br />
|<br />
* C++ auto_ptr warnings from Libraw API disabled.<br />
* ThreadWeaver and Solid dependencies removed.<br />
* RActionThreadBase is ported to QThreadPool + QRunnable API instead ThreadWeaver.<br />
* KIntNumInput and KDoubleNumInput are deprecated and removed as dependencies. We use Krita Int and Double input widgets instead. See [https://bugs.kde.org/show_bug.cgi?id=284216 bug #284216] for details.<br />
* Library depend of:<br />
** KF5::I18n (translations).<br />
** KF5::ConfigCore (KConfigGroup used in widgets).<br />
|-<br />
| '''libkdcraw/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Veaceslav<br />
|<br />
* Code do not depend of KF5<br />
*Multithreaded RAW to PNG GUI test program now use DCrawSettingsWidget to tune Raw decoding settings, and is ported to RActionThreadBase to process conversions on all core CPU.<br />
|}<br />
<br />
==== Libkipi ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkipi/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Mohamed<br />
|<br />
* libkipi/version.h file renamed as libkipi_config.h to host only SO version ID shared with kipi plugins.<br />
* API changes a little bit : path() => url().<br />
*Library depend of :<br />
** KF5::I18n (translations)<br />
** KF5::Config (KConfigGroup and KSharedConfig)<br />
** KF5::XmlGui (plugins based on KXMLGuiCLient)<br />
** KF5::Service (plugins use KService)<br />
|-<br />
| '''libkipi/test'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Mohamed<br />
|<br />
* moc header must be placed at end of plugin implementation. See all plugin_helloworld.cpp comments for details.<br />
* K_PLUGIN_EXPORT macro at start of plugin implementation can be dropped.<br />
* '''kbuildsycoca5 --noincremental''' must be run to found new plugin installed on the system if KF5 is not the current active desktop.<br />
|}<br />
<br />
==== Libkface ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkface/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|Library only depend of KF5::I18n<br />
|-<br />
| '''libkface/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
| Code do not depend of KF5<br />
|}<br />
<br />
==== Libkgeomap ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkgeomap/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Mohamed<br />
|<br />
* Library depend of:<br />
** KF5::I18n (translations).<br />
** KF5::Config (KConfigGroup used in widgets).<br />
* Needs Marble code from [https://projects.kde.org/projects/kde/kdeedu/marble/repository/show?rev=master master git branch] compiled with cmake option '''-DQT5BUILD=ON'''.<br />
* <span style="background:salmon">TODO</span> We need to detect the Marble version somehow, to avoid linking KF5 build against Qt4 version of Marble. We still use FindMarble cmake script from KDE4. Marble need to be ported as pure KF5 frameworks component.<br />
* <span style="background:lightgreen">DONE</span> KHTML based class HTMLWidget must be ported to Qt5::Webkit.<br />
|-<br />
| '''libkgeomap/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''libkgeomap/calibrator'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''libkgeomap/demo'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* Needs libkexiv2 from KF5 to compile (optional).<br />
|}<br />
<br />
==== Kipi-plugins ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''Kipi-plugins/common'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| yes<br />
|Gilles, Laurent<br />
|<br />
* New MacroLocalLibs.cmake wrapper added to handle local or system wide shared libraries.<br />
* Plugins must be linked at least with:<br />
**KF5::Parts<br />
**KF5::KDELibs4Support<br />
**${KF5Kipi_LIBRARIES}<br />
**${KF5KExiv2_LIBRARIES}<br />
**${KF5KDcraw_LIBRARIES}<br />
**KF5kipiplugins<br />
* Use '''kipiplugins_debug.h''' header in plugins to handle debug space.<br />
* ${KF5*_LIBRARIES} are populated by MacroLocalLibs.cmake<br />
* Add a new common class to process images resizement based SendImage::ImageResize<br />
|-<br />
| '''Kipi-plugins/tests'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins Documentation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles<br />
|<br />
|-<br />
| '''Kipi-plugins/timeadjust'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/sendimages'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/kmlexport'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/printimages'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
| Postscript support have been removed from QPrinter. Option is now removed from assistant.<br />
|-<br />
| '''Kipi-plugins/flashexport'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|}<br />
<br />
==== digiKam Software Compilation ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''digiKam Software Compilation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| not applicable<br />
| not applicable<br />
| Gilles<br />
|<br />
* 2 new Cmake options have been add to enable/disable digiKam core and Kipi-plugins compilation (digiKam still disabled by default for the moment).<br />
* List of checkout repositories managed by "download-repos" scripts is reduced to current sub projects already ready to support KF5. "frameworks" branches are automatically switched. See ".gitslaves" for details.<br />
* New MacroLocalLibs.cmake must be used in Kipi-plugins and digiKam Core to wrap local or system libraries (libkipi, likdcraw, libkexiv2, etc) when compilation is done under SC or not.<br />
|-<br />
| '''digiKam Documentation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles<br />
|<br />
|}<br />
<br />
==== digiKam Core ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''digiKam/data'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|<br />
|-<br />
| '''digiKam/libs'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Alin, Veaceslav<br />
|<br />
* <span style="background:salmon">TODO</span> ProxyLineEdit is based on KLineEdit and must be ported to QLineEdit, but it use KLineEdit::clearButtonUsedSize() which do not exist with QLineEdit.<br />
* <span style="background:orange">UNCOMPLETE</span> SearchTextBar is based on KLineEdit and must be ported to QLineEdit, but it use completion model class ModelCompletion based on KCompletion Which must be ported to QCompleter.<br />
* <span style="background:lightgreen">DONE</span> ICCSettings : Q_WS__X11 have been removed with Qt5. X11 detection is performed by CMake and rules are set as definition into digikam_config.h<br />
* <span style="background:salmon">TODO</span> Port LoadingCache from KDirWatch to QFileSystemWatcher.<br />
* <span style="background:salmon">TODO</span> When QFileSystemWtyacher port is complete, check if KInotify still mandatory.<br />
|-<br />
| '''digiKam/app'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:orange">UNCOMPLETE</span> AddTagsLineEdit is based on KLineEdit and must be ported to QLineEdit, but it use completion model class ModelCompletion based on KCompletion Which must be ported to QCompleter.<br />
* <span style="background:lightgreen">DONE</span> WelcomePageView ported from KHTMLPart to QWebView. KParts and KHtml dependencies removed from digiKam.<br />
* <span style="background:salmon">TODO</span> WelcomePageView HTML rendering is completly broken. Check if CSS and HTML code are conform. Note : this is not due to Qt5 port as KHTML done the same result.<br />
* <span style="background:lightgreen">DONE</span> MediaPlayerView ported from Phonon to QMediaPlayer. Phonon dependency removed from digiKam. New CMake option add to enable/disable QMediaPlayer support.<br />
* <span style="background:salmon">TODO</span> Port AlbumWatch from KDirWatch to QFileSystemWatcher<br />
|-<br />
| '''digiKam/utilities'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Alin, Mohamed<br />
|<br />
* <span style="background:salmon">TODO</span> CameraController use KProcess and KMacroExpander and need to be ported to QProcess.<br />
|-<br />
| '''digiKam/imageplugins'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> Remove editor plugins interface and move tools directly to editor implementation.<br />
|-<br />
| '''digiKam/kioslave'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> Remove KIO-Slaves and move code to database core using multithreading. See this [https://community.kde.org/GSoC/2015/Ideas#Project:_Re-write_database_KIO-slaves_as_pure_Qt5_using_multithreading GoSC 2015 project for details].<br />
|-<br />
| '''digiKam/showfoto'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''digiKam/databaseserver'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''digiKam/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
| * 2 test tools do not link yet and are disable from compilation rules<br />
|}<br />
<br />
=== Recommendations ===<br />
<br />
Porting to KF5 is divided in 4 stages:<br />
<br />
1/ Change CMake files. Some Laurent scripts do this stuff. We use now<br />
ECM scripts collection from KDE core to manage dependencies and report on the<br />
console. Some macros disappear, and are replaced by new ones. For this<br />
job, it's recommended to look well all done in CMake files from libkexiv2<br />
and libkdcraw already ported and polished.<br />
<br />
2/ Port C++ code using KDE4Support. This include older classes from Qt4<br />
and KDE4 to make transition faster. This will help to have quickly a<br />
code compilable, but this will generate a lots of deprecated warnings.<br />
First regression tests must be done at this stage to see if nothing is broken.<br />
<br />
3/ Port C++ code to pure KF5. The goal of KF5 is to reduce KDELibs<br />
fingerprint everywhere, when it's possible. Qt API will be used in<br />
priority against KF5 API. But sometime, this will be not possible as<br />
well, without big changes. A lot of KDE API have migrated to Qt5<br />
(as for ex : KUrl -> QUrl and kDebug ->qDebug). It's sound like KDELibs<br />
will become an incubator for new implementations which will move later<br />
to Qt. Also, to have the most of code using pure Qt5 will simplify<br />
future transitions more easy to do. Removing KDE4Support dependency<br />
will force to use non-deprecated KF5 API.<br />
<br />
4/ Port C++ code to pure Qt5. Porting most of KF5 Api to use Qt5 instead is<br />
prefered, when it's possible. Another important change in Qt5 is the non-support<br />
of char pointer with QString.<br />
<br />
In first stage we must use '''remove_definitions(-DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII)'''<br />
in CMake script to compile code. These definitions force to not use deprecated QString methods.<br />
<br />
Another definition to add while Qt5 porting is '''add_definitions(-DQT_NO_URL_CAST_FROM_STRING)''' about cast between QString and QUrl.<br />
<br />
In last stage we must use '''remove_definition(-DQT_DEPRECATED_SINCE(5,0))''' in CMake script to compile code. These definitions force to disable deprecated methods in Qt API.<br />
<br />
=== Common changes to port code ===<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Original Code<br />
! Ported Code<br />
! Remarks<br />
|-<br />
| ...section of code not yet ported...<br />
|<br />
<source lang="cpp-qt"><br />
#pragma message("PORT QT5")<br />
/*<br />
...section of code not yet ported...<br />
*/<br />
</source><br />
| Not yet ported code sections must be commented with compiler warnings printed on the console<br />
|-<br />
| KDE4_BUILD_TESTS=ON<br />
| '''BUILD_TESTING=ON'''<br />
| CMake flag to build tests sub-dir.<br />
|-<br />
| CMAKE_BUILD_TYPE=debugfull<br />
| '''CMAKE_BUILD_TYPE=debug'''<br />
| CMake flag to build code with debug symbols.<br />
|-<br />
| kDebug() / kWarning() / kError()<br />
| '''qCDebug(FOO_LOG) / qCWarning(FOO_LOG) / qCCritical(FOO_LOG)'''<br />
|<br />
* New "foo_debug.h" and "foo_debug.cpp" files must be created to declare debug space.<br />
* "foo_debug.h" is not shared. For shared a library, this header must be placed as private in implementation files, not header files.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
#include "foo.moc"<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
#include "foo.h"<br />
</source><br />
|<br />
* To prevent compilation errors with Qt5. Qt will generate moc_foo.h files instead. Header file of a class declaration must be placed on top of included header files list from implementation file.<br />
* Special case : KF5 plugin factory needs moc header file included at end of plugin implementation to prevent broken linking.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::directory()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl::adjusted(QUrl::RemoveFilename).path()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDiskFreeSpaceInfo<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStorageInfo<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::setFileName(newFileName)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl::setPath(QUrl::path() + newFileName)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl url;<br />
url.adjustPath(KUrl::AddTrailingSlash);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
url.setPath(url.path() + '/');<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDialog::spacingHint()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDialog::marginHint()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::style()->pixelMetric(QStyle::PM_DefaultChildMargin)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KComponentData::mainComponent().componentName()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::applicationName()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KComponentData::mainComponent().aboutData()->homepage()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KAboutData::applicationData().homepage()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KIconLoader::SmallIcon("icon_name", size)<br />
</source><br />
or<br />
<source lang="cpp-qt"><br />
KIconLoader::global()->loadIcon("icon_name", size)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QIcon::fromTheme("icon_name").pixmap(size)<br />
</source><br />
|<br />
*Adjust size value :<br />
**Small = 16 (default from KIconLoader::SmallIcon()),<br />
**SmallMedium = 22,<br />
**Medium = 32,<br />
**Large = 48,<br />
**Huge = 64,<br />
**Enormous = 128<br />
* Icon must be installed with desktop theme icons.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::installPath("data") + QString("filename")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::GenericDataLocation,<br />
QString("filename"))<br />
</source><br />
| File to open in read-only. File already exist.<br />
<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::installPath("xdgdata-apps") + QString("filename")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::ApplicationsLocation,<br />
QString("filename"))<br />
</source><br />
| File to open in read-only. File already exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("data", QString("filename"))<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ '/' + QString("filename")<br />
</source><br />
| File to open in read-only. File already exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QString dir = KStandardDirs::locateLocal("data",<br />
QString("dirname"), true)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QString dir =<br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ '/' + QString("dirname");<br />
QDir().mkpath(dir);<br />
</source><br />
| Dir to open in read-write. Create dir if it do not exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrlLabel<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RActiveLabel<br />
</source><br />
|<br />
* Slot used to process url can be dropped.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KSeparator<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RLineWidget<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KXmlGuiWindow::restoreWindowSize(group);<br />
<br />
KDialog::restoreDialogSize(group);<br />
</source><br />
and<br />
<source lang="cpp-qt"><br />
KXmlGuiWindow::saveWindowSize(group);<br />
<br />
KDialog::saveDialogSize(group);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KWindowConfig::restoreWindowSize(windowHandle(), group);<br />
</source><br />
and<br />
<source lang="cpp-qt"><br />
KWindowConfig::saveWindowSize(windowHandle(), group);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KVBox* const vbox = new KVBox(this);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RVBox* const vbox = new KDcrawIface::RVBox(this);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KHBox* const hbox = new KHBox(this);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RHBox* const hbox = new KDcrawIface::RHBox(this);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KIO::NetAccess::del(url, QApplication::activeWindow());<br />
<br />
KIO::NetAccess::mkdir(url, QApplication::activeWindow());<br />
<br />
KIO::NetAccess::dircopy(srcUrl, dstUrl, QApplication::activeWindow())<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
auto deleteJob = KIO::file_delete(url);<br />
KJobWidgets::setWindow(deleteJob, QApplication::activeWindow());<br />
deleteJob->exec();<br />
<br />
auto mkdirJob = KIO::mkdir(url);<br />
KJobWidgets::setWindow(mkdirJob, QApplication::activeWindow());<br />
mkdirJob->exec();<br />
<br />
auto dircopyJob = KIO::copy(srcUrl, dstUrl);<br />
KJobWidgets::setWindow(dircopyJob, QApplication::activeWindow());<br />
dircopyJob->exec();<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KD::rename(src, dst)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QFile::rename(src, dst)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KToolInvocation::invokeBrowser(url)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QDesktopServices::openUrl(url)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KGlobalSettings::singleClick()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
qApp->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::directory(KUrl::ObeyTrailingSlash)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url = adjusted(QUrl::RemoveFilename);<br />
url.adjusted(QUrl::StripTrailingSlash).path()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KImageIO::typeForMime(str)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMimeDatabase().mimeTypeForName(str)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KTemporaryFile temp;<br />
temp.setPrefix(prefixStr);<br />
temp.setSuffix(suffixStr);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QTemporaryFile temp;<br />
temp.setFileTemplate(prefixStr + QLatin1String("XXXXXX") + suffixStr);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
K_GLOBAL_STATIC<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
Q_GLOBAL_STATIC<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KMenu::addTitle()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMenu::addSection()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locate("data", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::GenericDataLocation, "file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("data", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("appdata", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::DataLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("cache", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("tmp", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QDir::tempPath() + QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::makeDir(path, permission);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
if (!QDir(path).exists())<br />
{<br />
if (QDir().mkpath(path))<br />
{<br />
QFile f(path);<br />
f.setPermissions(permission);<br />
}<br />
}<br />
</source><br />
|<br />
permission = QFile::ReadUser | QFile::WriteUser | QFile::ExeUser = 0700<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrlRequester<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RFileSelector<br />
</source><br />
|<br />
To select local only file or path, no need KUrlRequester.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KActionMenu<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMenu<br />
</source><br />
|<br />
Use QMenu::menuAction() to get Action instance of menu to plug in action collection.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KToggleAction<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QAction<br />
</source><br />
|<br />
Use QAction::setCheckable(true) to switch Action as toggle state.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
url.addQueryItem(key, value);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
QUrlQuery q(url);<br />
q.addQueryItem(key, value);<br />
url.setQuery(q);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QPixmap pix, alphaMask;<br />
pix.setAlphaChannel(mask);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QPixmap pix, alphaMask;<br />
QPainter p(&pix);<br />
p.setOpacity(0.2);<br />
p.drawPixmap(0, 0, alphaMask);<br />
p.end();<br />
</source><br />
|<br />
|}<br />
<br />
=== Link to documentation to port code ===<br />
<br />
* [https://community.kde.org/Frameworks/Porting_Notes KDE4 to KF5 porting guide]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/kdelibs4support/html/deprecated.html KDE4 deprecated list]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/kdelibs4support/html/classKCalendarSystem.html#a6853ea0521ea23923d3a104b1a178782 KCalendarSystem format strings] to port to [http://doc.qt.io/qt-5/qdate.html#toString QDate format strings] and [http://doc.qt.io/qt-5/qtime.html#toString QTime format strings]<br />
<br />
* [https://community.kde.org/Frameworks/Porting_Notes/KStandardDirs KStandardDirs to Qt5 porting guide]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/index.html KF5 API]<br />
<br />
* [http://qt-project.org/wiki/Transition_from_Qt_4.x_to_Qt5 Qt4 to Qt5 porting guide]<br />
<br />
* [http://qt-project.org/doc/qt-5/classes.html Qt5 API]<br />
<br />
* [https://projects.kde.org/projects/qt5?jump=repository Qt5 project]<br />
<br />
* [http://api.kde.org/ecm/index.html ECM - Documentation]<br />
<br />
* [https://techbase.kde.org/Development/ECM_SourceIncompatChanges ECM - KDELibs4 macro port]<br />
<br />
* [https://projects.kde.org/projects/kdesupport/extra-cmake-modules ECM - Extra CMake Module project]<br />
<br />
=== Scripts to port code ===<br />
<br />
Laurent Montel has written scripts to port CMake and C++ code to KF5/Qt5 and remove kdelibs4support dependency. There are available [https://projects.kde.org/projects/kde/kdesdk/kde-dev-scripts/repository/revisions/master/show/kf5 in this repository] (see kf5 sub-dir).<br />
<br />
Scripts must be applied in this order, with a test compilation between each one :<br />
<br />
* Full safe scripts :<br />
** convert-to-k4aboutdata.pl (first one to apply, this help to compile)<br />
** adapt_cmakelists_file.pl (to convert CMake scripts, but code must don't be capititalized)<br />
** remove-kde4support.pl<br />
** convert-kicon.pl<br />
** convert-kmenu.pl<br />
** convert-kshortcut.pl<br />
** convert-kcolordialog.pl<br />
** convert-klistwidget.pl<br />
** convert-kmd5.pl<br />
** convert-kmenubar.pl<br />
** convert-ksplashscreen.pl<br />
** convert-kdebug.pl<br />
<br />
* Less safe scripts :<br />
** convert-kintnuminput.pl<br />
** convert-kintspinbox.pl<br />
** convert-ktextbrowser.pl<br />
** convert-kfontcombobox.pl<br />
<br />
* Scripts which need to check in-deep all changes :<br />
** convert-kvbox.pl<br />
** convert-kdialog.pl<br />
** convert-kcmdlineargs.pl<br />
** convert-kdebug-with-argument.sh (this one change kDebug(1556) en qCDebug with some info after to convert)<br />
** convert-kmimetype.pl<br />
<br />
* Last scripts to apply :<br />
** clean-forward-declaration.sh (remove forward declaration, to do when all compile fine)<br />
** clean-includes.sh (try to remove not used includes, not safe to 100%)<br />
** port_to_autogenerate_export_header.sh (convert to new signal/slot API, not safe to 100%)</div>Cauliergilleshttps://community.kde.org/index.php?title=Digikam/CodingSprint2014&diff=56395Digikam/CodingSprint20142015-03-09T09:19:41Z<p>Cauliergilles: /* digiKam Core */</p>
<hr />
<div>== KDE Framework Port ==<br />
<br />
=== Branches Creation ===<br />
<br />
All port code must be stored in dedicated "frameworks" git branch for each project. Branch must be created from master.<br />
<br />
<source lang="bash"><br />
$>git checkout master<br />
$>git pull --rebase<br />
$>git checkout -b frameworks<br />
$>git push origin frameworks:frameworks<br />
$>git branch -a<br />
* frameworks<br />
master<br />
remotes/origin/HEAD -> origin/master<br />
remotes/origin/frameworks<br />
remotes/origin/master<br />
</source><br />
<br />
<br />
KF5 Repositories list is given below :<br />
<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkexiv2/repository/show?rev=frameworks Libkexiv2]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkdcraw/repository/show?rev=frameworks Libkdcraw]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkipi/repository/show?rev=frameworks Libkipi]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkface/repository/show?rev=frameworks Libkface]<br />
* [https://projects.kde.org/projects/extragear/libs/libkgeomap/repository/show?rev=frameworks Libkgeomap]<br />
* [https://projects.kde.org/projects/extragear/graphics/digikam/digikam-software-compilation/repository/show?rev=frameworks digiKam Software Compilation]<br />
* [https://projects.kde.org/projects/extragear/graphics/kipi-plugins/repository/show?rev=frameworks Kipi-plugins]<br />
* [https://projects.kde.org/projects/extragear/graphics/digikam/repository/show?rev=frameworks digiKam]<br />
<br />
=== Kipi-plugins Refactoring ===<br />
<br />
A lots of tools are not maintained since a while, other one have been never finalized. See the list of plugins which will be ported or not :<br />
<br />
* Tools which can be ported as well :<br />
** panorama<br />
** expoblending<br />
** gpssync<br />
** sendimages<br />
** timeadjust<br />
** metadataedit<br />
** videoslideshow<br />
** advancedslideshow<br />
** flashexport<br />
** kmlexport<br />
** acquireimages<br />
** calendar<br />
** dngconverter<br />
** printimages<br />
** imageviewer<br />
<br />
* Tools in pending stage :<br />
** dlnaexport <=== Needs HUpnp lib Qt5 port<br />
** htmlexport <=== Nobody maintain this code since a while, but tool still used.<br />
** photolayoutseditor <=== A complex but powerful tool. Will be complex to port.<br />
** removeredeyes <=== We can share red eyes removal core implementation in libkface in way to share with other KDE applications and replace digiKam Image Editor tool by this code. A new digiKam BQM tool must be created. A GSoC 2015 project can be planned about this topic.<br />
<br />
* Web export tools which must be factored (same settings widgets, common dialog, common high level interface to process import/export). Another GSoC 2015 project can be planned about this topic.<br />
** facebook<br />
** picasawebexport<br />
** rajceexport<br />
** shwup<br />
** debianscreenshots<br />
** dropbox<br />
** googledrive<br />
** imageshackexport<br />
** kioexportimport<br />
** piwigoexport<br />
** smug<br />
** flickrexport<br />
** yandexfotki<br />
** mediawiki <=== need to port libmediawiki from extragear/libs/.<br />
** vkontakte <=== require libkvkontakte from extragear/libs/.<br />
<br />
* Tools never finalized (can be moved to attic for the moment) :<br />
** imgurexport <=== require libqtkoauth from SF.net<br />
** photivointegration<br />
** jalbumexport<br />
** wallpaper<br />
<br />
* Tools obsolete (can be moved to attic for the moment) :<br />
** batchprocessimages <=== replaced by digiKam BQM<br />
** rawconverter <=== replaced by digiKam BQM<br />
** jpeglossless <=== replaced by new digiKam core tool<br />
** kopete <=== KF5 will use new API<br />
** ipodexport <=== work only with very old Apple devices.<br />
** galleryexport <=== Gallery web service is not maintained since a while. Gallery project is dead.<br />
<br />
=== KF5/Qt5 Port Status ===<br />
<br />
==== Libkexiv2 ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkexiv2/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|<br />
* C++ auto_ptr warnings from Exiv2 API disabled.<br />
* Library depend of :<br />
** KF5::I18n (translations)<br />
** KF5::TextWidgets (MsgTextEdit is based on KTextEdit)<br />
|-<br />
| '''libkexiv2/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|Code do not depend of KF5<br />
|}<br />
<br />
==== Libkdcraw ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkdcraw/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Veaceslav<br />
|<br />
* C++ auto_ptr warnings from Libraw API disabled.<br />
* ThreadWeaver and Solid dependencies removed.<br />
* RActionThreadBase is ported to QThreadPool + QRunnable API instead ThreadWeaver.<br />
* KIntNumInput and KDoubleNumInput are deprecated and removed as dependencies. We use Krita Int and Double input widgets instead. See [https://bugs.kde.org/show_bug.cgi?id=284216 bug #284216] for details.<br />
* Library depend of:<br />
** KF5::I18n (translations).<br />
** KF5::ConfigCore (KConfigGroup used in widgets).<br />
|-<br />
| '''libkdcraw/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Veaceslav<br />
|<br />
* Code do not depend of KF5<br />
*Multithreaded RAW to PNG GUI test program now use DCrawSettingsWidget to tune Raw decoding settings, and is ported to RActionThreadBase to process conversions on all core CPU.<br />
|}<br />
<br />
==== Libkipi ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkipi/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Mohamed<br />
|<br />
* libkipi/version.h file renamed as libkipi_config.h to host only SO version ID shared with kipi plugins.<br />
* API changes a little bit : path() => url().<br />
*Library depend of :<br />
** KF5::I18n (translations)<br />
** KF5::Config (KConfigGroup and KSharedConfig)<br />
** KF5::XmlGui (plugins based on KXMLGuiCLient)<br />
** KF5::Service (plugins use KService)<br />
|-<br />
| '''libkipi/test'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Mohamed<br />
|<br />
* moc header must be placed at end of plugin implementation. See all plugin_helloworld.cpp comments for details.<br />
* K_PLUGIN_EXPORT macro at start of plugin implementation can be dropped.<br />
* '''kbuildsycoca5 --noincremental''' must be run to found new plugin installed on the system if KF5 is not the current active desktop.<br />
|}<br />
<br />
==== Libkface ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkface/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|Library only depend of KF5::I18n<br />
|-<br />
| '''libkface/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
| Code do not depend of KF5<br />
|}<br />
<br />
==== Libkgeomap ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkgeomap/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Mohamed<br />
|<br />
* Library depend of:<br />
** KF5::I18n (translations).<br />
** KF5::Config (KConfigGroup used in widgets).<br />
* Needs Marble code from [https://projects.kde.org/projects/kde/kdeedu/marble/repository/show?rev=master master git branch] compiled with cmake option '''-DQT5BUILD=ON'''.<br />
* <span style="background:salmon">TODO</span> We need to detect the Marble version somehow, to avoid linking KF5 build against Qt4 version of Marble. We still use FindMarble cmake script from KDE4. Marble need to be ported as pure KF5 frameworks component.<br />
* <span style="background:lightgreen">DONE</span> KHTML based class HTMLWidget must be ported to Qt5::Webkit.<br />
|-<br />
| '''libkgeomap/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''libkgeomap/calibrator'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''libkgeomap/demo'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* Needs libkexiv2 from KF5 to compile (optional).<br />
|}<br />
<br />
==== Kipi-plugins ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''Kipi-plugins/common'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| yes<br />
|Gilles, Laurent<br />
|<br />
* New MacroLocalLibs.cmake wrapper added to handle local or system wide shared libraries.<br />
* Plugins must be linked at least with:<br />
**KF5::Parts<br />
**KF5::KDELibs4Support<br />
**${KF5Kipi_LIBRARIES}<br />
**${KF5KExiv2_LIBRARIES}<br />
**${KF5KDcraw_LIBRARIES}<br />
**KF5kipiplugins<br />
* Use '''kipiplugins_debug.h''' header in plugins to handle debug space.<br />
* ${KF5*_LIBRARIES} are populated by MacroLocalLibs.cmake<br />
* Add a new common class to process images resizement based SendImage::ImageResize<br />
|-<br />
| '''Kipi-plugins/tests'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins Documentation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles<br />
|<br />
|-<br />
| '''Kipi-plugins/timeadjust'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/sendimages'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/kmlexport'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/printimages'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
| Postscript support have been removed from QPrinter. Option is now removed from assistant.<br />
|-<br />
| '''Kipi-plugins/flashexport'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|}<br />
<br />
==== digiKam Software Compilation ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''digiKam Software Compilation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| not applicable<br />
| not applicable<br />
| Gilles<br />
|<br />
* 2 new Cmake options have been add to enable/disable digiKam core and Kipi-plugins compilation (digiKam still disabled by default for the moment).<br />
* List of checkout repositories managed by "download-repos" scripts is reduced to current sub projects already ready to support KF5. "frameworks" branches are automatically switched. See ".gitslaves" for details.<br />
* New MacroLocalLibs.cmake must be used in Kipi-plugins and digiKam Core to wrap local or system libraries (libkipi, likdcraw, libkexiv2, etc) when compilation is done under SC or not.<br />
|-<br />
| '''digiKam Documentation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles<br />
|<br />
|}<br />
<br />
==== digiKam Core ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''digiKam/data'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|<br />
|-<br />
| '''digiKam/libs'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:salmon">TODO</span> ProxyLineEdit is based on KLineEdit and must be ported to QLineEdit, but it use KLineEdit::clearButtonUsedSize() which do not exist with QLineEdit.<br />
* <span style="background:orange">UNCOMPLETE</span> SearchTextBar is based on KLineEdit and must be ported to QLineEdit, but it use completion model class ModelCompletion based on KCompletion Which must be ported to QCompleter.<br />
* <span style="background:lightgreen">DONE</span> ICCSettings : Q_WS__X11 have been removed with Qt5. X11 detection is performed by CMake and rules are set as definition into digikam_config.h<br />
* <span style="background:salmon">TODO</span> Port LoadingCache from KDirWatch to QFileSystemWatcher.<br />
* <span style="background:salmon">TODO</span> When QFileSystemWtyacher port is complete, check if KInotify still mandatory.<br />
|-<br />
| '''digiKam/app'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:salmon">TODO</span> AddTagsLineEdit is based on KLineEdit and must be ported to QLineEdit, but it use completion model class ModelCompletion based on KCompletion Which must be ported to QCompleter.<br />
* <span style="background:lightgreen">DONE</span> WelcomePageView ported from KHTMLPart to QWebView. KParts and KHtml dependencies removed from digiKam.<br />
* <span style="background:salmon">TODO</span> WelcomePageView HTML rendering is completly broken. Check if CSS and HTML code are conform. Note : this is not due to Qt5 port as KHTML done the same result.<br />
* <span style="background:lightgreen">DONE</span> MediaPlayerView ported from Phonon to QMediaPlayer. Phonon dependency removed from digiKam. New CMake option add to enable/disable QMediaPlayer support.<br />
* <span style="background:salmon">TODO</span> Port AlbumWatch from KDirWatch to QFileSystemWatcher<br />
|-<br />
| '''digiKam/utilities'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:salmon">TODO</span> CameraController use KProcess and KMacroExpander and need to be ported to QProcess.<br />
|-<br />
| '''digiKam/imageplugins'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> Remove editor plugins interface and move tools directly to editor implementation.<br />
|-<br />
| '''digiKam/kioslave'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> Remove KIO-Slaves and move code to database core using multithreading. See this [https://community.kde.org/GSoC/2015/Ideas#Project:_Re-write_database_KIO-slaves_as_pure_Qt5_using_multithreading GoSC 2015 project for details].<br />
|-<br />
| '''digiKam/showfoto'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''digiKam/databaseserver'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''digiKam/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
| * 2 test tools do not link yet and are disable from compilation rules<br />
|}<br />
<br />
=== Recommendations ===<br />
<br />
Porting to KF5 is divided in 4 stages:<br />
<br />
1/ Change CMake files. Some Laurent scripts do this stuff. We use now<br />
ECM scripts collection from KDE core to manage dependencies and report on the<br />
console. Some macros disappear, and are replaced by new ones. For this<br />
job, it's recommended to look well all done in CMake files from libkexiv2<br />
and libkdcraw already ported and polished.<br />
<br />
2/ Port C++ code using KDE4Support. This include older classes from Qt4<br />
and KDE4 to make transition faster. This will help to have quickly a<br />
code compilable, but this will generate a lots of deprecated warnings.<br />
First regression tests must be done at this stage to see if nothing is broken.<br />
<br />
3/ Port C++ code to pure KF5. The goal of KF5 is to reduce KDELibs<br />
fingerprint everywhere, when it's possible. Qt API will be used in<br />
priority against KF5 API. But sometime, this will be not possible as<br />
well, without big changes. A lot of KDE API have migrated to Qt5<br />
(as for ex : KUrl -> QUrl and kDebug ->qDebug). It's sound like KDELibs<br />
will become an incubator for new implementations which will move later<br />
to Qt. Also, to have the most of code using pure Qt5 will simplify<br />
future transitions more easy to do. Removing KDE4Support dependency<br />
will force to use non-deprecated KF5 API.<br />
<br />
4/ Port C++ code to pure Qt5. Porting most of KF5 Api to use Qt5 instead is<br />
prefered, when it's possible. Another important change in Qt5 is the non-support<br />
of char pointer with QString.<br />
<br />
In first stage we must use '''remove_definitions(-DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII)'''<br />
in CMake script to compile code. These definitions force to not use deprecated QString methods.<br />
<br />
Another definition to add while Qt5 porting is '''add_definitions(-DQT_NO_URL_CAST_FROM_STRING)''' about cast between QString and QUrl.<br />
<br />
In last stage we must use '''remove_definition(-DQT_DEPRECATED_SINCE(5,0))''' in CMake script to compile code. These definitions force to disable deprecated methods in Qt API.<br />
<br />
=== Common changes to port code ===<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Original Code<br />
! Ported Code<br />
! Remarks<br />
|-<br />
| ...section of code not yet ported...<br />
|<br />
<source lang="cpp-qt"><br />
#pragma message("PORT QT5")<br />
/*<br />
...section of code not yet ported...<br />
*/<br />
</source><br />
| Not yet ported code sections must be commented with compiler warnings printed on the console<br />
|-<br />
| KDE4_BUILD_TESTS=ON<br />
| '''BUILD_TESTING=ON'''<br />
| CMake flag to build tests sub-dir.<br />
|-<br />
| CMAKE_BUILD_TYPE=debugfull<br />
| '''CMAKE_BUILD_TYPE=debug'''<br />
| CMake flag to build code with debug symbols.<br />
|-<br />
| kDebug() / kWarning() / kError()<br />
| '''qCDebug(FOO_LOG) / qCWarning(FOO_LOG) / qCCritical(FOO_LOG)'''<br />
|<br />
* New "foo_debug.h" and "foo_debug.cpp" files must be created to declare debug space.<br />
* "foo_debug.h" is not shared. For shared a library, this header must be placed as private in implementation files, not header files.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
#include "foo.moc"<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
#include "foo.h"<br />
</source><br />
|<br />
* To prevent compilation errors with Qt5. Qt will generate moc_foo.h files instead. Header file of a class declaration must be placed on top of included header files list from implementation file.<br />
* Special case : KF5 plugin factory needs moc header file included at end of plugin implementation to prevent broken linking.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::directory()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl::adjusted(QUrl::RemoveFilename).path()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDiskFreeSpaceInfo<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStorageInfo<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::setFileName(newFileName)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl::setPath(QUrl::path() + newFileName)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl url;<br />
url.adjustPath(KUrl::AddTrailingSlash);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
url.setPath(url.path() + '/');<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDialog::spacingHint()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDialog::marginHint()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::style()->pixelMetric(QStyle::PM_DefaultChildMargin)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KComponentData::mainComponent().componentName()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::applicationName()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KComponentData::mainComponent().aboutData()->homepage()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KAboutData::applicationData().homepage()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KIconLoader::SmallIcon("icon_name", size)<br />
</source><br />
or<br />
<source lang="cpp-qt"><br />
KIconLoader::global()->loadIcon("icon_name", size)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QIcon::fromTheme("icon_name").pixmap(size)<br />
</source><br />
|<br />
*Adjust size value :<br />
**Small = 16 (default from KIconLoader::SmallIcon()),<br />
**SmallMedium = 22,<br />
**Medium = 32,<br />
**Large = 48,<br />
**Huge = 64,<br />
**Enormous = 128<br />
* Icon must be installed with desktop theme icons.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::installPath("data") + QString("filename")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::GenericDataLocation,<br />
QString("filename"))<br />
</source><br />
| File to open in read-only. File already exist.<br />
<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::installPath("xdgdata-apps") + QString("filename")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::ApplicationsLocation,<br />
QString("filename"))<br />
</source><br />
| File to open in read-only. File already exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("data", QString("filename"))<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ '/' + QString("filename")<br />
</source><br />
| File to open in read-only. File already exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QString dir = KStandardDirs::locateLocal("data",<br />
QString("dirname"), true)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QString dir =<br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ '/' + QString("dirname");<br />
QDir().mkpath(dir);<br />
</source><br />
| Dir to open in read-write. Create dir if it do not exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrlLabel<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RActiveLabel<br />
</source><br />
|<br />
* Slot used to process url can be dropped.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KSeparator<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RLineWidget<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KXmlGuiWindow::restoreWindowSize(group);<br />
<br />
KDialog::restoreDialogSize(group);<br />
</source><br />
and<br />
<source lang="cpp-qt"><br />
KXmlGuiWindow::saveWindowSize(group);<br />
<br />
KDialog::saveDialogSize(group);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KWindowConfig::restoreWindowSize(windowHandle(), group);<br />
</source><br />
and<br />
<source lang="cpp-qt"><br />
KWindowConfig::saveWindowSize(windowHandle(), group);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KVBox* const vbox = new KVBox(this);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RVBox* const vbox = new KDcrawIface::RVBox(this);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KHBox* const hbox = new KHBox(this);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RHBox* const hbox = new KDcrawIface::RHBox(this);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KIO::NetAccess::del(url, QApplication::activeWindow());<br />
<br />
KIO::NetAccess::mkdir(url, QApplication::activeWindow());<br />
<br />
KIO::NetAccess::dircopy(srcUrl, dstUrl, QApplication::activeWindow())<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
auto deleteJob = KIO::file_delete(url);<br />
KJobWidgets::setWindow(deleteJob, QApplication::activeWindow());<br />
deleteJob->exec();<br />
<br />
auto mkdirJob = KIO::mkdir(url);<br />
KJobWidgets::setWindow(mkdirJob, QApplication::activeWindow());<br />
mkdirJob->exec();<br />
<br />
auto dircopyJob = KIO::copy(srcUrl, dstUrl);<br />
KJobWidgets::setWindow(dircopyJob, QApplication::activeWindow());<br />
dircopyJob->exec();<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KD::rename(src, dst)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QFile::rename(src, dst)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KToolInvocation::invokeBrowser(url)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QDesktopServices::openUrl(url)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KGlobalSettings::singleClick()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
qApp->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::directory(KUrl::ObeyTrailingSlash)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url = adjusted(QUrl::RemoveFilename);<br />
url.adjusted(QUrl::StripTrailingSlash).path()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KImageIO::typeForMime(str)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMimeDatabase().mimeTypeForName(str)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KTemporaryFile temp;<br />
temp.setPrefix(prefixStr);<br />
temp.setSuffix(suffixStr);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QTemporaryFile temp;<br />
temp.setFileTemplate(prefixStr + QLatin1String("XXXXXX") + suffixStr);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
K_GLOBAL_STATIC<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
Q_GLOBAL_STATIC<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KMenu::addTitle()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMenu::addSection()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locate("data", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::GenericDataLocation, "file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("data", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("appdata", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::DataLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("cache", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("tmp", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QDir::tempPath() + QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::makeDir(path, permission);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
if (!QDir(path).exists())<br />
{<br />
if (QDir().mkpath(path))<br />
{<br />
QFile f(path);<br />
f.setPermissions(permission);<br />
}<br />
}<br />
</source><br />
|<br />
permission = QFile::ReadUser | QFile::WriteUser | QFile::ExeUser = 0700<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrlRequester<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RFileSelector<br />
</source><br />
|<br />
To select local only file or path, no need KUrlRequester.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KActionMenu<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMenu<br />
</source><br />
|<br />
Use QMenu::menuAction() to get Action instance of menu to plug in action collection.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KToggleAction<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QAction<br />
</source><br />
|<br />
Use QAction::setCheckable(true) to switch Action as toggle state.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
url.addQueryItem(key, value);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
QUrlQuery q(url);<br />
q.addQueryItem(key, value);<br />
url.setQuery(q);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QPixmap pix, alphaMask;<br />
pix.setAlphaChannel(mask);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QPixmap pix, alphaMask;<br />
QPainter p(&pix);<br />
p.setOpacity(0.2);<br />
p.drawPixmap(0, 0, alphaMask);<br />
p.end();<br />
</source><br />
|<br />
|}<br />
<br />
=== Link to documentation to port code ===<br />
<br />
* [https://community.kde.org/Frameworks/Porting_Notes KDE4 to KF5 porting guide]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/kdelibs4support/html/deprecated.html KDE4 deprecated list]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/kdelibs4support/html/classKCalendarSystem.html#a6853ea0521ea23923d3a104b1a178782 KCalendarSystem format strings] to port to [http://doc.qt.io/qt-5/qdate.html#toString QDate format strings] and [http://doc.qt.io/qt-5/qtime.html#toString QTime format strings]<br />
<br />
* [https://community.kde.org/Frameworks/Porting_Notes/KStandardDirs KStandardDirs to Qt5 porting guide]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/index.html KF5 API]<br />
<br />
* [http://qt-project.org/wiki/Transition_from_Qt_4.x_to_Qt5 Qt4 to Qt5 porting guide]<br />
<br />
* [http://qt-project.org/doc/qt-5/classes.html Qt5 API]<br />
<br />
* [https://projects.kde.org/projects/qt5?jump=repository Qt5 project]<br />
<br />
* [http://api.kde.org/ecm/index.html ECM - Documentation]<br />
<br />
* [https://techbase.kde.org/Development/ECM_SourceIncompatChanges ECM - KDELibs4 macro port]<br />
<br />
* [https://projects.kde.org/projects/kdesupport/extra-cmake-modules ECM - Extra CMake Module project]<br />
<br />
=== Scripts to port code ===<br />
<br />
Laurent Montel has written scripts to port CMake and C++ code to KF5/Qt5 and remove kdelibs4support dependency. There are available [https://projects.kde.org/projects/kde/kdesdk/kde-dev-scripts/repository/revisions/master/show/kf5 in this repository] (see kf5 sub-dir).<br />
<br />
Scripts must be applied in this order, with a test compilation between each one :<br />
<br />
* Full safe scripts :<br />
** convert-to-k4aboutdata.pl (first one to apply, this help to compile)<br />
** adapt_cmakelists_file.pl (to convert CMake scripts, but code must don't be capititalized)<br />
** remove-kde4support.pl<br />
** convert-kicon.pl<br />
** convert-kmenu.pl<br />
** convert-kshortcut.pl<br />
** convert-kcolordialog.pl<br />
** convert-klistwidget.pl<br />
** convert-kmd5.pl<br />
** convert-kmenubar.pl<br />
** convert-ksplashscreen.pl<br />
** convert-kdebug.pl<br />
<br />
* Less safe scripts :<br />
** convert-kintnuminput.pl<br />
** convert-kintspinbox.pl<br />
** convert-ktextbrowser.pl<br />
** convert-kfontcombobox.pl<br />
<br />
* Scripts which need to check in-deep all changes :<br />
** convert-kvbox.pl<br />
** convert-kdialog.pl<br />
** convert-kcmdlineargs.pl<br />
** convert-kdebug-with-argument.sh (this one change kDebug(1556) en qCDebug with some info after to convert)<br />
** convert-kmimetype.pl<br />
<br />
* Last scripts to apply :<br />
** clean-forward-declaration.sh (remove forward declaration, to do when all compile fine)<br />
** clean-includes.sh (try to remove not used includes, not safe to 100%)<br />
** port_to_autogenerate_export_header.sh (convert to new signal/slot API, not safe to 100%)</div>Cauliergilleshttps://community.kde.org/index.php?title=Digikam/CodingSprint2014&diff=56394Digikam/CodingSprint20142015-03-09T09:18:11Z<p>Cauliergilles: /* digiKam Core */</p>
<hr />
<div>== KDE Framework Port ==<br />
<br />
=== Branches Creation ===<br />
<br />
All port code must be stored in dedicated "frameworks" git branch for each project. Branch must be created from master.<br />
<br />
<source lang="bash"><br />
$>git checkout master<br />
$>git pull --rebase<br />
$>git checkout -b frameworks<br />
$>git push origin frameworks:frameworks<br />
$>git branch -a<br />
* frameworks<br />
master<br />
remotes/origin/HEAD -> origin/master<br />
remotes/origin/frameworks<br />
remotes/origin/master<br />
</source><br />
<br />
<br />
KF5 Repositories list is given below :<br />
<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkexiv2/repository/show?rev=frameworks Libkexiv2]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkdcraw/repository/show?rev=frameworks Libkdcraw]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkipi/repository/show?rev=frameworks Libkipi]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkface/repository/show?rev=frameworks Libkface]<br />
* [https://projects.kde.org/projects/extragear/libs/libkgeomap/repository/show?rev=frameworks Libkgeomap]<br />
* [https://projects.kde.org/projects/extragear/graphics/digikam/digikam-software-compilation/repository/show?rev=frameworks digiKam Software Compilation]<br />
* [https://projects.kde.org/projects/extragear/graphics/kipi-plugins/repository/show?rev=frameworks Kipi-plugins]<br />
* [https://projects.kde.org/projects/extragear/graphics/digikam/repository/show?rev=frameworks digiKam]<br />
<br />
=== Kipi-plugins Refactoring ===<br />
<br />
A lots of tools are not maintained since a while, other one have been never finalized. See the list of plugins which will be ported or not :<br />
<br />
* Tools which can be ported as well :<br />
** panorama<br />
** expoblending<br />
** gpssync<br />
** sendimages<br />
** timeadjust<br />
** metadataedit<br />
** videoslideshow<br />
** advancedslideshow<br />
** flashexport<br />
** kmlexport<br />
** acquireimages<br />
** calendar<br />
** dngconverter<br />
** printimages<br />
** imageviewer<br />
<br />
* Tools in pending stage :<br />
** dlnaexport <=== Needs HUpnp lib Qt5 port<br />
** htmlexport <=== Nobody maintain this code since a while, but tool still used.<br />
** photolayoutseditor <=== A complex but powerful tool. Will be complex to port.<br />
** removeredeyes <=== We can share red eyes removal core implementation in libkface in way to share with other KDE applications and replace digiKam Image Editor tool by this code. A new digiKam BQM tool must be created. A GSoC 2015 project can be planned about this topic.<br />
<br />
* Web export tools which must be factored (same settings widgets, common dialog, common high level interface to process import/export). Another GSoC 2015 project can be planned about this topic.<br />
** facebook<br />
** picasawebexport<br />
** rajceexport<br />
** shwup<br />
** debianscreenshots<br />
** dropbox<br />
** googledrive<br />
** imageshackexport<br />
** kioexportimport<br />
** piwigoexport<br />
** smug<br />
** flickrexport<br />
** yandexfotki<br />
** mediawiki <=== need to port libmediawiki from extragear/libs/.<br />
** vkontakte <=== require libkvkontakte from extragear/libs/.<br />
<br />
* Tools never finalized (can be moved to attic for the moment) :<br />
** imgurexport <=== require libqtkoauth from SF.net<br />
** photivointegration<br />
** jalbumexport<br />
** wallpaper<br />
<br />
* Tools obsolete (can be moved to attic for the moment) :<br />
** batchprocessimages <=== replaced by digiKam BQM<br />
** rawconverter <=== replaced by digiKam BQM<br />
** jpeglossless <=== replaced by new digiKam core tool<br />
** kopete <=== KF5 will use new API<br />
** ipodexport <=== work only with very old Apple devices.<br />
** galleryexport <=== Gallery web service is not maintained since a while. Gallery project is dead.<br />
<br />
=== KF5/Qt5 Port Status ===<br />
<br />
==== Libkexiv2 ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkexiv2/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|<br />
* C++ auto_ptr warnings from Exiv2 API disabled.<br />
* Library depend of :<br />
** KF5::I18n (translations)<br />
** KF5::TextWidgets (MsgTextEdit is based on KTextEdit)<br />
|-<br />
| '''libkexiv2/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|Code do not depend of KF5<br />
|}<br />
<br />
==== Libkdcraw ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkdcraw/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Veaceslav<br />
|<br />
* C++ auto_ptr warnings from Libraw API disabled.<br />
* ThreadWeaver and Solid dependencies removed.<br />
* RActionThreadBase is ported to QThreadPool + QRunnable API instead ThreadWeaver.<br />
* KIntNumInput and KDoubleNumInput are deprecated and removed as dependencies. We use Krita Int and Double input widgets instead. See [https://bugs.kde.org/show_bug.cgi?id=284216 bug #284216] for details.<br />
* Library depend of:<br />
** KF5::I18n (translations).<br />
** KF5::ConfigCore (KConfigGroup used in widgets).<br />
|-<br />
| '''libkdcraw/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Veaceslav<br />
|<br />
* Code do not depend of KF5<br />
*Multithreaded RAW to PNG GUI test program now use DCrawSettingsWidget to tune Raw decoding settings, and is ported to RActionThreadBase to process conversions on all core CPU.<br />
|}<br />
<br />
==== Libkipi ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkipi/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Mohamed<br />
|<br />
* libkipi/version.h file renamed as libkipi_config.h to host only SO version ID shared with kipi plugins.<br />
* API changes a little bit : path() => url().<br />
*Library depend of :<br />
** KF5::I18n (translations)<br />
** KF5::Config (KConfigGroup and KSharedConfig)<br />
** KF5::XmlGui (plugins based on KXMLGuiCLient)<br />
** KF5::Service (plugins use KService)<br />
|-<br />
| '''libkipi/test'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Mohamed<br />
|<br />
* moc header must be placed at end of plugin implementation. See all plugin_helloworld.cpp comments for details.<br />
* K_PLUGIN_EXPORT macro at start of plugin implementation can be dropped.<br />
* '''kbuildsycoca5 --noincremental''' must be run to found new plugin installed on the system if KF5 is not the current active desktop.<br />
|}<br />
<br />
==== Libkface ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkface/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|Library only depend of KF5::I18n<br />
|-<br />
| '''libkface/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
| Code do not depend of KF5<br />
|}<br />
<br />
==== Libkgeomap ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkgeomap/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Mohamed<br />
|<br />
* Library depend of:<br />
** KF5::I18n (translations).<br />
** KF5::Config (KConfigGroup used in widgets).<br />
* Needs Marble code from [https://projects.kde.org/projects/kde/kdeedu/marble/repository/show?rev=master master git branch] compiled with cmake option '''-DQT5BUILD=ON'''.<br />
* <span style="background:salmon">TODO</span> We need to detect the Marble version somehow, to avoid linking KF5 build against Qt4 version of Marble. We still use FindMarble cmake script from KDE4. Marble need to be ported as pure KF5 frameworks component.<br />
* <span style="background:lightgreen">DONE</span> KHTML based class HTMLWidget must be ported to Qt5::Webkit.<br />
|-<br />
| '''libkgeomap/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''libkgeomap/calibrator'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''libkgeomap/demo'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* Needs libkexiv2 from KF5 to compile (optional).<br />
|}<br />
<br />
==== Kipi-plugins ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''Kipi-plugins/common'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| yes<br />
|Gilles, Laurent<br />
|<br />
* New MacroLocalLibs.cmake wrapper added to handle local or system wide shared libraries.<br />
* Plugins must be linked at least with:<br />
**KF5::Parts<br />
**KF5::KDELibs4Support<br />
**${KF5Kipi_LIBRARIES}<br />
**${KF5KExiv2_LIBRARIES}<br />
**${KF5KDcraw_LIBRARIES}<br />
**KF5kipiplugins<br />
* Use '''kipiplugins_debug.h''' header in plugins to handle debug space.<br />
* ${KF5*_LIBRARIES} are populated by MacroLocalLibs.cmake<br />
* Add a new common class to process images resizement based SendImage::ImageResize<br />
|-<br />
| '''Kipi-plugins/tests'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins Documentation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles<br />
|<br />
|-<br />
| '''Kipi-plugins/timeadjust'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/sendimages'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/kmlexport'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/printimages'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
| Postscript support have been removed from QPrinter. Option is now removed from assistant.<br />
|-<br />
| '''Kipi-plugins/flashexport'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|}<br />
<br />
==== digiKam Software Compilation ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''digiKam Software Compilation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| not applicable<br />
| not applicable<br />
| Gilles<br />
|<br />
* 2 new Cmake options have been add to enable/disable digiKam core and Kipi-plugins compilation (digiKam still disabled by default for the moment).<br />
* List of checkout repositories managed by "download-repos" scripts is reduced to current sub projects already ready to support KF5. "frameworks" branches are automatically switched. See ".gitslaves" for details.<br />
* New MacroLocalLibs.cmake must be used in Kipi-plugins and digiKam Core to wrap local or system libraries (libkipi, likdcraw, libkexiv2, etc) when compilation is done under SC or not.<br />
|-<br />
| '''digiKam Documentation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles<br />
|<br />
|}<br />
<br />
==== digiKam Core ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''digiKam/data'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|<br />
|-<br />
| '''digiKam/libs'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:salmon">TODO</span> ProxyLineEdit is based on KLineEdit and must be ported to QLineEdit, but it use KLineEdit::clearButtonUsedSize() which do not exist with QLineEdit.<br />
* <span style="background:salmon">TODO</span> SearchTextBar is based on KLineEdit and must be ported to QLineEdit, but it use completion model class ModelCompletion based on KCompletion Which must be ported to QCompleter.<br />
* <span style="background:lightgreen">DONE</span> ICCSettings : Q_WS__X11 have been removed with Qt5. X11 detection is performed by CMake and rules are set as definition into digikam_config.h<br />
* <span style="background:salmon">TODO</span> Port LoadingCache from KDirWatch to QFileSystemWatcher.<br />
* <span style="background:salmon">TODO</span> When QFileSystemWtyacher port is complete, check if KInotify still mandatory.<br />
|-<br />
| '''digiKam/app'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:salmon">TODO</span> AddTagsLineEdit is based on KLineEdit and must be ported to QLineEdit, but it use completion model class ModelCompletion based on KCompletion Which must be ported to QCompleter.<br />
* <span style="background:lightgreen">DONE</span> WelcomePageView ported from KHTMLPart to QWebView. KParts and KHtml dependencies removed from digiKam.<br />
* <span style="background:salmon">TODO</span> WelcomePageView HTML rendering is completly broken. Check if CSS and HTML code are conform. Note : this is not due to Qt5 port as KHTML done the same result.<br />
* <span style="background:lightgreen">DONE</span> MediaPlayerView ported from Phonon to QMediaPlayer. Phonon dependency removed from digiKam. New CMake option add to enable/disable QMediaPlayer support.<br />
* <span style="background:salmon">TODO</span> Port AlbumWatch from KDirWatch to QFileSystemWatcher<br />
|-<br />
| '''digiKam/utilities'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:salmon">TODO</span> CameraController use KProcess and KMacroExpander and need to be ported to QProcess.<br />
|-<br />
| '''digiKam/imageplugins'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> Remove editor plugins interface and move tools directly to editor implementation.<br />
|-<br />
| '''digiKam/kioslave'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> Remove KIO-Slaves and move code to database core using multithreading. See this [https://community.kde.org/GSoC/2015/Ideas#Project:_Re-write_database_KIO-slaves_as_pure_Qt5_using_multithreading GoSC 2015 project for details].<br />
|-<br />
| '''digiKam/showfoto'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''digiKam/databaseserver'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''digiKam/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
| * 2 test tools do not link yet and are disable from compilation rules<br />
|}<br />
<br />
=== Recommendations ===<br />
<br />
Porting to KF5 is divided in 4 stages:<br />
<br />
1/ Change CMake files. Some Laurent scripts do this stuff. We use now<br />
ECM scripts collection from KDE core to manage dependencies and report on the<br />
console. Some macros disappear, and are replaced by new ones. For this<br />
job, it's recommended to look well all done in CMake files from libkexiv2<br />
and libkdcraw already ported and polished.<br />
<br />
2/ Port C++ code using KDE4Support. This include older classes from Qt4<br />
and KDE4 to make transition faster. This will help to have quickly a<br />
code compilable, but this will generate a lots of deprecated warnings.<br />
First regression tests must be done at this stage to see if nothing is broken.<br />
<br />
3/ Port C++ code to pure KF5. The goal of KF5 is to reduce KDELibs<br />
fingerprint everywhere, when it's possible. Qt API will be used in<br />
priority against KF5 API. But sometime, this will be not possible as<br />
well, without big changes. A lot of KDE API have migrated to Qt5<br />
(as for ex : KUrl -> QUrl and kDebug ->qDebug). It's sound like KDELibs<br />
will become an incubator for new implementations which will move later<br />
to Qt. Also, to have the most of code using pure Qt5 will simplify<br />
future transitions more easy to do. Removing KDE4Support dependency<br />
will force to use non-deprecated KF5 API.<br />
<br />
4/ Port C++ code to pure Qt5. Porting most of KF5 Api to use Qt5 instead is<br />
prefered, when it's possible. Another important change in Qt5 is the non-support<br />
of char pointer with QString.<br />
<br />
In first stage we must use '''remove_definitions(-DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII)'''<br />
in CMake script to compile code. These definitions force to not use deprecated QString methods.<br />
<br />
Another definition to add while Qt5 porting is '''add_definitions(-DQT_NO_URL_CAST_FROM_STRING)''' about cast between QString and QUrl.<br />
<br />
In last stage we must use '''remove_definition(-DQT_DEPRECATED_SINCE(5,0))''' in CMake script to compile code. These definitions force to disable deprecated methods in Qt API.<br />
<br />
=== Common changes to port code ===<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Original Code<br />
! Ported Code<br />
! Remarks<br />
|-<br />
| ...section of code not yet ported...<br />
|<br />
<source lang="cpp-qt"><br />
#pragma message("PORT QT5")<br />
/*<br />
...section of code not yet ported...<br />
*/<br />
</source><br />
| Not yet ported code sections must be commented with compiler warnings printed on the console<br />
|-<br />
| KDE4_BUILD_TESTS=ON<br />
| '''BUILD_TESTING=ON'''<br />
| CMake flag to build tests sub-dir.<br />
|-<br />
| CMAKE_BUILD_TYPE=debugfull<br />
| '''CMAKE_BUILD_TYPE=debug'''<br />
| CMake flag to build code with debug symbols.<br />
|-<br />
| kDebug() / kWarning() / kError()<br />
| '''qCDebug(FOO_LOG) / qCWarning(FOO_LOG) / qCCritical(FOO_LOG)'''<br />
|<br />
* New "foo_debug.h" and "foo_debug.cpp" files must be created to declare debug space.<br />
* "foo_debug.h" is not shared. For shared a library, this header must be placed as private in implementation files, not header files.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
#include "foo.moc"<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
#include "foo.h"<br />
</source><br />
|<br />
* To prevent compilation errors with Qt5. Qt will generate moc_foo.h files instead. Header file of a class declaration must be placed on top of included header files list from implementation file.<br />
* Special case : KF5 plugin factory needs moc header file included at end of plugin implementation to prevent broken linking.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::directory()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl::adjusted(QUrl::RemoveFilename).path()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDiskFreeSpaceInfo<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStorageInfo<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::setFileName(newFileName)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl::setPath(QUrl::path() + newFileName)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl url;<br />
url.adjustPath(KUrl::AddTrailingSlash);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
url.setPath(url.path() + '/');<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDialog::spacingHint()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDialog::marginHint()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::style()->pixelMetric(QStyle::PM_DefaultChildMargin)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KComponentData::mainComponent().componentName()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::applicationName()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KComponentData::mainComponent().aboutData()->homepage()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KAboutData::applicationData().homepage()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KIconLoader::SmallIcon("icon_name", size)<br />
</source><br />
or<br />
<source lang="cpp-qt"><br />
KIconLoader::global()->loadIcon("icon_name", size)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QIcon::fromTheme("icon_name").pixmap(size)<br />
</source><br />
|<br />
*Adjust size value :<br />
**Small = 16 (default from KIconLoader::SmallIcon()),<br />
**SmallMedium = 22,<br />
**Medium = 32,<br />
**Large = 48,<br />
**Huge = 64,<br />
**Enormous = 128<br />
* Icon must be installed with desktop theme icons.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::installPath("data") + QString("filename")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::GenericDataLocation,<br />
QString("filename"))<br />
</source><br />
| File to open in read-only. File already exist.<br />
<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::installPath("xdgdata-apps") + QString("filename")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::ApplicationsLocation,<br />
QString("filename"))<br />
</source><br />
| File to open in read-only. File already exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("data", QString("filename"))<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ '/' + QString("filename")<br />
</source><br />
| File to open in read-only. File already exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QString dir = KStandardDirs::locateLocal("data",<br />
QString("dirname"), true)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QString dir =<br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ '/' + QString("dirname");<br />
QDir().mkpath(dir);<br />
</source><br />
| Dir to open in read-write. Create dir if it do not exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrlLabel<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RActiveLabel<br />
</source><br />
|<br />
* Slot used to process url can be dropped.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KSeparator<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RLineWidget<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KXmlGuiWindow::restoreWindowSize(group);<br />
<br />
KDialog::restoreDialogSize(group);<br />
</source><br />
and<br />
<source lang="cpp-qt"><br />
KXmlGuiWindow::saveWindowSize(group);<br />
<br />
KDialog::saveDialogSize(group);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KWindowConfig::restoreWindowSize(windowHandle(), group);<br />
</source><br />
and<br />
<source lang="cpp-qt"><br />
KWindowConfig::saveWindowSize(windowHandle(), group);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KVBox* const vbox = new KVBox(this);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RVBox* const vbox = new KDcrawIface::RVBox(this);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KHBox* const hbox = new KHBox(this);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RHBox* const hbox = new KDcrawIface::RHBox(this);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KIO::NetAccess::del(url, QApplication::activeWindow());<br />
<br />
KIO::NetAccess::mkdir(url, QApplication::activeWindow());<br />
<br />
KIO::NetAccess::dircopy(srcUrl, dstUrl, QApplication::activeWindow())<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
auto deleteJob = KIO::file_delete(url);<br />
KJobWidgets::setWindow(deleteJob, QApplication::activeWindow());<br />
deleteJob->exec();<br />
<br />
auto mkdirJob = KIO::mkdir(url);<br />
KJobWidgets::setWindow(mkdirJob, QApplication::activeWindow());<br />
mkdirJob->exec();<br />
<br />
auto dircopyJob = KIO::copy(srcUrl, dstUrl);<br />
KJobWidgets::setWindow(dircopyJob, QApplication::activeWindow());<br />
dircopyJob->exec();<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KD::rename(src, dst)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QFile::rename(src, dst)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KToolInvocation::invokeBrowser(url)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QDesktopServices::openUrl(url)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KGlobalSettings::singleClick()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
qApp->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::directory(KUrl::ObeyTrailingSlash)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url = adjusted(QUrl::RemoveFilename);<br />
url.adjusted(QUrl::StripTrailingSlash).path()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KImageIO::typeForMime(str)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMimeDatabase().mimeTypeForName(str)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KTemporaryFile temp;<br />
temp.setPrefix(prefixStr);<br />
temp.setSuffix(suffixStr);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QTemporaryFile temp;<br />
temp.setFileTemplate(prefixStr + QLatin1String("XXXXXX") + suffixStr);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
K_GLOBAL_STATIC<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
Q_GLOBAL_STATIC<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KMenu::addTitle()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMenu::addSection()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locate("data", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::GenericDataLocation, "file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("data", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("appdata", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::DataLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("cache", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("tmp", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QDir::tempPath() + QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::makeDir(path, permission);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
if (!QDir(path).exists())<br />
{<br />
if (QDir().mkpath(path))<br />
{<br />
QFile f(path);<br />
f.setPermissions(permission);<br />
}<br />
}<br />
</source><br />
|<br />
permission = QFile::ReadUser | QFile::WriteUser | QFile::ExeUser = 0700<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrlRequester<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RFileSelector<br />
</source><br />
|<br />
To select local only file or path, no need KUrlRequester.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KActionMenu<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMenu<br />
</source><br />
|<br />
Use QMenu::menuAction() to get Action instance of menu to plug in action collection.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KToggleAction<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QAction<br />
</source><br />
|<br />
Use QAction::setCheckable(true) to switch Action as toggle state.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
url.addQueryItem(key, value);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
QUrlQuery q(url);<br />
q.addQueryItem(key, value);<br />
url.setQuery(q);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QPixmap pix, alphaMask;<br />
pix.setAlphaChannel(mask);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QPixmap pix, alphaMask;<br />
QPainter p(&pix);<br />
p.setOpacity(0.2);<br />
p.drawPixmap(0, 0, alphaMask);<br />
p.end();<br />
</source><br />
|<br />
|}<br />
<br />
=== Link to documentation to port code ===<br />
<br />
* [https://community.kde.org/Frameworks/Porting_Notes KDE4 to KF5 porting guide]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/kdelibs4support/html/deprecated.html KDE4 deprecated list]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/kdelibs4support/html/classKCalendarSystem.html#a6853ea0521ea23923d3a104b1a178782 KCalendarSystem format strings] to port to [http://doc.qt.io/qt-5/qdate.html#toString QDate format strings] and [http://doc.qt.io/qt-5/qtime.html#toString QTime format strings]<br />
<br />
* [https://community.kde.org/Frameworks/Porting_Notes/KStandardDirs KStandardDirs to Qt5 porting guide]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/index.html KF5 API]<br />
<br />
* [http://qt-project.org/wiki/Transition_from_Qt_4.x_to_Qt5 Qt4 to Qt5 porting guide]<br />
<br />
* [http://qt-project.org/doc/qt-5/classes.html Qt5 API]<br />
<br />
* [https://projects.kde.org/projects/qt5?jump=repository Qt5 project]<br />
<br />
* [http://api.kde.org/ecm/index.html ECM - Documentation]<br />
<br />
* [https://techbase.kde.org/Development/ECM_SourceIncompatChanges ECM - KDELibs4 macro port]<br />
<br />
* [https://projects.kde.org/projects/kdesupport/extra-cmake-modules ECM - Extra CMake Module project]<br />
<br />
=== Scripts to port code ===<br />
<br />
Laurent Montel has written scripts to port CMake and C++ code to KF5/Qt5 and remove kdelibs4support dependency. There are available [https://projects.kde.org/projects/kde/kdesdk/kde-dev-scripts/repository/revisions/master/show/kf5 in this repository] (see kf5 sub-dir).<br />
<br />
Scripts must be applied in this order, with a test compilation between each one :<br />
<br />
* Full safe scripts :<br />
** convert-to-k4aboutdata.pl (first one to apply, this help to compile)<br />
** adapt_cmakelists_file.pl (to convert CMake scripts, but code must don't be capititalized)<br />
** remove-kde4support.pl<br />
** convert-kicon.pl<br />
** convert-kmenu.pl<br />
** convert-kshortcut.pl<br />
** convert-kcolordialog.pl<br />
** convert-klistwidget.pl<br />
** convert-kmd5.pl<br />
** convert-kmenubar.pl<br />
** convert-ksplashscreen.pl<br />
** convert-kdebug.pl<br />
<br />
* Less safe scripts :<br />
** convert-kintnuminput.pl<br />
** convert-kintspinbox.pl<br />
** convert-ktextbrowser.pl<br />
** convert-kfontcombobox.pl<br />
<br />
* Scripts which need to check in-deep all changes :<br />
** convert-kvbox.pl<br />
** convert-kdialog.pl<br />
** convert-kcmdlineargs.pl<br />
** convert-kdebug-with-argument.sh (this one change kDebug(1556) en qCDebug with some info after to convert)<br />
** convert-kmimetype.pl<br />
<br />
* Last scripts to apply :<br />
** clean-forward-declaration.sh (remove forward declaration, to do when all compile fine)<br />
** clean-includes.sh (try to remove not used includes, not safe to 100%)<br />
** port_to_autogenerate_export_header.sh (convert to new signal/slot API, not safe to 100%)</div>Cauliergilleshttps://community.kde.org/index.php?title=Digikam/CodingSprint2014&diff=56393Digikam/CodingSprint20142015-03-09T09:14:53Z<p>Cauliergilles: /* Libkgeomap */</p>
<hr />
<div>== KDE Framework Port ==<br />
<br />
=== Branches Creation ===<br />
<br />
All port code must be stored in dedicated "frameworks" git branch for each project. Branch must be created from master.<br />
<br />
<source lang="bash"><br />
$>git checkout master<br />
$>git pull --rebase<br />
$>git checkout -b frameworks<br />
$>git push origin frameworks:frameworks<br />
$>git branch -a<br />
* frameworks<br />
master<br />
remotes/origin/HEAD -> origin/master<br />
remotes/origin/frameworks<br />
remotes/origin/master<br />
</source><br />
<br />
<br />
KF5 Repositories list is given below :<br />
<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkexiv2/repository/show?rev=frameworks Libkexiv2]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkdcraw/repository/show?rev=frameworks Libkdcraw]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkipi/repository/show?rev=frameworks Libkipi]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkface/repository/show?rev=frameworks Libkface]<br />
* [https://projects.kde.org/projects/extragear/libs/libkgeomap/repository/show?rev=frameworks Libkgeomap]<br />
* [https://projects.kde.org/projects/extragear/graphics/digikam/digikam-software-compilation/repository/show?rev=frameworks digiKam Software Compilation]<br />
* [https://projects.kde.org/projects/extragear/graphics/kipi-plugins/repository/show?rev=frameworks Kipi-plugins]<br />
* [https://projects.kde.org/projects/extragear/graphics/digikam/repository/show?rev=frameworks digiKam]<br />
<br />
=== Kipi-plugins Refactoring ===<br />
<br />
A lots of tools are not maintained since a while, other one have been never finalized. See the list of plugins which will be ported or not :<br />
<br />
* Tools which can be ported as well :<br />
** panorama<br />
** expoblending<br />
** gpssync<br />
** sendimages<br />
** timeadjust<br />
** metadataedit<br />
** videoslideshow<br />
** advancedslideshow<br />
** flashexport<br />
** kmlexport<br />
** acquireimages<br />
** calendar<br />
** dngconverter<br />
** printimages<br />
** imageviewer<br />
<br />
* Tools in pending stage :<br />
** dlnaexport <=== Needs HUpnp lib Qt5 port<br />
** htmlexport <=== Nobody maintain this code since a while, but tool still used.<br />
** photolayoutseditor <=== A complex but powerful tool. Will be complex to port.<br />
** removeredeyes <=== We can share red eyes removal core implementation in libkface in way to share with other KDE applications and replace digiKam Image Editor tool by this code. A new digiKam BQM tool must be created. A GSoC 2015 project can be planned about this topic.<br />
<br />
* Web export tools which must be factored (same settings widgets, common dialog, common high level interface to process import/export). Another GSoC 2015 project can be planned about this topic.<br />
** facebook<br />
** picasawebexport<br />
** rajceexport<br />
** shwup<br />
** debianscreenshots<br />
** dropbox<br />
** googledrive<br />
** imageshackexport<br />
** kioexportimport<br />
** piwigoexport<br />
** smug<br />
** flickrexport<br />
** yandexfotki<br />
** mediawiki <=== need to port libmediawiki from extragear/libs/.<br />
** vkontakte <=== require libkvkontakte from extragear/libs/.<br />
<br />
* Tools never finalized (can be moved to attic for the moment) :<br />
** imgurexport <=== require libqtkoauth from SF.net<br />
** photivointegration<br />
** jalbumexport<br />
** wallpaper<br />
<br />
* Tools obsolete (can be moved to attic for the moment) :<br />
** batchprocessimages <=== replaced by digiKam BQM<br />
** rawconverter <=== replaced by digiKam BQM<br />
** jpeglossless <=== replaced by new digiKam core tool<br />
** kopete <=== KF5 will use new API<br />
** ipodexport <=== work only with very old Apple devices.<br />
** galleryexport <=== Gallery web service is not maintained since a while. Gallery project is dead.<br />
<br />
=== KF5/Qt5 Port Status ===<br />
<br />
==== Libkexiv2 ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkexiv2/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|<br />
* C++ auto_ptr warnings from Exiv2 API disabled.<br />
* Library depend of :<br />
** KF5::I18n (translations)<br />
** KF5::TextWidgets (MsgTextEdit is based on KTextEdit)<br />
|-<br />
| '''libkexiv2/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|Code do not depend of KF5<br />
|}<br />
<br />
==== Libkdcraw ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkdcraw/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Veaceslav<br />
|<br />
* C++ auto_ptr warnings from Libraw API disabled.<br />
* ThreadWeaver and Solid dependencies removed.<br />
* RActionThreadBase is ported to QThreadPool + QRunnable API instead ThreadWeaver.<br />
* KIntNumInput and KDoubleNumInput are deprecated and removed as dependencies. We use Krita Int and Double input widgets instead. See [https://bugs.kde.org/show_bug.cgi?id=284216 bug #284216] for details.<br />
* Library depend of:<br />
** KF5::I18n (translations).<br />
** KF5::ConfigCore (KConfigGroup used in widgets).<br />
|-<br />
| '''libkdcraw/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Veaceslav<br />
|<br />
* Code do not depend of KF5<br />
*Multithreaded RAW to PNG GUI test program now use DCrawSettingsWidget to tune Raw decoding settings, and is ported to RActionThreadBase to process conversions on all core CPU.<br />
|}<br />
<br />
==== Libkipi ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkipi/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Mohamed<br />
|<br />
* libkipi/version.h file renamed as libkipi_config.h to host only SO version ID shared with kipi plugins.<br />
* API changes a little bit : path() => url().<br />
*Library depend of :<br />
** KF5::I18n (translations)<br />
** KF5::Config (KConfigGroup and KSharedConfig)<br />
** KF5::XmlGui (plugins based on KXMLGuiCLient)<br />
** KF5::Service (plugins use KService)<br />
|-<br />
| '''libkipi/test'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Mohamed<br />
|<br />
* moc header must be placed at end of plugin implementation. See all plugin_helloworld.cpp comments for details.<br />
* K_PLUGIN_EXPORT macro at start of plugin implementation can be dropped.<br />
* '''kbuildsycoca5 --noincremental''' must be run to found new plugin installed on the system if KF5 is not the current active desktop.<br />
|}<br />
<br />
==== Libkface ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkface/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|Library only depend of KF5::I18n<br />
|-<br />
| '''libkface/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
| Code do not depend of KF5<br />
|}<br />
<br />
==== Libkgeomap ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkgeomap/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Mohamed<br />
|<br />
* Library depend of:<br />
** KF5::I18n (translations).<br />
** KF5::Config (KConfigGroup used in widgets).<br />
* Needs Marble code from [https://projects.kde.org/projects/kde/kdeedu/marble/repository/show?rev=master master git branch] compiled with cmake option '''-DQT5BUILD=ON'''.<br />
* <span style="background:salmon">TODO</span> We need to detect the Marble version somehow, to avoid linking KF5 build against Qt4 version of Marble. We still use FindMarble cmake script from KDE4. Marble need to be ported as pure KF5 frameworks component.<br />
* <span style="background:lightgreen">DONE</span> KHTML based class HTMLWidget must be ported to Qt5::Webkit.<br />
|-<br />
| '''libkgeomap/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''libkgeomap/calibrator'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''libkgeomap/demo'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* Needs libkexiv2 from KF5 to compile (optional).<br />
|}<br />
<br />
==== Kipi-plugins ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''Kipi-plugins/common'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| yes<br />
|Gilles, Laurent<br />
|<br />
* New MacroLocalLibs.cmake wrapper added to handle local or system wide shared libraries.<br />
* Plugins must be linked at least with:<br />
**KF5::Parts<br />
**KF5::KDELibs4Support<br />
**${KF5Kipi_LIBRARIES}<br />
**${KF5KExiv2_LIBRARIES}<br />
**${KF5KDcraw_LIBRARIES}<br />
**KF5kipiplugins<br />
* Use '''kipiplugins_debug.h''' header in plugins to handle debug space.<br />
* ${KF5*_LIBRARIES} are populated by MacroLocalLibs.cmake<br />
* Add a new common class to process images resizement based SendImage::ImageResize<br />
|-<br />
| '''Kipi-plugins/tests'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins Documentation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles<br />
|<br />
|-<br />
| '''Kipi-plugins/timeadjust'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/sendimages'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/kmlexport'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/printimages'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
| Postscript support have been removed from QPrinter. Option is now removed from assistant.<br />
|-<br />
| '''Kipi-plugins/flashexport'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|}<br />
<br />
==== digiKam Software Compilation ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''digiKam Software Compilation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| not applicable<br />
| not applicable<br />
| Gilles<br />
|<br />
* 2 new Cmake options have been add to enable/disable digiKam core and Kipi-plugins compilation (digiKam still disabled by default for the moment).<br />
* List of checkout repositories managed by "download-repos" scripts is reduced to current sub projects already ready to support KF5. "frameworks" branches are automatically switched. See ".gitslaves" for details.<br />
* New MacroLocalLibs.cmake must be used in Kipi-plugins and digiKam Core to wrap local or system libraries (libkipi, likdcraw, libkexiv2, etc) when compilation is done under SC or not.<br />
|-<br />
| '''digiKam Documentation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles<br />
|<br />
|}<br />
<br />
==== digiKam Core ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''digiKam/data'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|<br />
|-<br />
| '''digiKam/libs'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:salmon">TODO</span> ProxyLineEdit is based on KLineEdit and must be ported to QLineEdit, but it use KLineEdit::clearButtonUsedSize() which do not exist with QLineEdit.<br />
* <span style="background:salmon">TODO</span> SearchTextBar is based on KLineEdit and must be ported to QLineEdit, but it use completion model class ModelCompletion based on KCompletion Which must be ported to QCompleter.<br />
* <span style="background:lightgreen">DONE</span> ICCSettings : Q_WS__X11 have been removed with Qt5. X11 detection is performed by CMake and rules are set as definition into digikam_config.h<br />
* <span style="background:salmon">TODO</span> Port LoadingCache from KDirWatch to QFileSystemWatcher.<br />
* <span style="background:salmon">TODO</span> When QFileSystemWtyacher port is complete, check if KInotify still mandatory.<br />
|-<br />
| '''digiKam/app'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:salmon">TODO</span> AddTagsLineEdit is based on KLineEdit and must be ported to QLineEdit, but it use completion model class ModelCompletion based on KCompletion Which must be ported to QCompleter.<br />
* <span style="background:lightgreen">DONE</span> WelcomePageView ported from KHTMLPart to QWebView. KParts and KHtml dependencies removed from digiKam.<br />
* <span style="background:salmon">TODO</span> WelcomePageView HTML rendering is completly broken. Check if CSS and HTML code are conform. Note : this is not due to Qt5 port as KHTML done the same result.<br />
* <span style="background:lightgreen">DONE</span> MediaPlayerView ported from Phonon to QMediaPlayer. Phonon dependency removed from digiKam. New CMake option add to enable/disable QMediaPlayer support.<br />
* <span style="background:salmon">TODO</span> Port AlbumWatch from KDirWatch to QFileSystemWatcher<br />
|-<br />
| '''digiKam/utilities'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:salmon">TODO</span> CameraController use KProcess and KMacroExpander and need to be ported to QProcess.<br />
|-<br />
| '''digiKam/imageplugins'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> Remove editor plugins interface and move tools directly to editor implementation.<br />
|-<br />
| '''digiKam/kioslave'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> Remove KIO-Slaves and move code to database core using multithreading. See this [https://community.kde.org/GSoC/2015/Ideas#Project:_Re-write_database_KIO-slaves_as_pure_Qt5_using_multithreading GoSC 2015 project for details].<br />
|-<br />
| '''digiKam/showfoto'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''digiKam/databaseserver'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''digiKam/tests'''<br />
| done<br />
| under progress<br />
| under progress<br />
| no<br />
|<br />
| Gilles, Laurent, Teemu<br />
|<br />
|}<br />
<br />
=== Recommendations ===<br />
<br />
Porting to KF5 is divided in 4 stages:<br />
<br />
1/ Change CMake files. Some Laurent scripts do this stuff. We use now<br />
ECM scripts collection from KDE core to manage dependencies and report on the<br />
console. Some macros disappear, and are replaced by new ones. For this<br />
job, it's recommended to look well all done in CMake files from libkexiv2<br />
and libkdcraw already ported and polished.<br />
<br />
2/ Port C++ code using KDE4Support. This include older classes from Qt4<br />
and KDE4 to make transition faster. This will help to have quickly a<br />
code compilable, but this will generate a lots of deprecated warnings.<br />
First regression tests must be done at this stage to see if nothing is broken.<br />
<br />
3/ Port C++ code to pure KF5. The goal of KF5 is to reduce KDELibs<br />
fingerprint everywhere, when it's possible. Qt API will be used in<br />
priority against KF5 API. But sometime, this will be not possible as<br />
well, without big changes. A lot of KDE API have migrated to Qt5<br />
(as for ex : KUrl -> QUrl and kDebug ->qDebug). It's sound like KDELibs<br />
will become an incubator for new implementations which will move later<br />
to Qt. Also, to have the most of code using pure Qt5 will simplify<br />
future transitions more easy to do. Removing KDE4Support dependency<br />
will force to use non-deprecated KF5 API.<br />
<br />
4/ Port C++ code to pure Qt5. Porting most of KF5 Api to use Qt5 instead is<br />
prefered, when it's possible. Another important change in Qt5 is the non-support<br />
of char pointer with QString.<br />
<br />
In first stage we must use '''remove_definitions(-DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII)'''<br />
in CMake script to compile code. These definitions force to not use deprecated QString methods.<br />
<br />
Another definition to add while Qt5 porting is '''add_definitions(-DQT_NO_URL_CAST_FROM_STRING)''' about cast between QString and QUrl.<br />
<br />
In last stage we must use '''remove_definition(-DQT_DEPRECATED_SINCE(5,0))''' in CMake script to compile code. These definitions force to disable deprecated methods in Qt API.<br />
<br />
=== Common changes to port code ===<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Original Code<br />
! Ported Code<br />
! Remarks<br />
|-<br />
| ...section of code not yet ported...<br />
|<br />
<source lang="cpp-qt"><br />
#pragma message("PORT QT5")<br />
/*<br />
...section of code not yet ported...<br />
*/<br />
</source><br />
| Not yet ported code sections must be commented with compiler warnings printed on the console<br />
|-<br />
| KDE4_BUILD_TESTS=ON<br />
| '''BUILD_TESTING=ON'''<br />
| CMake flag to build tests sub-dir.<br />
|-<br />
| CMAKE_BUILD_TYPE=debugfull<br />
| '''CMAKE_BUILD_TYPE=debug'''<br />
| CMake flag to build code with debug symbols.<br />
|-<br />
| kDebug() / kWarning() / kError()<br />
| '''qCDebug(FOO_LOG) / qCWarning(FOO_LOG) / qCCritical(FOO_LOG)'''<br />
|<br />
* New "foo_debug.h" and "foo_debug.cpp" files must be created to declare debug space.<br />
* "foo_debug.h" is not shared. For shared a library, this header must be placed as private in implementation files, not header files.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
#include "foo.moc"<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
#include "foo.h"<br />
</source><br />
|<br />
* To prevent compilation errors with Qt5. Qt will generate moc_foo.h files instead. Header file of a class declaration must be placed on top of included header files list from implementation file.<br />
* Special case : KF5 plugin factory needs moc header file included at end of plugin implementation to prevent broken linking.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::directory()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl::adjusted(QUrl::RemoveFilename).path()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDiskFreeSpaceInfo<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStorageInfo<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::setFileName(newFileName)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl::setPath(QUrl::path() + newFileName)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl url;<br />
url.adjustPath(KUrl::AddTrailingSlash);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
url.setPath(url.path() + '/');<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDialog::spacingHint()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDialog::marginHint()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::style()->pixelMetric(QStyle::PM_DefaultChildMargin)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KComponentData::mainComponent().componentName()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::applicationName()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KComponentData::mainComponent().aboutData()->homepage()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KAboutData::applicationData().homepage()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KIconLoader::SmallIcon("icon_name", size)<br />
</source><br />
or<br />
<source lang="cpp-qt"><br />
KIconLoader::global()->loadIcon("icon_name", size)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QIcon::fromTheme("icon_name").pixmap(size)<br />
</source><br />
|<br />
*Adjust size value :<br />
**Small = 16 (default from KIconLoader::SmallIcon()),<br />
**SmallMedium = 22,<br />
**Medium = 32,<br />
**Large = 48,<br />
**Huge = 64,<br />
**Enormous = 128<br />
* Icon must be installed with desktop theme icons.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::installPath("data") + QString("filename")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::GenericDataLocation,<br />
QString("filename"))<br />
</source><br />
| File to open in read-only. File already exist.<br />
<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::installPath("xdgdata-apps") + QString("filename")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::ApplicationsLocation,<br />
QString("filename"))<br />
</source><br />
| File to open in read-only. File already exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("data", QString("filename"))<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ '/' + QString("filename")<br />
</source><br />
| File to open in read-only. File already exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QString dir = KStandardDirs::locateLocal("data",<br />
QString("dirname"), true)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QString dir =<br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ '/' + QString("dirname");<br />
QDir().mkpath(dir);<br />
</source><br />
| Dir to open in read-write. Create dir if it do not exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrlLabel<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RActiveLabel<br />
</source><br />
|<br />
* Slot used to process url can be dropped.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KSeparator<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RLineWidget<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KXmlGuiWindow::restoreWindowSize(group);<br />
<br />
KDialog::restoreDialogSize(group);<br />
</source><br />
and<br />
<source lang="cpp-qt"><br />
KXmlGuiWindow::saveWindowSize(group);<br />
<br />
KDialog::saveDialogSize(group);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KWindowConfig::restoreWindowSize(windowHandle(), group);<br />
</source><br />
and<br />
<source lang="cpp-qt"><br />
KWindowConfig::saveWindowSize(windowHandle(), group);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KVBox* const vbox = new KVBox(this);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RVBox* const vbox = new KDcrawIface::RVBox(this);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KHBox* const hbox = new KHBox(this);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RHBox* const hbox = new KDcrawIface::RHBox(this);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KIO::NetAccess::del(url, QApplication::activeWindow());<br />
<br />
KIO::NetAccess::mkdir(url, QApplication::activeWindow());<br />
<br />
KIO::NetAccess::dircopy(srcUrl, dstUrl, QApplication::activeWindow())<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
auto deleteJob = KIO::file_delete(url);<br />
KJobWidgets::setWindow(deleteJob, QApplication::activeWindow());<br />
deleteJob->exec();<br />
<br />
auto mkdirJob = KIO::mkdir(url);<br />
KJobWidgets::setWindow(mkdirJob, QApplication::activeWindow());<br />
mkdirJob->exec();<br />
<br />
auto dircopyJob = KIO::copy(srcUrl, dstUrl);<br />
KJobWidgets::setWindow(dircopyJob, QApplication::activeWindow());<br />
dircopyJob->exec();<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KD::rename(src, dst)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QFile::rename(src, dst)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KToolInvocation::invokeBrowser(url)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QDesktopServices::openUrl(url)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KGlobalSettings::singleClick()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
qApp->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::directory(KUrl::ObeyTrailingSlash)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url = adjusted(QUrl::RemoveFilename);<br />
url.adjusted(QUrl::StripTrailingSlash).path()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KImageIO::typeForMime(str)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMimeDatabase().mimeTypeForName(str)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KTemporaryFile temp;<br />
temp.setPrefix(prefixStr);<br />
temp.setSuffix(suffixStr);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QTemporaryFile temp;<br />
temp.setFileTemplate(prefixStr + QLatin1String("XXXXXX") + suffixStr);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
K_GLOBAL_STATIC<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
Q_GLOBAL_STATIC<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KMenu::addTitle()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMenu::addSection()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locate("data", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::GenericDataLocation, "file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("data", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("appdata", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::DataLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("cache", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("tmp", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QDir::tempPath() + QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::makeDir(path, permission);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
if (!QDir(path).exists())<br />
{<br />
if (QDir().mkpath(path))<br />
{<br />
QFile f(path);<br />
f.setPermissions(permission);<br />
}<br />
}<br />
</source><br />
|<br />
permission = QFile::ReadUser | QFile::WriteUser | QFile::ExeUser = 0700<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrlRequester<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RFileSelector<br />
</source><br />
|<br />
To select local only file or path, no need KUrlRequester.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KActionMenu<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMenu<br />
</source><br />
|<br />
Use QMenu::menuAction() to get Action instance of menu to plug in action collection.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KToggleAction<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QAction<br />
</source><br />
|<br />
Use QAction::setCheckable(true) to switch Action as toggle state.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
url.addQueryItem(key, value);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
QUrlQuery q(url);<br />
q.addQueryItem(key, value);<br />
url.setQuery(q);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QPixmap pix, alphaMask;<br />
pix.setAlphaChannel(mask);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QPixmap pix, alphaMask;<br />
QPainter p(&pix);<br />
p.setOpacity(0.2);<br />
p.drawPixmap(0, 0, alphaMask);<br />
p.end();<br />
</source><br />
|<br />
|}<br />
<br />
=== Link to documentation to port code ===<br />
<br />
* [https://community.kde.org/Frameworks/Porting_Notes KDE4 to KF5 porting guide]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/kdelibs4support/html/deprecated.html KDE4 deprecated list]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/kdelibs4support/html/classKCalendarSystem.html#a6853ea0521ea23923d3a104b1a178782 KCalendarSystem format strings] to port to [http://doc.qt.io/qt-5/qdate.html#toString QDate format strings] and [http://doc.qt.io/qt-5/qtime.html#toString QTime format strings]<br />
<br />
* [https://community.kde.org/Frameworks/Porting_Notes/KStandardDirs KStandardDirs to Qt5 porting guide]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/index.html KF5 API]<br />
<br />
* [http://qt-project.org/wiki/Transition_from_Qt_4.x_to_Qt5 Qt4 to Qt5 porting guide]<br />
<br />
* [http://qt-project.org/doc/qt-5/classes.html Qt5 API]<br />
<br />
* [https://projects.kde.org/projects/qt5?jump=repository Qt5 project]<br />
<br />
* [http://api.kde.org/ecm/index.html ECM - Documentation]<br />
<br />
* [https://techbase.kde.org/Development/ECM_SourceIncompatChanges ECM - KDELibs4 macro port]<br />
<br />
* [https://projects.kde.org/projects/kdesupport/extra-cmake-modules ECM - Extra CMake Module project]<br />
<br />
=== Scripts to port code ===<br />
<br />
Laurent Montel has written scripts to port CMake and C++ code to KF5/Qt5 and remove kdelibs4support dependency. There are available [https://projects.kde.org/projects/kde/kdesdk/kde-dev-scripts/repository/revisions/master/show/kf5 in this repository] (see kf5 sub-dir).<br />
<br />
Scripts must be applied in this order, with a test compilation between each one :<br />
<br />
* Full safe scripts :<br />
** convert-to-k4aboutdata.pl (first one to apply, this help to compile)<br />
** adapt_cmakelists_file.pl (to convert CMake scripts, but code must don't be capititalized)<br />
** remove-kde4support.pl<br />
** convert-kicon.pl<br />
** convert-kmenu.pl<br />
** convert-kshortcut.pl<br />
** convert-kcolordialog.pl<br />
** convert-klistwidget.pl<br />
** convert-kmd5.pl<br />
** convert-kmenubar.pl<br />
** convert-ksplashscreen.pl<br />
** convert-kdebug.pl<br />
<br />
* Less safe scripts :<br />
** convert-kintnuminput.pl<br />
** convert-kintspinbox.pl<br />
** convert-ktextbrowser.pl<br />
** convert-kfontcombobox.pl<br />
<br />
* Scripts which need to check in-deep all changes :<br />
** convert-kvbox.pl<br />
** convert-kdialog.pl<br />
** convert-kcmdlineargs.pl<br />
** convert-kdebug-with-argument.sh (this one change kDebug(1556) en qCDebug with some info after to convert)<br />
** convert-kmimetype.pl<br />
<br />
* Last scripts to apply :<br />
** clean-forward-declaration.sh (remove forward declaration, to do when all compile fine)<br />
** clean-includes.sh (try to remove not used includes, not safe to 100%)<br />
** port_to_autogenerate_export_header.sh (convert to new signal/slot API, not safe to 100%)</div>Cauliergilleshttps://community.kde.org/index.php?title=Digikam/CodingSprint2014&diff=56392Digikam/CodingSprint20142015-03-09T05:56:27Z<p>Cauliergilles: /* Libkgeomap */</p>
<hr />
<div>== KDE Framework Port ==<br />
<br />
=== Branches Creation ===<br />
<br />
All port code must be stored in dedicated "frameworks" git branch for each project. Branch must be created from master.<br />
<br />
<source lang="bash"><br />
$>git checkout master<br />
$>git pull --rebase<br />
$>git checkout -b frameworks<br />
$>git push origin frameworks:frameworks<br />
$>git branch -a<br />
* frameworks<br />
master<br />
remotes/origin/HEAD -> origin/master<br />
remotes/origin/frameworks<br />
remotes/origin/master<br />
</source><br />
<br />
<br />
KF5 Repositories list is given below :<br />
<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkexiv2/repository/show?rev=frameworks Libkexiv2]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkdcraw/repository/show?rev=frameworks Libkdcraw]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkipi/repository/show?rev=frameworks Libkipi]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkface/repository/show?rev=frameworks Libkface]<br />
* [https://projects.kde.org/projects/extragear/libs/libkgeomap/repository/show?rev=frameworks Libkgeomap]<br />
* [https://projects.kde.org/projects/extragear/graphics/digikam/digikam-software-compilation/repository/show?rev=frameworks digiKam Software Compilation]<br />
* [https://projects.kde.org/projects/extragear/graphics/kipi-plugins/repository/show?rev=frameworks Kipi-plugins]<br />
* [https://projects.kde.org/projects/extragear/graphics/digikam/repository/show?rev=frameworks digiKam]<br />
<br />
=== Kipi-plugins Refactoring ===<br />
<br />
A lots of tools are not maintained since a while, other one have been never finalized. See the list of plugins which will be ported or not :<br />
<br />
* Tools which can be ported as well :<br />
** panorama<br />
** expoblending<br />
** gpssync<br />
** sendimages<br />
** timeadjust<br />
** metadataedit<br />
** videoslideshow<br />
** advancedslideshow<br />
** flashexport<br />
** kmlexport<br />
** acquireimages<br />
** calendar<br />
** dngconverter<br />
** printimages<br />
** imageviewer<br />
<br />
* Tools in pending stage :<br />
** dlnaexport <=== Needs HUpnp lib Qt5 port<br />
** htmlexport <=== Nobody maintain this code since a while, but tool still used.<br />
** photolayoutseditor <=== A complex but powerful tool. Will be complex to port.<br />
** removeredeyes <=== We can share red eyes removal core implementation in libkface in way to share with other KDE applications and replace digiKam Image Editor tool by this code. A new digiKam BQM tool must be created. A GSoC 2015 project can be planned about this topic.<br />
<br />
* Web export tools which must be factored (same settings widgets, common dialog, common high level interface to process import/export). Another GSoC 2015 project can be planned about this topic.<br />
** facebook<br />
** picasawebexport<br />
** rajceexport<br />
** shwup<br />
** debianscreenshots<br />
** dropbox<br />
** googledrive<br />
** imageshackexport<br />
** kioexportimport<br />
** piwigoexport<br />
** smug<br />
** flickrexport<br />
** yandexfotki<br />
** mediawiki <=== need to port libmediawiki from extragear/libs/.<br />
** vkontakte <=== require libkvkontakte from extragear/libs/.<br />
<br />
* Tools never finalized (can be moved to attic for the moment) :<br />
** imgurexport <=== require libqtkoauth from SF.net<br />
** photivointegration<br />
** jalbumexport<br />
** wallpaper<br />
<br />
* Tools obsolete (can be moved to attic for the moment) :<br />
** batchprocessimages <=== replaced by digiKam BQM<br />
** rawconverter <=== replaced by digiKam BQM<br />
** jpeglossless <=== replaced by new digiKam core tool<br />
** kopete <=== KF5 will use new API<br />
** ipodexport <=== work only with very old Apple devices.<br />
** galleryexport <=== Gallery web service is not maintained since a while. Gallery project is dead.<br />
<br />
=== KF5/Qt5 Port Status ===<br />
<br />
==== Libkexiv2 ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkexiv2/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|<br />
* C++ auto_ptr warnings from Exiv2 API disabled.<br />
* Library depend of :<br />
** KF5::I18n (translations)<br />
** KF5::TextWidgets (MsgTextEdit is based on KTextEdit)<br />
|-<br />
| '''libkexiv2/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|Code do not depend of KF5<br />
|}<br />
<br />
==== Libkdcraw ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkdcraw/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Veaceslav<br />
|<br />
* C++ auto_ptr warnings from Libraw API disabled.<br />
* ThreadWeaver and Solid dependencies removed.<br />
* RActionThreadBase is ported to QThreadPool + QRunnable API instead ThreadWeaver.<br />
* KIntNumInput and KDoubleNumInput are deprecated and removed as dependencies. We use Krita Int and Double input widgets instead. See [https://bugs.kde.org/show_bug.cgi?id=284216 bug #284216] for details.<br />
* Library depend of:<br />
** KF5::I18n (translations).<br />
** KF5::ConfigCore (KConfigGroup used in widgets).<br />
|-<br />
| '''libkdcraw/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Veaceslav<br />
|<br />
* Code do not depend of KF5<br />
*Multithreaded RAW to PNG GUI test program now use DCrawSettingsWidget to tune Raw decoding settings, and is ported to RActionThreadBase to process conversions on all core CPU.<br />
|}<br />
<br />
==== Libkipi ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkipi/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Mohamed<br />
|<br />
* libkipi/version.h file renamed as libkipi_config.h to host only SO version ID shared with kipi plugins.<br />
* API changes a little bit : path() => url().<br />
*Library depend of :<br />
** KF5::I18n (translations)<br />
** KF5::Config (KConfigGroup and KSharedConfig)<br />
** KF5::XmlGui (plugins based on KXMLGuiCLient)<br />
** KF5::Service (plugins use KService)<br />
|-<br />
| '''libkipi/test'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Mohamed<br />
|<br />
* moc header must be placed at end of plugin implementation. See all plugin_helloworld.cpp comments for details.<br />
* K_PLUGIN_EXPORT macro at start of plugin implementation can be dropped.<br />
* '''kbuildsycoca5 --noincremental''' must be run to found new plugin installed on the system if KF5 is not the current active desktop.<br />
|}<br />
<br />
==== Libkface ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkface/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|Library only depend of KF5::I18n<br />
|-<br />
| '''libkface/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
| Code do not depend of KF5<br />
|}<br />
<br />
==== Libkgeomap ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkgeomap/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Mohamed<br />
|<br />
* Library depend of:<br />
** KF5::I18n (translations).<br />
** KF5::Config (KConfigGroup used in widgets).<br />
* Needs Marble code from [https://projects.kde.org/projects/kde/kdeedu/marble/repository/show?rev=kde-frameworks-5 kde-frameworks-5 git branch] to compile.<br />
* <span style="background:salmon">TODO</span> We need to detect the Marble version somehow, to avoid linking KF5 build against Qt4 version of Marble. We still use FindMarble cmake script from KDE4. Marble need to be ported as pure KF5 frameworks component.<br />
* <span style="background:lightgreen">DONE</span> KHTML based class HTMLWidget must be ported to Qt5::Webkit.<br />
|-<br />
| '''libkgeomap/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''libkgeomap/calibrator'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''libkgeomap/demo'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* Needs libkexiv2 from KF5 to compile (optional).<br />
|}<br />
<br />
==== Kipi-plugins ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''Kipi-plugins/common'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| yes<br />
|Gilles, Laurent<br />
|<br />
* New MacroLocalLibs.cmake wrapper added to handle local or system wide shared libraries.<br />
* Plugins must be linked at least with:<br />
**KF5::Parts<br />
**KF5::KDELibs4Support<br />
**${KF5Kipi_LIBRARIES}<br />
**${KF5KExiv2_LIBRARIES}<br />
**${KF5KDcraw_LIBRARIES}<br />
**KF5kipiplugins<br />
* Use '''kipiplugins_debug.h''' header in plugins to handle debug space.<br />
* ${KF5*_LIBRARIES} are populated by MacroLocalLibs.cmake<br />
* Add a new common class to process images resizement based SendImage::ImageResize<br />
|-<br />
| '''Kipi-plugins/tests'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins Documentation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles<br />
|<br />
|-<br />
| '''Kipi-plugins/timeadjust'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/sendimages'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/kmlexport'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/printimages'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
| Postscript support have been removed from QPrinter. Option is now removed from assistant.<br />
|-<br />
| '''Kipi-plugins/flashexport'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|}<br />
<br />
==== digiKam Software Compilation ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''digiKam Software Compilation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| not applicable<br />
| not applicable<br />
| Gilles<br />
|<br />
* 2 new Cmake options have been add to enable/disable digiKam core and Kipi-plugins compilation (digiKam still disabled by default for the moment).<br />
* List of checkout repositories managed by "download-repos" scripts is reduced to current sub projects already ready to support KF5. "frameworks" branches are automatically switched. See ".gitslaves" for details.<br />
* New MacroLocalLibs.cmake must be used in Kipi-plugins and digiKam Core to wrap local or system libraries (libkipi, likdcraw, libkexiv2, etc) when compilation is done under SC or not.<br />
|-<br />
| '''digiKam Documentation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles<br />
|<br />
|}<br />
<br />
==== digiKam Core ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''digiKam/data'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|<br />
|-<br />
| '''digiKam/libs'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:salmon">TODO</span> ProxyLineEdit is based on KLineEdit and must be ported to QLineEdit, but it use KLineEdit::clearButtonUsedSize() which do not exist with QLineEdit.<br />
* <span style="background:salmon">TODO</span> SearchTextBar is based on KLineEdit and must be ported to QLineEdit, but it use completion model class ModelCompletion based on KCompletion Which must be ported to QCompleter.<br />
* <span style="background:lightgreen">DONE</span> ICCSettings : Q_WS__X11 have been removed with Qt5. X11 detection is performed by CMake and rules are set as definition into digikam_config.h<br />
* <span style="background:salmon">TODO</span> Port LoadingCache from KDirWatch to QFileSystemWatcher.<br />
* <span style="background:salmon">TODO</span> When QFileSystemWtyacher port is complete, check if KInotify still mandatory.<br />
|-<br />
| '''digiKam/app'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:salmon">TODO</span> AddTagsLineEdit is based on KLineEdit and must be ported to QLineEdit, but it use completion model class ModelCompletion based on KCompletion Which must be ported to QCompleter.<br />
* <span style="background:lightgreen">DONE</span> WelcomePageView ported from KHTMLPart to QWebView. KParts and KHtml dependencies removed from digiKam.<br />
* <span style="background:salmon">TODO</span> WelcomePageView HTML rendering is completly broken. Check if CSS and HTML code are conform. Note : this is not due to Qt5 port as KHTML done the same result.<br />
* <span style="background:lightgreen">DONE</span> MediaPlayerView ported from Phonon to QMediaPlayer. Phonon dependency removed from digiKam. New CMake option add to enable/disable QMediaPlayer support.<br />
* <span style="background:salmon">TODO</span> Port AlbumWatch from KDirWatch to QFileSystemWatcher<br />
|-<br />
| '''digiKam/utilities'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:salmon">TODO</span> CameraController use KProcess and KMacroExpander and need to be ported to QProcess.<br />
|-<br />
| '''digiKam/imageplugins'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> Remove editor plugins interface and move tools directly to editor implementation.<br />
|-<br />
| '''digiKam/kioslave'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> Remove KIO-Slaves and move code to database core using multithreading. See this [https://community.kde.org/GSoC/2015/Ideas#Project:_Re-write_database_KIO-slaves_as_pure_Qt5_using_multithreading GoSC 2015 project for details].<br />
|-<br />
| '''digiKam/showfoto'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''digiKam/databaseserver'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''digiKam/tests'''<br />
| done<br />
| under progress<br />
| under progress<br />
| no<br />
|<br />
| Gilles, Laurent, Teemu<br />
|<br />
|}<br />
<br />
=== Recommendations ===<br />
<br />
Porting to KF5 is divided in 4 stages:<br />
<br />
1/ Change CMake files. Some Laurent scripts do this stuff. We use now<br />
ECM scripts collection from KDE core to manage dependencies and report on the<br />
console. Some macros disappear, and are replaced by new ones. For this<br />
job, it's recommended to look well all done in CMake files from libkexiv2<br />
and libkdcraw already ported and polished.<br />
<br />
2/ Port C++ code using KDE4Support. This include older classes from Qt4<br />
and KDE4 to make transition faster. This will help to have quickly a<br />
code compilable, but this will generate a lots of deprecated warnings.<br />
First regression tests must be done at this stage to see if nothing is broken.<br />
<br />
3/ Port C++ code to pure KF5. The goal of KF5 is to reduce KDELibs<br />
fingerprint everywhere, when it's possible. Qt API will be used in<br />
priority against KF5 API. But sometime, this will be not possible as<br />
well, without big changes. A lot of KDE API have migrated to Qt5<br />
(as for ex : KUrl -> QUrl and kDebug ->qDebug). It's sound like KDELibs<br />
will become an incubator for new implementations which will move later<br />
to Qt. Also, to have the most of code using pure Qt5 will simplify<br />
future transitions more easy to do. Removing KDE4Support dependency<br />
will force to use non-deprecated KF5 API.<br />
<br />
4/ Port C++ code to pure Qt5. Porting most of KF5 Api to use Qt5 instead is<br />
prefered, when it's possible. Another important change in Qt5 is the non-support<br />
of char pointer with QString.<br />
<br />
In first stage we must use '''remove_definitions(-DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII)'''<br />
in CMake script to compile code. These definitions force to not use deprecated QString methods.<br />
<br />
Another definition to add while Qt5 porting is '''add_definitions(-DQT_NO_URL_CAST_FROM_STRING)''' about cast between QString and QUrl.<br />
<br />
In last stage we must use '''remove_definition(-DQT_DEPRECATED_SINCE(5,0))''' in CMake script to compile code. These definitions force to disable deprecated methods in Qt API.<br />
<br />
=== Common changes to port code ===<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Original Code<br />
! Ported Code<br />
! Remarks<br />
|-<br />
| ...section of code not yet ported...<br />
|<br />
<source lang="cpp-qt"><br />
#pragma message("PORT QT5")<br />
/*<br />
...section of code not yet ported...<br />
*/<br />
</source><br />
| Not yet ported code sections must be commented with compiler warnings printed on the console<br />
|-<br />
| KDE4_BUILD_TESTS=ON<br />
| '''BUILD_TESTING=ON'''<br />
| CMake flag to build tests sub-dir.<br />
|-<br />
| CMAKE_BUILD_TYPE=debugfull<br />
| '''CMAKE_BUILD_TYPE=debug'''<br />
| CMake flag to build code with debug symbols.<br />
|-<br />
| kDebug() / kWarning() / kError()<br />
| '''qCDebug(FOO_LOG) / qCWarning(FOO_LOG) / qCCritical(FOO_LOG)'''<br />
|<br />
* New "foo_debug.h" and "foo_debug.cpp" files must be created to declare debug space.<br />
* "foo_debug.h" is not shared. For shared a library, this header must be placed as private in implementation files, not header files.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
#include "foo.moc"<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
#include "foo.h"<br />
</source><br />
|<br />
* To prevent compilation errors with Qt5. Qt will generate moc_foo.h files instead. Header file of a class declaration must be placed on top of included header files list from implementation file.<br />
* Special case : KF5 plugin factory needs moc header file included at end of plugin implementation to prevent broken linking.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::directory()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl::adjusted(QUrl::RemoveFilename).path()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDiskFreeSpaceInfo<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStorageInfo<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::setFileName(newFileName)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl::setPath(QUrl::path() + newFileName)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl url;<br />
url.adjustPath(KUrl::AddTrailingSlash);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
url.setPath(url.path() + '/');<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDialog::spacingHint()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDialog::marginHint()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::style()->pixelMetric(QStyle::PM_DefaultChildMargin)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KComponentData::mainComponent().componentName()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::applicationName()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KComponentData::mainComponent().aboutData()->homepage()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KAboutData::applicationData().homepage()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KIconLoader::SmallIcon("icon_name", size)<br />
</source><br />
or<br />
<source lang="cpp-qt"><br />
KIconLoader::global()->loadIcon("icon_name", size)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QIcon::fromTheme("icon_name").pixmap(size)<br />
</source><br />
|<br />
*Adjust size value :<br />
**Small = 16 (default from KIconLoader::SmallIcon()),<br />
**SmallMedium = 22,<br />
**Medium = 32,<br />
**Large = 48,<br />
**Huge = 64,<br />
**Enormous = 128<br />
* Icon must be installed with desktop theme icons.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::installPath("data") + QString("filename")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::GenericDataLocation,<br />
QString("filename"))<br />
</source><br />
| File to open in read-only. File already exist.<br />
<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::installPath("xdgdata-apps") + QString("filename")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::ApplicationsLocation,<br />
QString("filename"))<br />
</source><br />
| File to open in read-only. File already exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("data", QString("filename"))<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ '/' + QString("filename")<br />
</source><br />
| File to open in read-only. File already exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QString dir = KStandardDirs::locateLocal("data",<br />
QString("dirname"), true)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QString dir =<br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ '/' + QString("dirname");<br />
QDir().mkpath(dir);<br />
</source><br />
| Dir to open in read-write. Create dir if it do not exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrlLabel<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RActiveLabel<br />
</source><br />
|<br />
* Slot used to process url can be dropped.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KSeparator<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RLineWidget<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KXmlGuiWindow::restoreWindowSize(group);<br />
<br />
KDialog::restoreDialogSize(group);<br />
</source><br />
and<br />
<source lang="cpp-qt"><br />
KXmlGuiWindow::saveWindowSize(group);<br />
<br />
KDialog::saveDialogSize(group);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KWindowConfig::restoreWindowSize(windowHandle(), group);<br />
</source><br />
and<br />
<source lang="cpp-qt"><br />
KWindowConfig::saveWindowSize(windowHandle(), group);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KVBox* const vbox = new KVBox(this);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RVBox* const vbox = new KDcrawIface::RVBox(this);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KHBox* const hbox = new KHBox(this);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RHBox* const hbox = new KDcrawIface::RHBox(this);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KIO::NetAccess::del(url, QApplication::activeWindow());<br />
<br />
KIO::NetAccess::mkdir(url, QApplication::activeWindow());<br />
<br />
KIO::NetAccess::dircopy(srcUrl, dstUrl, QApplication::activeWindow())<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
auto deleteJob = KIO::file_delete(url);<br />
KJobWidgets::setWindow(deleteJob, QApplication::activeWindow());<br />
deleteJob->exec();<br />
<br />
auto mkdirJob = KIO::mkdir(url);<br />
KJobWidgets::setWindow(mkdirJob, QApplication::activeWindow());<br />
mkdirJob->exec();<br />
<br />
auto dircopyJob = KIO::copy(srcUrl, dstUrl);<br />
KJobWidgets::setWindow(dircopyJob, QApplication::activeWindow());<br />
dircopyJob->exec();<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KD::rename(src, dst)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QFile::rename(src, dst)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KToolInvocation::invokeBrowser(url)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QDesktopServices::openUrl(url)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KGlobalSettings::singleClick()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
qApp->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::directory(KUrl::ObeyTrailingSlash)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url = adjusted(QUrl::RemoveFilename);<br />
url.adjusted(QUrl::StripTrailingSlash).path()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KImageIO::typeForMime(str)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMimeDatabase().mimeTypeForName(str)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KTemporaryFile temp;<br />
temp.setPrefix(prefixStr);<br />
temp.setSuffix(suffixStr);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QTemporaryFile temp;<br />
temp.setFileTemplate(prefixStr + QLatin1String("XXXXXX") + suffixStr);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
K_GLOBAL_STATIC<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
Q_GLOBAL_STATIC<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KMenu::addTitle()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMenu::addSection()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locate("data", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::GenericDataLocation, "file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("data", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("appdata", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::DataLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("cache", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("tmp", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QDir::tempPath() + QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::makeDir(path, permission);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
if (!QDir(path).exists())<br />
{<br />
if (QDir().mkpath(path))<br />
{<br />
QFile f(path);<br />
f.setPermissions(permission);<br />
}<br />
}<br />
</source><br />
|<br />
permission = QFile::ReadUser | QFile::WriteUser | QFile::ExeUser = 0700<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrlRequester<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RFileSelector<br />
</source><br />
|<br />
To select local only file or path, no need KUrlRequester.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KActionMenu<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMenu<br />
</source><br />
|<br />
Use QMenu::menuAction() to get Action instance of menu to plug in action collection.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KToggleAction<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QAction<br />
</source><br />
|<br />
Use QAction::setCheckable(true) to switch Action as toggle state.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
url.addQueryItem(key, value);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
QUrlQuery q(url);<br />
q.addQueryItem(key, value);<br />
url.setQuery(q);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QPixmap pix, alphaMask;<br />
pix.setAlphaChannel(mask);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QPixmap pix, alphaMask;<br />
QPainter p(&pix);<br />
p.setOpacity(0.2);<br />
p.drawPixmap(0, 0, alphaMask);<br />
p.end();<br />
</source><br />
|<br />
|}<br />
<br />
=== Link to documentation to port code ===<br />
<br />
* [https://community.kde.org/Frameworks/Porting_Notes KDE4 to KF5 porting guide]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/kdelibs4support/html/deprecated.html KDE4 deprecated list]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/kdelibs4support/html/classKCalendarSystem.html#a6853ea0521ea23923d3a104b1a178782 KCalendarSystem format strings] to port to [http://doc.qt.io/qt-5/qdate.html#toString QDate format strings] and [http://doc.qt.io/qt-5/qtime.html#toString QTime format strings]<br />
<br />
* [https://community.kde.org/Frameworks/Porting_Notes/KStandardDirs KStandardDirs to Qt5 porting guide]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/index.html KF5 API]<br />
<br />
* [http://qt-project.org/wiki/Transition_from_Qt_4.x_to_Qt5 Qt4 to Qt5 porting guide]<br />
<br />
* [http://qt-project.org/doc/qt-5/classes.html Qt5 API]<br />
<br />
* [https://projects.kde.org/projects/qt5?jump=repository Qt5 project]<br />
<br />
* [http://api.kde.org/ecm/index.html ECM - Documentation]<br />
<br />
* [https://techbase.kde.org/Development/ECM_SourceIncompatChanges ECM - KDELibs4 macro port]<br />
<br />
* [https://projects.kde.org/projects/kdesupport/extra-cmake-modules ECM - Extra CMake Module project]<br />
<br />
=== Scripts to port code ===<br />
<br />
Laurent Montel has written scripts to port CMake and C++ code to KF5/Qt5 and remove kdelibs4support dependency. There are available [https://projects.kde.org/projects/kde/kdesdk/kde-dev-scripts/repository/revisions/master/show/kf5 in this repository] (see kf5 sub-dir).<br />
<br />
Scripts must be applied in this order, with a test compilation between each one :<br />
<br />
* Full safe scripts :<br />
** convert-to-k4aboutdata.pl (first one to apply, this help to compile)<br />
** adapt_cmakelists_file.pl (to convert CMake scripts, but code must don't be capititalized)<br />
** remove-kde4support.pl<br />
** convert-kicon.pl<br />
** convert-kmenu.pl<br />
** convert-kshortcut.pl<br />
** convert-kcolordialog.pl<br />
** convert-klistwidget.pl<br />
** convert-kmd5.pl<br />
** convert-kmenubar.pl<br />
** convert-ksplashscreen.pl<br />
** convert-kdebug.pl<br />
<br />
* Less safe scripts :<br />
** convert-kintnuminput.pl<br />
** convert-kintspinbox.pl<br />
** convert-ktextbrowser.pl<br />
** convert-kfontcombobox.pl<br />
<br />
* Scripts which need to check in-deep all changes :<br />
** convert-kvbox.pl<br />
** convert-kdialog.pl<br />
** convert-kcmdlineargs.pl<br />
** convert-kdebug-with-argument.sh (this one change kDebug(1556) en qCDebug with some info after to convert)<br />
** convert-kmimetype.pl<br />
<br />
* Last scripts to apply :<br />
** clean-forward-declaration.sh (remove forward declaration, to do when all compile fine)<br />
** clean-includes.sh (try to remove not used includes, not safe to 100%)<br />
** port_to_autogenerate_export_header.sh (convert to new signal/slot API, not safe to 100%)</div>Cauliergilleshttps://community.kde.org/index.php?title=Digikam/CodingSprint2014&diff=56391Digikam/CodingSprint20142015-03-09T05:55:36Z<p>Cauliergilles: /* Libkgeomap */</p>
<hr />
<div>== KDE Framework Port ==<br />
<br />
=== Branches Creation ===<br />
<br />
All port code must be stored in dedicated "frameworks" git branch for each project. Branch must be created from master.<br />
<br />
<source lang="bash"><br />
$>git checkout master<br />
$>git pull --rebase<br />
$>git checkout -b frameworks<br />
$>git push origin frameworks:frameworks<br />
$>git branch -a<br />
* frameworks<br />
master<br />
remotes/origin/HEAD -> origin/master<br />
remotes/origin/frameworks<br />
remotes/origin/master<br />
</source><br />
<br />
<br />
KF5 Repositories list is given below :<br />
<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkexiv2/repository/show?rev=frameworks Libkexiv2]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkdcraw/repository/show?rev=frameworks Libkdcraw]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkipi/repository/show?rev=frameworks Libkipi]<br />
* [https://projects.kde.org/projects/kde/kdegraphics/libs/libkface/repository/show?rev=frameworks Libkface]<br />
* [https://projects.kde.org/projects/extragear/libs/libkgeomap/repository/show?rev=frameworks Libkgeomap]<br />
* [https://projects.kde.org/projects/extragear/graphics/digikam/digikam-software-compilation/repository/show?rev=frameworks digiKam Software Compilation]<br />
* [https://projects.kde.org/projects/extragear/graphics/kipi-plugins/repository/show?rev=frameworks Kipi-plugins]<br />
* [https://projects.kde.org/projects/extragear/graphics/digikam/repository/show?rev=frameworks digiKam]<br />
<br />
=== Kipi-plugins Refactoring ===<br />
<br />
A lots of tools are not maintained since a while, other one have been never finalized. See the list of plugins which will be ported or not :<br />
<br />
* Tools which can be ported as well :<br />
** panorama<br />
** expoblending<br />
** gpssync<br />
** sendimages<br />
** timeadjust<br />
** metadataedit<br />
** videoslideshow<br />
** advancedslideshow<br />
** flashexport<br />
** kmlexport<br />
** acquireimages<br />
** calendar<br />
** dngconverter<br />
** printimages<br />
** imageviewer<br />
<br />
* Tools in pending stage :<br />
** dlnaexport <=== Needs HUpnp lib Qt5 port<br />
** htmlexport <=== Nobody maintain this code since a while, but tool still used.<br />
** photolayoutseditor <=== A complex but powerful tool. Will be complex to port.<br />
** removeredeyes <=== We can share red eyes removal core implementation in libkface in way to share with other KDE applications and replace digiKam Image Editor tool by this code. A new digiKam BQM tool must be created. A GSoC 2015 project can be planned about this topic.<br />
<br />
* Web export tools which must be factored (same settings widgets, common dialog, common high level interface to process import/export). Another GSoC 2015 project can be planned about this topic.<br />
** facebook<br />
** picasawebexport<br />
** rajceexport<br />
** shwup<br />
** debianscreenshots<br />
** dropbox<br />
** googledrive<br />
** imageshackexport<br />
** kioexportimport<br />
** piwigoexport<br />
** smug<br />
** flickrexport<br />
** yandexfotki<br />
** mediawiki <=== need to port libmediawiki from extragear/libs/.<br />
** vkontakte <=== require libkvkontakte from extragear/libs/.<br />
<br />
* Tools never finalized (can be moved to attic for the moment) :<br />
** imgurexport <=== require libqtkoauth from SF.net<br />
** photivointegration<br />
** jalbumexport<br />
** wallpaper<br />
<br />
* Tools obsolete (can be moved to attic for the moment) :<br />
** batchprocessimages <=== replaced by digiKam BQM<br />
** rawconverter <=== replaced by digiKam BQM<br />
** jpeglossless <=== replaced by new digiKam core tool<br />
** kopete <=== KF5 will use new API<br />
** ipodexport <=== work only with very old Apple devices.<br />
** galleryexport <=== Gallery web service is not maintained since a while. Gallery project is dead.<br />
<br />
=== KF5/Qt5 Port Status ===<br />
<br />
==== Libkexiv2 ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkexiv2/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|<br />
* C++ auto_ptr warnings from Exiv2 API disabled.<br />
* Library depend of :<br />
** KF5::I18n (translations)<br />
** KF5::TextWidgets (MsgTextEdit is based on KTextEdit)<br />
|-<br />
| '''libkexiv2/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|Code do not depend of KF5<br />
|}<br />
<br />
==== Libkdcraw ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkdcraw/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Veaceslav<br />
|<br />
* C++ auto_ptr warnings from Libraw API disabled.<br />
* ThreadWeaver and Solid dependencies removed.<br />
* RActionThreadBase is ported to QThreadPool + QRunnable API instead ThreadWeaver.<br />
* KIntNumInput and KDoubleNumInput are deprecated and removed as dependencies. We use Krita Int and Double input widgets instead. See [https://bugs.kde.org/show_bug.cgi?id=284216 bug #284216] for details.<br />
* Library depend of:<br />
** KF5::I18n (translations).<br />
** KF5::ConfigCore (KConfigGroup used in widgets).<br />
|-<br />
| '''libkdcraw/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Veaceslav<br />
|<br />
* Code do not depend of KF5<br />
*Multithreaded RAW to PNG GUI test program now use DCrawSettingsWidget to tune Raw decoding settings, and is ported to RActionThreadBase to process conversions on all core CPU.<br />
|}<br />
<br />
==== Libkipi ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkipi/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Mohamed<br />
|<br />
* libkipi/version.h file renamed as libkipi_config.h to host only SO version ID shared with kipi plugins.<br />
* API changes a little bit : path() => url().<br />
*Library depend of :<br />
** KF5::I18n (translations)<br />
** KF5::Config (KConfigGroup and KSharedConfig)<br />
** KF5::XmlGui (plugins based on KXMLGuiCLient)<br />
** KF5::Service (plugins use KService)<br />
|-<br />
| '''libkipi/test'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Mohamed<br />
|<br />
* moc header must be placed at end of plugin implementation. See all plugin_helloworld.cpp comments for details.<br />
* K_PLUGIN_EXPORT macro at start of plugin implementation can be dropped.<br />
* '''kbuildsycoca5 --noincremental''' must be run to found new plugin installed on the system if KF5 is not the current active desktop.<br />
|}<br />
<br />
==== Libkface ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkface/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|Library only depend of KF5::I18n<br />
|-<br />
| '''libkface/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
| Code do not depend of KF5<br />
|}<br />
<br />
==== Libkgeomap ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''libkgeomap/src'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu, Mohamed<br />
|<br />
* Library depend of:<br />
** KF5::I18n (translations).<br />
** KF5::Config (KConfigGroup used in widgets).<br />
* Needs Marble code from [https://projects.kde.org/projects/kde/kdeedu/marble/repository/show?rev=kde-frameworks-5 kde-frameworks-5 git branch] to compile.<br />
* <span style="background:salmon">TODO</span> We need to detect the Marble version somehow, to avoid linking KF5 build against Qt4 version of Marble. We still use FindMarble cmake script from KDE4. Marble need to be ported as pure KF5 frameworks component.<br />
* <span style="background:salmon">DONE</span> KHTML based class HTMLWidget must be ported to Qt5::Webkit.<br />
|-<br />
| '''libkgeomap/tests'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''libkgeomap/calibrator'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''libkgeomap/demo'''<br />
| done<br />
| done<br />
| done<br />
| yes<br />
| no<br />
| Gilles, Laurent, Teemu<br />
|<br />
* Needs libkexiv2 from KF5 to compile (optional).<br />
|}<br />
<br />
==== Kipi-plugins ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''Kipi-plugins/common'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| yes<br />
|Gilles, Laurent<br />
|<br />
* New MacroLocalLibs.cmake wrapper added to handle local or system wide shared libraries.<br />
* Plugins must be linked at least with:<br />
**KF5::Parts<br />
**KF5::KDELibs4Support<br />
**${KF5Kipi_LIBRARIES}<br />
**${KF5KExiv2_LIBRARIES}<br />
**${KF5KDcraw_LIBRARIES}<br />
**KF5kipiplugins<br />
* Use '''kipiplugins_debug.h''' header in plugins to handle debug space.<br />
* ${KF5*_LIBRARIES} are populated by MacroLocalLibs.cmake<br />
* Add a new common class to process images resizement based SendImage::ImageResize<br />
|-<br />
| '''Kipi-plugins/tests'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins Documentation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles<br />
|<br />
|-<br />
| '''Kipi-plugins/timeadjust'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/sendimages'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/kmlexport'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|-<br />
| '''Kipi-plugins/printimages'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
| Postscript support have been removed from QPrinter. Option is now removed from assistant.<br />
|-<br />
| '''Kipi-plugins/flashexport'''<br />
| done<br />
| uncomplete<br />
| uncomplete<br />
| yes<br />
| no<br />
|Gilles, Laurent<br />
|<br />
|}<br />
<br />
==== digiKam Software Compilation ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''digiKam Software Compilation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| not applicable<br />
| not applicable<br />
| Gilles<br />
|<br />
* 2 new Cmake options have been add to enable/disable digiKam core and Kipi-plugins compilation (digiKam still disabled by default for the moment).<br />
* List of checkout repositories managed by "download-repos" scripts is reduced to current sub projects already ready to support KF5. "frameworks" branches are automatically switched. See ".gitslaves" for details.<br />
* New MacroLocalLibs.cmake must be used in Kipi-plugins and digiKam Core to wrap local or system libraries (libkipi, likdcraw, libkexiv2, etc) when compilation is done under SC or not.<br />
|-<br />
| '''digiKam Documentation'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles<br />
|<br />
|}<br />
<br />
==== digiKam Core ====<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Component<br />
! Cmake port<br />
! pure Qt5 port<br />
! pure KF5 port<br />
! compile<br />
! warnings<br />
! Who<br />
! Remarks<br />
|-<br />
| '''digiKam/data'''<br />
| done<br />
| not applicable<br />
| not applicable<br />
| yes<br />
| no<br />
| Gilles, Laurent<br />
|<br />
|-<br />
| '''digiKam/libs'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:salmon">TODO</span> ProxyLineEdit is based on KLineEdit and must be ported to QLineEdit, but it use KLineEdit::clearButtonUsedSize() which do not exist with QLineEdit.<br />
* <span style="background:salmon">TODO</span> SearchTextBar is based on KLineEdit and must be ported to QLineEdit, but it use completion model class ModelCompletion based on KCompletion Which must be ported to QCompleter.<br />
* <span style="background:lightgreen">DONE</span> ICCSettings : Q_WS__X11 have been removed with Qt5. X11 detection is performed by CMake and rules are set as definition into digikam_config.h<br />
* <span style="background:salmon">TODO</span> Port LoadingCache from KDirWatch to QFileSystemWatcher.<br />
* <span style="background:salmon">TODO</span> When QFileSystemWtyacher port is complete, check if KInotify still mandatory.<br />
|-<br />
| '''digiKam/app'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:salmon">TODO</span> AddTagsLineEdit is based on KLineEdit and must be ported to QLineEdit, but it use completion model class ModelCompletion based on KCompletion Which must be ported to QCompleter.<br />
* <span style="background:lightgreen">DONE</span> WelcomePageView ported from KHTMLPart to QWebView. KParts and KHtml dependencies removed from digiKam.<br />
* <span style="background:salmon">TODO</span> WelcomePageView HTML rendering is completly broken. Check if CSS and HTML code are conform. Note : this is not due to Qt5 port as KHTML done the same result.<br />
* <span style="background:lightgreen">DONE</span> MediaPlayerView ported from Phonon to QMediaPlayer. Phonon dependency removed from digiKam. New CMake option add to enable/disable QMediaPlayer support.<br />
* <span style="background:salmon">TODO</span> Port AlbumWatch from KDirWatch to QFileSystemWatcher<br />
|-<br />
| '''digiKam/utilities'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu, Alin<br />
|<br />
* <span style="background:salmon">TODO</span> CameraController use KProcess and KMacroExpander and need to be ported to QProcess.<br />
|-<br />
| '''digiKam/imageplugins'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> Remove editor plugins interface and move tools directly to editor implementation.<br />
|-<br />
| '''digiKam/kioslave'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu<br />
|<br />
* <span style="background:salmon">TODO</span> Remove KIO-Slaves and move code to database core using multithreading. See this [https://community.kde.org/GSoC/2015/Ideas#Project:_Re-write_database_KIO-slaves_as_pure_Qt5_using_multithreading GoSC 2015 project for details].<br />
|-<br />
| '''digiKam/showfoto'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''digiKam/databaseserver'''<br />
| done<br />
| under progress<br />
| under progress<br />
| yes<br />
| yes<br />
| Gilles, Laurent, Teemu<br />
|<br />
|-<br />
| '''digiKam/tests'''<br />
| done<br />
| under progress<br />
| under progress<br />
| no<br />
|<br />
| Gilles, Laurent, Teemu<br />
|<br />
|}<br />
<br />
=== Recommendations ===<br />
<br />
Porting to KF5 is divided in 4 stages:<br />
<br />
1/ Change CMake files. Some Laurent scripts do this stuff. We use now<br />
ECM scripts collection from KDE core to manage dependencies and report on the<br />
console. Some macros disappear, and are replaced by new ones. For this<br />
job, it's recommended to look well all done in CMake files from libkexiv2<br />
and libkdcraw already ported and polished.<br />
<br />
2/ Port C++ code using KDE4Support. This include older classes from Qt4<br />
and KDE4 to make transition faster. This will help to have quickly a<br />
code compilable, but this will generate a lots of deprecated warnings.<br />
First regression tests must be done at this stage to see if nothing is broken.<br />
<br />
3/ Port C++ code to pure KF5. The goal of KF5 is to reduce KDELibs<br />
fingerprint everywhere, when it's possible. Qt API will be used in<br />
priority against KF5 API. But sometime, this will be not possible as<br />
well, without big changes. A lot of KDE API have migrated to Qt5<br />
(as for ex : KUrl -> QUrl and kDebug ->qDebug). It's sound like KDELibs<br />
will become an incubator for new implementations which will move later<br />
to Qt. Also, to have the most of code using pure Qt5 will simplify<br />
future transitions more easy to do. Removing KDE4Support dependency<br />
will force to use non-deprecated KF5 API.<br />
<br />
4/ Port C++ code to pure Qt5. Porting most of KF5 Api to use Qt5 instead is<br />
prefered, when it's possible. Another important change in Qt5 is the non-support<br />
of char pointer with QString.<br />
<br />
In first stage we must use '''remove_definitions(-DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII)'''<br />
in CMake script to compile code. These definitions force to not use deprecated QString methods.<br />
<br />
Another definition to add while Qt5 porting is '''add_definitions(-DQT_NO_URL_CAST_FROM_STRING)''' about cast between QString and QUrl.<br />
<br />
In last stage we must use '''remove_definition(-DQT_DEPRECATED_SINCE(5,0))''' in CMake script to compile code. These definitions force to disable deprecated methods in Qt API.<br />
<br />
=== Common changes to port code ===<br />
<br />
{| border="1" class="wikitable"<br />
|-<br />
! Original Code<br />
! Ported Code<br />
! Remarks<br />
|-<br />
| ...section of code not yet ported...<br />
|<br />
<source lang="cpp-qt"><br />
#pragma message("PORT QT5")<br />
/*<br />
...section of code not yet ported...<br />
*/<br />
</source><br />
| Not yet ported code sections must be commented with compiler warnings printed on the console<br />
|-<br />
| KDE4_BUILD_TESTS=ON<br />
| '''BUILD_TESTING=ON'''<br />
| CMake flag to build tests sub-dir.<br />
|-<br />
| CMAKE_BUILD_TYPE=debugfull<br />
| '''CMAKE_BUILD_TYPE=debug'''<br />
| CMake flag to build code with debug symbols.<br />
|-<br />
| kDebug() / kWarning() / kError()<br />
| '''qCDebug(FOO_LOG) / qCWarning(FOO_LOG) / qCCritical(FOO_LOG)'''<br />
|<br />
* New "foo_debug.h" and "foo_debug.cpp" files must be created to declare debug space.<br />
* "foo_debug.h" is not shared. For shared a library, this header must be placed as private in implementation files, not header files.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
#include "foo.moc"<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
#include "foo.h"<br />
</source><br />
|<br />
* To prevent compilation errors with Qt5. Qt will generate moc_foo.h files instead. Header file of a class declaration must be placed on top of included header files list from implementation file.<br />
* Special case : KF5 plugin factory needs moc header file included at end of plugin implementation to prevent broken linking.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::directory()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl::adjusted(QUrl::RemoveFilename).path()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDiskFreeSpaceInfo<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStorageInfo<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::setFileName(newFileName)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl::setPath(QUrl::path() + newFileName)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl url;<br />
url.adjustPath(KUrl::AddTrailingSlash);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
url.setPath(url.path() + '/');<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDialog::spacingHint()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KDialog::marginHint()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::style()->pixelMetric(QStyle::PM_DefaultChildMargin)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KComponentData::mainComponent().componentName()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QApplication::applicationName()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KComponentData::mainComponent().aboutData()->homepage()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KAboutData::applicationData().homepage()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KIconLoader::SmallIcon("icon_name", size)<br />
</source><br />
or<br />
<source lang="cpp-qt"><br />
KIconLoader::global()->loadIcon("icon_name", size)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QIcon::fromTheme("icon_name").pixmap(size)<br />
</source><br />
|<br />
*Adjust size value :<br />
**Small = 16 (default from KIconLoader::SmallIcon()),<br />
**SmallMedium = 22,<br />
**Medium = 32,<br />
**Large = 48,<br />
**Huge = 64,<br />
**Enormous = 128<br />
* Icon must be installed with desktop theme icons.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::installPath("data") + QString("filename")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::GenericDataLocation,<br />
QString("filename"))<br />
</source><br />
| File to open in read-only. File already exist.<br />
<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::installPath("xdgdata-apps") + QString("filename")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::ApplicationsLocation,<br />
QString("filename"))<br />
</source><br />
| File to open in read-only. File already exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("data", QString("filename"))<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ '/' + QString("filename")<br />
</source><br />
| File to open in read-only. File already exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QString dir = KStandardDirs::locateLocal("data",<br />
QString("dirname"), true)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QString dir =<br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ '/' + QString("dirname");<br />
QDir().mkpath(dir);<br />
</source><br />
| Dir to open in read-write. Create dir if it do not exist.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrlLabel<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RActiveLabel<br />
</source><br />
|<br />
* Slot used to process url can be dropped.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KSeparator<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RLineWidget<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KXmlGuiWindow::restoreWindowSize(group);<br />
<br />
KDialog::restoreDialogSize(group);<br />
</source><br />
and<br />
<source lang="cpp-qt"><br />
KXmlGuiWindow::saveWindowSize(group);<br />
<br />
KDialog::saveDialogSize(group);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KWindowConfig::restoreWindowSize(windowHandle(), group);<br />
</source><br />
and<br />
<source lang="cpp-qt"><br />
KWindowConfig::saveWindowSize(windowHandle(), group);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KVBox* const vbox = new KVBox(this);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RVBox* const vbox = new KDcrawIface::RVBox(this);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KHBox* const hbox = new KHBox(this);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RHBox* const hbox = new KDcrawIface::RHBox(this);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KIO::NetAccess::del(url, QApplication::activeWindow());<br />
<br />
KIO::NetAccess::mkdir(url, QApplication::activeWindow());<br />
<br />
KIO::NetAccess::dircopy(srcUrl, dstUrl, QApplication::activeWindow())<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
auto deleteJob = KIO::file_delete(url);<br />
KJobWidgets::setWindow(deleteJob, QApplication::activeWindow());<br />
deleteJob->exec();<br />
<br />
auto mkdirJob = KIO::mkdir(url);<br />
KJobWidgets::setWindow(mkdirJob, QApplication::activeWindow());<br />
mkdirJob->exec();<br />
<br />
auto dircopyJob = KIO::copy(srcUrl, dstUrl);<br />
KJobWidgets::setWindow(dircopyJob, QApplication::activeWindow());<br />
dircopyJob->exec();<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KD::rename(src, dst)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QFile::rename(src, dst)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KToolInvocation::invokeBrowser(url)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QDesktopServices::openUrl(url)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KGlobalSettings::singleClick()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
qApp->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrl::directory(KUrl::ObeyTrailingSlash)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url = adjusted(QUrl::RemoveFilename);<br />
url.adjusted(QUrl::StripTrailingSlash).path()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KImageIO::typeForMime(str)<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMimeDatabase().mimeTypeForName(str)<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KTemporaryFile temp;<br />
temp.setPrefix(prefixStr);<br />
temp.setSuffix(suffixStr);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QTemporaryFile temp;<br />
temp.setFileTemplate(prefixStr + QLatin1String("XXXXXX") + suffixStr);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
K_GLOBAL_STATIC<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
Q_GLOBAL_STATIC<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KMenu::addTitle()<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMenu::addSection()<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locate("data", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::locate(QStandardPaths::GenericDataLocation, "file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("data", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("appdata", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::DataLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("cache", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)<br />
+ QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::locateLocal("tmp", "file")<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QDir::tempPath() + QChar('/') + QString("file")<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KStandardDirs::makeDir(path, permission);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
if (!QDir(path).exists())<br />
{<br />
if (QDir().mkpath(path))<br />
{<br />
QFile f(path);<br />
f.setPermissions(permission);<br />
}<br />
}<br />
</source><br />
|<br />
permission = QFile::ReadUser | QFile::WriteUser | QFile::ExeUser = 0700<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KUrlRequester<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
KDcrawIface::RFileSelector<br />
</source><br />
|<br />
To select local only file or path, no need KUrlRequester.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KActionMenu<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QMenu<br />
</source><br />
|<br />
Use QMenu::menuAction() to get Action instance of menu to plug in action collection.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
KToggleAction<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QAction<br />
</source><br />
|<br />
Use QAction::setCheckable(true) to switch Action as toggle state.<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
url.addQueryItem(key, value);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QUrl url;<br />
QUrlQuery q(url);<br />
q.addQueryItem(key, value);<br />
url.setQuery(q);<br />
</source><br />
|<br />
|-<br />
|<br />
<source lang="cpp-qt"><br />
QPixmap pix, alphaMask;<br />
pix.setAlphaChannel(mask);<br />
</source><br />
|<br />
<source lang="cpp-qt"><br />
QPixmap pix, alphaMask;<br />
QPainter p(&pix);<br />
p.setOpacity(0.2);<br />
p.drawPixmap(0, 0, alphaMask);<br />
p.end();<br />
</source><br />
|<br />
|}<br />
<br />
=== Link to documentation to port code ===<br />
<br />
* [https://community.kde.org/Frameworks/Porting_Notes KDE4 to KF5 porting guide]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/kdelibs4support/html/deprecated.html KDE4 deprecated list]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/kdelibs4support/html/classKCalendarSystem.html#a6853ea0521ea23923d3a104b1a178782 KCalendarSystem format strings] to port to [http://doc.qt.io/qt-5/qdate.html#toString QDate format strings] and [http://doc.qt.io/qt-5/qtime.html#toString QTime format strings]<br />
<br />
* [https://community.kde.org/Frameworks/Porting_Notes/KStandardDirs KStandardDirs to Qt5 porting guide]<br />
<br />
* [http://api.kde.org/frameworks-api/frameworks5-apidocs/index.html KF5 API]<br />
<br />
* [http://qt-project.org/wiki/Transition_from_Qt_4.x_to_Qt5 Qt4 to Qt5 porting guide]<br />
<br />
* [http://qt-project.org/doc/qt-5/classes.html Qt5 API]<br />
<br />
* [https://projects.kde.org/projects/qt5?jump=repository Qt5 project]<br />
<br />
* [http://api.kde.org/ecm/index.html ECM - Documentation]<br />
<br />
* [https://techbase.kde.org/Development/ECM_SourceIncompatChanges ECM - KDELibs4 macro port]<br />
<br />
* [https://projects.kde.org/projects/kdesupport/extra-cmake-modules ECM - Extra CMake Module project]<br />
<br />
=== Scripts to port code ===<br />
<br />
Laurent Montel has written scripts to port CMake and C++ code to KF5/Qt5 and remove kdelibs4support dependency. There are available [https://projects.kde.org/projects/kde/kdesdk/kde-dev-scripts/repository/revisions/master/show/kf5 in this repository] (see kf5 sub-dir).<br />
<br />
Scripts must be applied in this order, with a test compilation between each one :<br />
<br />
* Full safe scripts :<br />
** convert-to-k4aboutdata.pl (first one to apply, this help to compile)<br />
** adapt_cmakelists_file.pl (to convert CMake scripts, but code must don't be capititalized)<br />
** remove-kde4support.pl<br />
** convert-kicon.pl<br />
** convert-kmenu.pl<br />
** convert-kshortcut.pl<br />
** convert-kcolordialog.pl<br />
** convert-klistwidget.pl<br />
** convert-kmd5.pl<br />
** convert-kmenubar.pl<br />
** convert-ksplashscreen.pl<br />
** convert-kdebug.pl<br />
<br />
* Less safe scripts :<br />
** convert-kintnuminput.pl<br />
** convert-kintspinbox.pl<br />
** convert-ktextbrowser.pl<br />
** convert-kfontcombobox.pl<br />
<br />
* Scripts which need to check in-deep all changes :<br />
** convert-kvbox.pl<br />
** convert-kdialog.pl<br />
** convert-kcmdlineargs.pl<br />
** convert-kdebug-with-argument.sh (this one change kDebug(1556) en qCDebug with some info after to convert)<br />
** convert-kmimetype.pl<br />
<br />
* Last scripts to apply :<br />
** clean-forward-declaration.sh (remove forward declaration, to do when all compile fine)<br />
** clean-includes.sh (try to remove not used includes, not safe to 100%)<br />
** port_to_autogenerate_export_header.sh (convert to new signal/slot API, not safe to 100%)</div>Cauliergilles