la caratteristica dell'improvvisazione nel Live Coding contraddice molte delle ipotesi fondamentali su cui si basano le leggi sul Copyright; la caratteristica di fissità dell'opera d'arte, nel Live Coding non è presente, essendo ogni opera parziale e diversa in ogni performance; questa contraddizione può essere utilizzata per resistere alle gabbie legali ed economiche che oggi cercano in ogni modo di imprigionare i beni culturali digitali e l'arte digitale in generale; il Live Coding può sviluppare una posizione critica e forte contro gli squilibri e le ingiustizie del regime della proprietà intellettuale e contro ogni nozione obsoleta di proprietà culturale esclusiva; integrando le emergenti pratiche artistiche con le critiche alla proprietà intellettuale, questa forma di arte e resistenza può fare molto per opporsi a queste leggi e per proporre interessanti alternative;


#define PERIOD 2.
#define REPETITIONS 2

const float PI = 3.1415926535;


float box(in vec2 _st, in vec2 _size){
    _size = vec2(0.5) - _size*0.5;
    vec2 uv = smoothstep(_size,
                        _size+vec2(0.001),
                        _st);
    uv *= smoothstep(_size,
                    _size+vec2(0.001),
                    vec2(1.0)-_st);
    return uv.x*uv.y;
}

float cross2(in vec2 _st, float _size){
    return  box(_st, vec2(_size,_size/4.)) +
            box(_st, vec2(_size/4.,_size));
}

vec3 shadeBlob(vec2 p, float index, float value, float scale)
{
    float screenRatio = iResolution.x / iResolution.y;
    vec2 pc = vec2(0.1 + (screenRatio - 0.2) * value, index);
 
    float d = length(pc - p) / 0.015*scale/(1.37+abs(sin(iTime)));
 
    return vec3(3. * vec3(0.5, 0.5, 0.7) / (max(d * d, 1.)));
}

float step_interp(float x) {
    return step(0.5, x);
}

float linear_interp(float x) {
    float c = clamp(x, 0., 1.);
 
    return c;
}

float cosine_interp(float x) {
    float c = clamp(x, 0., 1.);
 
    return 0.5 * (1. - cos(PI * c));
}

float smoothstep_interp(float x) {
//    return smoothstep(0., 1., x);

    float c = clamp(x, 0., 1.);
 
    return c * c * (3. - 2. * c);
}

