GSoC

Che cos’è il Google Summer of Code?

Citando il sito del GSoC, “Google Summer of Code è un programma globale che offre stipendi agli studenti per scrivere codice per progetti open source. Google ha collaborato con la comunità open source per identificare e finanziare dei progetti interessanti per la prossima estate.”

Il team di LilyPond ha deciso che si tratta di un’ottima opportunità per trovare nuovi collaboratori, stimolare gli studenti che già partecipano allo sviluppo di LilyPond ad essere più coinvolti, e infine - per ultimo ma non meno importante - scrivere del buon codice per il bene di tutti!

Partecipiamo al GSoC come membri del Progetto GNU. Si veda la pagina GNU su GSoC per informazioni su come partecipare.

La nostra lista delle idee

Ecco una lista di progetti che suggeriamo per gli studenti del GSoC. Se nessuno dei progetti che vedi è adatto a te, puoi suggerirne uno tuo! È anche possibile ridimensionare un progetto se pensi che sia troppo impegnativo.

È necessario che ogni studente abbia una conoscenza di base di git e consigliamo che chiunque faccia domanda per uno qualsiasi di questi progetti, eccetto l’ultimo, abbia una conoscenza di base della notazione musicale.

Abbellimenti

Correggere i problemi di sincronizzazione degli abbellimenti, insieme a tutta l’architettura sottostante (si veda il numero 34 del nostro tracker). Gli abbellimenti confondono il tempo di LilyPond perché è come se portassero indietro il tempo. Questo causa strani effetti, specialmente quando un rigo ha un abbellimento e l’altro non ce l’ha.

Difficoltà: media

Requisiti: C++, MIDI

Consigliato: familiarità col funzionamento interno di LilyPond

Mentore/i: Mike Solomon, Carl Sorensen

MusicXML

Aggiungere un’esportazione a MusicXML completa e migliorare l’importazione, insieme a dei test che verifichino il funzionamento. A seconda del tempo a disposizione, implementare alcune o tutte le seguenti funzionalità:

  • Gestire l’esportazione del contenuto musicale principale come l’esportazione MIDI (ovvero usando classi dedicate dell’esportatore, derivate dalla classe del traduttore)
  • Costruire l’albero XML del contenuto musicale di base, aggiungere un collegamento dall’evento musicale al tag XML
  • Far sì che tutti gli incisori di LilyPond facciano il loro lavoro
  • Aggiungere la capacità di collegare ogni oggetto dell’output (in pratica ogni stampo (stencil) / gruppo di stampi) alla sua causa musicale (e quindi al tag XML nell’albero XML)
  • Aggiungere un backend di outoput XML, che possa aggiungere le informazioni di formattazione per ogni oggetto di output ai tag XML

L’obiettivo sarà considerato raggiunto quando una partitura (scelta precedentemente) può essere importata da MusicXML e riesportata senza una perdita di dati indesiderata.

Difficoltà: media

Requisiti: MusicXML, Python, conoscenza di base di LilyPond

Mentore/i: Reinhold Kainhofer, Mike Solomon

è auspicabile una certa familiarità con altri software di notazione musicale (a fine comparativo).

Migliorare le legature di portamento e di valore

La forma predefinita delle curve delle legature di portamento e di valore è spesso non soddisfacente. Non sono supportate né le legature di valore su note enarmoniche { cis'~ des' } né le legature di valore "spezzate" da una chiave o da un cambio di rigo. Il progetto include la raccolta e la classificazione di esempi di output scadente, la decisione sull’output desiderato e la scrittura del codice vero e proprio.

Difficoltà: difficile

Requisiti: C++, esperienza con la scrittura di euristica

Conoscenze consigliate: conoscenza di LilyPond, senso estetico

Mentore/i: Mike Solomon

Aggiungere una variante speciale dei glifi dei tipi di carattere

Aggiungere varianti sulla linea del rigo, tra le linee dei righi, più corte e più strette di alcuni glifi, come ad esempio le alterazioni, insieme a un’infrastruttura generica per supportarle. Un esempio è la testa della nota breve nella notazione antica che ha due varianti, con un buco più piccolo e più grande.

Difficoltà: facile

Requisiti: MetaFont, C++, buon occhio per il dettaglio

Conoscenze consigliate: conoscenza di base di LilyPond

Mentore/i: Werner Lemberg

Migliorare la disposizione delle travature

Il posizionamento predefinito delle travature normali, tra i righi, spezzate e angolari deve essere migliorato. La disposizione delle travature deve dipendere dal contesto e dalle note vicine (si veda la sezione 2.2 qui). Se possibile, ridurre il tempo di elaborazione della disposizione delle travature.

Difficoltà: media

Requisiti: C++, esperienza con la scrittura di euristiche

Conoscenze consigliate: senso estetico

Mentore/i: Mike Solomon, Carl Sorensen

Miglior supporto all’intavolatura

  • Accordature non monotoniche, come l’Ukulele
  • Creare una modalità di input per l’intavolatura (attualmente l’informazione musicale viene inserita secondo i termini della notazione musicale occidentale, ovvero “una nota Fa# di un quarto” e poi convertita in intavolatura) per trascrivere l’intavolatura del liuto medievale
  • Implementare funzionalità dell’intavolatura moderna, come la piegatura (bending), lo strappato e il martellato (hammer-on e pull-off)
  • Se si definisce una forma sulla tastiera per un certo accordo, questa informazione deve essere usata quando si mostra l’accordo sul rigo (invece di mostrare soltanto la forma predefinita dell’accordo)

Difficoltà: facile

Requisiti: C++

Conoscenze consigliate: familiarità con l’intavolatura

Mentore/i: Carl Sorensen

Semplificare vari avvisi durante la compilazione

Semplificare gli avvisi del compilatore e di valgrind e l’analisi del codice statico. Strumenti di analisi automatica del codice (avvisi in g++ e clang) e strumenti di analisi come il rilevamento di perdite di memoria di valgrind e i profilatori di codice di callgrind forniscono informazioni utili per individuare possibili errori nel codice C++. Pulire questi avvisi ci permetterebbe di rifiutare automaticamente qualsiasi patch che introduca avvisi ulteriori.

Difficoltà: media

Requisiti: C++

Mentore/i: Joe Neeman, Reinhold Kainhofer