<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>t.laboratory (Español)</title><link>https://tlaboratory.net/es/</link><description>Cursos de programación y notas prácticas con código que ejecutamos de verdad: Python, JavaScript, SQL, Git, Flutter, servidores e IA, desde la experiencia de operar más de 15 apps.</description><language>es</language><item><title>De WordPress a estático sin romper URLs de las tiendas</title><link>https://tlaboratory.net/es/wordpress-to-static-without-breaking-store-urls/</link><guid>https://tlaboratory.net/es/wordpress-to-static-without-breaking-store-urls/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>24 fichas de App Store y Google Play apuntaban a WordPress. Cómo pasamos a un sitio estático en LiteSpeed con cada URL en 200 y un corte de 5 minutos.</description></item><item><title>Fundamentos de VB.NET: Option Strict, tipos y Nothing</title><link>https://tlaboratory.net/es/vbnet-basics-option-strict-types/</link><guid>https://tlaboratory.net/es/vbnet-basics-option-strict-types/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>VB.NET en .NET 10: BC30512 con Option Strict On, InvalidCastException con Off, overflow comprobado, Nothing = 0 y late binding 165 veces más lento.</description></item><item><title>Fundamentos de Swift: let, tipos, strings y opcionales</title><link>https://tlaboratory.net/es/swift-basics-optionals-types/</link><guid>https://tlaboratory.net/es/swift-basics-optionals-types/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>Swift desde cero con salida real de swiftc: let vs var, sin conversiones implícitas, por qué word[0] falla, opcionales y -O 145 veces más rápido.</description></item><item><title>SQL INSERT, UPDATE, DELETE y restricciones, probados</title><link>https://tlaboratory.net/es/sql-insert-update-delete-constraints/</link><guid>https://tlaboratory.net/es/sql-insert-update-delete-constraints/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>Curso de SQL 2 en SQLite 3.51: errores de NOT NULL, UNIQUE, CHECK y FOREIGN KEY, un UPDATE sin WHERE deshecho con ROLLBACK y un DELETE 3,600× más lento.</description></item><item><title>SQL desde cero: SELECT, WHERE, ORDER BY y NULL</title><link>https://tlaboratory.net/es/sql-basics-select-where-order/</link><guid>https://tlaboratory.net/es/sql-basics-select-where-order/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>Curso de SQL 1 en SQLite 3.51: tu primera tabla en 5 minutos, WHERE, ORDER BY, LIMIT, por qué = NULL no encuentra nada y 1 millón de filas medidas.</description></item><item><title>Pipes y redirección: grep, sort y uniq en un log</title><link>https://tlaboratory.net/es/shell-pipes-redirection-text-tools/</link><guid>https://tlaboratory.net/es/shell-pipes-redirection-text-tools/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>stdin, stdout, stderr, &gt;, &gt;&gt;, 2&gt;&amp;1 y pipes sobre un log de 20,000 líneas con grep, sort, uniq, wc y cut. Trampas reales y un bucle 7,000 veces más lento.</description></item><item><title>Terminal desde cero: rutas, archivos y espacios</title><link>https://tlaboratory.net/es/shell-basics-navigation-files/</link><guid>https://tlaboratory.net/es/shell-basics-navigation-files/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>Primeros pasos en la terminal de macOS: pwd, ls, cd, mkdir, cp, mv, rm, errores reales, por qué rm -r My Project borró otra carpeta y cp vs. mv medidos.</description></item><item><title>Funciones en Python: ámbito, defaults y closures</title><link>https://tlaboratory.net/es/python-functions-scope-default-args/</link><guid>https://tlaboratory.net/es/python-functions-scope-default-args/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>Funciones en Python con salidas reales: *args, **kwargs, / y *, el argumento por defecto mutable, UnboundLocalError, lambdas que dan [2, 2, 2] y match.</description></item><item><title>Tipos y mutabilidad en Python: copias, is vs ==</title><link>https://tlaboratory.net/es/python-basics-types-mutability/</link><guid>https://tlaboratory.net/es/python-basics-types-mutability/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>Python desde ejecuciones reales: por qué 0.1+0.2 no da 0.3, la trampa de [[0]*3]*3, copy vs deepcopy (20,000 veces más lento), is vs == y tracebacks.</description></item><item><title>Ruta para aprender a programar: guía de estudio</title><link>https://tlaboratory.net/es/programming-learning-roadmap/</link><guid>https://tlaboratory.net/es/programming-learning-roadmap/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>Qué lenguaje aprender primero según tu trabajo, cómo estudiar, un plan de 4 semanas y en qué orden leer los cursos: terminal, Git, SQL, Python, Java y más.</description></item><item><title>PHP desde cero: tipos, == vs ===, strings y arrays</title><link>https://tlaboratory.net/es/php-basics-types-strings-arrays/</link><guid>https://tlaboratory.net/es/php-basics-types-strings-arrays/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>Bases de PHP 8.5 con ejecuciones reales: 0 == &quot;a&quot; desde PHP 8, TypeError con strict_types, strlen vs mb_strlen y la trampa de foreach por referencia.</description></item><item><title>MySQL 1226 max_connections_per_hour en hosting</title><link>https://tlaboratory.net/es/mysql-max-connections-per-hour-shared-hosting/</link><guid>https://tlaboratory.net/es/mysql-max-connections-per-hour-shared-hosting/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>Un cron chocó con el error 1226 de MySQL (500/hora) mientras las APIs PHP en localhost hacían ~1,500/hora sin fallar. El límite es por user@host.</description></item><item><title>SQLi y XSS en PHP heredado sin cambiar la salida</title><link>https://tlaboratory.net/es/legacy-php-sqli-xss-audit-byte-identical/</link><guid>https://tlaboratory.net/es/legacy-php-sqli-xss-audit-byte-identical/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>90 correcciones de SQL y de salida en 36 archivos de un backend PHP de hace una década, con respuestas idénticas byte por byte. Lo que el escáner no vio.</description></item><item><title>Funciones, this y closures en JavaScript (con jsc)</title><link>https://tlaboratory.net/es/js-functions-scope-closures/</link><guid>https://tlaboratory.net/es/js-functions-scope-closures/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>Curso de JavaScript 2 en jsc: function vs flecha, qué es this, closures, por qué var en un bucle imprime 3, 3, 3 y un memoize que dejó fib(30) en 0.02 ms.</description></item><item><title>JavaScript desde cero: tipos, == vs === y NaN en jsc</title><link>https://tlaboratory.net/es/js-basics-types-equality/</link><guid>https://tlaboratory.net/es/js-basics-types-equality/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>Curso de JavaScript 1, todo en jsc de macOS: errores de let/const/var, typeof null, tabla real de == vs ===, 0.1 + 0.2 y por qué &quot;10&quot; + 5 da &quot;105&quot;.</description></item><item><title>Fundamentos de Java: tipos, strings y == vs equals</title><link>https://tlaboratory.net/es/java-basics-types-strings-equality/</link><guid>https://tlaboratory.net/es/java-basics-types-strings-equality/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>Java para principiantes en OpenJDK 26: overflow de int, double vs BigDecimal, == vs equals y la caché de Integer (127 vs 128), con errores reales de javac.</description></item><item><title>Códigos de estado HTTP y redirecciones con curl</title><link>https://tlaboratory.net/es/http-status-codes-redirects/</link><guid>https://tlaboratory.net/es/http-status-codes-redirects/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>Curso de HTTP 2: un router php -S de 2xx a 5xx, qué pasa con un POST ante 301/302/303 vs 307/308, 404 vs 410 y un crash de PHP que respondió 200 OK.</description></item><item><title>HTTP desde cero: lee cada línea de curl -v</title><link>https://tlaboratory.net/es/http-basics-request-response-curl/</link><guid>https://tlaboratory.net/es/http-basics-request-response-curl/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>Curso de HTTP 1, ejecutado de verdad: http.server local con Python, curl -v línea por línea, métodos, headers y por qué curl sale con 0 ante un 404.</description></item><item><title>Git: ramas, merge y conflictos, paso a paso</title><link>https://tlaboratory.net/es/git-branches-merge-conflicts/</link><guid>https://tlaboratory.net/es/git-branches-merge-conflicts/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>Crea ramas (branch), entiende cuándo Git hace fast-forward y cuándo un merge commit, y resuelve un CONFLICT real paso a paso con la salida real de Git.</description></item><item><title>Git desde cero: init, add, commit y .gitignore</title><link>https://tlaboratory.net/es/git-basics-init-add-commit/</link><guid>https://tlaboratory.net/es/git-basics-init-add-commit/</guid><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><description>Tu primer commit de Git en cinco minutos: working tree, staging area, status, diff, log, .gitignore y qué pasa de verdad si haces commit de una contraseña.</description></item></channel></rss>
