martes, 12 de mayo de 2026

No sé programar. Y aun así construí mi propio sistema de desarrollo.

Trabajo en redes. Configuro switches, administro servidores, resuelvo problemas de conectividad. El código nunca fue mi mundo y nunca pensé que lo sería.

Entonces llegó Antigravity. No se si mi experiencia sea correcta, pero es mía.


El primer proyecto

Todo empezó con una necesidad simple: generar boletos para un evento. En lugar de buscar una aplicación ya hecha, algo me dijo: ¿y si lo construyo yo?

No sabía PHP. No sabía JavaScript. Lo que sí sabía era exactamente qué quería que hiciera.

Y resulta que eso era suficiente.

Le describí mi idea a Antigravity. Le dije qué información debía tener el boleto, cómo quería que se viera, qué debía pasar al hacer clic. Antigravity escribió el código. Yo lo revisé, le dije qué cambiar, qué faltaba.

En ningún momento escribí una sola línea de código. Y funcionó.


Lo que nadie te dice

Hay una creencia muy extendida: para usar IA en desarrollo necesitas saber programar. Como si fuera una herramienta solo para programadores avanzados que quieren ir más rápido.

Eso es mentira.

Lo que necesitas no es saber código. Es saber pensar. Saber describir problemas. Saber qué quieres que ocurra y qué no. Saber cuándo algo está mal aunque no sepas por qué.

Eso lo sabe cualquier persona que haya resuelto problemas en su vida. En redes llevamos años haciendo exactamente eso.


El momento en que todo cambió

Después del generador de boletos algo se encendió. Empecé a pensar en sistemas. En cómo organizar el trabajo. En cómo pasar de una idea a algo que funciona sin romper lo que ya funciona.

Sin darme cuenta estaba diseñando una arquitectura de desarrollo. Con fases, zonas, reglas y flujos.

Le pregunté a Claude cómo lo hacen los proyectos grandes. Me habló del Kernel Linux, de Debian, de cómo organizan sus ramas de desarrollo, de cómo nunca modifican el código original sino que aplican parches.

Y pensé: eso es exactamente lo que necesito.

No porque sea programador. Sino porque en redes pensamos así. Tienes producción que no puedes tocar. Tienes un entorno de pruebas. Tienes un laboratorio donde experimentas. Nunca llevas algo a producción sin probarlo antes.

El concepto era el mismo. Solo el lenguaje era diferente.


La distinción que cambia todo

Un programador escribe el código.

Un orquestador sabe qué debe hacer el código.

La IA convierte a cualquier persona con conocimiento de dominio en un orquestador. No te da habilidades de programación. Te da un ejecutor que entiende instrucciones en lenguaje natural.

Yo nunca me convertí en programador. Me convertí en alguien que sabe exactamente qué quiere construir y tiene las herramientas para construirlo.


Lo que sí necesitas

No es una lista técnica. Es algo más simple y más difícil al mismo tiempo.

Saber qué quieres construir. No el código, sino el propósito. Qué problema resuelve, para quién, cómo debería sentirse usarlo.

Saber describir lo que ves. Cuando algo no funciona tienes que poder explicarlo en términos de comportamiento, no de código. "Esperaba que pasara esto y pasó aquello."

Confiar en tu conocimiento previo. Mi experiencia en redes me dio más ventaja de lo que pensaba. Entender flujos, entender por qué aislar entornos es importante, todo eso se tradujo directamente.

Paciencia con el proceso. Hubo noches pensando en la arquitectura. La almohada fue parte del equipo.


Para quien está pensando en intentarlo

Si tienes una idea que siempre quisiste construir pero nunca lo hiciste porque no sabes programar, quiero que sepas algo.

El obstáculo no era el código. Era creer que lo necesitabas para empezar.

Empieza describiendo qué quieres que haga tu idea. Qué problema resuelve. Qué debería pasar paso a paso. Qué no debería pasar nunca. Eso es el 80% del trabajo.

El otro 20% es aprender a conversar con la IA. A corregirla cuando se equivoca. A saber cuándo parar y pensar antes de seguir.

