Posteado por: JuanFran | enero 8, 2010

Capítulo 1: Crear una aplicación en SWING.

Buenas,  vamos a ir aplicando conceptos y vamos a realizar una aplicación en Java (J2SE con SWING). Vamos a comenzar desde 0, paso a paso.

Yo voy a usar NETBEANS versión 6.5, están ya disponibles otras versiones más recientes en la web de NETBEANS, por si os interesa otra versión.

Bien, comencemos.

Primero, debemos crear un nuevo proyecto. Pulsamos en el menú File->New Proyect. Elegimos la carpeta de proyectos JAVA y el tipo de proyecto JAVA APLICATION.

Mi idea de este pequeño tutorial es de hacer un paint, pero con menos funcionalidades que el de Windows (en principio). Vamos a llamar al proyecto JavaPaint. También indicamos que nos cree una clase main en nuestro proyecto.

Una vez hecho esto, tenemos nuestro proyecto creado. En principio, la carpeta de proyecto se situa en la carpeta predeterminada de Netbeans, que se encuentra en “Mis documentos”.

Vamos a crearnos unos cuantos de paquetes en el proyecto, así tendremos nuestras clases y paneles ordenados (el orden en la programación es imprescindible). Me he creado un par de ellos, a uno le he llamado beans (que contendrá las clases) y al otro paneles (contendrá la parte visual del programa).

Lo siguiente, será crearnos nuestra ventana principal de la aplicación. Para ello, sobre el paquete paneles, pulsamos el botón derecho del ratón y seleccionamos la opción New->Other. Ahora, seleccionamos la carpeta Swing GUI Forms y seleccionamos el tipo de fichero JFrame Form. Yo he optado por el nombre de PantallaPrincipal para el frame principal de la aplicación.

Ya tenemos la ventana principal del programa, ahora, vamos a implementar en el main que se lance al arrancar la aplicación. De momento, no tendrá funcionalidad alguna, pero vamos a ir poco a poco.

Pulsando ejecutar (Run Main Proyect) observamos que nuestra ventana principal aparece ya ejecutandose.

En el próximo capítulo añadiremos una barra de menú, una barra de herramientas y la ventana de selección de carga de ficheros de imágenes.

Anuncios
Posteado por: JuanFran | enero 7, 2010

Interfaces en JAVA

Seguimos con el mini-curso de programación: hoy veremos un patrón de diseño nuevo, en este caso se trata de las interfaces.

Una interfaz en Java es una colección de declaraciones de métodos y contanstes. Así de sencillo y explicado a grosso modo. Nuestras interfaces no tendrán implementaciones ni nada, solo declararciones. Veamos un ejemplo:

Como se ve, se declaran los métodos sin implementarlos. Ahora, cada clase que deseemos que implemente esa interfaz, tenemos que indicarlo en la declaración de clase:

Como se observa, para implementar una interfaz basta con añadir a la declaración el término implements seguido de la clase interfaz y todos los métodos que ésta tiene e implementarlos (o no, según lo que el programador busque), pero deben de aparecer al menos en la declaración de la clase.

Las interfaces son muy útiles para funcionalidades comunes en distintas clases, por ejemplo, en la declaración de beans, la interfaz de acceso a datos con nuestra base de datos.

Posteado por: JuanFran | enero 5, 2010

Clases heredadas…. ejemplo con animalitos!

Título más rocambolesco no podría ser. Aprovechando lo bien que esta diseñado el lenguaje JAVA, voy a dar una mini-clase de eso que se suele enseñar en asignaturas claves de programación de las titulaciones universitarias, las cuales muchos alumnos dicen que no sirven pa ná….

Como todos sabréis, JAVA es un lenguaje enfocado a la POO (un teletubbie, pero para nosotroso será la programación orientada a objetos, y a partir de ahora, POO, que lo otro es más largo) por lo que me va a ser muy útil para dar las explicaciones sobre los temas que vamos a abarcar con este lenguaje. Se podría hacer también con C++, pero este  me lo reservo para cuando comienze el curso avanzado y os muestre algo de QT 😆

Voy a obviar un poco la teoría, y partiré de la base de que ustedes ya sabeis los principios básicos sobre la POO, el concepto de clase y objeto, atributos o miembros, etc etc. Vamos entonces con la HERENCIA (si voy rápido paradme xD).

