Google Summer of Code/2018/Project Ideas: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
(template)
(→‎Qt Quick: Adding Qt Quick Controls 2 Silica Style idea)
 
(19 intermediate revisions by 9 users not shown)
Line 5: Line 5:
Students can base their application on one of these ideas, or on an idea of their own if they prefer.
Students can base their application on one of these ideas, or on an idea of their own if they prefer.


== Processes ==
=== Processes ===
If you are thinking of applying for GSoC, please see our [[Google Summer of Code/Processes]] page which describes the way that we manage GSoC within Qt, so you know what we expect of students and Mentors.
If you are thinking of applying for GSoC, please see our [[Google Summer of Code/Processes]] page which describes the way that we manage GSoC within Qt, so you know what we expect of students and Mentors.


== Project Ideas ==
=== Project Ideas ===


This is the '''list of projects'''. Please add projects using the [[Template:GSoC idea|GSoC idea template]].
This is the '''list of projects'''. Please add projects using the [[Template:GSoC idea|GSoC idea template]].


=== Qt Location ===
== General ==
{{GSoC idea|title=Port Qt to IncludeOS|suggestor=[[User:Jesus_Fernandez|Jesús Fernández]]|summary=Create a port of Qt to IncludeOS|skills=C++|difficulty=Hard|mentors=[[User:Jesus_Fernandez|Jesús Fernández]]|notes=IncludeOS allows you to run your application in the cloud without an operating system. IncludeOS adds operating system functionality to your application allowing you to create performant, secure and resource efficient virtual machines.  IncludeOS applications boot in tens of milliseconds and require only a few megabytes of disk and memory.}}
 
== Qt Location ==


QtLocation is Qt's own mapping module. It has positioning and location modules for integrating maps into applications. For more information see http://doc.qt.io/qt-5/qtlocation-index.html.
QtLocation is Qt's own mapping module. It has positioning and location modules for integrating maps into applications. For more information see http://doc.qt.io/qt-5/qtlocation-index.html.


