04 septiembre 2023

Instalando Python

Empezaré a escribir un poco sobre Python, un lenguaje de alto nivel que se ha vuelto sumamente popular en los últimos años. Pero antes de empezar, es necesario tener las herramientas necesarias para poder crear y ejecutar programas hechas en este lenguaje.

Voy a mostrar una configuración mínima, que solo tenga lo necesario e indispensable para embarcar esta aventura. Así que solo necesitamos dos cosas: un editor de texto y el compilador/intérprete de Python.

Para editor de texto, podrías usar hasta el bloc de notas que viene en Windows, pero hay cosas mejores. Yo generalmente uso Notepad++ pero mejor decidí usar otro editor, llamado Brackets porque funciona igual en Windows, Mac y Linux. Además, está muy padre.

Instalar Python

Primero voy a instalar el intérprete de Python. Para eso, primero hay que visitar la página www.python.org como se ve en la siguiente imagen:

De allí, pon tu mouse sobre el botón Downloads:

Debería reconocer tu sistema operativo y sugerir el que te corresponde. Como yo estoy haciendo todo sobre Windows, doy clic sobre el botón gris que dice Python 3.11.5 (que es la versión actual del intérprete de Python cuando escribí esto. Tal vez aparezca una versión más reciente). Descarga el archivo y ejecútalo. Debería aparecer una ventana como ésta:

Si deseas instalar con las opciones default (que generalmente está muy bien), dale clic sobre Install Now. Si quieres cambiar la carpeta donde se va a instalar o alguna otra opción, haz clic sobre Customize Installation y en las ventanas siguientes seleccionas las opciones personalizadas. Cuando termines, te aparece la siguiente ventana. Presiona el botón Close para terminar.


¡Felicidades! Ya instalaste Python. ahora instalemos Brackets.

Instalar Brackets

Para instalar Brackets, ve a la página brackets.io. Y te lleva a esta página:


Y presiona el botón que dice Download. Guarda el archivo y ejecútalo. Cuando lo corres, aparece esta ventana:


Dile que estás de acuerdo y presiona el botón Siguiente. En la siguiente ventana, selecciona Típico (si quieres instalarlo de forma default) o Personalizada (hay un par de opciones que puedes cambiar).


Espera un momento y cuando termines, aparece la ventana que te permite abrir Brackets o Finalizar. Sé feliz y haz lo que quieras porque ya tienes todo listo para trabajar con Python. ¡Felicidades!


En un futuro cercano seguiré escribiendo sobre Python para que sigas por aquí . ¡Saludos!

13 mayo 2023

IA 360: Desentrañando los misterios de la Inteligencia Artificial

¿Alguna vez te has preguntado cómo funcionan los asistentes virtuales como Siri o Alexa, o cómo las redes sociales saben exactamente qué anuncios mostrarte? ¿Sabes qué puedes hacer con ChatGPT, Midjourney, DAL-E, etc.? Todo esto es posible gracias a la inteligencia artificial.

En mi conferencia, exploraremos cómo funciona la inteligencia artificial y discutiremos algunos de los diferentes usos de la inteligencia artificial en nuestra sociedad, desde la medicina hasta la industria automotriz y más allá.

Pero no todo son beneficios. Hablaremos de las implicaciones que tiene la inteligencia artificial en el mundo actual y futuro, incluyendo cómo afecta el empleo y la privacidad.

Así que únete a mí en esta emocionante conferencia para descubrir cómo la inteligencia artificial está cambiando el mundo a nuestro alrededor y cómo podemos prepararnos para un futuro impulsado por la IA. ¡Te espero allí!


Si quieres ver el programa completo de la Semana Cultural 2023, visita esta liga.


27 abril 2023

Música en Android Studio

Es posible/probable que quieras que tu app pueda tocar sonido, ya sea como múscia de fondo, como un efecto cuando algo sucede, etc. Aquí te voy a describir cómo hacerlo y te presento una app de ejemplo que hace aue una canción empiece a tocar (y que lo que lo puedas parar).

En primer lugar, vamos a usar una clase que se encarga de todo ello, es el MediaPlayer. Estos son los pasos que debes seguir:

Primero, tienes que crear una carpeta de recursos (dentro de la carpeta res) llamada raw. Para hacer esto, haz clic derecho sobre la carpeta res y luego selecciona New > Folder > Raw Resources File como se ve en la siguiente imagen:


Una vez que tengas la carpeta, copia un archivo MP3 allí. Para más fácil, lo puedes arrastrar desde tu administrador de archivos.

