
14 noviembre 2023
Archivos CSV en C#

07 noviembre 2023
Archivos de texto en C++
24 octubre 2023
Generando números al azar en Python
Para facilitarnos la vida, Python tiene un módulo, llamado random, que nos ayuda a generarlos. En este post te voy a mostrar cómo usarlo.
Antes de empezar...
Antes de poder empezar a generar números aleatorios, debes importar el módulo random. Puedes hacerlo con una simple declaración import al principio de tu programa:
Generando números enteros aleatorios
El módulo random proporciona la función randint(a, b) para generar un número entero aleatorio entre a y b, incluyendo ambos valores. Así es cómo puedes utilizarlo:
En este ejemplo, random.randint(1, 10) genera un número entero aleatorio entre 1 y 10, y el resultado se almacena en la variable entero_aleatorio. Puedes ajustar el rango para adaptarlo a tus necesidades específicas.
Generando números con decimales
No es tan común, pero a veces necesitas generar números que tengan decimales de forma aleatoria. Para esto puedes utilizar la función random.uniform(a, b). Genera un número de punto flotante aleatorio entre a y b. Aquí tienes un ejemplo:
09 octubre 2023
Revolviendo vectores
11 septiembre 2023
Ordenando vectores
Encontré esta página que lo explica muy bien, y luego lo apliqué a un ejemplo práctico que ordena un vector que tiene datos de diferente tipo. De esta manera pueden ver cómo funciona el método sort con mis propias funciones de comparación.
Te aconsejo de leer el post que explica el sort y aquí te dejo mi código de ejemplo:
Espero que te sea útil. ¡Hasta la próxima!
05 septiembre 2023
Revolviendo un vector en C++

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
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).
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í!
27 abril 2023
Música en Android Studio
- 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.
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.
- Cómo acceder a los archivos internos
- Llenar un Spinner con el contenido de una lista
- Escribir un ArrayList a un archivo
- Mostrar ventana con uno, dos o tres botones (Alert)
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.
18 enero 2022
Assets gratuito para videojuegos
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.
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!



