float quintic_interp(float x) {
    float c = clamp(x, 0., 1.);
 
    return c * c * c * ((6. * c - 15.) * c + 10.);
}

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 p = fragCoord.xy / iResolution.yy;
    vec2 q = fragCoord.xy / iResolution.xy;
 
    int tx = int(p.x*128.0);
    int ty = int(p.y*128.0);
 
    // per lo Spectrum Audio
    float wave = texelFetch( iChannel0, ivec2(ty,1), 0 ).x;
    vec3 spec = vec3(wave/0.5);
 
 
    // per lo Spectrum Audio
    //vec4 spec = vec4(0.1,0.1,0.1,0.1);
 
    vec2 translate = vec2(cos(iTime),sin(iTime));
    vec2 translate2 = vec2(sin(iTime),cos(iTime));
    //p += translate*0.35*sin(iTime);
    q += translate2*1.35*sin(iTime);
 
    float t = abs(2. * fract(iTime / PERIOD) - 1.);
 
 
    // Background pattern
 
 
 
    vec3 col = vec3(0.0);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1, spec.x/0.4);
    col += shadeBlob(p, 0.4, linear_interp(t)*0.1, spec.x/0.4);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1, spec.x/0.4 );
    col += shadeBlob(p, 0.6, smoothstep_interp(t)*0.1, spec.x/0.4);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1, spec.x/0.4);
 
    //col += shadeBlob(p, 0.3, smoothstep_interp(t)*spec.x+0.2, 0.1/0.1);
    col += shadeBlob(p, 0.4, linear_interp(t)*0.1+0.05, spec.x/0.4);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.05, spec.x/0.4);
    //col += shadeBlob(p, 0.6, smoothstep_interp(t)*spec.z+0.2, 0.1/0.1);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.05, spec.x/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.1, spec.x/0.4);
    //col += shadeBlob(p, 0.4, linear_interp(t)*spec.y+0.1, 0.1/0.1);
    //col += shadeBlob(p, 0.5, cosine_interp(t)*spec.z+0.1, 0.1/0.1);
    col += shadeBlob(p, 0.6, smoothstep_interp(t)*0.1+0.1, spec.x/0.4);
    //col += shadeBlob(p, 0.7, quintic_interp(t)*spec.z+0.1, 0.1/0.1);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.2, spec.y/0.4);
    col += shadeBlob(p, 0.4, linear_interp(t)*0.1+0.2, spec.y/0.4);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.2, spec.y/0.4);
    col += shadeBlob(p, 0.6, smoothstep_interp(t)*0.1+0.2, spec.y/0.4);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.2, spec.y/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.25, spec.x/0.4);
    //col += shadeBlob(p, 0.4, linear_interp(t)*spec.y+0.25, 0.1/0.1);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.25, spec.x/0.4);
    //col += shadeBlob(p, 0.6, smoothstep_interp(t)*spec.z+0.25, 0.1/0.1);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.25, spec.x/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.3, spec.x/0.4);
    //col += shadeBlob(p, 0.4, linear_interp(t)*spec.y+0.25, 0.1/0.1);
    //col += shadeBlob(p, 0.5, cosine_interp(t)*spec.z+0.25, 0.1/0.1);
    //col += shadeBlob(p, 0.6, smoothstep_interp(t)*spec.z+0.25, 0.1/0.1);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.3, spec.x/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.4, spec.x/0.4);
    col += shadeBlob(p, 0.4, linear_interp(t)*0.1+0.4, spec.x/0.4);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.4, spec.x/0.4);
    col += shadeBlob(p, 0.6, smoothstep_interp(t)*0.1+0.4, spec.x/0.4);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.4, spec.x/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.45, spec.x/0.4);
    //col += shadeBlob(p, 0.4, linear_interp(t)*spec.y+0.45, 0.1/0.1);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.45, spec.x/0.4);
    //col += shadeBlob(p, 0.6, smoothstep_interp(t)*spec.z+0.45, 0.1/0.1);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.45, spec.x/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.5, spec.x/0.4);
    col += shadeBlob(p, 0.4, linear_interp(t)*0.1+0.5, spec.x/0.4);
    //col += shadeBlob(p, 0.5, cosine_interp(t)*spec.z+0.5, 0.1/0.1);
    col += shadeBlob(p, 0.6, smoothstep_interp(t)*0.1+0.5, spec.x/0.4);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.5, spec.x/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.6, spec.x/0.4);
    col += shadeBlob(p, 0.4, linear_interp(t)*0.1+0.6, spec.x/0.4);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.6, spec.x/0.4);
    col += shadeBlob(p, 0.6, smoothstep_interp(t)*0.1+0.6, spec.x/0.4);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.6, spec.x/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.65, spec.x/0.4);
    //col += shadeBlob(p, 0.4, linear_interp(t)*spec.y+0.65, 0.1/0.1);
    //col += shadeBlob(p, 0.5, cosine_interp(t)*spec.z+0.65, 0.1/0.1);
    //col += shadeBlob(p, 0.6, smoothstep_interp(t)*spec.z+0.65, 0.1/0.1);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.65, spec.x/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.7, spec.x/0.4);
    col += shadeBlob(p, 0.4, linear_interp(t)*0.1+0.7, spec.x/0.4);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.7, spec.x/0.4);
    col += shadeBlob(p, 0.6, smoothstep_interp(t)*0.1+0.7, spec.x/0.4);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.7, spec.x/0.4);
 
    col += shadeBlob(p, 0.3, smoothstep_interp(t)*0.1+0.8, spec.x/0.4);
    col += shadeBlob(p, 0.4, linear_interp(t)*0.1+0.8, spec.x/0.4);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.8, spec.x/0.4);
    col += shadeBlob(p, 0.6, smoothstep_interp(t)*0.1+0.8, spec.x/0.4);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.8, spec.x/0.4);
 
    //col += shadeBlob(p, 0.3, smoothstep_interp(t)*spec.x+0.8, 0.1/0.1);
    //col += shadeBlob(p, 0.4, linear_interp(t)*spec.y+0.8, 0.1/0.1);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.85, spec.x/0.4);
    //col += shadeBlob(p, 0.6, smoothstep_interp(t)*spec.z+0.8, 0.1/0.1);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.85, spec.x/0.4);
 
    //col += shadeBlob(p, 0.3, smoothstep_interp(t)*spec.x+0.8, 0.1/0.1);
    //col += shadeBlob(p, 0.4, linear_interp(t)*spec.y+0.8, 0.1/0.1);
    col += shadeBlob(p, 0.5, cosine_interp(t)*0.1+0.9, spec.x/0.4);
    col += shadeBlob(p, 0.6, smoothstep_interp(t)*0.1+0.9, spec.x/0.4);
    col += shadeBlob(p, 0.7, quintic_interp(t)*0.1+0.9, spec.x/0.4);
 
 
 
    col += 1.0 -  smoothstep( 0.0, 0.15, abs(wave - q.x) );
 
    //col = pow(col, vec3(1.3));
    //col2 = pow(col2, vec3(0.45));
 
    fragColor = vec4(col, 1.0);
}