Nota: el archivo MP3 debe tener el nombre en minúsculas, sin espacios ni dígitos numéricos ni caracteres "raros". Renómbralo si hace falta.

Después, en tu archivo Java, declara un objeto de la clase MediaPlayer así:
private MediaPlayer mediaPlayer;

Una vez creado el objeto, tienes que inicializarlo con el método onCreate de la siguiente manera:
mediaPlayer = MediaPlayer.create(this, R.raw.tu_archivo_mp3);

No te preocupes por el nombre del recurso: en cuanto escribas R.raw. Android Studio te muestra las opciones y una la vas a reconocer como tu rola.

Después de esto, usa el método que necesites:
  • start() inicia la reproducción de la canción
  • stop() detiene reproducción de la canción
  • release() libera todos los recursos usados por el MediaPlayer (es bueno usar este al final, cuando ya no vas a usar la rola)
  • setLooping(true) sirve para decir que la canción se repita al terminar. Solo ten en cuenta que si es una canción que dura mucho, tal vez quieras usar un Service en lugar de un Activity para que se reproduzca para que se siga escuchando aun cuando el usuario navega a otras partes de la app o bloquea la pantalla.
Para demostrar esto, voy a mostrar el código para hacer una app sencilla que tiene dos botones: cuando presionas el de Iniciar, muestra cuánto dura la canción y lo empieza a tocar. Si das click en el botón de Parar, deja de tocar la canción. Para este ejemplo, usé la canción de Shakira y Bizzarap porque la traía pegada el día que hice el ejemplo.

La interfaz se ve así:


Éste es el código de la interfaz:

Y este es el código en la actividad en Java:

Espero que les haya sido útil y ya puedan integrar música a sus apps. ¡Hasta la próxima!

21 enero 2023

Condiciones en C: el Gato 2.0

Hace años publiqué una explicación sobre condiciones en C. En aquel tiempo lo hice todo en audio porque tenía un alumno con debilidad visual (casi ciego). Pero el servidor donde subí el audio cerró sin decir agua va y el artículo no sirve de mucho: puedes ver parte de la explicación y el código, pero se pierde mucho. Asi que, como sigo hablando de C con mis alumnos (y seguiré haciéndolo), es hora de volver a explicarlo.

Uno de los pilares de la programación es hacer que el programa tome decisiones.  En otro ámbito, eso es lo que los papás esperamos de nuestros hijos: de que algún día puedan tomar las decisiones correctas.  Pero al tratar con la computadora es más fácil: nunca va a renegar ni a ignorar lo que le diga (como lo suelen hacer mis hijas) porque siempre va a hacer lo que le indique y siempre lo hará igual.  Claro que mis niñas pueden hacer millones de cosas que mi computadora no, y las amo millones de veces más que mi compu, pero esa es harina de otro costal.

Volviendo al mundo de la programación, casi todos los lenguajes tienen la instrucción IF que nos permite definir las instrucciones que se van a ejecutar en caso que se cumpla alguna condición.  C no es la excepción y en el siguiente video te voy a explicar un programa que usa condiciones IF en C (o C++ que para este caso, da lo mismo).

En el video explico un programa ya hecho, un ejemplo que usa IFs. Si no tienes idea de qué es el IF, te sugiero revisar esta página de Nacho Cabanes que lo explica. Luego regresas a este video.

Aquí está el video:

Y aquí está el código del programa:

17 enero 2023

C# y números al azar

Hace tiempo escribí como se pueden generar números aleatorios en C++ (que igual aplica para C). Es sencillo y funcional. Sin embargo, en C# tenemos algo que todavía nos simplifica más la vida: la clase Random. Antes de continuar, te recomiendo leer el artículo anterior y cuando hable de código, regresen aquí.

En el otro post se usa el srand((unsigned)time(0)) para incializar el generador de números pseudoaleatorios con el valor del reloj del sistema. Al usar la clase Random, el constructor hace lo mismo. Asi que cuando iniciemos nuestro programa, se crea el objeto de la siguiente manera:

Random x = new Random();

Con eso se crea un objeto (e inicializa el generador de números usando el valor del reloj del sistema). 

Tal ve te preguntes, ¿por qué se tiene que inicializar el generador de números aleatorios y porque es conveninte hacerlo con el reloj del sistema? Si no te lo preguntas y aceptas lo que te dicen sin cuestionar, sáltate los siguientes párrafos hasta que veas código.