No necesitas saber programar. Necesitas saber qué quieres construir.


Escrito por alguien de redes que un día decidió que una idea era suficiente razón para empezar.

 Prólogo mejorado con Inteligencia Artificial basado en el contexto humano. 

jueves, 9 de abril de 2026

Mantener servicios desactivados y llamarlos de manera conjunta en Debian y Ubuntu

En mi entorno de desarrollo local prefiero instalar Apache2 y MariaDB de manera independiente y mantenerlos desactivados por defecto. No utilizo XAMPP o LAMPP completos porque incluyen más componentes de los que necesito, obligan a usar rutas largas para guardar los sitios web y no ofrecen un panel gráfico nativo integrado al sistema. En Debian 13 decidí mantenerlos desactivados, de manera que solo los enciendo cuando realmente los necesito. No instalé vsftpd ni openssh, porque todo lo hago en localhost y no requiero acceso remoto. Por costumbre llamé al servicio conjunto lampp, aunque en realidad solo agrupa Apache2 y MariaDB.

Crear un servicio conjunto en Debian 13

La idea es definir un archivo de unidad en systemd que actúe como agrupador. Así, con un solo comando puedo iniciar o detener ambos servicios.

Archivo /etc/systemd/system/lampp.service:

[Unit]
Description=Servicio conjunto LAMPP (Apache2 + MariaDB)
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/systemctl start apache2.service mariadb.service
ExecStop=/bin/systemctl stop apache2.service mariadb.service

[Install]
WantedBy=multi-user.target

Luego recargamos systemd:

sudo systemctl daemon-reload

Y ya podemos usar:

sudo systemctl start lampp.service
sudo systemctl stop lampp.service

De esta forma, los servicios permanecen desactivados al inicio, pero se levantan juntos cuando los necesito.

Variante para MySQL en Ubuntu

En Ubuntu, el servidor de base de datos suele instalarse como mysql.service en lugar de mariadb. El archivo sería casi idéntico, solo cambiando el nombre del servicio:

[Unit]
Description=Servicio conjunto LAMPP (Apache2 + MySQL)
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/systemctl start apache2.service mysql.service
ExecStop=/bin/systemctl stop apache2.service mysql.service

[Install]
WantedBy=multi-user.target

Recargamos systemd:

sudo systemctl daemon-reload

Y lo usamos igual:

sudo systemctl start lampp.service
sudo systemctl stop lampp.service

Conclusión

Mantener los servicios desactivados por defecto ayuda a ahorrar recursos y evita procesos innecesarios en segundo plano. Con un archivo de unidad personalizado podemos agruparlos y manejarlos de manera conjunta, manteniendo la flexibilidad y el control sobre nuestro entorno de desarrollo local.

Prólogo mejorado con Inteligencia Artificial basado en el contexto humano.


lunes, 23 de marzo de 2026

Aprendiendo a usar los repositorios modernos en Debian 13

Cuando instalé Debian 13, me encontré con algo nuevo: los archivos .sources. Antes todo estaba en el clásico sources.list, pero ahora Debian recomienda usar este formato más moderno. No es que el viejo sistema fuera malo, simplemente el nuevo ofrece más claridad, seguridad y orden.

El primer paso fue ejecutar el comando:
sudo apt modernize-sources

Con esto, mis listas antiguas se transformaron automáticamente en .sources. Fue como si APT hubiera tomado mis notas y las hubiera reescrito con un estilo más organizado. Lo hice no porque mis listas fueran confusas, sino porque quería adaptarme a las nuevas características y aprender cómo funciona este formato.

Al revisar los archivos, descubrí que cada línea tiene un propósito claro. Vamos a ver un ejemplo real: el archivo debian-backports.sources.

---
Ejemplo limpio (tal como queda en el sistema):

# Modernized from /etc/apt/sources.list
Types: deb deb-src
URIs: https://deb.debian.org/debian/
Suites: trixie-backports
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

---
 

Ejemplo comentado (explicado línea por línea):