Con la explicación burra y sencilla, se podría decir que yo soy un humano (aún por demostrar). Al ser un humano, esto me engloba dentro del grupo de los animales (aquí ya es más demostrable), y más concretamente, dentro de los mamíferos. ¿Qué queremos demostrar? pués que dentro del grupo de los animales, están los mamíferos, y dentro de los mamíferos, los seres humanos. Los animales, no existen en la realidad como entidad, o sea, no son instanciables, por lo que diremos que son una clase abstracta. Los animales también podemos deducir que tienen características y propiedades comunes a todos los animales, por lo que se define la clase animales como una de las clases a heredar a las demás subclases de animales (en este caso, mamíferos). Funcionalidades como comer, descansar, desplazarse, etc las tendran todos los animales, pero cada animal lo hace a su manera. Esto nos dice que cada funcionalidad será propia de cada animal.

Sigámos profundizando. Siguiendo la cadena, tenemos que los seres humanos somos mamíferos… nuestra siguiente clase será esa misma: mamíferos.

Mamíferos hereda directamente de  la clase animal, así que contendrá las mismas propiedades que dicha clase. Como los mamíferos tampoco son instanciables (en la realidad no existen mamíferos como tales), también lo definiremos como clase abstracta:

Las propiedades de animal, aunque no sean visibles en la clase mamífero, están ahí.

La última clase a implementar , sería la de ser humano. Le llamaremos clase Persona. Como una persona si es instanciable (por ejemplo, Manuel Sillín Ventanuco -nombre para evitar casualidades con personas reales- ) es una persona física, existe como tal. Decímos que Manuel Sillín Ventanuco (clase persona) es una instancia de la clase Persona. Implementando quedaría algo así:

Vemos que Persona hereda de la clase Mamiferos, y esta hereda de la clase Animal. La conclusión que se obtiene es que Persona tiene todas las caracteristicas de la clase Animal y Mamifero. Como Persona es una clase final, también podemos decir que Persona debe implementar todos los métodos abstractos de las clases superiores. Los métodos heredados de las clases superiores se denotan con el @Override delante de cada función. Notar que no podemos acceder a los atributos como numeroPelos de la clase Mamifero o edad de la clase Animal. Se debe a que hemos definido los atributos como privados. Si quisieramos acceder a dichos atributos desde persona se recomienda que se declaren como protected en vez de privados, o dejarlos privados e implementar métodos no abstractos en las clases padres para acceder a dicho atributo desde Persona.

Se puede observar que Persona implementa los métodos de las clases padre y también implementa los suyos propios.

Veamos en código un pequeño ejemplo con todo esto que se ha explicado:

Muy bien, pues esta ha sido la lección rápida pero efectiva sobre la herencia de clases, el próximo post seguramente lo haga sobre interfaces de clases, que molan mucho y además son también muy útiles. Cuidense!

Posteado por: JuanFran | enero 4, 2010

Vuelta…. un poco de metodología: SINGLETON

Muy buenas,

volvemos al blog, y vamos bien, a post por año….  hoy voy a comentar un patrón de diseño bastante eficaz: singleton.

El patrón de diseño singleton (o para los de aquí, instancia única) trata de mantener un acceso único a un objeto que solo tendrá una instancia, es decir, es un objeto global y único en nuestra aplicación.

¿Pará que es útil este patrón de diseño? Pués tiene muchas utilidades… por ejemplo, para el acceso a recursos únicos o para tener “a mano” unos datos o funcionalidades para todos los objetos. Para ello, se debe garantizar que el construcctor de nuestra clase singleton sea privada, de esa forma nos aseguramos que solo pueda haber una instancia de la clase:

public class Singleton {
private static Singleton miObjeto = null;
private Singleton() {
}
}

Ahora, solo nos queda el acceso restringido a nuestro objeto. Para ello, solo añadir a la clase un método de recogida de la instancia:

public class Singleton {
private static Singleton miObjeto = null;
private Singleton() {
}
public static Singleton getInstancia() {
if (miObjeto == null) {
miObjeto = new Singleton();
}
return miObjeto;
}
}

Con esto ya tenemos el patrón implementado con lo básico, ahora, solo añadir los métodos que se quieran para hacerlo totalmente funcional.

Para llamar desde nuestro código:

