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
Other languages: English, español, français, 日本語, nederlands.
About automatic language selection.