# Modernized from /etc/apt/sources.list
Types: deb deb-src        # Define los tipos de repositorio.
                         # "deb" = paquetes binarios listos para instalar.
                         # "deb-src" = código fuente de los paquetes.

URIs: https://deb.debian.org/debian/   # Dirección del servidor donde APT buscará los paquetes.
                                       # En este caso, el mirror oficial de Debian, usando https.

Suites: trixie-backports   # La suite indica la rama o versión de Debian.
                          # "trixie-backports" contiene versiones más nuevas de paquetes
                          # adaptadas para funcionar en la versión estable.

Components: main contrib non-free non-free-firmware
                          # Secciones del repositorio:
                          # - main: software libre que cumple las pautas de Debian.
                          # - contrib: software libre que depende de componentes no libres.
                          # - non-free: software que no cumple las pautas de Debian.
                          # - non-free-firmware: controladores y firmware no completamente libres.

Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
                          # Ruta al archivo de la clave GPG que valida este repositorio.
                          # Garantiza que los paquetes provienen de Debian y no han sido alterados.
---

Modernizar mis repositorios fue un ejercicio de aprendizaje. No se trataba de corregir errores, sino de dar el salto a un formato que refleja las prácticas actuales de seguridad y orden. Ahora sé que cada archivo .sources es como un pequeño programa:
- Types define qué tipo de paquetes quiero.
- URIs señala el servidor.
- Suites indica la rama.
- Components abre las secciones disponibles.
- Signed-By asegura la autenticidad.

Con esto, cada actualización fluye por un canal seguro y verificado. Y cada vez que ejecuto sudo apt modernize-sources, siento que estoy validando ese esfuerzo: mis fuentes están limpias, seguras y listas para crecer.

Prólogo mejorado con Inteligencia Artificial basado en el contexto humano.

domingo, 22 de marzo de 2026

Cómo instalar VirtualBox 7.2.x en macOS Monterey (MacBook Air 2015)

VirtualBox es una herramienta poderosa para virtualizar sistemas operativos en tu Mac. Sin embargo, en versiones recientes (7.2.x) requiere instalar previamente Xcode Command Line Tools y Python 3. Aquí te muestro cómo hacerlo paso a paso.

1. Instalar Xcode Command Line Tools
VirtualBox necesita librerías de desarrollo para compilar extensiones del kernel en macOS.

1. Abre la aplicación Terminal.
2. Escribe el siguiente comando:
   xcode-select --install
3. Acepta la ventana emergente y espera la descarga (~500 MB).
4. Verifica la instalación con:
   xcode-select -p
   Si aparece una ruta (/Library/Developer/...), ya está listo.

2. Instalar Python 3
macOS Monterey incluye Python 2.7, pero VirtualBox requiere Python 3.

Opción A: Instalar con Homebrew (recomendado)
1. Instala Homebrew si no lo tienes:
   /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2. Instala Python 3:
   brew install python
3. Comprueba la versión:
   python3 --version

Opción B: Instalar desde el sitio oficial
1. Descarga el instalador en https://www.python.org/downloads/macos/
2. Ejecuta el archivo .pkg y sigue las instrucciones.
3. Verifica con:
   python3 --version

3. Instalar VirtualBox 7.2.x
1. Descarga el instalador desde la página oficial de Oracle.
2. Abre el archivo .dmg y ejecuta el instalador.
3. Si macOS bloquea la extensión del kernel:
   Preferencias del Sistema > Seguridad y Privacidad > General > Permitir
4. Reinicia el Mac si lo solicita.

4. Verificación final
Para confirmar que todo está correcto:
   VBoxManage --version
Si devuelve la versión (ejemplo: 7.2.4), la instalación fue exitosa.

Conclusión
Aunque la descarga de las herramientas previas puede parecer pesada y lenta, son necesarias para que VirtualBox funcione correctamente en macOS Monterey. Una vez instaladas, podrás crear y administrar máquinas virtuales sin problemas en tu MacBook Air 2015.

Prólogo mejorado con Inteligencia Artificial basado en el contexto humano. 

domingo, 15 de marzo de 2026

BalenaEtcher en Debian 13 (Trixie)