Alcune Strategie potrebbero essere:

Destructive/Analytical Programming : Rimuovi parti di uno script esistente per esplorare come ciascuna parte rimossa contribuisce all'intero processo. In generale, la programmazione conversazionale può essere uno strumento utile per imparare come funziona il codice esistente.

Proxy Refactoring : riorganizza uno script esistente: se si tratta di un singolo proxy, trasforma i suoi componenti in singoli proxy, in modo che vengano esposti per modifiche indipendenti. Se lo script è composto da proxy più piccoli, uniscili in un numero minore più grandi. A causa di una diversa struttura di dipendenza, in ogni fase, le modifiche alle singole parti generano diversi cambiamenti sonori.

Time-Warping :  Utilizzare un singolo parametro che rappresenti il ​​tempo (o il conteggio) per parametrizzare vari processi, che possono essere funzioni stateless o routine stateful. Di conseguenza, ogni processo è una funzione diretta del tempo.

Switchboard Programming : Avvia processi multipli continui, quindi controlla quelli che diventano udibili commutando gli algoritmi.

Parameter Modification: Avvia un processo, quindi modifica ciascuno dei suoi parametri almeno una volta.

Mixed Mode Parameter Tweaking: consente di passare dalla modifica dei parametri alla riscrittura dei processi audio che questi parametri controllano. Lo stesso parametro può assumere un altro significato durante una revisione. Task o input esterni possono continuamente variare i parametri, mentre la loro interconnessione viene riscritta.

Purloined Letters: prendi uno script di un co-musicista e modificalo; diversi Esploratori possono decidere di creare set di variazioni parallele dello stesso codice di partenza.

Topic Exploration: concorda un argomento da esplorare e crea suoni partendo da questo topic.

Tandem Programming: programmando da terminale, riscrivi un singolo processo audio in rete. In alternativa, più coder possono programmare variazioni di un singolo flusso di input.

Conversational Sonification: Scegli alcune fonti di dati come argomento per la sonificazione; prova a creare diverse rappresentazioni sonore per la stessa fonte di dati, discutendo il dominio e le implicazioni epistemologiche.

Chat Model: Conversazione terminale, raffinamento e sviluppo iterativo tramite dialogo con il programma.

Ex Nihilo, editor di testo vuoto/canvas: inizia con l'editor vuoto e aggiungi le cose nel più breve tempo possibile. Nelle situazioni multicoders, inizia con un documento vuoto e scrivi il codice per diluire i suoni dell'intero gruppo.

Isolation Exercises

Typing Practice : (il record mondiale di velocità di digitazione al momento si attesta su una media di 12 caratteri al secondo).

Memory: tenere a mente tutti i processi e i dettagli (specialmente senza alcun promemoria grafico durante la codifica dal vivo) può essere di aiuto negli esercizi di pratica della memoria.