Básicamente es porque no existe una manera de generar números al azar porque los cerebros humanos lo pueden hacer, pero no existe un procedimiento, un proceso para hacerlo. Por ejemplo piensa ahorita en un número al azar entre 1 y 10. ¿Por qué elegiste ese número? ¿Que proceso seguiste para determinar ese número? Simplemente se te ocurrió. Pero la computadora necesita que se le diga exactamente cómo hacer algo.

Asi que podemos agradecer a alguna deidad de las matemáticas* que se le ocurrió una ecuación que genera secuencias de números que parecen aleatorios (por eso los llamamos pseudoaleatorios). Pero el problema es que cada vez que lo usas, genera la misma serie. Pero a este señor se le ocurrió ponerle a esta ecuación un valor inicial y la secuencia depende de ese número. Por ejemplo, si lo inicializamos con 5, nos dará una secuencia de números. Si lo inicializamos con 6 nos da otra, etc. Por eso, si lo inicializamos con el reloj del sistema, cada vez que lo usemos nos dará una secuencia diferente.

Pero regresando a lo que estábamos hablando sobre el código, después de crear un objeto Random, generamos números enteros usando el método Next. Me voy a concentrar en números enteros, pero también puedes usar NextDouble para generar números aleatorios de tipo float/double que van entre 0 y 0.99999999, NextBytes para llenar un arreglos con bytes aleatorios, etc.

Asi que, siguiente con el objeto x que hice antes en el ejemplo de crear un objeto de tipo Random, tenemos estas variantes del Next:

  • x.Next() - devuelve un número entero aleatorio positivo.
  • x.Next(10) - devuelve un número entero aleatorio entre 0 y 9.
  • x.Next(1,10) - devuelve un número entero aleatorio entre 1 y 9.

Si quieres saber todo sobre el Random, lee este artículo de Microsoft.

Para ejemplificar el uso, hice esta sencilla app que prueba los tres tipos de Next. Tiene un Label donde muestra el número aleatorio, en un Groupbox hay 3 RadioButtons para seleccionar los tres tipos de Next y Textboxes para poner los números límites, si se seleccionan esas opciones. La app se ve como lo que puesta esta imagen y creo que de ver la interfaz, te puedes dar cuenta de cómo funciona:


El código del Form1.cs (que hace todo) lo tienes aquí a continuación. Lo "especial" sucede en estas líneas:

  • 18 - Declaro el objeto Random (se llama azar)
  • 31 al 71 - El método btnGeneraAzar_Click que se ejecuta cuando presionan el botón y usa los 3 tipos de Next para generar números al azar. Como dice allí, recuerda que int.Parse sirve para convertir un String (lo que está en una caja de texto en mi caso) a int (valor que necesita el Next).

Si desea descargar el proyecto comprimido en formato 7Zip, haz click aquí.

* Gracias al artículo A History of the Random Number Generator, descubrí que la deidad de matemáticas que nos ayudó fue John von Neumann y lo hizo 1946

05 junio 2022

Android Studio: aprovechando el almacenamiento interno

Muchas veces en nuestra app queremos guardar los datos que tenemos en la memoria para que estén disponibles cuando abramos la app en otra ocasión.

Para hacerlo, según los desarrolladores de Android, tenemos 4 opciones:

  • Almacenamiento específico de la app: Almacena archivos diseñados solo para tu app, ya sea en directorios dedicados dentro de un volumen de almacenamiento interno o en directorios dedicados diferentes dentro del almacenamiento externo. Usa los directorios del almacenamiento interno para guardar información sensible a la que otras apps no deberían acceder. El almacenamiento externo es cuando quieres hacer un archivo que el usuario después puede usar de forma independiente a tu programa.
  • Almacenamiento compartido: Almacena archivos que tu app pretenda compartir con otras apps, incluidos archivos multimedia, documentos y otros.
  • Preferencias: Almacena datos primitivos y privados en pares clave-valor. Muy útil para guardar datos sobre la configuración, pero se puede usar para otras cosas también.
  • Bases de datos: Almacena datos estructurados en una base de datos privada.
Para mayor explicación y una tabla comparativa de todos estos tipos, les sugiero que visiten esta liga. En este post, voy a explicar como usar la primera opción, y de forma más particular, solo el almacenamiento interno.

Según Google (que se puede ver en esta liga), nos dice que son seguros porque en la ubicación donde los guarda en tu teléfono, como está encriptado, no se pueden accesar de otras apps. También hay que considerar que cuando el usuario desinstala tu app, estos archivos se borran (generalmente eso es lo que quieres para que no termines como con Windows que al desinstalar algo deja como mil archivos en tu compu).