Singleton objetoSingleton = Singleton.getInstancia();

Veamos un pequeño ejemplo. Vamos a tener una clase que se encarga de tener almacenana la conexión con una base de datos MySQL. Para ello, usaremos el patrón Singleton para el acceso a dicha conexión.

public class ConexionSingleton {
private static ConexionSingleton instancia = null;
private java.sql.Connection conexion = null;
private ConexionSingleton() {
}
public static ConexionSingleton getInstancia() {
if (instancia == null) {
instancia = new ConexionSingleton();
}
return instancia;
}
/* devuelve true si se ha creado correctamente */
public boolean crearConexion() {
try {
Class.forName(“com.mysql.jdbc.Driver”);
conexion = DriverManager.getConnection(“urlBaseDatos”, “usuarioBaseDatos”, “passwordBaseDatos”);
} catch (Exception e) {
return false;
}
return true;
}
public java.sql.Connection getConexion() {
if (conexion == null) {
crearConexion();
}
return conexion;
}
}

Llamando desde nuestro código principal:

ConexionSingleton.getInstancia().crearConexion();

java.sql.Connection conexion = ConexionSingleton.getInstancia().getConexion();

Espero que os sea útil. Saludos!

PD: a ver si aprendo a manejar mejor el blog, así no me sale el código tan feote como me ha salido :mrgreen:

Posteado por: JuanFran | febrero 19, 2008

Spiky Harold, Firebird 1986

Hola a tod@s!

Hoy voy a hablaros un poquito de un juego que conocí hace muy poco, pero la verdad que me ha enganchado bastante. Se trata del Spiky Harlod (1986 Firebird Software).

spikyharold.jpg

El juego en sí, es bastante simplón, trata de recojer la comida que necesita el bicho en cuestión para pasar el duro invierno, eso sí, tendra que esquivar todo tipo de bichos, desde alegres pollitos de colores (como el de la primera pantalla) hasta abejas, fantasmas y todo tipo de bicho viviente típicos de estos tipos de juegos.

spiky_harold_main.gif
Que monura de pollo

El juego es, como todos los de la época, la ostia de dificil. Hay que calcular los saltos exactos, estudiar los movimientos de los enemigos perfectamente para no llevarnos sorpresas…. vamos, que si pusieramos a un boina verde en vez de un erizo de personaje tampoco desencajaba.

El juego es bastante entretenido, lo recomiendo al 100% a todos los amantes de la máquina de los 8 bits, ya que os hará pasar buenos ratos y también sacaros un poco de quicio 😛

Os dejo un mapa del juego que me he agenciado por ahí, para que sepais por donde debeis moveros:

spikyharold-map.gif

Vaya mapa más chiquitín!

Bueno, pues con esto, hasta la próxima entrada (son cortas pero intensas ehhh!) 😉

 

Posteado por: JuanFran | noviembre 30, 2007

And now….

Grande fue el dia en que descubri el “nudge, nudge!” o el “baile de la sardina”…. grande fue el dia en que vi con 22 años “Los Caballeros de la mesa cuadrada”…

montypythonvx3.jpg

Grandes, esa es la palabra. Sin duda alguna, el mejor grupo cómico que jamás ha visto nacer el mundo. Grandes noches en la que me he cargado hasta 10 episodios seguidos del circo ambulante de estos geniales humoristas.
Y es que no puedo dejar de escribir la palabra “grandes”, porque como ya he comentado, es lo único que me sale cuando hablo de este particular grupo.

20060928-monty_python.jpg

Genialidad, interpretación, crítica y sobre todo, absurdez… todo ello mezclado y obtenemos a Monty Python.

Cleese, Idle, Palin, el desaparecido Chapman, Jones y el polifacético Guilliam, conseguieron alejar el típico humor a innovar con un humor absurdo. Suponemos que no era su intención. Ellos son así. E hicieron las cosas como quisieron.

000320780.jpg

Ahora hablando con criterio sobre sus obras, destacamos lo siguiente:

– And Now for Something Completely Different (1971) : Esta película, destaca por su montón de sketchs mezclados en una película de larga duración. Las he visto en v.O. con subtítulos y doblada al castellano. Mi recomendación es siempre verlas en V.O. ya que dobladas pierde mucha esencia, sobre todo las voces chillonas que ponen cuando se disfrazan de mujeres, etc. El film esta verdaderamente entretenido, os hará reir a carcajadas más de una vez 🙂

