• Del autor
  • Principios y algoritmos de concurrencia

Ricardo Galli, de software

~ De software libre, internet, legales

Ricardo Galli, de software

Publicaciones de la categoría: ciencia

Cuidado con el Big Data II

07 viernes Jun 2013

Posted by gallir in ciencia, cultura, internet

≈ 6 comentarios

Etiquetas

big data, causación, correlaciones

Hace unos días publiqué Sé cuidadoso con el “Big Data”. Hace un par de horas descubrí Beware the Big Errors of ‘Big Data’. Prometo que no lo había leído, ni sabía de su existencia, pero sí había todos los libros de su autor Nicholas Taleb. En particular Antifragile, su último libro donde habla bastante de los problemas del ruido en el «Big Data».

Lo interesante es que en el artículo en Wired dice:

This is not all bad news though: If such studies cannot be used to confirm, they can be effectively used to debunk — to tell us what’s wrong with a theory, not whether a theory is right.

Dice que al análisis de big data no sirve (o no debería) servir para confirmar teorías, pero sí que sirve para desenmascarar las falsas.

Ayer por la mañana leí, vía Menéame, Correlación, causalidad… y grafos: lo más fundamental (e ignorado) en estadística, donde justamente explican el caso del artículo que demuestra que hay una correlación entre el número de tiendas IKEA y el número de Premios Nobel de cada país, para mostrar la falsedad del estudio que asguró (y fue muy publicitado) que el mayor consumo de chocolate ayuda a tener más premios Nobel (¡sí!, eso decía).

Correlación entre número de tiendas IKEA y Premios Nobel

 

La incapacidad de solucionar errores de nuestros estudiantes de informática

06 jueves Jun 2013

Posted by gallir in ciencia, desarrollo, UIB

≈ 47 comentarios

Etiquetas

debugging, programadores

Uno de las asignaturas que enseño en la UIB es «Sistemas Operativos 2», del segundo semestre del segundo curso de la ingeniería en informática. En esta asignatura enseñamos fundamentalmente gestión de memoria, de E/S y sistemas de ficheros.

La práctica consiste en el desarrollo en C desde cero de un sistema de ficheros basado en i-nodos. Quizás es la práctica más difícil y extensa (aunque son poco más de 2.000 líneas de código en C) que se hayan encontrado, pero tampoco es tan complicada. De hecho uno de los objetivos de la práctica es desmitificar la complejidad (de los conceptos fundamentales, el demonio está en los detalles) de los sistemas de ficheros. Pero nos encontramos con muchos problemas:

  • No saben relacionar lo aprendido en estructuras de datos. Por ejemplo, a esta alturas ya han visto árboles y el recorrido iterativo y recursivo en ellos, sin embargo les cuesta mucho hacerlo para la traducción de bloques lógicos a físicos (que es básicamente recorrer árboles de uno, dos o tres niveles).
  • Falta de práctica de programación. No están acostumbrados a desarrollar programas que sean mayores a un par de cientos de líneas, cuesta mucho que muestren código que «huela» bien, ni siquiera son capaces de sangrarlo correctamente, son incapaces de hacer el diseño del programa.
  • Desconocimiento de C, del compilador, y de su relación con la arquitectura de los ordenadores.

Para que estos problemas no bloqueen todo el desarrollo, el diseño se lo pasamos hecho al nivel de funciones con un programa semanal de qué funciones deben implementar y cómo probarlas. Además les pasamos el código de las funciones de recorrido de las estructuras más complejas.

Aún minimizando los problemas anteriores, el otro gran problema que tienen -y creo que el peor- es la incapacidad para analizar y corregir los errores del código. Aún en las partes más sencillas y obvias, es típico el diálogo:

– Profesor, el programa me falla.

– ¿Dónde está el fallo?

– No lo sé, da un segmentation fault.

– Pero ¿en qué función?.

– No lo sé, lo hace apenas lo ejecutamos.

– Pero ¿no has puesto ni print-efes para saber por donde se cuelga?

– ¿Dónde los pongo?

Es muy fustrante, les pego unos rapapolvos importantes. El ejemplo que doy a continuación es un caso real, del lunes pasado.