Algorithmic Building Blocks: prendi spunto dai meccanismi linguistici di incapsulamento/ricorsione/iterazione e ciclo condizionale a algoritmi specifici per l'ordinamento o l'organizzazione dei dati.

Mathematical Constructs: potrebbero essere di ispirazione particolari problemi matematici discreti come riff per mostrare l'engagement algoritmico: il problema 3x + 1, la radice quadrata di Babylonian, teorie dei numeri (cioè setacci, sommari Goldbach, algoritmi di numeri primi ecc.), teoria dei gruppi (simmetrie, catene di permutazione).

Computer Music Constructs: sintesi del suono e tecniche di composizione algoritmica, rappresentazioni da accordature non standard (ad esempio Just Intonation to x-limit) per parametrizzazioni timbriche, mappature musicali incluso conoscenza della psicoacustica e della cognizione musicale.

Attention and Awareness: mentre l'automatismo può aiutare per una migliore gestione delle proprie risorse potenziali, allenare la concentrazione può portare enormi benefici. La meditazione e la riflessione possono anche avere un ruolo nella gestione dello stress e dell'ansia da concerto, anche se il sovraccarico di adrenalina tende ad essere ridotto per gli artisti esperti dopo che hanno accumulato ore e ore di performance.

Fonti : Improvising Formalisation Conversational Programming and Live Coding, Julian Rohrhuber and Alberto de Campo; Live Coding Practice, Click Nilson


Dal 14 al 17 febbraio si è tenuto un importante Algorave: 84 ore di musica non-stop in quella che è stato probabilmente la più grande manifestazione musicale totalmente online di sempre. Il 14 febbraio è stato il quindicesimo anniversario della nascita di TOPLAP, la comunità internazionale online di musicisti attivi nel live coding, ovvero musicisti che improvvisano musica programmando in tempo reale.

Come racconta un post pubblicato sul sito della community, il 14 febbraio del 2004, meno di una decina di live coder si trovarono ad Amburgo per incontrarsi e conoscersi. Persone provenienti da diverse parti del mondo, pionieri di un metodo di fare musica che ancora molti osteggiano, anche se la community conta ora più di 2000 persone iscritte alla chat collettiva di TOPLAP.

Un movimento che si è gradualmente ampliato, quindi, mantenendo come tratto distintivo l’idea di usare il computer come un vero e proprio strumento musicale da sfruttare in performance improvvisate e live. Il secondo aspetto caratteristico di TOPLAP è nei primi due punti del manifesto: totale apertura della conoscenza musicale, degli strumenti utilizzati e del processo creativo. I live coder di TOPLAP mostrano lo schermo al pubblico in modo che tutti possano vedere come programmano. Un modo per ricostruire la gestualità della performance musicale, che vari esperti individuano come fondamentale per la fruizione della musica. Una messa in mostra che non deve però scadere in ostentazione della tecnica perché, come scritto nel manifesto, “non deve essere necessario per il pubblico capire il codice per apprezzarlo, tanto come non è necessario saper suonare una chitarra per apprezzare la visione di una performance chitarrristica”.

Se la pratica di produrre musica con i computer improvvisando è ben più antica e risale almeno agli anni ’80, il merito di TOPLAP è stato quello di organizzare la sottocultura del live coding e di creare gli strumenti, anche se rudimentali, per mettere in comunicazione gli artisti, arrivando a una definizione piuttosto precisa del movimento.

La rapida crescita di TOPLAP, soprattutto negli ultimi anni, è un fenomeno da non sottovalutare e che, anzi, può offrire ai musicisti una nuova opportunità per rilanciare il significato dei live nell’era delle registrazioni digitali, che ci hanno abituato a una musica che produce opere immutabili nel tempo, che restano sempre uguali, oggi come dieci anni fa.

7 motivi per i quali il live coding crescerà
Il live coding continuerà a evolversi, a crescere, e resterà uno dei più interessanti movimenti musicali di questo secolo. Mentre proviamo a spiegare il perché, è possibile ascoltare in sottofondo qualche video tra quelli che ho selezionato privilegiando la varietà stilistica:Alexandra Cárdenas – street code, Andrew Sorensen – jazz, Ganzfeld – sperimentale, Shelly Knots – sperimentale, Benoît and the Mandelbrots – etnica/sperimentale, Sam Aaron – dance.