{{GSoC idea
{{GSoC idea
|title=Valhalla offline routing plugin
|title=OpenGL-based Map Items
|suggestor=[[User:Paangele|Paangele]]
|suggestor=[[User:Paangele|Paangele]]
|summary=Create a QtLocation [http://doc.qt.io/qt-5/qtlocation-geoservices.html geoservice plugin] based on valhalla
|summary=Implement the rendering of geometric map items (circles, rectangles, polygons, polyline) in GLSL
|skills=C++
|skills=C++, OpenGL
|difficulty=Medium
|difficulty=Medium
|mentors=[[User:Paangele|Paangele]]
|mentors=[[User:Paangele|Paangele]]
|notes=
|notes=
|comments=Valhalla is a proven open source routing solution capable of using OSM data route from A to B. Creating a QtLocation geoservice plugin based on valhalla would allow to perform offline routing easily and effectively on a wide range of platforms.
|comments=Geometric map items in QtLocation currently require considerable preprocessing, and even projection to screen is performed in CPU. Applying GPU-acceleration to the items rendering stack can be performed at multiple stages.
}}
}}


{{GSoC idea
{{GSoC idea
|title=OpenGL-based Map Items
|title=MapPolygons with holes and GeoJSON interoperability
|suggestor=[[User:Paangele|Paangele]]
|suggestor=[[User:Paangele|Paangele]]
|summary=Implement the rendering of geometric map items (circles, rectangles, polygons, polyline) in GLSL
|summary=Support MapPolygons with holes
|skills=C++
|skills=C++, 3D Graphics
|difficulty=Medium
|difficulty=Medium
|mentors=[[User:Paangele|Paangele]]
|mentors=[[User:Paangele|Paangele]]
|notes=
|notes=
|comments=Geometric map items in QtLocation currently require considerable preprocessing, and even projection to screen is performed in CPU. Applying GPU-acceleration to the items rendering stack can be performed at multiple stages.
|comments=QtLocation's MapPolygon currently does not support polygons containing holes. Adding this support would allow a 1:1 feature matching with GeoJSON geometries. The scope of this project is therefore to implement the necessary enabler and the GeoJSON conversion API to produce GeoJSON from Map Items and vice versa, possibly allowing to feed GeoJSON to a MapItemView, and populate the map in that way.
}}
}}


{{GSoC idea
{{GSoC idea
|title=MapPolygons with holes
|title=3D Map Item
|suggestor=[[User:Paangele|Paangele]]
|suggestor=[[User:Paangele|Paangele]]
|summary=Support MapPolygons with holes
|summary=Add a Map Item to render 3D models
|skills=C++
|skills=C++, 3D Graphics/OpenGL
|difficulty=Medium
|difficulty=Medium
|mentors=[[User:Paangele|Paangele]]
|mentors=[[User:Paangele|Paangele]]
|notes=
|notes=
|comments=QtLocation's MapPolygon currently does not support polygons containing holes. Adding this support would allow a 1:1 feature matching with GeoJSON geometry.
|comments=To realize this project, a QtLite feature and a dependency on assimp could be added.
}}
}}


{{GSoC idea
{{GSoC idea
|title=3D Map Item
|title=Indoor Maps support
|suggestor=[[User:Paangele|Paangele]]
|suggestor=[[User:Paangele|Paangele]]
|summary=Add a Map Item to render 3D models
|summary=Support indoor maps both from API and implementation perspective
|skills=C++
|skills=C++
|difficulty=Medium
|difficulty=Medium
|mentors=[[User:Paangele|Paangele]]
|mentors=[[User:Paangele|Paangele]]
|notes=
|notes=
|comments=QtLocation currently offers no support for indoor maps. This project involves defining new tech preview API to deal with indoor maps, and the necessary adaptation to the renderer(s) to display the maps.
}}
== Qt Creator ==
Qt Creator is a powerful IDE for C/C++ development with and without Qt.{{GSoC idea|title=Language Server|suggestor=TobiasHunger|summary=Visual Studio Code introduced support for Language Servers. These are stand-alone programs that implement a interface for IDEs to interact with, so that features like Go to Definition can be implemented there. It would be great if these language servers could also be used by Qt Creator.|skills=C++ and Qt development skills|difficulty=medium|mentors=Qt Creator Team|notes=https://docs.microsoft.com/en-us/visualstudio/extensibility/language-server-protocol}}
{{GSoC idea|title=Meson Support|suggestor=TobiasHunger|summary=Meson is a build system that has become popular with open source projects in the last couple of years. Qt Creator should be able to open meson projects natively.|skills=C++/Qt and Python|difficulty=medium|mentors=TobiasHunger|notes=http://mesonbuild.com/ has details on meson. This will probably involve some work in meson to enable a fast IDE integration.}}
{{GSoC idea|title=Bazel Support|suggestor=TobiasHunger|summary=Bazel is a fast build system by Google. Qt Creator should support projects using this build system natively.|skills=C++/Qt|difficulty=medium|mentors=TobiasHunger|notes=https://bazel.build/ has details on bazel.}}
== Qt Wayland platform plugin ==
{{GSoC idea|title=Implement support for various protocol extensions|suggestor=Johan Helsing|summary=Some of these are easily implemented, other require more work. Pick as many as you think you can manage:
* xdg-shell: Recently released as stable. We already have support for xdg-shell unstable v6. Use this as a basis for supporting the stable version.
* server-decoration: Several compositors already implement the KDE protocol for switching off client side decorations. Very useful for tiling window managers. Implement support for it directly in Qt. https://github.com/KDE/kwayland/blob/master/src/client/protocols/server-decoration.xml
* idle-inhibit: Apps like movie players and similar that want to prevent screen savers and screenlockers can do it through this protocol. Implement it on Wayland and add Qt APIs so this can be implemented on other platforms as well.
* Other protocols in https://cgit.freedesktop.org/wayland/wayland-protocols/tree/unstable|skills=C++/Qt|difficulty=medium|mentors=Johan Helsing|notes=}}
== Qt Quick ==
The Qt Quick module is the standard library for writing QML applications. While the Qt QML module provides the QML engine and language infrastructure, the Qt Quick module provides all the basic types necessary for creating user interfaces with QML.
{{GSoC idea
|title=QML photosphere/360 video viewer
|suggestor=[[User:Paangele|Paangele]]
|summary=Create a new QML element (or two separate ones) to display and interact with 360 photos and videos
|skills=C++, OpenGL
|difficulty=Medium
|mentors=[[User:Paangele|Paangele]]
|notes=This project is intended to fully support 360 photos and videos in QML. This includes reading metadata, support for partial photospheres, blitting frame crops to zoom, etc. A starting point can be https://github.com/paoletto/qphotosphere
}}
{{GSoC idea
|title=Qt Quick Controls 2 Silica Style
|suggestor=[[User:Aa13q|Alexey Andreyev]]
|summary=Implement Sailfish OS Silica Controls as Qt Quick Controls 2 Style
|skills=QML/JS, C++, OpenGL
|difficulty=Medium
|notes=Sailfish Silica controls is based on Qt Quick not Qt Quick Controls (neither first not second). The idea is no rewrite them with QQC2 to provide efficiency of C++ for compex code and simplify cross-platform development for Sailfish OS. Blog note describing problem: http://aa13q.ru/qqc2-silica-style-en/
}}
== Qt Android Extras ==
{{GSoC idea
|title=Remotely Display Qt Applications on Google Chromecast
|suggestor=[[User:Ryan Chu|Ryan Chu]]
|summary=Integrate "Google Remote Display" API into Qt framework. https://developers.google.com/cast/docs/remote
|skills=C++, Android SDK/NDK
|difficulty=Medium
|mentors=[[User:Ryan Chu|Ryan Chu]]
|notes= The remote display on the Chromecast (receiver) can present information that is entirely different than the information presented in the display on the Qt device (sender device).
|comments= Ideally, Qt examples can be displayed on the big screen connected with Chromecast without extra effort. This project is also useful for headless devices to report internal content.
}}
== Qt PDF ==
{{GSoC idea
|title=PDF support in Qt
|summary=improve the PDF support in Qt,
http://code.qt.io/cgit/qt-labs/qtpdf.git
http://blog.qt.io/blog/2017/01/30/new-qtpdf-qtlabs-module/
|skills=C++
|difficulty=Medium
|mentors=[[User:Shawn Rutledge|Shawn Rutledge]]
}}
== Qt 3D ==
{{GSoC idea
|title=Support for Virtual Reality APIs
|suggestor=[[User:Daniel Bulla|Daniel Bulla]]
|summary=There is a proof of concept for adding VR support to Qt3D. This needs a lot of love to support proper input, lower latency and more functionality.
|skills=C++, QML, Qt3D
|difficulty=Hard
|notes= Proof of Concept: https://github.com/dabulla/qt3d-vr-example. A lot of conceptual work has been done and there is support for multiple popular VR APIs. The task consists of implementation and a concept to interface VR input devices and 3D Models of OpenVR (and optionally Oculus VR directly). The challenge for VR support in Qt3D is to achieve great performance/low latency while providing an easy-to-use (QML-) interface. I already used the current implementation in a project and I'm confident that this implementation could add great value to Qt3D. On the other hand side parts of the working prototype use function calls from QML and Timers. It would be the student's job to create a concept with proper property bindings for these cases. The vendors VR APIs are mostly C and need wrapping in harmony with Qt Coding Style.
}}
}}

Latest revision as of 22:41, 26 March 2018

This page lists a number of ideas for potential Google Summer of Code 2018 projects. Also check existing bugs for more problems to solve.

This page's primary purpose is to help to give potential applicants ideas that they can build on to turn into applications for the program. Members of the community are encouraged to identify ideas for projects here, and whether they would be willing to act as a mentor for a student attempting the project.

Students can base their application on one of these ideas, or on an idea of their own if they prefer.

Processes

If you are thinking of applying for GSoC, please see our Google Summer of Code/Processes page which describes the way that we manage GSoC within Qt, so you know what we expect of students and Mentors.

Project Ideas

This is the list of projects. Please add projects using the GSoC idea template.

General

Port Qt to IncludeOS
Suggested By
Summary
Create a port of Qt to IncludeOS
Skills Required
C++
Difficulty
Hard
Possible Mentors
Notes
IncludeOS allows you to run your application in the cloud without an operating system. IncludeOS adds operating system functionality to your application allowing you to create performant, secure and resource efficient virtual machines. IncludeOS applications boot in tens of milliseconds and require only a few megabytes of disk and memory.
Comments

Qt Location

QtLocation is Qt's own mapping module. It has positioning and location modules for integrating maps into applications. For more information see http://doc.qt.io/qt-5/qtlocation-index.html.


OpenGL-based Map Items
Suggested By
Summary
Implement the rendering of geometric map items (circles, rectangles, polygons, polyline) in GLSL
Skills Required
C++, OpenGL
Difficulty
Medium
Possible Mentors
Notes
Comments
Geometric map items in QtLocation currently require considerable preprocessing, and even projection to screen is performed in CPU. Applying GPU-acceleration to the items rendering stack can be performed at multiple stages.


MapPolygons with holes and GeoJSON interoperability
Suggested By
Summary
Support MapPolygons with holes
Skills Required
C++, 3D Graphics
Difficulty
Medium
Possible Mentors
Notes
Comments
QtLocation's MapPolygon currently does not support polygons containing holes. Adding this support would allow a 1:1 feature matching with GeoJSON geometries. The scope of this project is therefore to implement the necessary enabler and the GeoJSON conversion API to produce GeoJSON from Map Items and vice versa, possibly allowing to feed GeoJSON to a MapItemView, and populate the map in that way.


3D Map Item
Suggested By
Summary
Add a Map Item to render 3D models
Skills Required
C++, 3D Graphics/OpenGL
Difficulty
Medium
Possible Mentors
Notes
Comments
To realize this project, a QtLite feature and a dependency on assimp could be added.


Indoor Maps support
Suggested By
Summary
Support indoor maps both from API and implementation perspective
Skills Required
C++
Difficulty
Medium
Possible Mentors
Notes
Comments
QtLocation currently offers no support for indoor maps. This project involves defining new tech preview API to deal with indoor maps, and the necessary adaptation to the renderer(s) to display the maps.

Qt Creator

Qt Creator is a powerful IDE for C/C++ development with and without Qt.

Language Server
Suggested By
TobiasHunger
Summary
Visual Studio Code introduced support for Language Servers. These are stand-alone programs that implement a interface for IDEs to interact with, so that features like Go to Definition can be implemented there. It would be great if these language servers could also be used by Qt Creator.
Skills Required
C++ and Qt development skills
Difficulty
medium
Possible Mentors
Qt Creator Team
Notes
Comments


Meson Support
Suggested By
TobiasHunger
Summary
Meson is a build system that has become popular with open source projects in the last couple of years. Qt Creator should be able to open meson projects natively.
Skills Required
C++/Qt and Python
Difficulty
medium
Possible Mentors
TobiasHunger
Notes
http://mesonbuild.com/ has details on meson. This will probably involve some work in meson to enable a fast IDE integration.
Comments


Bazel Support
Suggested By
TobiasHunger
Summary
Bazel is a fast build system by Google. Qt Creator should support projects using this build system natively.
Skills Required
C++/Qt
Difficulty
medium
Possible Mentors
TobiasHunger
Notes
https://bazel.build/ has details on bazel.
Comments

Qt Wayland platform plugin

Implement support for various protocol extensions
Suggested By
Johan Helsing
Summary
Some of these are easily implemented, other require more work. Pick as many as you think you can manage:
Skills Required
C++/Qt
Difficulty
medium
Possible Mentors
Johan Helsing
Notes
Comments

Qt Quick

The Qt Quick module is the standard library for writing QML applications. While the Qt QML module provides the QML engine and language infrastructure, the Qt Quick module provides all the basic types necessary for creating user interfaces with QML.


QML photosphere/360 video viewer
Suggested By
Summary
Create a new QML element (or two separate ones) to display and interact with 360 photos and videos
Skills Required
C++, OpenGL
Difficulty
Medium
Possible Mentors
Notes
This project is intended to fully support 360 photos and videos in QML. This includes reading metadata, support for partial photospheres, blitting frame crops to zoom, etc. A starting point can be https://github.com/paoletto/qphotosphere
Comments


Qt Quick Controls 2 Silica Style
Suggested By
Summary
Implement Sailfish OS Silica Controls as Qt Quick Controls 2 Style
Skills Required
QML/JS, C++, OpenGL
Difficulty
Medium
Possible Mentors
None yet
Notes
Sailfish Silica controls is based on Qt Quick not Qt Quick Controls (neither first not second). The idea is no rewrite them with QQC2 to provide efficiency of C++ for compex code and simplify cross-platform development for Sailfish OS. Blog note describing problem: http://aa13q.ru/qqc2-silica-style-en/
Comments

Qt Android Extras

Remotely Display Qt Applications on Google Chromecast
Suggested By
Summary
Integrate "Google Remote Display" API into Qt framework. https://developers.google.com/cast/docs/remote
Skills Required
C++, Android SDK/NDK
Difficulty
Medium
Possible Mentors
Notes
The remote display on the Chromecast (receiver) can present information that is entirely different than the information presented in the display on the Qt device (sender device).
Comments
Ideally, Qt examples can be displayed on the big screen connected with Chromecast without extra effort. This project is also useful for headless devices to report internal content.

Qt PDF

PDF support in Qt
Suggested By
Summary
Skills Required
C++
Difficulty
Medium
Possible Mentors
Notes
Comments

Qt 3D

Support for Virtual Reality APIs
Suggested By
Summary
There is a proof of concept for adding VR support to Qt3D. This needs a lot of love to support proper input, lower latency and more functionality.
Skills Required
C++, QML, Qt3D
Difficulty
Hard
Possible Mentors
None yet
Notes
Proof of Concept: https://github.com/dabulla/qt3d-vr-example. A lot of conceptual work has been done and there is support for multiple popular VR APIs. The task consists of implementation and a concept to interface VR input devices and 3D Models of OpenVR (and optionally Oculus VR directly). The challenge for VR support in Qt3D is to achieve great performance/low latency while providing an easy-to-use (QML-) interface. I already used the current implementation in a project and I'm confident that this implementation could add great value to Qt3D. On the other hand side parts of the working prototype use function calls from QML and Timers. It would be the student's job to create a concept with proper property bindings for these cases. The vendors VR APIs are mostly C and need wrapping in harmony with Qt Coding Style.
Comments