Como parte de las pruebas del sistema de fichero, tienen que desarrollar unos programas concurrentes que escriban una estructura de datos en posiciones aleatorias de un fichero. Luego otro programa tiene que recorrer secuencialmente ese fichero y detectar las escrituras, la forma fundamental es verificar que uno de los campos de la estructura sea igual al PID del proceso que escribió en ese fichero.

Un par de alumnos tenían problemas, después un un diálogo muy similar al anterior les indiqué que antes que les mire el código debían indicarme exactamente el sitio donde les daba problemas. Me mostraron el siguiente código:

struct record rec, rec2;
char pathname[256];
...
my_read(pathname, &rec, position, sizeof(rec));
while (rec.pid != pid) {
    position += sizeof(rec);
    my_read(pathname, &rec, position, sizeof(rec));
}
printf("Final del bucle\n");

Me dijeron:

– El problema es que nunca sale del bucle.

Es decir, según ellos, que nunca se cumplía la condición de que rec.pid sea igual a pid. Les indiqué el primer problema, el código no verificaba que se haya llegado al fin del fichero (es decir, que el resultado de my_read() sea mayor que cero). Si no salía de ese bucle, el my_read() debería estar generando errores y muy raro que no salga ningún error. En un momento de la conversación, y después de varios minutos verificando que el fichero estaba bien (el my_read() funciona correctamente), les digo:

– Esto no puede ser, debe haber otro error ¿habéis verificado que el nombre del fichero en pathname sea correcto?

– Ahora que lo dices, en una de las pruebas cuando habilitamos la impresión de errores nos dio «la ruta no existe».

– ¡¡¡¡#$@!!!

Les pedí que impriman el valor de la variable pathname, y en vez de un /dir1/dir2/datos.dat salía /dir1dir2/datos.dat, todo por olvidare de una «/» en el sprintf() para el pathname.

Es decir, el problema no estaba ni el bucle, sino unas cuantas líneas más arriba de él, pero no fueron capaces de darse cuenta de ello. A los pocos minutos los mismos alumnos me dicen:

– Ahora nos da segmentation fault después del bucle, en estas instrucciones, y no sabemos por qué.

Voy a mirar esas líneas:

rec2.pid = rec.pid;
rec2.x = rec.x;
rec2.y = rec.y;
rec2.z = rec.z
...
/* más código complejo */

