1@c -*- coding: utf-8; mode: texinfo; -*-
2@c This file is part of community.itexi
3@c It's been moved here to reduce maintenance burden on translators.  It's up
4@c to translators the choice of translating this section of community.itexi or
5@c not (as GSoC students are required to speak english, a translated page is
6@c not needed).
7
8@c Current proposals for Google Summer of Code
9@macro gsocCurrent
10
11@divClass{column-center-top}
12@subheading What is Google Summer of Code?
13
14@uref{https://summerofcode.withgoogle.com/, GSoC} is a global program
15that offers students stipends to write code for free software and open
16source projects during the summer.  For three months students work to
17complete a given task as part of the project's community and under the
18guidance of experienced mentors.  The program is an excellent
19opportunity for students to gain experience with real-world software
20development and make a contribution that benefits everyone.  It brings
21new contributors to LilyPond and enables students who are already
22involved to become more involved.  LilyPond participates in GSoC as part
23of the @uref{http://www.gnu.org/, GNU project}.
24
25We have had GSoC participants in 2012, 2015, 2016 and 2017.  This site
26is current for the 2018 program.
27
28@divEnd
29
30@divClass{column-center-middle-color2 bigger-subsubheadings}
31@subheading Project Ideas List
32
33Below is a list of GSoC project ideas (last update: May 2017), but
34if you have other ideas for a project you may complete within the three
35months of the program you're welcome to make a suggestion on our
36developer mailing list (see @ref{Contact}).  There are a number of areas
37where LilyPond could be improved, and our development team is always
38willing to help those who would like to tackle a project similar to
39those listed below.  As mentor availability varies from project to
40project and from year to year it is wise to get in touch with us as
41early as possible.
42
43Per 2018 we have installed the new role of “Community Mentor”.  We aim
44at assigning one Community Mentor to each active project who is
45@emph{not} responsible for discussing the implementation or reviewing
46the code.  Instead they will on the one hand discuss the @emph{design}
47of the planned features from the (power) user perspective, and they
48will look after the communication between student and mentor, and
49between the two and the community.
50
51A full list of all the current open issues can be found
52@uref{https://gitlab.com/lilypond/lilypond/-/issues, here}.
53
54
55@subsubheading Adopt the SMuFL music font encoding standard
56
57For several years now a new standard for music fonts has been around:
58@uref{http://www.smufl.org/, SMuFL}, which is also discussed as becoming part of
59a future W3C standard for music encoding.  As a FLOSS tool LilyPond should
60adhere to such an open standard instead of using an isolated solution like it
61does today.  Adopting SMuFL will help integrating LilyPond with the world of
62music notation software and eventually give LilyPond users access to a wider
63selection of notation fonts.
64
65Making LilyPond compliant to SMuFL includes remapping of the glyphs that are
66built from METAFONT sources, adjusting the glyphs' metrics to SMuFL's
67specifications, and finally updating the way LilyPond looks up and positions the
68glyphs.  As an optional part of this project LilyPond's font loading mechanism
69could be modified to use notation fonts installed as system fonts instead of
70inside the LilyPond installation.
71
72@emph{Difficulty}: Easy/medium
73
74@emph{Requirements}: C++ and willingness to get familiar with LilyPond
75internals.
76
77@emph{Recommended}: Interest and experience in working with font files.
78A little bit of METAFONT.
79
80@emph{Mentors:} Werner Lemberg, Abraham Lee
81
82
83@subsubheading Adding variants of font glyphs
84
85@divClass{keep-bullets}
86@itemize
87
88@item
89Adding @q{on} and @q{between} staff-line variants.
90
91@item
92Shorter and narrower variants of some glyphs for example, accidentals.
93Another, more specific example could be an ancient notation breve
94notehead coming in two variants one with a small or big @q{hole} within
95it.
96
97@end itemize
98@divEnd
99
100@emph{Difficulty:} easy
101
102@emph{Requirements:} MetaFont, C++, good eye for details
103
104@emph{Recommended knowledge:} basic LilyPond knowledge
105
106@emph{Mentor:} Werner Lemberg
107
108
109@subsubheading Improve/Extend Export to MusicXML
110
111There is experimental support for exporting scores to MusicXML.
112So far there is limited coverage that should be extended, and the export
113should become more robust with regard to unconventionally organized input
114files.  Several strategies can be thought of in that regard.
115
116Significant progress in coverage has been made in a GSoC Project hosted
117by @uref{http://frescobaldi.org, Frescobaldi} in 2017, but there is
118still much to be done that could make a nice GSoC project.
119
120Working in this project will mainly be done in the
121@uref{https://github.com/wbsoft/python-ly, python-ly} repository.
122
123@emph{Difficulty:} easy to hard (depending on the targeted improvements)
124
125@emph{Requirements:} Python, MusicXML
126
127@emph{Mentor}: Peter Bjuhr
128
129
130@subsubheading Fix Beaming Patterns/Beam Subdivisions and Tuplets
131
132Subdivision is an important way to improve the readability of beamed
133music.  However, despite several attempts at fixing it LilyPond still
134does not always produce correct results.  In order to properly fix this
135issue it seems necessary to rewrite the responsible code from the ground
136up.  Much work has already been done assessing the issue (see
137@uref{http://lists.gnu.org/archive/html/lilypond-devel/2017-11/msg00037.html,
138this discussion} and
139@uref{https://openlilylib.org/public/beam-subdivisions.pdf, this
140work-in-progress document}).
141
142In the course of this assessment it has been found that LilyPond's
143conception of @emph{tuplets} is somewhat flawed as well (see
144@uref{http://lists.gnu.org/archive/html/bug-lilypond/2017-11/msg00016.html,
145this discussion}), and that this has to be fixed as well.
146
147@emph{Difficulty:} medium
148
149@emph{Requirements:} C++
150
151@emph{Recommended knowledge:} Good musical and mathematical understanding
152of timing issues
153
154@emph{Mentors:} Urs Liska, Carl Sorensen
155
156
157@subsubheading Frescobaldi Extensions
158
159Starting with the current release 3.1
160@uref{http://frescobaldi.org, Frescobaldi} has an extension API that
161allows the easy integration of arbitrary functionality in the editing
162environment.  These could range from, say, document statistics and
163accounting functionality to fancy features like a built-in video chat
164client or a stock market ticker.
165
166We would welcome project suggestions about arbitrary Frescobaldi
167extensions of appropriate complexity that add substantial functionality
168for working with LilyPond scores which might not be suitable to be
169included into Frescobaldi itself.
170
171As @emph{suggestions} and examples may serve: a project management
172extension that can manage repetoire of arbitrary complexity, handle
173the generation of template files and the compilation process. Or an
174extension to manage the @uref{https://openlilylib.org, openLilyLib}
175infrastructure.
176
177@emph{Difficulty:} easy/medium
178
179@emph{Requirements:} Python, (PyQt)
180
181@emph{Optional:} GUILE Scheme (if functionality involves LilyPond
182internals)
183
184@emph{Mentor:} @emph{Urs Liska}
185
186
187@subsubheading Support for Style Sheets
188
189LilyPond's engraving output can be tweaked to the least detail, and one
190important addition in recent years was the ability to use alternative
191notation fonts.  It is possible to create reusable modules for “house
192styles”, but this project aims at bringing this to a new level by creating
193a convenient extension package with support for creating, applying,
194and sharing modular style sheets.  We are looking for a hierarchical
195structure that allows to mix and match style elements for “house” (e.g.
196“my-personal-style”, “client-a”, “client-b” etc.), score type, paper
197size etc.
198
199Work can be built upon the existing
200@uref{https://github.com/openlilylib/notation-fonts, notation-fonts}
201openLilyLib package.  We would like to see a further improvement of the
202loading mechanism for notation fonts (for example a better separation
203of loading notation and text fonts) as part of the project, and optionally
204(this would involve working on Lilypond's C++ code) support for notation
205fonts that are installed system-wide.
206
207@emph{Difficulty:} medium
208
209@emph{Requirements:} Scheme, aesthetic competence
210
211@emph{Recommended:} sense of building hierarchical frameworks
212
213@emph{Optional:} C++ (for font loading internals)
214
215@emph{Mentor:} @emph{Abraham Lee}
216
217@emph{Community Mentor:} @emph{Kieren MacMillan}
218
219
220@subsubheading Contemporary Notation
221
222LilyPond is very good at creating non-standard notation.  Having to
223@emph{code} every graphical element instead of simply @emph{drawing}
224it may seem cumbersome but is in fact a strong asset.  New notational
225functionality can be provided with consistent appearance, automatic
226layout and a natural syntactic interface.
227
228Within the @uref{https://github.com/openlilylib/oll-core, openLilyLib}
229library system the student will create a fundamental infrastructure
230and building blocks to make creating contemporary notation easier.
231Additionally (at least) @emph{one} concrete package is developed to
232cover specific contemporary notation, such as for example the style
233of a given composer, extended playing techniques for a specific
234instrument or a certain category of effects.
235
236@emph{Difficulty:} medium
237
238@emph{Requirements:} Scheme (interaction with LilyPond internals),
239contemporary notation techniques
240
241@emph{Recommended:} sense of building hierarchical frameworks
242
243@emph{Mentors:} @emph{NN,} Urs Liska
244
245
246@subsubheading  Implement a System to Handle Scores System by System
247
248One strategy that may improve the issue of LilyPond's compilation time is
249to handle scores in a system-by-system manner through partial compilation.
250This project explores one approach to achieve this and may lay the ground
251for future development towards a “LilyPond server”.  It is very ambitions
252because it involves working with LilyPond's internals and optionally a
253reference user interface in @uref{http://frescobaldi.org, Frescobaldi}.
254
255The idea behind this project is the implementation of a music viewer that
256doesn't display pages but sees a scores as a continuous sequence of systems
257that are stitched together.  LilyPond can produce such a sequence of files,
258and it can be made aware of the moments of each line break.  That way only
259systems have to be recompiled that are affected by a modification, thus
260saving significant waiting times.  Optionally there could be new engraving
261modes in LilyPond that don't try to optimize the line breaking, saving
262even more time, at least while in content editing mode.
263
264The project is fairly complex and has many more aspects than could be
265listed on this page.  So if you are interested in this please get in
266touch with us as early as possible to evaluate options and discuss the
267topics before you write an application.
268
269
270@emph{Difficulty:} hard
271
272@emph{Requirements:} LilyPond/Scheme, Python/PyQt
273
274@emph{Optional:} C++ if it's necessary to modify LilyPond itself
275
276@emph{Mentors:} NN (, Urs Liska)
277
278@emph{Community Mentor:} Kieren MacMillan
279
280@divEnd
281
282
283@divClass{column-center-middle-color2}
284@subheading Information for Applicants/Participants
285
286In order to have a satisfying experience with GSoC applicants are
287strongly advised to thoroughly read the following recommendations.  Some
288of these are relevant for the application process, others for the time
289within the project.
290
291@itemize
292
293@item
294Read all applicable information on the program's website, particularly
295the
296@uref{https://developers.google.com/open-source/gsoc/resources/manual,
297students' manual}.  Make sure you fulfil all of Google's prerequisites
298and are willing to join the program as a full-time commitment over the
299coding period of three months.
300
301@item
302Please get in touch with us as soon as possible if you are interested in
303applying with a project.  Mentor availability may change without notice,
304project proposals may need fine-tuning, and many other reasons might
305require us to reject or ignore an application that hasn't been discussed
306before.
307
308@item
309We do not know in advance how many “slots” we will have available for
310projects, so please be aware that you may find yourself in competition
311with other applicants or not.  Interested or even enthusiastic response
312from our mentors is no guarantee of eventually being accepted, and
313@emph{not} being accepted does not necessarily indicate a negative
314evaluation of your application.  If we have to decide between different
315applicants there may be various aspects to consider.
316
317@item
318Integration in the LilyPond community is a fundamental part of GSoC, and
319we expect our students to make substantial efforts to become community
320members.  Within the @emph{bonding period} we expect you to write a blog
321post about your project (either on @uref{https://lilypondblog.org, Scores
322of Beauty} or on any other blog) and to be active on our mailing lists,
323introducing yourself but also communicating about unrelated tasks.  This
324goes beyond the mere setting up of a working environment and
325familiarizing yourself with the relevant code, but we think it is
326crucial for the GSoC project to be mutually satisfying.
327
328@item
329If you are accepted to the program you will have one mentor explicitly
330assigned to your project.  With this mentor you will have to agree upon
331a communication strategy, be it emails, chatrooms, issue trackers or
332voice/video chats.  Regular communication is absolutely crucial for the
333success of a GSoC project so you are stricly required to keep talking to
334your mentor.  But keep in mind that your mentor has explicitly taken
335over the responsibility for your project, and while unlike you he isn't
336paid for this activity you are still entitled to get regular attention
337from him.
338
339@item
340In order to get support from your mentor you have to give him a chance
341to follow your progress and efforts.  Therefore it is important to
342regularly commit your changes to the versioning repository you are
343working on.  Don't hesitate making unfinished code available because you
344are afraid of criticism, and don't suppress questions because you think
345they might be considered stupid.  But ideally your code should at any
346time be accompanied by compatible testing code.  Your mentor may not be
347able to properly assess your code by only @emph{reading} it without the
348opportunity to apply it in a real example.
349
350@end itemize
351
352There is a list of inactive projects in the @ref{Attic}.  We list
353projects there that are still considered valuable but for which there
354are currently no mentors available.
355
356@divEnd
357@end macro
358
359
360@c Inactive proposals for Google Summer of Code
361@macro gsocInactive
362@subheading Inactive Google Summer of Code project suggestions
363
364The following list describes GSoC projects that had been proposed
365in recent years and which are still considered valuable but for
366which we currently don't have mentors available.
367
368
369@subsubheading Automated testing and documentation for openLilyLib
370
371@uref{https://github.com/openlilylib, openLilyLib} is an extension
372framework for LilyPond code providing a “snippets” repository and a
373suite of integrated packages such as for example page layout tools or
374scholarly annotations.  It is very powerful and promising, but to really
375get off the ground two features are missing: automated testing and
376documentation generation.
377
378Automated testing is necessary to ensure modifications to functionality
379don't break other functions within the library.  There is already some
380Automated Testing of the “snippets” repository with Github's Travis
381server, but this has to be reconsidered and extended to cover the
382standalone packages too.
383
384In order to be usable for a wider range of LilyPond users on a “consumer
385level” openLilyLib needs proper documentation.  This documentation has
386to be generated from the sources, so a system is needed that requires
387package authors to document the input files and provide additional usage
388examples, from which documentation is generated.  Ideally but not
389necessarily this is implemented as a Git hook, i.e. automatically upon
390each update to the repository.  We don't prescribe the tools and
391approaches to be used, but the most widely used language in the LilyPond
392domain is Python, so there would be some bias towards that.
393Alternatively a Scheme solution could be fine so generating the
394documentation would actually be triggered by “compiling” a certain
395LilyPond input file.  In general it is advisable to make use of proven
396concepts and tools from other languages.
397
398The eventual output of the documentation should be a static HTML site
399that can be viewed locally and/or uploaded to a website.  But it would
400be beneficial if the tool would first generate an intermediate
401representation (e.g. a JSON file with additional media files) from which
402a Single Page Application could retrieve content for display on
403openLilyLib's @uref{https://openlilylib.org, website}.  Development of
404such a SPA @emph{can} be part of the GSoC project, but is optional.
405
406@emph{Difficulty:} medium
407
408@emph{Requirements:} Python or Scheme, static website generator(s) or
409(Node.js based) dynamic web application technology. Continuous
410Integration (can be learned during the bonding period)
411
412
413@subsubheading MusicXML
414
415Improving MusicXML import and export functions:
416
417File interchange between LilyPond and other applications using MusicXML
418is still a difficult matter.  To import MusicXML it has to be converted
419manually by the @code{musicxml2ly} script.  Export @emph{to} MusicXML is
420only available as a rudimentary feature inside Frescobaldi.  In order to
421provide natural interchange between LilyPond and MusicXML based
422applications there's the need of actual import functionality and a
423dedicated export backend.
424
425Importing XML shall provide file, line and column to add origin
426attributes to generated objects.  That way point and click can be
427made available in Frescobaldi or other supported IDEs.
428
429Exporting XML shall be realized with an exporter class like the MIDI
430export.  This may be based on the work already done in
431@uref{https://github.com/DavidGarfinkle/Lilypond_MusicXMLexport, GSoC 2015}
432by David Garfinkle.  It should be checked if it is possible to use
433another XML library than the one provided by guile-2 in order to have
434this feature available in current LilyPond (which is based on guile-1.8).
435
436@emph{Difficulty:} medium
437
438@emph{Requirements:} MusicXML, Python, Scheme, basic LilyPond knowledge
439
440@emph{Recommended:} Familiarity with other scorewriters (for cross-testing)
441
442@subsubheading Improve slurs and ties
443
444The engraving quality of slurs and ties is often unsatisfactory. Ties
445@q{broken} by clef or staff changes are not handled well.  The project
446could include collecting and sorting examples of bad output, deciding on
447the intended output and writing code to improve them.
448
449@emph{Difficulty:} hard
450
451@emph{Requirements:} C++, experience with writing heuristics
452
453@emph{Recommended knowledge:} LilyPond knowledge, aesthetic sense
454
455
456@subsubheading Grace notes
457
458Fix problems with synchronization of grace notes.  Grace notes can
459interfere with LilyPond's timing and cause odd effects, especially when
460multiple staffs are used where some have grace notes and others don't.
461This is one of the longest-standing and one of the more embarrassing
462@uref{https://gitlab.com/lilypond/lilypond/-/issues/34/, bugs} in
463LilyPond.
464
465@emph{Difficulty:} medium
466
467@emph{Requirements:} C++, MIDI
468
469@emph{Recommended:} familiarity with LilyPond internals
470
471
472@subsubheading Improve default beam positioning
473
474For regular, cross-staff, broken and kneed beams.  Beaming should depend
475on context and neighbor notes (see section 2.2 of
476@uref{http://imslp.org/wiki/Repository_of_Music-Notation_Mistakes_%28Coulon%2C_Jean-Pierre%29,
477this book}).  If possible also reduce beaming-computation time.
478
479@emph{Difficulty:} medium
480
481@emph{Requirements:} C++, experience with writing heuristics
482
483@emph{Recommended knowledge:} aesthetic sense
484
485
486@subsubheading Help improve compilation behavior
487
488Automatic code analysis tools, like valgrind memory leak detection or
489callgrind code profilers, provide valuable information about possible
490flaws in our C++ code.  Cleaning up warnings would allow us to automate
491the rejection of any patch which introduced extra warnings.
492
493@emph{Difficulty:} medium
494
495@emph{Requirements:} C++
496
497@divEnd
498
499@end macro
500