and_now.jpg
– Monty Python and the Holy Grail (1975): Peliculón que tiene sus más fervientes admiradores y retractores. Si no te gusta esta película, es que realmente no te gustan los Monty Python. 100% absurda al más puro estilo Monty. A mi gusto, podría decirse que esta por encima de la vida de Brian.

b00005o3vc01_sclzzzzzzz_.jpg

– Life of Brian (1979) : Una verdadera obra maestra. No conozco aún nadie que no le haya gustado la película. Aún así, a priori, es el film más valorado en general del grupo. Yo me quedo con the Holy grail.
life_of_brian_03.jpg

– The Meaning of Life (1983): Otra gran producción del grupo. Película en la que se divide cada etapa por la que pasa el ser humano (logicamente. al 100% absurdez).

monty_python_meaning_of_life.jpg

También hay peliculas en las que no intervienen todos los componentes, a bote pronto destaco las siguientes:

– Jabberwocky (1977) : Esta es un verdadero truño
– Time Bandits (1981) : bastante divertida
– A Fish Called Wanda (1988) : Genial
– Erik the Viking (1989) : Me aburrió bastante…
– Splitting Heirs (1993) : esta pelicula no llego a cuajar… y mira que me encanta Rick Moranis!
– Fierce Creatures (1997) : Esta muy bien, pero prefiero “un pez llamado Wanda” (la gente la toma como una continuación a está pelicula, pero no tienen nada que ver, solo el reparto 🙂 )

Aquí doy datos “más técnicos” sobre cada componente del grupo, para indagar un pelín más :

Biografia de John Cleese : http://www.lahiguera.net/cinemania/actores/john_cleese/biografia.php

Terry Guilliam : http://www.alohacriticon.com/elcriticon/article2193.html

Eric Idle : http://es.wikipedia.org/wiki/Eric_Idle

Terry Jones : http://es.wikipedia.org/wiki/Terry_Jones

Graham Chapman : http://es.wikipedia.org/wiki/Graham_Chapman

Michael Palin: http://es.wikipedia.org/wiki/Michael_Palin

Y como colofón, una carta escrita de Terry Jones al señor Bush (aunque creo que el animalito no la pudo leer, cosas del analfabetismo….) :

Estoy entusiasmado con la última razón que da George Bush para bombardear Iraq: se le agota la paciencia. ¡A mí me pasa lo mismo! Llevo un tiempo bastante cabreado con el Sr. Johnson, que vive dos puertas más abajo. Bueno: con él y con el Sr. Patel, que regenta la tienda de comida naturista. Los dos me miran mal, y estoy seguro de que el Sr. Johnson planea algo horrible contra mí, aunque aún no he podido descubrir el qué.

He estado husmeando su casa para ver qué pretende, pero tiene todo bien escondido. Así es de taimado. En cuanto a Patel, no me pregunten cómo lo sé, el caso es que sé de buena tinta- que en realidad es un asesino en serie. He llenado la calle de panfletos explicando a la gente que si no actuamos primero, nos irá liquidando uno a uno. Algunos de mis vecinos dicen que si tengo pruebas, que vaya a la Policía. Qué ridiculez. La Policía diría que necesitan evidencia de un crimen del que acusar a mis vecinos. Saldrían con interminables sutilezas y objeciones sobre los pros y los contras de un ataque preventivo, y mientras tanto, Jonson estaría finalizando sus planes para cometer actos terribles contra mi persona, mientras Patel estaría matando gente en secreto.

Ya que soy el único de la calle con un arsenal decente de armas automáticas, me doy cuenta de que es cosa mía mantener la paz. Pero hasta hace poco ha sido algo difícil hacerlo. Ahora, sin embargo, George W. Bush ha dejado claro que todo lo que necesito es que se me agote la paciencia, ¡y ya puedo tirar hacia delante y hacer lo que quiera! Y reconozcámoslo, la política cuidadosamente razonada de Bush con respecto a Iraq es la única manera de conseguir la paz y la seguridad internacionales. La única manera segura de parar a los terroristas fundamentalistas suicidas que amenazan a EE.UU. y al Reino Unido es bombardear algunos países musulmanes que nunca nos han amenazado. ¡Por eso quiero volar el garaje de Johnson y matar a su mujer y sus hijos! ¡Ataquemos primero! Eso le dará una lección. Así nos dejará en paz y dejará de mirarme de esa manera tan absolutamente inaceptable.

