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