1. I Live Coder vengono da due controculture e ne hanno creata una nuova
Il live coding nasce, in breve, dall’incontro di due sottoculture: quella degli hacker e quella della musica elettronica, con frequenti riferimenti alla cultura rave. Nonostante la community sia concorde nel ritenere la cultura rave come una sola delle tante componenti del live coding, il risultato è la perfetta unione delle due: ci sono gli ideali di condivisione della conoscenza e il rifiuto delle gerarchie. L’organizzazione riprende gli strumenti “da nerd” che si pongono in alternativa all’accentramento di internet, mentre le discussioni estetiche rifiutano il pensiero dominante delle accademie (o il presunto tale). «La scena del live coding – scrive Alexandra Cárdenas – è un prototipo di comunità utopica dove chiunque può contribuire, sia che suoni da un giorno che da dieci anni. È una questione politica, che ha a che fare con l’integrazione delle diversità in comunità diverse». Sul sito della International Conference on Live Coding, che raccoglie la componente accademica del movimento, si fa esplicito riferimento al rifiuto di ogni commento verbale o atteggiamento offensivo relativo a “genere, identità ed espressione di genere, orientamento sessuale, disabilità, aspetto fisico, corporatura, razza, religione”. Ci vorrebbe tempo per un’analisi accurata della cultura live coding, data la mole delle testimonianze e delle tracce lasciate in rete durante questi 15 anni, tra mailing-list, chat, wiki, repository e siti web.

2. I Live Coder sono sia popular che accademici
Buona parte della community dei live coder ha un’esperienza nel mondo accademico, spesso in contesti vicini alla ricerca in nuove tecnologie musicali. In un certo senso, tanto più sono elevate le conoscenze scientifiche del live coder, tanto più questi è avvantaggiato nel tentativo di raggiungere nuove soluzioni espressive, perché già oggi il live coding sfrutta tecniche allo stato dell’arte della produzione e delle interfacce musicali. In altre parole, molti live coder si creano autonomamente gli strumenti e le librerie di cui hanno bisogno. Questa vicinanza con l’ambiente musicologico e al contempo con il mondo popular della dance music è decisamente singolare per il periodo storico in cui viviamo, in cui la musica “accademica” è ancora circoscritta a un piccolo gruppo elitario di addetti ai lavori, proprio come nel secolo scorso. Sembra, insomma, che nel mondo del live coding il gusto popolare stia finalmente ritrovando aspetti comuni alla musica più “studiata”.

3. Il Live Coding è live
L’aspetto di improvvisazione del live coding è la sua caratteristica essenziale. Ancora una volta, è in controtendenza rispetto alla cultura dominante, in cui le registrazioni in studio sono il principale mezzo per fruire musica. Ultimamente però, i grandi servizi di streaming stanno stimolando un nuovo modo di percepire la traccia registrata: non andiamo più a comprare un disco al negozio per aggiungerlo alla nostra collezione, ma piuttosto accendiamo lo smartphone e scegliamo una canzone in un catalogo enormemente più grande di quello del vecchio negozio di dischi. Non abbiamo più la necessità di filtrare la musica che ascoltiamo in base alla descrizione, né dobbiamo adeguarci a riascoltare lo stesso disco perché in casa abbiamo un elenco limitato. Non siamo più portati, insomma, a riascoltare in continuazione la stessa musica, ma piuttosto a cercarne di nuova; perde forza il fattore che ha scatenato moltissimi cambiamenti culturali nelle pratiche musicali del Novecento. L’improvvisazione nel live coding, oltre a essere perfettamente coerente con la controcultura live coding, potrebbe rivelarsi l’arma giusta per inserirsi in questo nuovo contesto sociale dove si ascolta una canzone e la si dimentica (quasi) immediatamente.

