Todo empezó a los 12 años, frente a una tele de tubos catódicos conectados al Telecable. Estaba viendo Clarissa lo explica todo que, por cierto, explicaba muchas cosas excepto cómo le hizo para programar una computadora en tiempo record. En un capítulo, la protagonista, para safarse de escribir un poema decidió programar una computadora para que lo hiciera por ella. ¿El resultado? La máquina escupió unos versos sin sentido, pero que ganó un premio (lógica de Nickelodeon).
Mi cerebro precoz hizo clic inmediato: Si esta caja puede hacerse pasar por poeta, ¿entonces por qué no va a poder resolver mi tarea de matemáticas? Spoiler: sí podía, pero primero había que firmar un contrato de por vida con la frustración y el insomnio.
Entró en escena el combo ganador: un libro de Visual Basic 6 amén de mi jefa, y la generosidad de un vecino que le sabía al Windows 98 y se tomó la molestia de configurarme mi primer entorno de desarrollo. La curva de aprendizaje era más empinada que la cuesta del Cerro del Tepozteco, pero yo estaba feliz mientras mi compu sonaba como licuadora de pollo. Pero en medio de tanto dolor, ocurrió la magia. Por pura terquedad, descrubrí por mí mismo el Bubble Sort. Un algoritmo que en la academia usan como ejemplo de cómo no hacer las cosas, porque es más lento que una fila en el SAT. Pero para mi yo de 12 años, entender ese intercambio de números fue más satisfactorio que ver el capítulo donde Goku se transforma en Super Saiyajin por primera vez (y eso es mucho decir).
Con los años, esa comezón de querer saber qué hay debajo del capó nunca se me quitó. Solo cambié el VB6 por nuevas tecnologías y, ahora, después de mucho batallar, aquí estoy: con un doctorado en el bolsillo. ¿Y saben qué fue mi tesis? La versión petulante y académica de ese deseo infantil. Usar la computación para resolver problemas matemáticos complejos. Solo que, en lugar de librarme de la tarea de la secundaria, terminé metido hasta el cuello en teoría de representaciones y álgebra abstracta: problemas tan hermosamente inútiles para la vida cotidiana, pero que merecen su nicho intelectual. Ahora tengo un título para justificar que sigo haciendo lo mismo que a los 12: encontrar la manera de que una máquina haga el trabajo pesado por mí. ¿El sueño? Cumplido. ¿La flojera? Evolucionada.
Muchos de mis proyectos en GitHub están relacionados con la academia, y los encontrarás en la sección de Recursos autodidactas; son mayormente textos y exploraciones con cuadernos de Jupyter, pero también tengo uno que otro programa para mostrar.
Passwordgen es una solución multiplataforma diseñada para la generación de contraseñas de alta entropía. El proyecto destaca por su arquitectura dual (CLI y GUI), enfocada tanto en la usabilidad final como en la mantenibilidad del código a largo plazo.
Arquitectura y Enfoque
El sistema prioriza la seguridad mediante la evaluación de entropía en tiempo real y ofrece una estructura de comandos modular. A diferencia de soluciones simples, Passwordgen implementa prácticas de ingeniería de software corporativas: entornos virtuales aislados, automatización de flujos de trabajo y estándares de calidad estricta.
Pilares Técnicos
Dualidad de Interfaz: Arquitectura desacoplada que permite el uso intensivo mediante subcomandos en CLI (orientado a power users) o una interfaz gráfica (Tkinter) para uso general.
Seguridad: Implementación de evaluador de entropía basado en datos para asegurar la calidad de la salida (aleatoriedad frente a complejidad).
DevOps & Tooling: Automatización integral del ciclo de vida del desarrollo mediante Makefile (integrando mypy, pylint, isort y black).
Estándares de Calidad: Suite de pruebas automatizadas con reportes de cobertura, garantizando la estabilidad y reduciendo la deuda técnica.
Stack Tecnológico
Lenguaje: Python 3.14+
Gestión de Dependencias: Pipenv
Distribución: pipx (instalación aislada)
Calidad de Código: Mypy, Pylint, Pydocstyle, Isort, Black
GUI: Tkinter
Estado del Proyecto
Mantenibilidad: Alta (Alta cobertura de pruebas, tipado estático, documentación de tareas).
Repositorio: Enlace a GitHub
Proyecto experimental enfocado en la visualización de estructuras fractales mediante recursión. Este software permite la creación de árboles generativos basados en parámetros dinámicos, demostrando cómo reglas matemáticas simples y recursivas pueden emerger en formas orgánicas complejas.
Núcleo Algorítmico
Recursión Profunda: El corazón del programa reside en una función que se auto-invoca para generar sub-ramas infinitas (limitadas por un nivel de profundidad), emulando la auto-similitud de la naturaleza.
Geometría Computacional: Implementación manual de transformaciones de coordenadas, utilizando trigonometría (seno, coseno, arcotangente) para el cálculo de ángulos y longitudes en el plano cartesiano.
Arquitectura de Objetos:
Definición de clases para abstraer operaciones vectoriales y manipulación de espacios de color, eliminando la dependencia de librerías externas de alto nivel.
Fundamentos Técnicos
Lógica de Modelado: Uso de formas polares para la rotación y posicionamiento de ramas.
Simulación de Estética: Algoritmo de interpolación lineal para una transición fluida de color entre el tronco (marrón) y las hojas (verde), aplicando proporciones basadas en la profundidad del fractal.
Interfaz: Uso de `tkinter` como lienzo de bajo nivel para renderizado inmediato.
Este proyecto es un ejemplo de cómo implementar lógica compleja desde cero (sin bibliotecas externas), priorizando la comprensión de los algoritmos subyacentes sobre el uso de herramientas prefabricadas.
Este sintetizador virtual te permite tocar un piano de 4 octavas directamente desde el navegador, usando el ratón o las teclas de tu teclado QWERTY. Puedes cambiar el sonido a tu gusto combinando tres osciladores independientes (con formas de onda como senoidal, cuadrada o incluso ruido blanco) y ajustando su volumen y afinación. La envolvente ADSR controla cómo empieza, se mantiene y se apaga cada nota, y lo ves en tiempo real con una pequeña gráfica. Solo necesitas hacer clic sobre el teclado para empezar a crear música, y los cambios se escuchan al instante.