El Sr. Bush deja claro que todo lo que él necesita saber antes de bombardear Iraq es que Saddam es un hombre desagradable de verdad y que tiene armas de destrucción masiva aunque nadie pueda encontrarlas-. Estoy seguro de que tengo la misma justificación para matar a la esposa y a los hijos de Johnson, que tiene Bush para bombardear Iraq. El deseo a largo plazo del Sr. Bush es hacer del mundo un lugar más seguro, eliminando a los estados peligrosos y al terrorismo. Una intención a largo plazo bien inteligente, porque, ¿cómo diablos se sabe cuándo se ha acabado? ¿Cómo sabrá Bush cuándo ha acabado con todos los terroristas? ¿Cuando todos los terroristas hayan muerto? Pero un terrorista sólo lo es una vez que ha cometido un acto de terror. ¿Qué pasa con los futuros terroristas? Ésos son los que realmente hay que eliminar, porque la mayor parte de los terroristas conocidos, como son suicidas, se eliminan ellos solos.

¿Será acaso que el Sr. Bush necesita acabar con todos los que podrían, quizá, ser futuros terroristas? ¿A ver si es que no puede estar seguro de lograr su objetivo hasta que cada fundamentalista islámico esté muerto?

Pero resulta que algunos musulmanes moderados pueden convertirse en fundamentalistas. Tal vez lo único seguro que quepa hacer, según Bush, sea eliminar a todos los musulmanes. Lo mismo pasa en mi calle. Johnson y Patel son sólo la punta del iceberg. Hay docenas de personas en la calle a las que no gusto y que lo digo con el corazón- me miran muy mal. Nadie estará seguro hasta que haya acabado con todos. Mi mujer me dice que a lo mejor estoy yendo demasiado lejos, pero yo le digo que lo único que hago es usar la misma lógica que el Presidente de los Estados Unidos. Con eso le callo la boca. Igual que le ocurre al Sr. Bush, a mí se me ha acabado la paciencia, y si ésa es razón suficiente para el Presidente, también lo es para mí. Le daré a la calle entera dos semanas no, diez días- para que salgan a la luz y entreguen a todos los alienígenas y piratas interplanetarios, a los forajidos galácticos y a los cerebros terroristas interestelares, y si no los entregan de buena gana y dicen gracias, bombardearé la calle entera. Tan sensato es esto como lo que se propone George W. Bush.

Y al contrario de lo que él pretende, mi política sólo destruirá una calle

Monty Python a Bush

Publicada en el “London Observer” el Domingo, 26 de enero de 2003.

Posteado por: JuanFran | noviembre 15, 2007

Spherical, Rainbow Arts (1989)

Buenas a tod@s! hoy voy a hablar de uno de los juegos que mas me han entretenido… se trata ni más ni menos del “Spherical” (ZX Spectrum).

spherical.jpg

El juego fué creado por Rainbow Arts en 1989, de las cuales vieron la luz las versiones para Amiga, Amstrad CPC, Atari ST y Commodore 64.

El juego trata de un brujo, que debe encaminar una esfera a un punto indicado de la pantalla. Para ello, nuestro personaje tiene los poderes mágicos de crear y destruir piedras para interferir en el camino de dicha esfera, la cuál comienza a moverse tras un tiempo determinado al iniciar cada nivel.

showscreencgi.gif

Estamos ante un juego de estrategia y casi de plataformas, ya que además de tener que realizar una estrategia para encaminar la esfera a su lugar hay que esquivar a malos malosos que merodean por la pantalla. Nuestra única arma en el juego, alicatar la pantalla con piedras para “esquivar” a los muchisimos enemigos que aparecen.

Como ayudas en el juego (que por supuesto las necesitamos porque para nada es un juego fácil) podemos recojer unos objetos que apareceran en diversas pantallas. Recuerdo que se podían recojer una pócima que nos proporcionaba más energía, otro objeto nos daba una bola protectora que se encargaba de eliminar a todos los enemigos de la pantalla, una especie de copa nos trasladaba a una pantalla especial, etc. Todos los elementos para que el juego no caiga en lo repetitivo y aburrido.