4. Il Live Coding apre nuovi scenari senza distruggere il passato
Le possibilità tecniche che offre la computer music sono virtualmente infinite. Eppure, forse anche forte dell’esperienza della prima musica elettronica (per esempio quella di Schaeffer e Stockhausen), di fronte a così tante nuove possibilità, il live coding non si è posto in totale rottura con il linguaggio musicale in uso, ma ha deliberatamente scelto di richiamarsi a generi ben definiti. In realtà, i live coder spaziano su tutti i generi musicali esistenti, dalla dance al jazz e al pop fino alla musica più avanguardistica. Anche in questo, in effetti, è innovativo: è un non-genere musicale, che non basa la sua identità sulle strutture semantico-musicali che servono alle case discografiche per settorizzare il mercato, bensì sul mezzo della sua produzione. Se c’è un elemento del linguaggio onnipresente nel live coding è probabilmente la ripetizione di pattern e insieme la casualità nella loro generazione, il che rimanda alla musica minimalista; questo però è dovuto ai limiti delle attuali librerie per la composizione algoritmica e non alla pratica del live coding di per sè. In generale, il live coding si pone nell’ottica di innovare qualcosa di esistente, anziché distruggerlo, e non ha alcuna pretesa di fare qualcosa di migliore rispetto al passato.

5. Il live coding è multimediale
Forse l’aspetto migliore del live coding è la sua multimedialità. L’attività musicale è spesso collegata ad attività di arti visive, sempre live coded. Musicisti e digital artist si uniscono per creare performance a più livelli, a volte – raramente in realtà – con messaggi testuali espliciti proiettati sullo schermo. In alcune occasioni i live coder interagiscono anche con attori, altri musicisti o altro. La performance non è limitata all’uso del computer, che si pone più come una cabina di regia che come vero e proprio strumento.

6. Il Live Coding non ha virtualmente limiti espressivi
Dagli anni ’50 a oggi, la computer music ha creato una grande quantità di strumenti, pratici e teorici. Oggi sappiamo come possiamo produrre suoni di ogni tipo con un computer, simulando timbri di oggetti reali o inventandone di nuovi. Sappiamo come modificare i parametri di esecuzioni musicali per ottenere espressività ed emotività differenti e sappiamo anche come creare automaticamente musica in modo simile all’uomo. Ok, quest’ultimo punto è vero solo in parte, ma è abbastanza comune lasciare che il computer produca autonomamente musica che rispetti particolari vincoli, come la musica che scrive l’uomo. Quello che voglio dire è che l’implementazione di algoritmi simili in un sistema per il live coding non è impensabile, sebbene difficile per una community piccola e iper-frammentata come quella di TOPLAP.

7. Il Live Coding è ancora un neonato
Nonostante sia nata 15 anni fa e sebbene sia cresciuta enormemente, TOPLAP è ancora piuttosto piccola. Le tecnologie musicali sono in costante crescita ma la community si è finora concentrata sulle possibili interfacce, sperimentando linguaggi di programmazione visuali, ibridi e testuali, soffermandosi in particolare sui linguaggi di programmazione funzionali. Personalmente, per quel poco che ho provato, credo che il live coding possa fare grandi salti di qualità implementando altre tecnologie (come quelle citate al punto precedente), che prescindono dall’interfaccia usata. I metodi esistenti nella computer music sono utilizzabili nei contesti live coding per via del fatto che non è necessario lo sviluppo di un’intera interfaccia grafica e il mantenimento di compatibilità tra componenti complessi come invece nei software commerciali per la produzione musicale. Un esempio di progetto di ricerca che vuole portare questo genere di innovazioni in contesti musicali real-time è MIMIC.

Ciò che è mancato finora è stata una grande mente musicale che sapesse fare un grande uso delle tecnologie e che fosse in grado di presentarle al mondo come un nuovo metodo capace di interagire con altri soggetti espressivi (musicisti, attori, performer, etc.), senza porre il live coding come alternativa agli approcci tradizionali. Senza voler offendere gli attuali live coder, nella mia ricerca ho sentito solo una manciata performance che raggiungevano alti livelli artistici, e non a causa della difficoltà tecnica – che verrà comunque lentamente abbattuta. Insomma, musicisti, fatevi avanti perché qui c’è terreno per voi! Fonte : Link
È difficile scrivere una definizione semplice per qualcosa così vario come l'hacking; ha a che fare con la giocosità, l'intelligenza e l'esplorazione. Hacking significa esplorare i limiti di ciò che è possibile, con uno spirito di giocosa intelligenza. Le attività che mostrano intelligenza giocosa hanno un "hack value";