Para ejemplificar como se puede almacenar y leer algo del almacenamiento interno, te lo muestro en este video donde explico cómo hice una app que guarda datos de un arreglo de objetos a un archivo, luego los lee. Abajo comparto el código de la app.

En este primer video muestro la interfaz de la app y se ve como funciona:


Y en éste video muestro cómo funciona la app, el código en Java que hace que todo funcione.


Éste es el archivo XML de la interfaz de la app. Yo lo hice con las herramientas visuales, pero aquí se pueden ver todas las propiedades que le asigné a cada control:

Y aquí está el código Java de la app que fue explicada en el video:

Finalmente está el código de la clase Datos, que es con la que se llena el ArrayList y se escribe al archivo:

Ligas de interés:


27 abril 2022

Los videojuegos te pueden hacer una mejor persona

En unas semanas estaré dando esta conferencia en la Univa. La cita es el jueves 26 de Mayo a las 12 horas en el SUM.


Si tienes tiempo, por allí te espero.


18 enero 2022

Assets gratuito para videojuegos

Para quienes no somos diseñadores, nos cuesta un poco de trabajo crear recursos para divertirnos haciendo videojuegos. Pero algo padre de la era de internet es que hay muchos sitios donde podemos descargar de forma legal assets (imágenes, sonidos, etc) de forma gratuita, aunque muchos de ellos también hay recursos por los que se pagan.

A continuación escribo una lista de sitios de este tipo que te pueden ser de utilidad.

  • Unity Asset Store. Éste solo funciona para Unity, pero tiene muchísimas cosas. La liga es para recursos gratuitos, pero hay también de paga que están increíbles.
  • OpenGameArt. Aquí puedes encontrar un archivo enorme de recursos gratuitos.
  • Kenney. Aquí tiene muchos recursos gratuitos y unos paquetes de paga.
  • Itch.io. Es un sitio para compartir juegos (puedes subir aquí tu juego cuando lo termines para compartirlo con la comunidad), pero también tiene una sección de recursos que puedes usar.
  • GameArt2D. Este sitio tiene muchos recursos en 2D (como es obfvio suponer por el nombre del sitio) que puedes usar.
  • CraftPix. Es un sitio lleno de assets gratuitos y de pago.
  • Comunidad r/gameassets en Reddit. Si eres usuario de esta red social, esta comunidad publica recursos gratuitos que le gustan a los miembros.
Espero que estos recursos te sean de utilidad.

26 octubre 2021

Memoria dinámica en C++

Hace mucho tiempo, escribí acerca de apuntadores en C. Sin embargo, ya tocaba modernizarlo para que funcionara con C++.

En este video te explico como está la onda y abajo pongo imágenes con el código que aparece en el video para que lo puedas ver con más calma.

Éste es el primer ejemplo:

Y éste es el segundo:

Espero que te haya sido útil. ¡Hasta la próxima!

Word: orientación, márgenes y columnas

En este video te muestro como cambiarlos márgenes, la orientación del documento o una página y poner texto en columnas. Espero que te sea de ayuda.

28 septiembre 2021

Word: vínculos y marcadores

Si vas a tener un documentos en Word y quieres que sea fácil navegar por el contenido, los vínculos son buena idea. También son útiles si desde tu archivo quieres abrir una liga o un documento. En este video te muestro como cómo usar vínculos y marcadores en tu documento.


Word: índices (o tabla de contenido)

¿No te ha pasado que te piden agregar un índice a un trabajo escolar o reporte en el trabajo? Hacerlo "a pie" o de forma manual es mucho trabajo. En este video te muestro cómo Word lo puede hacer de forma automática.


20 septiembre 2021

Word: encabezado y pie de página

En este video te muestro como crear encabezados y pies de página para tus documentos de Word. Son muy útiles en documentos largos para numerar páginas y poner texto que quieres que se repita en todas las hojas en la parte superior o inferior de la página.

Espero que les sea de utilidad.

13 septiembre 2021

Word: tablas

Una herramienta muy útil para trabajar en Word son las tablas. Éstas te permiten mostrar información de forma breve y que puede ser captada con gran facilidad.

En el video te muestro cómo se trabajan con tablas en Word.

08 septiembre 2021

Word: estilos

Los estilos te puedes facilitar la existencia en Word cuando quieres darle el mismo formato a texto en diferentes partes de tu documento, sobre todo si es muy largo. En este video te muestro como aplicar, modificar y crear estilos.


El Tony y sus ondas...

Related Posts Plugin for WordPress, Blogger...