Al intentar instalar BalenaEtcher en Debian 13 (Trixie), es común encontrarse con un error de dependencias. Esto sucede porque algunas librerías necesarias ya no están disponibles en los repositorios oficiales de esta versión.

A continuación, les comparto cómo logré resolverlo utilizando los repositorios de Debian 12 (Bookworm) de forma independiente.

1. Agregar los repositorios de Debian 12 (Bookworm)

Lo primero que hice fue crear un archivo de repositorio adicional para que el sistema pueda encontrar las librerías antiguas. 

Crea el archivo en: /etc/apt/sources.list.d/bookworm.list
Y añade el siguiente contenido:

#[Debian GNU/Linux]
#[bookworm]
#[Official Intel/AMD64]

#[bookworm-main]
deb http://deb.debian.org/debian/ bookworm main contrib non-free non-free-firmware
deb-src http://deb.debian.org/debian/ bookworm main contrib non-free non-free-firmware

deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
deb-src http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware

#[bookworm-updates]
deb http://deb.debian.org/debian/ bookworm-updates main contrib non-free non-free-firmware
deb-src http://deb.debian.org/debian/ bookworm-updates main contrib non-free non-free-firmware

#[bookworm-backports]
deb http://deb.debian.org/debian bookworm-backports main contrib non-free non-free-firmware
deb-src http://deb.debian.org/debian bookworm-backports main contrib non-free non-free-firmware

2. Configurar el repositorio de BalenaEtcher

Posteriormente, creé el archivo del repositorio oficial de Balena en la misma carpeta (/etc/apt/sources.list.d/balena.list) con esta información:

# Source: balena
# Site: https://github.com/balena-io/etcher
# Repository: balena / etcher
# Description: Flash OS images to SD cards & USB drives, safely and easily.

deb [signed-by=/usr/share/keyrings/balena-etcher-archive-keyring.gpg] https://dl.cloudsmith.io/public/balena/etcher/deb/debian trixie main
deb-src [signed-by=/usr/share/keyrings/balena-etcher-archive-keyring.gpg] https://dl.cloudsmith.io/public/balena/etcher/deb/debian trixie main

3. Instalación final

Una vez configurados los archivos, solo queda actualizar las fuentes de software e instalar el paquete. Desde la terminal, ejecutamos:
 

apt update && apt install apt-transport-https balena-etcher

¡Listo! Con estos pasos, la aplicación se instalará correctamente en Debian Trixie, satisfaciendo las librerías faltantes desde el repositorio de Bookworm.

Prólogo mejorado con Inteligencia Artificial basado en el contexto humano. 

domingo, 8 de marzo de 2026

Un reencuentro con mi MacBook Air 2015

 

Volver a mi MacBook Air 2015 ha sido como reencontrarme con un viejo regalo que, con el tiempo, decidí transformar en un aliado técnico. El equipo llegó con una LogicBoard de 4 GB de RAM, suficiente para lo básico, pero pronto sentí que necesitaba más. Invertí en una placa de 8 GB y también en un cambio de batería, porque quería que este portátil siguiera siendo confiable en el día a día.

El disco fue otra historia. Pasé de un SSD SATA de 128 GB a un SSD NVMe de 256 GB, esperando velocidad y fluidez. Sin embargo, al inicio lo detesté: parecía más lento que el viejo SATA. Fue un recordatorio de que en el mundo Mac lo nuevo no siempre significa mejor de inmediato, y que cada ajuste requiere paciencia para encontrar su equilibrio.

Con el hardware renovado, me lancé a configurar el entorno. Instalé Office, que sigue funcionando bien en Monterey, y configuré OneDrive, aunque tuve que bloquear sus actualizaciones para evitar incompatibilidades. Elegí Firefox como navegador principal, confiable y ligero. Luego vino la parte que más disfruto: levantar máquinas virtuales con VirtualBox y preparar USB booteables con Balena Etcher, recuperando ese espacio de experimentación que siempre me motiva.