Entrare in un computer è una cosa diversa.  Preferisco chiamare questa cosa "cracking", perché quando dico che sono un "hacker", non significa che mi diverto a violare la sicurezza dei sistemi informatici e voglio che le persone lo capiscano. Basta con questo stereotipo dell'hacker drogato, depresso e dissociato, che penetra sistemi informatici e spia profili facebook, cagatoci in testa dal Mainstrem con i vari Mr.Robot (per i rintronati che continuano ad associarmi a Mr.Robot); l'hacker è una persona lucida, curiosa, giocosa, creativa e virtuosa;

Gli hacker fanno quello che fanno perché lo amano. Non lo fanno per soldi, ci sono davvero dentro. Qualunque sia la loro passione, programmazione, poesia, arte, composizione videomusicale, elettronica, live coding, musica, imparano il più possibile, creano, rielaborano, migliorano, e poi condividono con il mondo.

"L'hacker è una persona che trae piacere dalla sfida intellettuale di scavalcare o aggirare creativamente dei limiti;"

"gli hacker credono che gli insegnamenti fondamentali sui sistemi – e sul mondo – possano essere appresi smontando le cose, analizzandone il funzionamento e utilizzando la conoscenza per creare cose nuove e più interessanti; sono artisti, scienziati matti in continua esplorazione, pronti a mettere in discussione qualsiasi cosa, senza paura;"

What are hackers from bz akira santjago on Vimeo.

"Vagabondare per il labirinto di laboratori e magazzini, in cerca dei misteri della commutazione telefonica nelle stanze piene di apparecchiature, seguendo sentieri di fili o di relè nei condotti sotterranei dell'aria condizionata... per qualcuno, era un comportamento normale, e non c'era bisogno di giustificare l'impulso di aprire una porta senza permesso, se dietro quella porta si fosse percepito un rumore sospetto irresistibilmente attraente. E allora, se non ci fosse stato nessuno a proibire fisicamente l'accesso a qualunque cosa stesse provocando quel rumore affascinante, a impedire di toccare la macchina, ecco che avreste cominciato a sfiorare gli interruttori e a osservare le reazioni, a girare una vite, sganciare un pannello, rimuovere qualche diodo e provare qualche connessione. Peter Samson e i suoi amici erano cresciuti in una particolare relazione col mondo, all'interno della quale le cose acquisivano significato solo se si scopriva come funzionavano. E come avrebbe potuto capirlo se non mettendoci le mani sopra?" Il Tech Model RailRoad Club, Hackers, Steven Levy;

"L'hacker è una persona che trae piacere dalla sfida intellettuale di scavalcare o aggirare creativamente dei limiti;"

"gli hacker credono che gli insegnamenti fondamentali sui sistemi – e sul mondo – possano essere appresi smontando le cose, analizzandone il funzionamento e utilizzando la conoscenza per creare cose nuove e più interessanti;"

"produciamo nuovi concetti, nuove percezioni e nuove sensazioni, che hackeriamo da dati vecchi e/o non ancora elaborati. Qualsiasi sia il codice che hackeriamo, sia esso linguaggio di programmazione, lingua poetica, matematica o musica, curve o colori, noi siamo coloro che astraggono i mondi nuovi. Qualsiasi sia il modo in cui scegliamo di rappresentarci - come ricercatori o autori, artisti o biologi, chimici o musicisti, filosofi o programmatori - ognuna di queste soggettività è un frammento di una classe che diviene, a poco a poco, consapevole di sé in quanto tale."

Stallman : "It is hard to write a simple definition of something as varied as hacking, but I think what these activities have in common is playfulness, cleverness, and exploration. Thus, hacking means exploring the limits of what is possible, in a spirit of playful cleverness. Activities that display playful cleverness have hack value."
Update cookies preferences