Informandome por internet, he leido que el juego tenía ¡más de 200 niveles!…. yo solo me llegaba al nivel 12, cosa no de extrañar, ya que podría achacarlo a mi corta edad, a la dificultad de los juegos de esa época, etc…. bueno, el otro dia jugue y no pasé del nivel11, así que o una de dos, o soy un paquete jugando o el juego es bastante complejo como para llegar al nivel 200. Juzguen ustedes 😛

La portada del juego, para mi gusto, excepcional. Se echaba de menos una pantalla de carga del juego, ya que de pantalla de carga nos mostraba la clásica “ayuda contra la drogadicción” que creo que poco ha servido el mensaje…

showscreen2cgi.gif

Sin duda, un gran juego del estilo del Solomon’s key. En mente tengo hacer un juego de este estilo para Spectrum una vez que aprenda a manejar correctamente el Z88DK, que esperemos que sea pronto! 😉

Y sin nada más, darle un saludo a mis compañeros de CEZ, en especial a Na_th_an, Anjuel, Zemman y Benway, por aguantarme, tanto como presencia física como digital como por sus ayudas en este maravilloso mundo retro 🙂

Hasta la próxima!

Enlace del juego para jugar online : http://spectrum.astalaweb.net/Jx-Speccy/Simulador.asp?juego=SPHERICA

Descarga desde el WOS : ftp://ftp.worldofspectrum.org/pub/sinclair/games/s/Spherical(ErbeSoftwareS.A.).tap.zip

Posteado por: JuanFran | noviembre 14, 2007

Bienvenid@….

Muy buenas a tod@s! Bienvenidos a mi blog personal. En el relatare los grupos, discos, juegos… que han marcado mi vida y con los que he podido disfrutar… Sin nada más que decir, espero que al menos os divierta leer el blog y podais descubrir cosas nuevas o rememorar las ya conocidas.

Hoy para comenzar, vamos a hablar de unos de mis grupos favoritos, ellos son Koma.

No voy a contar la biografía del grupo, me resulta un rollo bastante largo como para comentar que cuatro notas se juntan para tocar y esas cosas, aparte que mucha gente no le gusta leer estas cosas porque a veces carecen de interés. Sin embargo, vamos a comentar lo que para mi resultan sin duda alguna algunos de los discos reseña de la escena musical a la que representan.

Comenzamos el blog comentando el disco que lleva por nombre el mismo que el nombre del grupo “Koma” (1996).

Koma (1996)

En el cabe destacar un sonido increible para ser el primer disco de la banda, con himnos que serán recordado. Los cortes metálicos, junto con una bateria con un doble pedal demoledor, es sin duda, una buena razón para que más de uno se parta el cuello de tanto moverlo en un directo de la banda. Canciones como “Tio Sam”, “Aquí huele como que han fumao”, “Caer” etc nos traen unos sonidos que nos recuerda a veces a temas de Pantera, pero sin llegar a ser ni por asomo una copía de la banda de Texas. A ello se une unas letras bastantes ácidas e incluso cachondas, pero nunca cayendo en lo malsonante ni en la vulgaridad. El vocalista del grupo (Brigi) tiene una voz bastante peculiar. Jamás fui aferrimo de voces roncas y embrutecidas, pero este hombre le sabe dar el toque que diferencia a un tio poniendo voz ronca y embrutecida con uno que pone voz ronca, embrutecida y encima se le entiende lo que canta, que normalmente en esta música es dificil. Un 10 para él.

Si algo puedo decir “malo” de este disco, es sin duda algunos de los “solos” de guitarra en algunos temas… llegan al punto de ser chirriantes y a veces poco coherentes con la base de la canción, pero aún así,  siguen estando chulos y dandole un toque especial y genuino a la banda.

El SetList del disco:

01. Tío Sam
02. Caer
03. A la mierda
04. Malas Caras
05. Milagro
06. El pobre
07. Aquí huele como que han fumao
08. Como les jode
09. Las Cruces
10. Quieras o no quieras
11. 2, 4, 1
12. Las bragas

Un enlace a su página web : http://www.koma-grupo.com

Y bueno, por hoy esta bien, para ser mi primer blog creo que he escrito bastante jeje. Saludos a todos y mañana hablaremos un poco de retroinformatica 😉

Categorías