Era obvio que esas instrucciones, asignación de estructuras idénticas (y sin punteros involucrados) no podían generar un segmentation fault (además de la optimización es obvia y con menos código: memcpy(&rec2, &rec, sizeof(rec)).

– El error no está allí, ¿por qué decís que son esas líneas?

– Porque lo último que imprime es la salida del bucle.

– Pero ¿estáis seguro que es allí y no en el código de más abajo? ¿habéis puesto un printf para verificar?

– No.

– :facepalm: (y rapapolvos varios)

Estos casos son los que nos encontramos cada día en el laboratorio y tutorías, ayer mismo me pasó otro. Un grupo me dice:

– Profesor, el programa nos falla, ¿lo puede mirar?

– Pero ¿cuál es el fallo?

– No sabemos, nos da stack smashing detected

– Eso es porque trabajáis con algún puntero local y os estáis saliendo de los límites, por eso el error en la pila. ¿En qué función dónde da eso?

– Hummmm… creemos que en esta, pero aquí no hay nada raro.

Miro la función y detecto el error inmediatamente, les indico que es el «sprintf».

char pathname[11];
sprintf(pathname, "%s/%s/pruebas.dat", dir1, dir2);

– Pero ¿por qué el error? si está bien.

– Porque la longitud del string generado es superior a 11.

– Pero si «pruebas.dat» es menor que 11.

– :facepalm: (y enésima explicación de strings, array de caracteres, y rapapolvos varios).

Este segundo ejemplo muestra el desinterés por aprender bien las herramientas que usan (el lenguaje C es muy sencillo), pero también hay una incapacidad de asumir que se cometen errores y de interpretar y analizar el código. Aunque es una técnica muy habitual en programación, son incapaces de reducir el espacio del problema para analizar el código (tan fácil como poner print-efes donde toca). A pesar de las horas que llevan de programación en más de un año y medio de carrera, no tienen siquiera la iniciativa de poner mensajes para así poder llegar exactamente a la instrucción que les está provocando el error. En pocas palabras, carecen de las habilidades básicas para hacer debugs de programas, que a su vez es una habilidad básica de los programadores.

No sé qué estamos haciendo mal en la universidad para que no tengan un dominio básico de debugging. O si el problema lo arrastran de instituto, por ejemplo, no tener iniciativa para resolver por sí solos los problemas, esperan -y casi exigen- que el profesor tenga capacidad adivinatorias superiores que les evite pensar a ellos. O que no hayan tomado conciencia que cualquier profesional necesita conocer las herramientas con las que trabaja.

Después de dos años de una carrera de ingeniería informática no podemos permitir que tengan esas carencias fundamentales, en temas tan básicos. Tenemos problemas de calado en la forma en que los formamos. O quizás deberíamos empezar a tomar no tan en serio lo del «seguimiento personal a los alumnos» del Plan Bolonia y dejar que se apañen solos, que parece que lo seguimos tratando como a niños desvalidos intelectualmente.

En cualquier caso, ya me desahogué, es frustrante. Y perdón a mis alumnos por los rapapolvos, pero es que es muy frustrante (y mejor que se los dé yo, antes que su primer jefecillo 😉 ).

Relacionado (gracias): Why I never give straight answers.

Lo que nos gusta son las historias

04 martes Jun 2013

Posted by gallir in blogs, ciencia

≈ 2 comentarios

Etiquetas

apunte, de memory, historia, narrativa

Esta mañana enviaron a Menéame el artículo Mis alumnos y sus extraños métodos de estudio: el escándalo “De Memory”. Me llamó la atención, muy pronto se puso entra las más «activas» de Menéame (tiene en cuenta los votos, comentarios y visitas al sitio original), en menos de dos horas fue la más activa y destacada del momento (cuando el coeficiente de actividad es cuatro veces superior a la media de las últimas horas).

Así lo comenté en un par de tuits (perdón por el error del primero):

Curioso el éxito de este artículo de @jmmulet http://t.co/jSt0FRu2BC Y eso que da caña a la audiencia mayoritaria 😉

— Ricardo Galli (@gallir) June 4, 2013

Rectificación de error garrafal, el artículo de "éxito raro" http://t.co/jSt0FRu2BC es de @ScientiaJMLN Perdón 😦

— Ricardo Galli (@gallir) June 4, 2013

Me parecía muy extraño porque es un artículo «difícil», escéptico, crítico, y con mucho contenido científico -a veces hasta complejo-. Era raro que fuese no sólo muy votado,  también leído.

En el resumen nocturno del bot de Menéame para Twitter salió la más votada de las últimas 24 horas:

Más votada 24h: Mis alumnos y sus extraños métodos de estudio: el escándalo “De Memory” http://t.co/XZiEDDV24W

— Menéame noticias (@meneame_net) June 4, 2013

Vale, hay mucho postureo con los votos, pero también la más leída (cuenta los clics al sitio original):

Más leída 24h: Mis alumnos y sus extraños métodos de estudio: el escándalo “De Memory” http://t.co/XZiEDDV24W

— Menéame noticias (@meneame_net) June 4, 2013

Y por si fuese poco, también la más comentada:

Más comentada 24h: Mis alumnos y sus extraños métodos de estudio: el escándalo “De Memory” http://t.co/XZiEDDV24W

— Menéame noticias (@meneame_net) June 4, 2013

Hace tiempo que no recordaba nada así, que un apunte de blog «ganase» en las tres categorías. Me resultó aún más curioso, pero me di cuenta hace muy poco de por qué podía ser, y por qué no me había dado cuenta antes.

Cuando leí ese artículo, imaginando de qué iba, y después de ver que había hasta gráficas de estructuras moleculares, lo leí casi como un informe técnico, o un paper divulgativo. Pero no me dí cuenta de lo fundamental, y que me parece que es la causa fundamental del éxito: cuenta una historia personal. Hay alumnos con problemas para los exámenes, el profesor que va a la biblioteca a verlos, repentinamente se da cuenta de que había algo raro y problemático, convoca a los alumnos, les da un rapapolvo, con moraleja final. Y en medio de todo ello, nos inunda con datos técnicos.

Lo que nos gusta es leer historias, todo lo demás es esfuerzo. Jose Manuel ha sabido hacer divulgación difícil pero empotrada en una historia personal. Parece creíble y real, pero seguramente a los lectores les dio igual: la historia y sus personajes eran lo importante.

Ya, nada nuevo, pero es un buen ejemplo de divulgación interesante y atractiva, felicitaciones al autor 😉

Sé cuidadoso con el «Big Data»

29 miércoles May 2013

Posted by gallir in ciencia

≈ 18 comentarios

Etiquetas

big data, problemas

Últimamente se habla mucho de Big Data, incluso ha parido o ayudado a crear el hype del 2013: Periodismo de datos. El tema no es nada nuevo, las grandes corporaciones llevan décadas haciendo este tipo de análisis, también conocidos como «minería de datos», o «análisis prospectivos».  En Wall Street eran famosos los complejisimos «análisis de las 4:15», los informes de exposición de riesgo (basados en el modelo VaR, Value at Risk) que hacían los «analistas de cuantificación» para los CEOs y directivos de bancos y financieras 15 minutos después que cerraban los mercados y que se basaban en evolución de valores en los últimos 20 años (este modelo es uno de los principales culpables de la crisis de 2008, al crear una confianza irreal a inexistente, sin tomar en cuenta los riesgos reales del «1% restante» del 99% de fiabilidad que aseguraba el modelo VaR).

En los últimos años se ha popularizado el Big Data, tenemos más datos accesibles, es más fácil obtenerlos, y además es mucho más fácil y barato disponer  del procesamiento de cálculo necesario. El problema con el Big Data es que es muy difícil separar ruido de la señal, y se pueden encontrar correlaciones con casi cualquier ruido si no se es muy cuidadoso.

Vamos a un ejemplo concreto. Supongamos que solo tenemos los siguientes datos de evolución de alguna medida económica o social de los últimos 40 años (muchos estudios sólo usan los últimos 20 años):

da7_5

Variables 1 a 5

Esos datos no dicen mucho, de hecho si se usan herramientas estadísticas de correlación, no se encontrará casi nada.

Ahora supongamos que en vez de cinco variables, tenemos a disposición mil variables, ¡eso ya parece Big Data!:

da7_1000

Las 1000 variables

Con esos datos se podrían obtener correlaciones entre las variables usando algoritmos como Pearson, por ejemplo. Obtendríamos información interesante, por ejemplo que hay un par de variables que tienen una alta correlación positiva (es decir, crecen o decrecen conjuntamente):

da7_corr_2

Variables 30 y 132, correlación de Pearson: 0.66

Esto no puede ser casualidad, ¿no? Hay una correlación muy clara entre ellas. Si se analiza un poco más encontraríamos varios pares de variables con una evolución muy similar. Incluso podríamos encontrar variables con correlación negativa:

da7_corr_1

Variables 49 y 570, correlación de Pearson: -0.64

Muy bonito, los algoritmos y herramientas (incluso las hojas de cálculo) detectarán esas correlaciones y podemos empezar a descubrir cosas interesantes que antes no sabíamos.

Pero hay un gran problema. Esas 1000 variables con 40 valores cada una son puro ruido. Las generé con un programa, con números pseudoaleatorios,  independientes unos de otros en la misma secuencia (cada una con una media aleatoria y con distribución normal), y a su vez independientemente de los valores generados para las diferentes secuencias (los datos usados). Si en vez de 40 valores (o «años») hubiese usado sólo 20, las correlaciones encontradas serían aún mayor.

En estos casos sólo el sentido común -educado- puede descartar correlaciones casuales. Aún peor, cuando hay mucha cantidad de datos es muy difícil separar el ruido de la señal. Cada día veremos más gráficos y análisis de este tipo, totalmente inservibles y que en algunos casos podrían llevar a generar medidas o políticas desastrosas si no se analizan con cuidado.

Nuestra sociedad es muy compleja, se generan muchísimos datos, pero la mayoría de ellos son ruido o basura (como dicen los estadísticos, garbage in, garbage out, de datos basura sólo se obtienen estadísticas basura). Además, como explica Taleb, la utilización de estos análisis tan complejos harán que nuestra sociedad sea aún más compleja, por lo que quizás nunca llegaremos a comprender del todo cómo funcionamos.

Así que alerta, hay que ser muy cuidadosos al hacer análisis, y escépticos para no creerse esos estudios de Big Data que se popularizan cada vez más. No es tan fácil como saber usar un programa de estadística u hoja de cálculo, se requiere mucha habilidad y conocimientos estadísticos para estar mínimamente seguros que no se genera información basura.

Sólo eso, cuando veas gráficos bonitos de correlación, sé escéptico, en realidad con más datos disponibles, la probabilidad de encontrar correlaciones (pero sin relación alguna) es mayor.

Lo que se aprende, o debería, en la carrera de informática

28 jueves Mar 2013

Posted by gallir in ciencia, programación

≈ 46 comentarios

Etiquetas

docencia, programación, universidad

En mi apunte anterior «Lo que demanda el mercado…» critiqué la obstinación de algunas autoridades universitarias, especialmente las de la mía, en su posicionamiento extremamente conservadora contra el GNU/Linux… y cómo el tiempo les ha quitado la razón (yo diría que debería haberles avergonzado). A pesar de los dos enlaces que puse en la posdata, muchos interpretaron que pensaba que la universidad debe enseñar GNU/Linux porque tiene más salida laboral. Otros opinaron (sobre todo en Twitter) sobre lo poco que se aprende en la universidad de las últimas tecnologías [de moda].

Hace cinco años escribí un apunte muy largo sobre este tema: Sintonizar universidades y empresas, pero ¿qué debe saber un ingeniero? (y hay más, de gente más importante y valiosa que yo, como ¿Qué deberíamos enseñar a los nuevos desarrolladores? de Bjarne Stroustrup), ahora intentaré ser muy breve para contestar a esos dos temas.

Sigue leyendo →

El espejismo de las patentes como medidor de calidad de la investigación

24 domingo Mar 2013

Posted by gallir in ciencia, legales

≈ 9 comentarios

Etiquetas

investigación, patentes

Hoy leo en El País El archipiélago universitario, dice muchas cosas con la que estoy de acuerdo, pero comienza con la siguiente frase (con los números muy equivocados):

En 2010, el sistema universitario público español obtuvo 401 patentes. Robert Samuel Langer, un investigador químico del Massachusetts Institute of Technology (MIT), él solo, tiene 810, más del doble.

Desde hace varios años se insisten con estos argumentos, como si las patentes fuesen un medidor válido de la calidad de la investigación. En términos generales no lo es, y menos cuando se trata de medir investigación, la «I» de I+D.

Sigue leyendo →

Guía gráfica básica de fiabilidad de tendencias para periodistas y politólogos

21 jueves Mar 2013

Posted by gallir in ciencia, prensa

≈ Comentarios desactivados en Guía gráfica básica de fiabilidad de tendencias para periodistas y politólogos

Etiquetas

estadísticas, prensa, tendencias

Muchas veces os llegan gráficos de tendencias, que está subiendo o que está bajando, y no sabéis qué grado de fiabilidad tienen esas tendencias. Aquí dos ejemplos gráficos simples.

Es fiable esa tendencia

Scanned Document-1

Sigue leyendo →

Gordo de Navidad, e ignorancia numérica periodística

23 domingo Dic 2012

Posted by gallir in ciencia, medios

≈ 45 comentarios

Etiquetas

gordo de navidad, innumeracy, lotería

Actualización 18:00hs: El artículo de lainformacion.com ha sido modificado radicalmente, desde el titular hasta el URL, y con las probabilidades que indico aquí, pero sin indicar la rectificación, ni citar a este apunte. La captura del artículo original.

Cuando critico la manipulación y divulgación de «mala ciencia» en los medios, suelo mencionar a la pésima formación científica de las carreras de «periodismo», especialmente la inexistencia de asignaturas fundamentales para «explicar el mundo», como la estadística. Lo último se hace más evidente en cada sorteo del Gordo de Navidad.

Los juegos de azar son ejemplo típicos usados en estadística para enseñar y analizar probabilidades, por su simplicidad, reglas bien definidas e independencia de eventos. Así, es extremadamente fácil calcular cuál es la probabilidad de ganar el Gordo de Navidad: si son 100.000 números diferentes, y compras uno, la probabilidad es 1 entre 100.000. No hay más truco. Y esa misma regla se aplica a la serie completa, o a los décimos. Si compras dos números diferentes, entonces será 1 entre 50.000. Si compras 10 será 1 entre 10.000.

Fácil, ¿no?

Sigue leyendo →

¿Ciencias económicas?

14 sábado Jul 2012

Posted by gallir in ética, ciencia, política

≈ 38 comentarios

Etiquetas

ciencias económicas, pos modernismos

Perdonad por adelantado, con la que está cayendo y yo preocupado por nimiedades. Pero no me aguanto, y la pregunta del título tiene mucho que ver con la situación actual. Además, hace poco hice una crítica a los «licenciados en económicas», y alguien me dijo por Twitter que muy mal, que debería criticar a las personas, no a las generalidades [sic]. Tonterías aparte, la pregunta es ¿qué coño se estudia en la licenciatura/grado de económicas? ¿Ciencia?

Sigue leyendo →

Es la física, estúpido

26 miércoles Oct 2011

Posted by gallir in ciencia, energía

≈ 99 comentarios

Etiquetas

autonomía, coche eléctrico, nissan leaf

Hace poco más de un año, en plena «burbuja» del coche eléctrico, y debido al enésimo artículo «ingeniero inventa un coche eléctrico baratísimo en el patio de su casa y afirma que la industria no lo hace por presiones de las petroleras», se me ocurrió escribir un artículo para explicar los problemas del coche eléctrico (resumen: se necesita almacenar muchísima energía, la gasolina/diesel es muy eficiente en eso, las baterías no lo son).

Javier Costas de Motorpasión me respondió en Ricardo Galli opina sobre el VER y los coches eléctricos en general, y no con mucho acierto. Lo que generó que me dijeran de todo (charlatán, ignorante, vaya paliza le dieron, etc. etc.), en Menéame incluido. Volví a contestar, y con más datos y análisis en “Si dices una barbaridad demagógica como mínimo recibirás aplausos de una importante minoría”. Recibí muchas más críticas e insultos en la línea del anterior. Parecía yo el ignorante aguafiestas que no conocía el estado de la tecnología… un pobre ignorante charlatán, que opinaba sobre un tema que no tenía idea.

Estaba tranquilo, convencido que el tiempo me daría la razón. Sabía que no se puede mentir a todos durante todo el tiempo, y que en algún momento se iba a empezar a conocer la realidad: cuando se hiciesen pruebas independientes, y el público conociese los precios (que siguen por las nubes, a pesar de las subvenciones) y el rendimiento real.

Sigue leyendo →

← Entradas anteriores
Entradas recientes →

Comprar el libro

Principios y algoritmos de concurrencia

gallir@twitter

  • Para mí, lo mejor de Vangelis. Me marcó mucho y seguramente escuché cada canción centenares de veces open.spotify.com/artist/5gS1uXa… 17 hours ago
  • Serán sólo 2 o 12 ( youtu.be/tSQonjDo9Jk) twitter.com/elindepcom/sta… 1 day ago
  • Queremos ver los papers twitter.com/NuriaRita1/sta… 2 days ago
  • ¡El retorno! youtu.be/tVul_pwHWRk twitter.com/minipetite/sta… 2 days ago
Follow @gallir

RSS Notas recientes

  • Se ha producido un error; es probable que la fuente esté fuera de servicio. Vuelve a intentarlo más tarde.

Archivos

Comentarios recientes

PM en Cuidado con las «clever soluti…
Me matan si no traba… en Cuando el periodismo cede el c…
surco en Cuando el periodismo cede el c…
pancho pérez (@lonch… en Cuando el periodismo cede el c…
Fernando en Cuando el periodismo cede el c…
@beoxman en Cuando el periodismo cede el c…
gallir en Cuando el periodismo cede el c…
Jan Smite en Cuando el periodismo cede el c…
Alejandro en Cuando el periodismo cede el c…
Galletor en Cuando el periodismo cede el c…

Meta

  • Registro
  • Acceder
  • Feed de entradas
  • Feed de comentarios
  • WordPress.com

Licencia

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.

Crea un blog o un sitio web gratuitos con WordPress.com.

  • Seguir Siguiendo
    • Ricardo Galli, de software
    • Únete a 28.667 seguidores más
    • ¿Ya tienes una cuenta de WordPress.com? Accede ahora.
    • Ricardo Galli, de software
    • Personalizar
    • Seguir Siguiendo
    • Regístrate
    • Acceder
    • Denunciar este contenido
    • Ver sitio web en el Lector
    • Gestionar las suscripciones
    • Contraer esta barra
 

Cargando comentarios...