También depuré el sistema: eliminé Teams, que no necesitaba, y ajusté servicios en segundo plano para que no se iniciaran procesos innecesarios. Con esos cambios, el Mac se siente más ágil, menos cargado. Finalmente instalé MAMP, que me dio un servidor local con PHP y MySQL, completando así el círculo: productividad, pruebas y desarrollo web en un mismo equipo.

Este reencuentro con macOS ha sido una mezcla de nostalgia y aprendizaje. No es un sistema fácil de digerir, cada instalación trae sus particularidades y cada mejora exige atención. Pero al final, mi MacBook Air 2015 demuestra que todavía puede ser una herramienta confiable y versátil, capaz de acompañarme en proyectos personales y técnicos, incluso en 2026.

 Prólogo mejorado con Inteligencia Artificial basado en el contexto humano.  

 

miércoles, 18 de febrero de 2026

Resumen Aprendizaje

Bitácora de Aprendizaje y Proyectos 

Desde el 23 de diciembre de 2025 he estado inmerso en un proceso de organización, documentación y creatividad que me ha permitido crecer tanto en lo técnico como en lo personal. Este espacio es mi manera de dejar constancia de lo aprendido y de los proyectos que he ido desarrollando.

Infraestructura y Workflows Técnicos

He reiniciado mis workflows institucionales en Debian, dejando todas las fases en pendiente pero con una estructura modular y clara. Documenté la inclusión de VTBoxPC como usuario principal y su rol en sudoers para reforzar la seguridad. También validé compatibilidades entre versiones de XAMPP y Ubuntu/Debian, asegurando estabilidad en la infraestructura.

Uno de los retos más interesantes fue la iteración sobre reglas IPTables, analizando su impacto en el acceso multiusuario y documentando variantes técnicas para facilitar la toma de decisiones.

Documentación y Diseño Educativo

Me enfoqué en crear glosarios técnicos y humanizados que me ayudaron a conceptualizar proyectos antes de escribir código. Además, trabajé en la maquetación visual alineada con la paleta institucional de la FISC, adaptando todo a formato hoja Carta (1366×768px).

Implementé footers dinámicos con control de versiones, hora/fecha y enlaces de descarga automática, y redacté informes con un tono diplomático, adaptado al impacto emocional de cada público.

Optimización y Herramientas

Seleccioné y organicé herramientas portables para diagnóstico y soporte técnico, integrando Firefox Portable como navegador principal y ImageUSB como utilidad externa.

He mantenido mi filosofía de uso racional de software propietario, priorizando siempre la estabilidad y la utilidad mínima.

Creatividad y Exploración Visual

También me di espacio para la creatividad, explorando reinterpretaciones visuales en estilos anime y shōnen. Estos ejercicios me han servido como apertura artística paralela a mis proyectos técnicos.

Diseñé mockups artísticos que me ayudaron a corroborar decisiones de documentación y presentación institucional.

Proyectos Personales

En el plano personal, planifiqué la organización de un criadero de pollos en mi patio de 2.78 × 10 metros, tomando en cuenta la ubicación del árbol y las condiciones iniciales.

Además, utilicé referencias de resolución de pantalla (hoja Carta en horizontal y vertical) para diseñar sitios web a mano alzada.

Automatizé la generación de listas de reproducción con el archivo lista.m3u, que se crea escaneando la carpeta /Publicidad/.

Reflexión Final

Este período ha sido una mezcla entre técnica y creatividad. Desde la depuración metódica de workflows en Linux hasta la exploración artística en estilos visuales, la constante ha sido la modularidad y claridad institucional.

Cada documento, cada regla y cada diseño que he trabajado busca servir como referencia educativa y profesional.

Mi próximo paso es seguir consolidando estos aprendizajes en proyectos más amplios, manteniendo siempre el equilibrio entre orden técnico y apertura creativa.

 Prólogo mejorado con Inteligencia Artificial basado en el contexto humano.  

No sé programar. Y aun así construí mi propio sistema de desarrollo.

Trabajo en redes. Configuro switches, administro servidores, resuelvo problemas de conectividad. El código nunca fue mi mundo y nunca pensé ...