]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/included/gsoc.itexi
78eb25f274a22844040f92134bf81575a0e72160
[lilypond.git] / Documentation / included / gsoc.itexi
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
15 that offers students stipends to write code for free software and open
16 source projects during the summer.  For three months students work to
17 complete a given task as part of the project's community and under the
18 guidance of experienced mentors.  The program is an excellent
19 opportunity for students to gain experience with real-world software
20 development and make a contribution that benefits everyone.  It brings
21 new contributors to LilyPond and enables students who are already
22 involved to become more involved.  LilyPond participates in GSoC as part
23 of the @uref{http://www.gnu.org/, GNU project}.
24
25 We have had GSoC participants in 2012, 2015 and 2016 and encourage
26 students to apply for the 2017 program.
27
28 If you are interested to apply for the program with LilyPond as a
29 project, please read the information below and don't hesitate to write
30 us on our developer mailing list (see @ref{Contact}).  The student
31 application window is March 20 to April 3, 2017, but we strongly
32 encourage you to get in touch with our community ahead of that.
33
34 @divEnd
35
36 @divClass{column-center-middle-color2 bigger-subsubheadings}
37 @subheading Project Ideas List
38
39 Below is a list of GSoC project ideas (last update: January 2017), but
40 if you have other ideas for a project you may complete within the three
41 months of the program you're welcome to make a suggestion on our
42 developer mailing list (see @ref{Contact}).  There are a number of areas
43 where LilyPond could be improved, and our development team is always
44 willing to help those who would like to tackle a project similar to
45 those listed below.  As mentor availability varies from project to
46 project and from year to year it is wise to get in touch with us as
47 early as possible.
48
49 A full list of all the current open issues can be found
50 @uref{http://sourceforge.net/p/testlilyissues/issues/, here}.
51
52
53 @subsubheading Improve internal chord structure
54
55 The internal representation of LilyPond chords is not powerful enough
56 to capture the nomenclature of jazz chords.  Currently the chord has
57 a root, a bass and an inversion.  It would be nice to be able to handle
58 stacked or polychords, minor/major, etc.  In order to do this, an
59 internal representation with the ability to capture the essence of
60 complex chords must be developed.  As a bonus, once the internal
61 representation is developed, the output formatting of chord names can
62 be improved.
63
64 @emph{Difficulty:} Easy/medium
65
66 @emph{Requirements:} Scheme (Guile), but the level necessary can be
67 easily learned
68
69 @emph{Recommended:} Chord theory and naming
70
71 @emph{Mentor:} Carl Sorensen
72
73
74 @subsubheading Adopt the SMuFL music font encoding standard
75
76 For several years now a new standard for music fonts has been around:
77 @uref{http://www.smufl.org/, SMuFL}, which is also discussed as becoming part of
78 a future W3C standard for music encoding.  As a FLOSS tool LilyPond should
79 adhere to such an open standard instead of using an isolated solution like it
80 does today.  Adopting SMuFL will help integrating LilyPond with the world of
81 music notation software and eventually give LilyPond users access to a wider
82 selection of notation fonts.
83
84 Making LilyPond compliant to SMuFL includes remapping of the glyphs that are
85 built from METAFONT sources, adjusting the glyphs' metrics to SMuFL's
86 specifications, and finally updating the way LilyPond looks up and positions the
87 glyphs.  As an optional part of this project LilyPond's font loading mechanism
88 could be modified to use notation fonts installed as system fonts instead of
89 inside the LilyPond installation.
90
91 @emph{Difficulty}: Easy/medium
92
93 @emph{Requirements}: C++ and willingness to get familiar with LilyPond
94 internals.
95
96 @emph{Recommended}: Interest and experience in working with font files.
97 A little bit of METAFONT.
98
99 @emph{Mentors}: Werner Lemberg, Abraham Lee
100
101
102 @subsubheading Adding variants of font glyphs
103
104 @divClass{keep-bullets}
105 @itemize
106
107 @item
108 Adding @q{on} and @q{between} staff-line variants.
109
110 @item
111 Shorter and narrower variants of some glyphs for example, accidentals.
112 Another, more specific example could be an ancient notation breve
113 notehead coming in two variants one with a small or big @q{hole} within
114 it.
115
116 @end itemize
117 @divEnd
118
119 @emph{Difficulty:} easy
120
121 @emph{Requirements:} MetaFont, C++, good eye for details
122
123 @emph{Recommended knowledge:} basic LilyPond knowledge
124
125 @emph{Mentor:} Werner Lemberg
126
127
128 @subsubheading Contemporary Notation
129
130 LilyPond is very good at creating non-standard notation.  Having to
131 @emph{code} every graphical element instead of simply @emph{drawing}
132 it may seem cumbersome but is in fact a strong asset.  New notational
133 functionality can be provided with consistent appearance, automatic
134 layout and a natural syntactic interface.
135
136 Within the @uref{https://github.com/openlilylib/oll-core, openLilyLib}
137 library system the student will create a fundamental infrastructure
138 and building blocks to make creating contemporary notation easier.
139 Additionally (at least) @emph{one} concrete package is developed to
140 cover specific contemporary notation, such as for example the style
141 of a given composer, extended playing techniques for a specific
142 instrument or a certain category of effects.
143
144 @emph{Difficulty:} medium
145
146 @emph{Requirements:} Scheme (interaction with LilyPond internals),
147 contemporary notation techniques
148
149 @emph{Recommended:} sense of building hierarchical frameworks
150
151 @emph{Mentors:} @emph{NN,} Urs Liska
152
153
154 @subsubheading Rewrite LibreOffice LilyPond Extension with Python
155
156 The @uref{http://ooolilypond.sourceforge.net/, OOoLilyPond} extension
157 made it possible to conveniently include LilyPond score snippets in
158 OpenOffice.org/LibreOffice Writer, Draw and Impress documents while
159 keeping source and image together.  After many years without development
160 an initial effort has started to make the extension compatible again
161 with current versions of LibreOffice and LilyPond.
162
163 However, as the LibreOffice ecosystem has changed substantially it is
164 now possible to rewrite the extension with Python and PyQt.  This will
165 not only be more powerful in general but will allow the integration of
166 functionality from @uref{http://frescobaldi.org, Frescobaldi}, such as
167 for example syntax highlighting, entry helpers, score wizards or musical
168 transformations.
169
170 @emph{Difficulty:} easy/medium
171
172 @emph{Requirements:} Python, PyQt, LilyPond basics, LibreOffice
173 extension basics
174
175 @emph{Recommended knowledge:} Familiarity with Frescobaldi code based
176 or willingness to learn during bonding period
177
178 @emph{Mentor(s):} Joram Berger, Urs Liska, (Thorsten Behrens/LibreOffice)
179
180
181 @subsubheading Automated testing and documentation for openLilyLib
182
183 @uref{https://github.com/openlilylib, openLilyLib} is an extension
184 framework for LilyPond code providing a “snippets” repository and a
185 suite of integrated packages such as for example page layout tools or
186 scholarly annotations.  It is very powerful and promising, but to really
187 get off the ground two features are missing: automated testing and
188 documentation generation.
189
190 Automated testing is necessary to ensure modifications to functionality
191 don't break other functions within the library.  There is already some
192 Automated Testing of the “snippets” repository with Github's Travis
193 server, but this has to be reconsidered and extended to cover the
194 standalone packages too.
195
196 In order to be usable for a wider range of LilyPond users on a “consumer
197 level” openLilyLib needs proper documentation.  This documentation has
198 to be generated from the sources, so a system is needed that requires
199 package authors to document the input files and provide additional usage
200 examples, from which documentation is generated.  Ideally but not
201 necessarily this is implemented as a Git hook, i.e. automatically upon
202 each update to the repository.  We don't prescribe the tools and
203 approaches to be used, but the most widely used language in the LilyPond
204 domain is Python, so there would be some bias towards that.
205 Alternatively a Scheme solution could be fine so generating the
206 documentation would actually be triggered by “compiling” a certain
207 LilyPond input file.  In general it is advisable to make use of proven
208 concepts and tools from other languages.
209
210 The eventual output of the documentation should be a static HTML site
211 that can be viewed locally and/or uploaded to a website.  But it would
212 be beneficial if the tool would first generate an intermediate
213 representation (e.g. a JSON file with additional media files) from which
214 a Single Page Application could retrieve content for display on
215 openLilyLib's @uref{https://openlilylib.org, website}.  Development of
216 such a SPA @emph{can} be part of the GSoC project, but is optional.
217
218 @emph{Difficulty:} medium
219
220 @emph{Requirements:} Python or Scheme, static website generator(s) or
221 (Node.js based) dynamic web application technology. Continuous
222 Integration (can be learned during the bonding period)
223
224 @emph{Mentors:} Urs Liska, Matteo Ceccarello
225
226
227 @subsubheading MusicXML
228
229 Improving MusicXML import and export functions:
230
231 File interchange between LilyPond and other applications using MusicXML
232 is still a difficult matter.  To import MusicXML it has to be converted
233 manually by the @code{musicxml2ly} script.  Export @emph{to} MusicXML is
234 only available as a rudimentary feature inside Frescobaldi.  In order to
235 provide natural interchange between LilyPond and MusicXML based
236 applications there's the need of actual import functionality and a
237 dedicated export backend.
238
239 Importing XML shall provide file, line and column to add origin
240 attributes to generated objects.  That way point and click can be
241 made available in Frescobaldi or other supported IDEs.
242
243 Exporting XML shall be realized with an exporter class like the MIDI
244 export.  This may be based on the work already done in
245 @uref{https://github.com/DavidGarfinkle/Lilypond_MusicXMLexport, GSoC 2015}
246 by David Garfinkle.  It should be checked if it is possible to use
247 another XML library than the one provided by guile-2 in order to have
248 this feature available in current LilyPond (which is based on guile-1.8).
249
250 @emph{Difficulty:} medium
251
252 @emph{Requirements:} MusicXML, Python, Scheme, basic LilyPond knowledge
253
254 @emph{Recommended:} Familiarity with other scorewriters (for cross-testing)
255
256 @emph{Mentor:} Jan-Peter Voigt
257
258 @divEnd
259
260
261 @divClass{column-center-middle-color2}
262 @subheading Information for Applicants/Participants
263
264 In order to have a satisfying experience with GSoC applicants are
265 strongly advised to thoroughly read the following recommendations.  Some
266 of these are relevant for the application process, others for the time
267 within the project.
268
269 @itemize
270
271 @item
272 Read all applicable information on the program's website, particularly
273 the
274 @uref{https://developers.google.com/open-source/gsoc/resources/manual,
275 students' manual}.  Make sure you fulfil all of Google's prerequisites
276 and are willing to join the program as a full-time commitment over the
277 coding period of three months.
278
279 @item
280 Please get in touch with us as soon as possible if you are interested in
281 applying with a project.  Mentor availability may change without notice,
282 project proposals may need fine-tuning, and many other reasons might
283 require us to reject or ignore an application that hasn't been discussed
284 before.
285
286 @item
287 We do not know in advance how many “slots” we will have available for
288 projects, so please be aware that you may find yourself in competition
289 with other applicants or not.  Interested or even enthusiastic response
290 from our mentors is no guarantee of eventually being accepted, and
291 @emph{not} being accepted does not necessarily indicate a negative
292 evaluation of your application.  If we have to decide between different
293 applicants there may be various aspects to consider.
294
295 @item
296 Integration in the LilyPond community is a fundamental part of GSoC, and
297 we expect our students to make substantial efforts to become community
298 members.  Within the @emph{bonding period} we expect you to write a blog
299 post about your project (either on @uref{http://lilypondblog.org, Scores
300 of Beauty} or on any other blog) and to be active on our mailing lists,
301 introducing yourself but also communicating about unrelated tasks.  This
302 goes beyond the mere setting up of a working environment and
303 familiarizing yourself with the relevant code, but we think it is
304 crucial for the GSoC project to be mutually satisfying.
305
306 @item
307 If you are accepted to the program you will have one mentor explicitly
308 assigned to your project.  With this mentor you will have to agree upon
309 a communication strategy, be it emails, chatrooms, issue trackers or
310 voice/video chats.  Regular communication is absolutely crucial for the
311 success of a GSoC project so you are stricly required to keep talking to
312 your mentor.  But keep in mind that your mentor has explicitly taken
313 over the responsibility for your project, and while unlike you he isn't
314 paid for this activity you are still entitled to get regular attention
315 from him.
316
317 @item
318 In order to get support from your mentor you have to give him a chance
319 to follow your progress and efforts.  Therefore it is important to
320 regularly commit your changes to the versioning repository you are
321 working on.  Don't hesitate making unfinished code available because you
322 are afraid of criticism, and don't suppress questions because you think
323 they might be considered stupid.  But ideally your code should at any
324 time be accompanied by compatible testing code.  Your mentor may not be
325 able to properly assess your code by only @emph{reading} it without the
326 opportunity to apply it in a real example.
327
328 @end itemize
329
330 There is a list of inactive projects in the @ref{Attic}.  We list
331 projects there that are still considered valuable but for which there
332 are currently no mentors available.
333
334 @divEnd
335 @end macro
336
337
338 @c Inactive proposals for Google Summer of Code
339 @macro gsocInactive
340 @subheading Inactive Google Summer of Code project suggestions
341
342 The following list describes GSoC projects that had been proposed
343 in recent years and which are still considered valuable but for
344 which we currently don't have mentors available.
345
346
347 @subsubheading Improve slurs and ties
348
349 The engraving quality of slurs and ties is often unsatisfactory. Ties
350 @q{broken} by clef or staff changes are not handled well.  The project
351 could include collecting and sorting examples of bad output, deciding on
352 the intended output and writing code to improve them.
353
354 @emph{Difficulty:} hard
355
356 @emph{Requirements:} C++, experience with writing heuristics
357
358 @emph{Recommended knowledge:} LilyPond knowledge, aesthetic sense
359
360
361 @subsubheading Grace notes
362
363 Fix problems with synchronization of grace notes.  Grace notes can
364 interfere with LilyPond's timing and cause odd effects, especially when
365 multiple staffs are used where some have grace notes and others don't.
366 This is one of the longest-standing and one of the more embarrassing
367 @uref{https://sourceforge.net/p/testlilyissues/issues/34/,bugs} in
368 LilyPond.
369
370 @emph{Difficulty:} medium
371
372 @emph{Requirements:} C++, MIDI
373
374 @emph{Recommended:} familiarity with LilyPond internals
375
376
377 @subsubheading Improve default beam positioning
378
379 For regular, cross-staff, broken and kneed beams.  Beaming should depend
380 on context and neighbor notes (see section 2.2 of
381 @uref{http://imslp.org/wiki/Repository_of_Music-Notation_Mistakes_%28Coulon%2C_Jean-Pierre%29,
382 this book}).  If possible also reduce beaming-computation time.
383
384 @emph{Difficulty:} medium
385
386 @emph{Requirements:} C++, experience with writing heuristics
387
388 @emph{Recommended knowledge:} aesthetic sense
389
390
391 @subsubheading Help improve compilation behavior
392
393 Automatic code analysis tools, like valgrind memory leak detection or
394 callgrind code profilers, provide valuable information about possible
395 flaws in our C++ code.  Cleaning up warnings would allow us to automate
396 the rejection of any patch which introduced extra warnings.
397
398 @emph{Difficulty:} medium
399
400 @emph{Requirements:} C++
401
402 @end macro