Decoradores de Python Explicados con Ejemplos

Qu茅 le hace realmente un decorador a tu funci贸n Quieres medir el tiempo de cada funci贸n que llama a una API externa lenta. Puedes pegar llamadas a time.perf_counter() en cada una, o escribir la medici贸n una sola vez y aplicarla en todas partes. Un decorador es la segunda opci贸n: es una funci贸n que toma otra funci贸n, la envuelve en un comportamiento adicional y devuelve la versi贸n envuelta con el mismo nombre original. ...

7 de octubre de 2026 路 7 min 路 1345 palabras 路 SpaghettiCoder

Por Qu茅 0.1 + 0.2 No Es 0.3: la Coma Flotante Explicada

Ejecuta 0.1 + 0.2 en una shell de Python y no obtienes 0.3. Obtienes 0.30000000000000004. Pru茅balo en JavaScript, Java, Go, C o Rust y te sale la misma cola de diecis茅is cifras. Cada uno de esos lenguajes hace exactamente lo que marca el est谩ndar del hardware. Un n煤mero que necesita infinitos d铆gitos binarios se comprime en 64 bits, y algo tiene que ceder. Por qu茅 0.1 no se puede guardar de forma exacta en binario Los ordenadores guardan los n煤meros en coma flotante en base 2. En base 2, la fracci贸n 1/10 tiene un desarrollo peri贸dico, igual que 1/3 se repite sin fin en base 10 (0.3333...). Escrito entero, 0.1 en binario empieza as铆: ...

6 de octubre de 2026 路 6 min 路 1222 palabras 路 SpaghettiCoder

Notaci贸n Big O Explicada con Ejemplos de C贸digo

Una b煤squeda en un diccionario de Python tarda unos 100 nanosegundos, tanto si el diccionario tiene 1.000 claves como 1.000.000. Un bucle anidado que busca duplicados en una lista tarda medio milisegundo con 200 elementos y 136 milisegundos con 3.200. Diecis茅is veces la entrada, casi 280 veces la espera. Misma m谩quina, mismo Python. La notaci贸n Big O es el nombre de esa diferencia. Qu茅 mide la notaci贸n Big O Big O describe c贸mo crece el tiempo de ejecuci贸n (o el uso de memoria) de un fragmento de c贸digo a medida que la entrada se hace m谩s grande. No es una lectura de cron贸metro y no le importa si tu port谩til es r谩pido o lento. Le importa la forma de la curva de crecimiento: al duplicar la entrada, 驴el tiempo se duplica, se cuadruplica o apenas se mueve? ...

4 de octubre de 2026 路 9 min 路 1762 palabras 路 SpaghettiCoder

Git Reset vs Revert vs Restore: C贸mo Deshacer Cambios

Ejecuta git reset --hard sobre un commit que tu equipo ya baj贸 y acabas de dejar tu historial en desacuerdo con el suyo. Ejecuta git revert sobre un typo que no has subido y a帽ades un commit innecesario al log. Git tiene cuatro comandos para deshacer cambios, restore, reset, commit --amend y revert, y no son intercambiables. Elige el equivocado y el resultado es que no pasa nada, o pasa mucho m谩s de lo que quer铆as. ...

3 de octubre de 2026 路 7 min 路 1368 palabras 路 SpaghettiCoder

Qu茅 Es la Dependency Injection (con Ejemplos)

Aqu铆 tienes una clase que no puedes probar con un unit test sin una base de datos real y un servidor SMTP funcionando: 1 2 3 4 5 6 7 8 9 10 11 public class OrderService { private readonly SqlOrderRepository _repository = new SqlOrderRepository("Server=prod-db;Database=Orders;..."); private readonly SmtpEmailSender _emailSender = new SmtpEmailSender("smtp.company.com"); public void PlaceOrder(Order order) { _repository.Save(order); _emailSender.Send(order.CustomerEmail, "Order confirmed"); } } OrderService construye su propio SqlOrderRepository y SmtpEmailSender con new, con la connection string incluida. Cada test que toca PlaceOrder necesita una base de datos Orders real y un servidor de correo real, o falla antes de que se ejecute tu assertion. La l贸gica que quieres probar son dos l铆neas: guardar el pedido, enviar la confirmaci贸n. Est谩 soldada a dos clases concretas que no puedes cambiar. ...

1 de octubre de 2026 路 8 min 路 1615 palabras 路 SpaghettiCoder

Pruebas Unitarias vs de Integraci贸n vs End-to-End

Una funci贸n puede tener el 100% de cobertura de pruebas unitarias y la p谩gina que la llama puede seguir devolviendo un 500 en producci贸n. No es una contradicci贸n. Las pruebas unitarias, de integraci贸n y end-to-end comprueban cosas distintas, y una suite cargada en una y floja en otra tiene un hueco espec铆fico y predecible. Qu茅 comprueban las pruebas unitarias, de integraci贸n y end-to-end Toma una funcionalidad de registro: una funci贸n valida la entrada, escribe una fila en una base de datos y env铆a un correo de bienvenida. Tres pruebas pueden cubrirla, y cada una responde una pregunta distinta. ...

29 de septiembre de 2026 路 11 min 路 2291 palabras 路 SpaghettiCoder

Async/Await y el Event Loop de JavaScript Explicados

Ejecuta esto en Node o en la consola del navegador: 1 2 3 4 console.log("1"); setTimeout(() => console.log("2"), 0); Promise.resolve().then(() => console.log("3")); console.log("4"); El resultado es 1 4 3 2. Un setTimeout con un delay de 0ms igual se ejecuta despu茅s del callback de la promise, y ambos esperan a que termine cada l铆nea de c贸digo s铆ncrono que tienen debajo. async/await est谩 construido sobre este orden, no es un mecanismo nuevo. La mayor铆a del comportamiento sorprendente en JavaScript async viene de escribir await como si pausara todo el programa, cuando en realidad solo pausa la funci贸n en la que est谩. ...

28 de septiembre de 2026 路 8 min 路 1703 palabras 路 SpaghettiCoder

Qu茅 Es CORS y C贸mo Arreglar los Errores CORS

Tu frontend corre en http://localhost:5173, tu API en http://localhost:4000, y la llamada fetch que funcionaba sin problemas en Postman falla en el navegador con una pared de texto rojo: Access to fetch at 'http://localhost:4000/api/users' from origin 'http://localhost:5173' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Es muy probable que tu servidor haya procesado esa petici贸n y devuelto un 200. El navegador se neg贸 a entregar la respuesta a tu JavaScript. ...

26 de septiembre de 2026 路 8 min 路 1674 palabras 路 SpaghettiCoder

C贸mo Configurar la Depuraci贸n Remota en Visual Studio

Depurar un bug que solo ocurre en una m谩quina sin Visual Studio Un bug se reproduce en el servidor de pruebas y no en tu port谩til. El servidor de pruebas no tiene Visual Studio, e instalar un IDE completo ah铆 solo para poner un breakpoint no es una opci贸n. La depuraci贸n remota est谩 pensada exactamente para esto. Un programa standalone peque帽o corre en la m谩quina destino, tu Visual Studio local se conecta a 茅l por red, y obtienes breakpoints e inspecci贸n de variables sobre un proceso que no est谩 corriendo cerca de tu escritorio. ...

23 de septiembre de 2026 路 7 min 路 1464 palabras 路 SpaghettiCoder