<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Uncategorized - Desarrollo Web en Hidalgo y CDMX | Ferredia</title>
	<atom:link href="https://ferredia.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>https://ferredia.com</link>
	<description>¿Buscas empresas de desarrollo web en Hidalgo o crear páginas web profesionales? Soluciones seguras, auditables y orientadas a resultados.</description>
	<lastBuildDate>Mon, 27 Apr 2026 03:22:06 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://ferredia.com/wp-content/uploads/2025/11/icono3-150x150.png</url>
	<title>Uncategorized - Desarrollo Web en Hidalgo y CDMX | Ferredia</title>
	<link>https://ferredia.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>26 años construyendo la web (y lo que la IA no puede resolver por mí)</title>
		<link>https://ferredia.com/26-anos-construyendo-la-web-y-lo-que-la-ia-no-puede-resolver-por-mi/</link>
					<comments>https://ferredia.com/26-anos-construyendo-la-web-y-lo-que-la-ia-no-puede-resolver-por-mi/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Jiménez]]></dc:creator>
		<pubDate>Mon, 27 Apr 2026 03:18:01 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://ferredia.com/?p=461</guid>

					<description><![CDATA[En 1999, cuando publiqué mi primera página web para un cliente, el panorama no se parecía en nada a lo que enseñan los tutoriales actuales. HTML5 no existía, los navegadores no compartían reglas comunes y, aunque CSS ya tenía una especificación oficial, su implementación era tan divergente entre Netscape Navigator e Internet Explorer que, en [&#8230;]]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="461" class="elementor elementor-461" data-elementor-post-type="post">
				<div data-particle_enable="false" data-particle-mobile-disabled="false" class="elementor-element elementor-element-c113569 e-grid e-con-boxed e-con e-parent" data-id="c113569" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-c149339 elementor-widget elementor-widget-text-editor" data-id="c149339" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
									<div class="qwen-markdown-paragraph"><span class="qwen-markdown-text" data-spm-anchor-id="a2ty_o01.29997173.0.i10.7ae655fbF91bBt">En 1999, cuando publiqué mi primera página web para un cliente, el panorama no se parecía en nada a lo que enseñan los tutoriales actuales. HTML5 no existía, los navegadores no compartían reglas comunes y, aunque CSS ya tenía una especificación oficial, su implementación era tan divergente entre Netscape Navigator e Internet Explorer que, en la práctica, era como si no existiera. Para que un sitio se visualizara de forma aceptable, no bastaba con escribir código ordenado: había que detectar el </span><code class="qwen-markdown-codespan">user-agent</code><span class="qwen-markdown-text">, aislar Netscape de IE6 y, en muchos casos, ajustar la lógica en el servidor para forzar una salida que el navegador no rechazara.</span></div><div class="qwen-markdown-space"> </div><div class="qwen-markdown-paragraph"><span class="qwen-markdown-text" data-spm-anchor-id="a2ty_o01.29997173.0.i11.7ae655fbF91bBt">El resultado era lo que se conocia como  </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">código espagueti</span></strong><span class="qwen-markdown-text">: estilos incrustados directamente en etiquetas con </span><code class="qwen-markdown-codespan">style="..."</code><span class="qwen-markdown-text"> o atributos como </span><code class="qwen-markdown-codespan">bgcolor</code><span class="qwen-markdown-text">, </span><code class="qwen-markdown-codespan">align</code><span class="qwen-markdown-text"> y </span><code class="qwen-markdown-codespan">valign</code><span class="qwen-markdown-text">; scripts mezclados con la estructura; y cuando necesitabas replicar un bloque en otra página, la solución era </span><code class="qwen-markdown-codespan">Ctrl+C</code><span class="qwen-markdown-text">, </span><code class="qwen-markdown-codespan">Ctrl+V</code><span class="qwen-markdown-text">. Pero eso no era desorden por falta de criterio, era la única forma pragmática de que algo funcionara en una plataforma que aún no había definido sus propias reglas.</span></div><div class="qwen-markdown-space"> </div><h2 class="qwen-markdown-heading"><span class="qwen-markdown-text">1. 1999–2005: Cuando la plataforma obligaba a mezclarlo todo (y por qué el SAT requería IE6)</span></h2><div class="qwen-markdown-paragraph" data-spm-anchor-id="a2ty_o01.29997173.0.i13.7ae655fbF91bBt"><span class="qwen-markdown-text" data-spm-anchor-id="a2ty_o01.29997173.0.i14.7ae655fbF91bBt">Quizás el recuerdo más fiel de esa época no es el código, sino la realidad operativa de mantener sistemas críticos. Yo mismo pasé horas configurando Internet Explorer 6, ajustando zonas de seguridad y instalando complementos de ActiveX solo para que la página del SAT procesara un archivo XML o validara la FIEL. Si no lo hacías, el sitio simplemente fallaba en silencio. No era que la pagina del SAT fuera “mala”; era que la web aún no tenía estándares para criptografía en el navegador, ni APIs para manejo seguro de certificados digitales, ni siquiera un </span><code class="qwen-markdown-codespan">fetch()</code><span class="qwen-markdown-text"> o </span><code class="qwen-markdown-codespan">WebCrypto</code><span class="qwen-markdown-text">. La única vía estable era depender del motor de Microsoft y sus controles propietarios.</span></div><div class="qwen-markdown-space"> </div><div class="qwen-markdown-paragraph"><span class="qwen-markdown-text">Limitar la compatibilidad a un solo navegador no era una elección de diseño. Era una </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">decisión de viabilidad</span></strong><span class="qwen-markdown-text">. Depurar para Netscape 4, IE5 e IE6 simultáneamente significaba mantener tres ramas de código, usar </span><code class="qwen-markdown-codespan">document.all</code><span class="qwen-markdown-text"> en un motor y </span><code class="qwen-markdown-codespan">document.layers</code><span class="qwen-markdown-text"> en otro, y pelear con un </span><code class="qwen-markdown-codespan">box-model</code><span class="qwen-markdown-text"> que interpretaba </span><code class="qwen-markdown-codespan">padding</code><span class="qwen-markdown-text"> y </span><code class="qwen-markdown-codespan">border</code><span class="qwen-markdown-text"> de forma distinta era un caos. No existían herramientas de depuración, no había transpiladores, ni polyfills, ni siquiera un estándar de referencia estable. Si el navegador no soportaba algo, el desarrollador asumía el costo de la inconsistencia.</span></div><div class="qwen-markdown-space"> </div><div class="qwen-markdown-paragraph"><span class="qwen-markdown-text">El código spaghetti, los estilos inline y la duplicación manual no eran vicios: eran la única forma de que un sistema no colapsara en producción cuando el tiempo de entrega era finito y el presupuesto no cubría tres equipos de testing. La web era un territorio en disputa, y nosotros éramos los topógrafos improvisados.</span></div><div class="qwen-markdown-space"> </div><h2 class="qwen-markdown-heading"><span class="qwen-markdown-text">2. 2006–2015: La separación que nos dio aire</span></h2><div class="qwen-markdown-paragraph"><span class="qwen-markdown-text">La llegada de CSS2/3 usable, la normalización parcial del DOM en los navegadores y la popularización de </span><code class="qwen-markdown-codespan">include</code><span class="qwen-markdown-text">/</span><code class="qwen-markdown-codespan">require</code><span class="qwen-markdown-text"> en PHP cambiaron la ecuación. Por primera vez, podías separar presentación, lógica y contenido. Un archivo </span><code class="qwen-markdown-codespan">.css</code><span class="qwen-markdown-text"> externo, una carpeta </span><code class="qwen-markdown-codespan">/js/</code><span class="qwen-markdown-text">, y de pronto un cambio visual se reflejaba en decenas de páginas sin tocar el HTML. Aparecieron los primeros resets, los grids manuales basados en </span><code class="qwen-markdown-codespan">float</code><span class="qwen-markdown-text">, y los patrones de layout que intentaban simular lo que hoy resuelven </span><code class="qwen-markdown-codespan">flexbox</code><span class="qwen-markdown-text"> y </span><code class="qwen-markdown-codespan">grid</code><span class="qwen-markdown-text">.</span></div><div class="qwen-markdown-space"> </div><div class="qwen-markdown-paragraph"><span class="qwen-markdown-text">La web dejó de ser una colección de documentos sueltos para convertirse en un sistema. Pero la abstracción aún era manual: si querías un modal, un calendario o una validación de formularios, lo escribías desde cero o adaptabas scripts de foros y repositorios tempranos. La productividad mejoró, pero la superficie de error seguía siendo amplia. Cada dependencia externa era un punto ciego hasta que no la auditaras línea por línea.</span></div><div class="qwen-markdown-space"> </div><h2 class="qwen-markdown-heading"><span class="qwen-markdown-text">3. 2015–2023: Frameworks y estandarización, el costo invisible</span></h2><div class="qwen-markdown-paragraph"><span class="qwen-markdown-text">Cuando el ecosistema maduró, llegaron las herramientas que normalizaron la entrega de interfaces profesionales. </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">Bootstrap</span></strong><span class="qwen-markdown-text" data-spm-anchor-id="a2ty_o01.29997173.0.i16.7ae655fbF91bBt"> no solo trajo una rejilla responsiva; estandarizó la forma en que equipos pequeños colaboraban, reduciendo la fricción entre diseño, frontend y backend. </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">SweetAlert</span></strong><span class="qwen-markdown-text"> reemplazó los </span><code class="qwen-markdown-codespan">alert()</code><span class="qwen-markdown-text"> bloqueantes por diálogos accesibles, personalizables y consistentes. </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">FullCalendar</span></strong><span class="qwen-markdown-text"> abstrajo semanas de lógica de renderizado, navegación por fechas y gestión de eventos en una API predecible.</span></div><div class="qwen-markdown-space"> </div><div class="qwen-markdown-paragraph"><span class="qwen-markdown-text">El beneficio fue innegable: velocidad de entrega, coherencia visual y menor carga cognitiva. Pero el costo, que muchos ignoraron durante años, fue estructural: dependencias pesadas, superficie de ataque ampliada, y la tentación de cargar “por si acaso” funcionalidades que nunca se usaban. Mientras tanto, el navegador maduraba en silencio. </span><code class="qwen-markdown-codespan">flexbox</code><span class="qwen-markdown-text">, </span><code class="qwen-markdown-codespan">grid</code><span class="qwen-markdown-text">, </span><code class="qwen-markdown-codespan">&lt;dialog&gt;</code><span class="qwen-markdown-text">, </span><code class="qwen-markdown-codespan">constraint validation API</code><span class="qwen-markdown-text">, </span><code class="qwen-markdown-codespan">:has()</code><span class="qwen-markdown-text">, </span><code class="qwen-markdown-codespan">@layer</code><span class="qwen-markdown-text"> y variables CSS resolvieron directamente problemas que antes justificaban librerías de muchas lineas.</span></div><div class="qwen-markdown-space"> </div><div class="qwen-markdown-paragraph"><span class="qwen-markdown-text">Hoy, muchas de esas herramientas siguen siendo válidas, pero su uso debe ser </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">estratégico, no automático</span></strong><span class="qwen-markdown-text">. Bootstrap acelera un dashboard interno; SweetAlert mejora flujos críticos de confirmación; FullCalendar resuelve gestión compleja de turnos. Pero para un catálogo estático, un formulario de contacto o un hero informativo, los estándares nativos ya cubren el 80% del caso con menos código, mejor rendimiento y menor superficie de mantenimiento.</span></div><div class="qwen-markdown-space"> </div><h2 class="qwen-markdown-heading"><span class="qwen-markdown-text">4. 2024–2026: La IA no reemplaza el criterio, solo acelera la ejecución</span></h2><div class="qwen-markdown-paragraph"><span class="qwen-markdown-text" data-spm-anchor-id="a2ty_o01.29997173.0.i17.7ae655fbF91bBt">Hoy, herramientas de IA generan componentes, validaciones y layouts en segundos. Pero la web sigue siendo un sistema de restricciones, no un lienzo infinito. La IA no aplica hashes de integridad (</span><code class="qwen-markdown-codespan">integrity</code><span class="qwen-markdown-text">) por defecto, no configura </span><code class="qwen-markdown-codespan">Content-Security-Policy</code><span class="qwen-markdown-text"> restrictivas, no audita dependencias comprometidas, ni prioriza la simplicidad estructural sobre la acumulación de features. Tampoco responde por el mantenimiento a 3 años, la compatibilidad con navegadores legacy o el impacto en Core Web Vitals.</span></div><div class="qwen-markdown-space"> </div><div class="qwen-markdown-paragraph"><span class="qwen-markdown-text">Mi rol ya no es “escribir más rápido”. Es </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">verificar, estructurar y retirar lo que sobra</span></strong><span class="qwen-markdown-text">. Por eso integro scripts ligeros en Python que validan cabeceras, hashes y recursos externos, por eso prefiero soluciones nativas cuando cubren el caso y por eso documento límites, no solo ventajas. </span></div><div> </div><div class="qwen-markdown-paragraph"><span class="qwen-markdown-text">La IA es un multiplicador de productividad, pero la responsabilidad de la sigue siendo humana. Un prompt bien redactado no sustituye un código de manifiesto </span><span class="qwen-markdown-text">de integridad, una CSP explícita ni una política de actualización de dependencias.</span></div><div class="qwen-markdown-space"> </div><h2 class="qwen-markdown-heading"><span class="qwen-markdown-text">Conclusión: la evolución no es descarte, es criterio</span></h2><div class="qwen-markdown-paragraph"><span class="qwen-markdown-text" data-spm-anchor-id="a2ty_o01.29997173.0.i19.7ae655fbF91bBt">No abandoné los estilos inline porque fueran “malos”. Los abandoné cuando </span><code class="qwen-markdown-codespan">@layer</code><span class="qwen-markdown-text" data-spm-anchor-id="a2ty_o01.29997173.0.i18.7ae655fbF91bBt"> y variables CSS resolvieron el mismo problema con menos acoplamiento. No rechazo Bootstrap por principio; lo rechazo cuando añade 2500 lineas para un bloque que se resuelve con </span><code class="qwen-markdown-codespan">min-height: 100dvh</code><span class="qwen-markdown-text"> y </span><code class="qwen-markdown-codespan">object-fit</code><span class="qwen-markdown-text">. Y no confío ciegamente en la IA, porque la velocidad de generación no equivale a estabilidad estructural.</span></div><div class="qwen-markdown-space"> </div><div class="qwen-markdown-paragraph"><span class="qwen-markdown-text" data-spm-anchor-id="a2ty_o01.29997173.0.i20.7ae655fbF91bBt">Para una PyME en CDMX o Hidalgo, la diferencia entre un sitio que convierte y uno que solo “se ve moderno” rara vez está en la cantidad de librerías instaladas. Está en la capacidad de elegir lo que resuelve un problema real, medir su impacto en rendimiento y mantenimiento, y retirar lo que ya no aporta valor. La web ya maduró. Los estándares nativos cierran brechas que antes justificaban abstracciones masivas. Ahora nos toca usarlos con criterio, verificar lo que se despliega y recordar que la simplicidad no es primitiva: es el resultado de haber eliminado lo superfluo.</span></div>								</div>
					</div>
				</div>
				</div>
		]]></content:encoded>
					
					<wfw:commentRss>https://ferredia.com/26-anos-construyendo-la-web-y-lo-que-la-ia-no-puede-resolver-por-mi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>UTF-8: El estándar invisible que sostiene la web</title>
		<link>https://ferredia.com/utf-8-el-estandar-invisible-que-sostiene-la-web/</link>
					<comments>https://ferredia.com/utf-8-el-estandar-invisible-que-sostiene-la-web/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Jiménez]]></dc:creator>
		<pubDate>Thu, 04 Dec 2025 20:43:20 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ASCII]]></category>
		<category><![CDATA[codificación de texto]]></category>
		<category><![CDATA[Ken Thompson]]></category>
		<category><![CDATA[unicode]]></category>
		<category><![CDATA[utf8]]></category>
		<guid isPermaLink="false">https://ferredia.com/?p=366</guid>

					<description><![CDATA[UTF-8: El estándar invisible que sostiene la web (y por qué nació de una crisis global de incompatibilidad) El problema que nadie vio venir: la Torre de Babel digital A finales de los años 80, el mundo del software enfrentaba una crisis silenciosa: cada idioma, cada región y cada sistema operativo usaba su propia codificación [&#8230;]]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="366" class="elementor elementor-366" data-elementor-post-type="post">
				<div data-particle_enable="false" data-particle-mobile-disabled="false" class="elementor-element elementor-element-a8bbb49 e-flex e-con-boxed e-con e-parent" data-id="a8bbb49" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-ab8da75 elementor-widget elementor-widget-text-editor" data-id="ab8da75" data-element_type="widget" data-e-type="widget" data-widget_type="text-editor.default">
									<h2 class="qwen-markdown-heading"><strong class="qwen-markdown-strong"><span class="qwen-markdown-text" data-spm-anchor-id="a2ty_o01.29997173.0.i5.784a5171SZJ9AU">UTF-8: El estándar invisible que sostiene la web (y por qué nació de una crisis global de incompatibilidad)</span></strong></h2><h3 class="qwen-markdown-heading"><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">El problema que nadie vio venir: la Torre de Babel digital</span></strong></h3><p class="qwen-markdown-paragraph"><span class="qwen-markdown-text">A finales de los años 80, el mundo del software enfrentaba una crisis silenciosa: </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">cada idioma, cada región y cada sistema operativo usaba su propia codificación de texto</span></strong><span class="qwen-markdown-text">. </span></p><ul class="qwen-markdown-list" dir="auto"><li><span class="qwen-markdown-text">En EE.UU., dominaba <strong class="qwen-markdown-strong">ASCII</strong> (7 bits, 128 caracteres). </span></li><li><span class="qwen-markdown-text">En Europa Occidental, <strong class="qwen-markdown-strong">ISO-8859-1 (Latin-1)</strong>. </span></li><li><span class="qwen-markdown-text">En Rusia, <strong class="qwen-markdown-strong">KOI8-R</strong> o <strong class="qwen-markdown-strong">Windows-1251</strong>. </span></li><li><span class="qwen-markdown-text">En Japón, <strong class="qwen-markdown-strong">Shift-JIS</strong> o <strong class="qwen-markdown-strong">EUC-JP</strong>. </span></li><li><span class="qwen-markdown-text">En China, <strong class="qwen-markdown-strong">GB2312</strong> o <strong class="qwen-markdown-strong">Big5</strong> (para el chino tradicional).</span></li></ul><p class="qwen-markdown-paragraph"><span class="qwen-markdown-text">El resultado: </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">archivos de texto se volvían ilegibles al cruzar fronteras</span></strong><span class="qwen-markdown-text">. Un correo electrónico japonés llegaba como “ãƒ†ã‚¹ãƒˆ” en una terminal estadounidense. Un documento alemán mostraba “MÃ¼ller” en lugar de “Müller”. Esta fragmentación amenazaba con convertir internet en un archipiélago de islas lingüísticas incompatibles.</span></p><h3 class="qwen-markdown-heading"><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">El intento fallido: Unicode y UTF-16</span></strong></h3><p class="qwen-markdown-paragraph"><span class="qwen-markdown-text">En 1991, el </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">Unicode Consortium</span></strong><span class="qwen-markdown-text"> lanzó Unicode 1.0 con una idea ambiciosa: </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">asignar un número único (code point) a cada carácter del mundo</span></strong><span class="qwen-markdown-text">. Pero su implementación inicial, </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">UCS-2</span></strong><span class="qwen-markdown-text">, usaba </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">2 bytes fijos por carácter (16 bits)</span></strong><span class="qwen-markdown-text"> —suficiente para 65,536 símbolos, pero </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">insuficiente para los miles de ideogramas chinos, históricos y técnicos</span></strong><span class="qwen-markdown-text">.</span></p><p class="qwen-markdown-paragraph"><span class="qwen-markdown-text">Peor aún: </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">UCS-2/UTF-16 rompía la compatibilidad con ASCII</span></strong><span class="qwen-markdown-text">. Un archivo ASCII leído como UTF-16 mostraba caracteres basura (¡porque interpretaba cada byte como parte de un par!).</span></p><h3 class="qwen-markdown-heading"><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">La solución elegante: UTF-8 (1992)</span></strong></h3><p class="qwen-markdown-paragraph"><span class="qwen-markdown-text">En </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">septiembre de 1992</span></strong><span class="qwen-markdown-text">, en el </span><em><span class="qwen-markdown-text">Plan 9 from Bell Labs</span></em><span class="qwen-markdown-text"> (el sucesor experimental de Unix), </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">Ken Thompson</span></strong><span class="qwen-markdown-text"> diseñó </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">UTF-8</span></strong><span class="qwen-markdown-text">, con aportes clave de </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">Rob Pike</span></strong><span class="qwen-markdown-text">. Su propuesta se publicó formalmente en el </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">RFC 2279 (1998)</span></strong><span class="qwen-markdown-text"> y luego en el </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">RFC 3629 (2003)</span></strong><span class="qwen-markdown-text">, que definió el estándar moderno.</span></p><p class="qwen-markdown-paragraph"><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">UTF-8 resolvió tres problemas críticos</span></strong><span class="qwen-markdown-text">:</span></p><ol class="qwen-markdown-list" dir="auto" start="1"><li><span class="qwen-markdown-text"><strong class="qwen-markdown-strong">Compatibilidad total con ASCII</strong>: Los primeros 128 code points (0–127) se codifican <strong class="qwen-markdown-strong">exactamente igual que en ASCII</strong>, byte por byte.</span></li><li><span class="qwen-markdown-text"><strong class="qwen-markdown-strong">Eficiencia variable</strong>: Usa entre <strong class="qwen-markdown-strong">1 y 4 bytes por carácter</strong>, asignando menos espacio a caracteres latinos comunes y más a ideogramas o símbolos raros.</span></li><li><span class="qwen-markdown-text"><strong class="qwen-markdown-strong">Autosincronización</strong>: Cada byte de inicio tiene un patrón único (<code class="qwen-markdown-codespan">0xxxxxxx</code>, <code class="qwen-markdown-codespan">110xxxxx</code>, <code class="qwen-markdown-codespan">1110xxxx</code>, <code class="qwen-markdown-codespan">11110xxx</code>). Si se pierde un byte, el parser puede encontrar el siguiente carácter válido sin descarrilarse.</span></li></ol><h3 class="qwen-markdown-heading"><strong class="qwen-markdown-strong"><span class="qwen-markdown-text" data-spm-anchor-id="a2ty_o01.29997173.0.i20.784a5171SZJ9AU">¿Dónde se usa UTF-8 hoy (2025)?</span></strong></h3><ul class="qwen-markdown-list" dir="auto"><li><span class="qwen-markdown-text"><strong class="qwen-markdown-strong">Web</strong>: 98.2% de los sitios web (W3Techs, noviembre 2025). </span></li><li><span class="qwen-markdown-text"><strong class="qwen-markdown-strong">Linux y macOS</strong>: UTF-8 es la codificación predeterminada del sistema. </span></li><li><span class="qwen-markdown-text"><strong class="qwen-markdown-strong">Bases de datos</strong>: PostgreSQL, MySQL (desde 4.1), SQLite —todos usan UTF-8 por defecto. </span></li><li><span class="qwen-markdown-text"><strong class="qwen-markdown-strong">Protocolos</strong>: HTTP, JSON, XML, SMTP —todos asumen UTF-8 si no se especifica lo contrario. </span></li><li><span class="qwen-markdown-text"><strong class="qwen-markdown-strong">Git</strong>: Almacena todo en UTF-8; los commits con otras codificaciones causan advertencias. </span></li><li><span class="qwen-markdown-text"><strong class="qwen-markdown-strong">Incluso Windows</strong>: Desde 2019 (Windows 10 v1903), permite UTF-8 como &#8220;ANSI code page&#8221;, aunque con advertencias.</span></li></ul><h3 class="qwen-markdown-heading"><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">¿Y lo que viene? ¿Habrá una actualización o ruptura de UTF-8?</span></strong></h3><p class="qwen-markdown-paragraph"><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">No. UTF-8 no será reemplazado, ni está planeada ninguna ruptura.</span></strong><span class="qwen-markdown-text"> De hecho, su posición es más sólida que nunca. Pero la razón no es solo técnica, sino estructural: </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">UTF-8 es infraestructura crítica global</span></strong><span class="qwen-markdown-text">, y cualquier intento de sustituirla sería comparable a querer reemplazar el sistema métrico o TCP/IP.</span></p><p class="qwen-markdown-paragraph"><span class="qwen-markdown-text">El estándar actual de UTF-8, definido en el </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">RFC 3629 (2003)</span></strong><span class="qwen-markdown-text">, limita la codificación a </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">4 bytes máximo</span></strong><span class="qwen-markdown-text">, lo que permite representar </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">code points desde U+0000 hasta U+10FFFF</span></strong><span class="qwen-markdown-text"> —el rango completo del </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">Unicode Standard</span></strong><span class="qwen-markdown-text">.</span></p><p class="qwen-markdown-paragraph"><span class="qwen-markdown-text">El </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">Unicode Standard v15.1 (2023)</span></strong><span class="qwen-markdown-text"> define </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">149,186 caracteres asignados</span></strong><span class="qwen-markdown-text">, de un total de </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">1,114,112 puntos posibles</span></strong><span class="qwen-markdown-text"> en el espacio actual. Y el </span><em><span class="qwen-markdown-text">Unicode Consortium</span></em><span class="qwen-markdown-text"> ha declarado reiteradamente que </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">no hay planes de expandir más allá de U+10FFFF</span></strong><span class="qwen-markdown-text">, porque </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">el espacio actual es suficiente para todos los usos conocidos</span></strong><span class="qwen-markdown-text">, incluyendo idiomas muertos, emojis, notación matemática y glíficos mesoamericanos.</span></p><p class="qwen-markdown-paragraph"><span class="qwen-markdown-text">Existen variantes marginales como </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">CESU-8</span></strong><span class="qwen-markdown-text"> o </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">Modified UTF-8</span></strong><span class="qwen-markdown-text">, pero son soluciones de nicho para sistemas legados (como Java antiguo) y </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">no son UTF-8 válido ni interoperables con la web</span></strong><span class="qwen-markdown-text">.</span></p><p class="qwen-markdown-paragraph"><span class="qwen-markdown-text">La verdadera evolución no está en cambiar la codificación, sino en cómo se </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">interpreta</span></strong><span class="qwen-markdown-text"> el texto: manejo de </span><em><span class="qwen-markdown-text">grapheme clusters</span></em><span class="qwen-markdown-text">, algoritmos bidireccionales (bidi), y motores tipográficos como HarfBuzz. </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">UTF-8 es solo el transporte; la inteligencia está en las capas superiores.</span></strong></p><h3 class="qwen-markdown-heading"><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">Conclusión: UTF-8 es para siempre (hasta que el mundo cambie de civilización)</span></strong></h3><p class="qwen-markdown-paragraph"><span class="qwen-markdown-text">UTF-8 no está &#8220;obsoleto&#8221;, ni en riesgo. Al contrario: </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">es uno de los pocos estándares verdaderamente universales en la historia de la computación</span></strong><span class="qwen-markdown-text">. Su diseño anticipó fallos, respetó el legado y escaló sin romper nada.</span></p><p class="qwen-markdown-paragraph"><span class="qwen-markdown-text">No habrá una &#8220;ruptura&#8221;. Lo más probable es que </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">en 2100, si existe internet, aún use UTF-8</span></strong><span class="qwen-markdown-text"> —igual que seguimos usando ASCII para los primeros 128 caracteres, 60 años después.</span></p><blockquote class="qwen-markdown-blockquote"><p class="qwen-markdown-paragraph"><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">Ironía final</span></strong><span class="qwen-markdown-text">: El único &#8220;problema&#8221; de UTF-8 hoy es que muchos desarrolladores </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">aún no entienden la diferencia entre bytes, caracteres y graphemes</span></strong><span class="qwen-markdown-text">… pero eso no se resuelve con un nuevo encoding, sino con mejor educación.</span></p></blockquote><p class="qwen-markdown-paragraph"><span class="qwen-markdown-text">Y es ahí donde radica el verdadero desafío geek de hoy: no en inventar nuevos formatos, sino en </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">dominar con rigor los cimientos que ya sostienen el mundo digital</span></strong><span class="qwen-markdown-text">. Porque mientras todos persiguen IA generativa, metaversos o blockchains, </span><strong class="qwen-markdown-strong"><span class="qwen-markdown-text">el 98% de la web sigue en pie gracias a una idea brillante nacida en 1992 en los pasillos de Bell Labs</span></strong><span class="qwen-markdown-text">.</span></p><p> </p><h6 class="qwen-markdown-paragraph"><strong class="qwen-markdown-strong"><span class="qwen-markdown-text" data-spm-anchor-id="a2ty_o01.29997173.0.i21.784a5171SZJ9AU">Fuentes académicas y técnicas</span></strong><span class="qwen-markdown-text">: </span></h6><ul><li><h6><span class="qwen-markdown-text">Pike, R., &amp; Thompson, K. (1993). <em>Hello World or Καλημέρα κόσμε or こんにちは 世界</em>. Plan 9 paper. </span></h6></li><li><h6><span class="qwen-markdown-text">RFC 3629: <em>UTF-8, a transformation format of ISO 10646</em> (2003). </span></h6></li><li><h6><span class="qwen-markdown-text">W3Techs: <em>Usage statistics of character encodings</em> (2025). </span></h6></li><li><h6><span class="qwen-markdown-text">Unicode Consortium: <em>The Unicode Standard</em>, v15.1 (2023).</span></h6></li></ul><h6> </h6>								</div>
					</div>
				</div>
		<div data-particle_enable="false" data-particle-mobile-disabled="false" class="elementor-element elementor-element-07f9055 e-flex e-con-boxed e-con e-parent" data-id="07f9055" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-9e2f282 elementor-widget elementor-widget-image" data-id="9e2f282" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
															<img loading="lazy" decoding="async" loading="lazy" width="1024" height="427" src="https://ferredia.com/wp-content/uploads/2025/12/utf-8-1024x427.jpg" class="attachment-large size-large wp-image-369" alt="Utf 8" srcset="https://ferredia.com/wp-content/uploads/2025/12/utf-8-1024x427.jpg 1024w, https://ferredia.com/wp-content/uploads/2025/12/utf-8-300x125.jpg 300w, https://ferredia.com/wp-content/uploads/2025/12/utf-8-768x320.jpg 768w, https://ferredia.com/wp-content/uploads/2025/12/utf-8.jpg 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" />															</div>
					</div>
				</div>
				</div>
		]]></content:encoded>
					
					<wfw:commentRss>https://ferredia.com/utf-8-el-estandar-invisible-que-sostiene-la-web/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress y ACF: La fórmula para portafolios y sitios corporativos dinámicos</title>
		<link>https://ferredia.com/wordpress-y-acf-la-formula-para-portafolios-y-sitios-corporativos-dinamicos/</link>
					<comments>https://ferredia.com/wordpress-y-acf-la-formula-para-portafolios-y-sitios-corporativos-dinamicos/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Jiménez]]></dc:creator>
		<pubDate>Thu, 25 Sep 2025 00:33:44 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://ferredia.com/?p=64</guid>

					<description><![CDATA[Introducción En el mundo corporativo moderno, la agilidad y la automatización son clave. WordPress, combinado con Advanced Custom Fields (ACF), permite crear sitios web altamente flexibles donde los contenidos, proyectos y portafolios se actualizan automáticamente sin necesidad de tocar el código cada vez. Si trabajas en desarrollo web o gestionas proyectos para PyMEs, este enfoque [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading"><strong>Introducción</strong></h3>



<p class="wp-block-paragraph">En el mundo corporativo moderno, la agilidad y la automatización son clave. WordPress, combinado con <strong>Advanced Custom Fields (ACF)</strong>, permite crear sitios web altamente flexibles donde los contenidos, proyectos y portafolios se actualizan automáticamente sin necesidad de tocar el código cada vez.</p>



<p class="wp-block-paragraph">Si trabajas en desarrollo web o gestionas proyectos para PyMEs, este enfoque te ahorra tiempo y garantiza consistencia visual y funcional en todos tus proyectos.</p>



<h3 class="wp-block-heading">Instalación y configuración básica de ACF</h3>



<ol class="wp-block-list">
<li>Instala el plugin <strong>Advanced Custom Fields</strong> desde el repositorio de WordPress.</li>



<li>Crea un <strong>grupo de campos</strong> para tus proyectos (por ejemplo: nombre del proyecto, descripción, fecha de inicio, imágenes, URL).</li>



<li>Asigna este grupo de campos a un tipo de contenido personalizado o a “Entradas” si deseas usarlo en posts de blog.</li>
</ol>



<h3 class="wp-block-heading">Creación de un portafolio dinámico</h3>



<ol class="wp-block-list">
<li>Crea un <strong>Custom Post Type (CPT)</strong> llamado “Proyectos”.</li>



<li>Añade los campos de ACF al CPT “Proyectos”.</li>



<li>Usa un <strong>template de WordPress</strong> para mostrar los proyectos:</li>
</ol>



<pre class="wp-block-code"><code>&lt;?php
$proyectos = new WP_Query(array('post_type' =&gt; 'proyectos'));
if ($proyectos-&gt;have_posts()) : 
    while ($proyectos-&gt;have_posts()) : $proyectos-&gt;the_post(); ?&gt;
        &lt;h2&gt;&lt;?php the_field('nombre_del_proyecto'); ?&gt;&lt;/h2&gt;
        &lt;p&gt;&lt;?php the_field('descripcion'); ?&gt;&lt;/p&gt;
        &lt;img src="&lt;?php the_field('imagen_del_proyecto'); ?&gt;" alt=""&gt;
    &lt;?php endwhile;
endif; wp_reset_postdata();
?&gt;
</code></pre>



<p class="wp-block-paragraph">Esto crea un portafolio que se <strong>actualiza automáticamente</strong> cuando agregas nuevos proyectos en WordPress.</p>



<h4 class="wp-block-heading">Buenas prácticas corporativas</h4>



<ul class="wp-block-list">
<li>Mantén consistencia en los nombres de campos y categorías.</li>



<li>Usa imágenes optimizadas para mejorar la velocidad del sitio.</li>



<li>Configura ACF para campos obligatorios y previsualización de contenido.</li>
</ul>



<h3 class="wp-block-heading"><strong>Caso práctico</strong></h3>



<p class="wp-block-paragraph">Para un cliente PyME del sector logístico, desarrollamos un portafolio de proyectos que incluye fotos de instalaciones, documentación de procesos y enlaces a reportes automatizados. Antes de implementar ACF, cada actualización requería editar el código. Con ACF, el cliente ahora sube información directamente desde el panel de WordPress en menos de 5 minutos.</p>



<h3 class="wp-block-heading"><strong>Tips</strong></h3>



<ul class="wp-block-list">
<li>Combina ACF con <strong>Elementor</strong> para maquetación visual sin tocar código.</li>



<li>Usa <strong>repeater fields</strong> para mostrar múltiples imágenes o etapas de un proyecto.</li>



<li>Configura reglas condicionales para mostrar ciertos campos solo en proyectos específicos.</li>
</ul>





<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">¿Quieres implementar un portafolio dinámico para tu empresa o tus proyectos? Contáctame o prueba mis <strong>scripts de automatización para WordPress y Python</strong>, diseñados para PyMEs y desarrolladores que buscan eficiencia real. Contactame:</p>
</blockquote>
</blockquote>
</blockquote>


<div class="wpforms-container wpforms-container-full wpforms-block wpforms-block-5d20b773-dbd3-4c08-aa2a-039347a75e0f wpforms-field-label text-primary wpforms-render-modern" id="wpforms-14"><form id="wpforms-form-14" class="wpforms-validate wpforms-form wpforms-ajax-form" data-formid="14" method="post" enctype="multipart/form-data" action="/category/uncategorized/feed/" data-token="217eb257d512758f2a90cb7fe9ce2dee" data-token-time="1781784604"><noscript class="wpforms-error-noscript">Por favor, activa JavaScript en tu navegador para completar este formulario.</noscript><div class="wpforms-hidden" id="wpforms-error-noscript">Por favor, activa JavaScript en tu navegador para completar este formulario.</div><div class="wpforms-field-container"><div id="wpforms-14-field_1-container" class="wpforms-field wpforms-field-name text-primary" data-field-id="1"><fieldset><legend class="wpforms-field-label">Nombre <span class="wpforms-required-label" aria-hidden="true">*</span></legend><div class="wpforms-field-row wpforms-field-medium"><div class="wpforms-field-row-block wpforms-first wpforms-one-half"><input type="text" id="wpforms-14-field_1" class="wpforms-field-name-first wpforms-field-required" name="wpforms[fields][1][first]" aria-errormessage="wpforms-14-field_1-error" required><label for="wpforms-14-field_1" class="wpforms-field-sublabel after">Nombre</label></div><div class="wpforms-field-row-block wpforms-one-half"><input type="text" id="wpforms-14-field_1-last" class="wpforms-field-name-last wpforms-field-required" name="wpforms[fields][1][last]" aria-errormessage="wpforms-14-field_1-last-error" required><label for="wpforms-14-field_1-last" class="wpforms-field-sublabel after">Apellidos</label></div></div></fieldset></div>		<div id="wpforms-14-field_4-container"
			class="wpforms-field wpforms-field-text"
			data-field-type="text"
			data-field-id="4"
			>
			<label class="wpforms-field-label" for="wpforms-14-field_4" >o electrónico mensaje</label>
			<input type="text" id="wpforms-14-field_4" class="wpforms-field-medium" name="wpforms[fields][4]" >
		</div>
		<div id="wpforms-14-field_2-container" class="wpforms-field wpforms-field-email" data-field-id="2"><label class="wpforms-field-label" for="wpforms-14-field_2">Correo electrónico <span class="wpforms-required-label" aria-hidden="true">*</span></label><input type="email" id="wpforms-14-field_2" class="wpforms-field-medium wpforms-field-required" name="wpforms[fields][2]" spellcheck="false" aria-errormessage="wpforms-14-field_2-error" required></div><div id="wpforms-14-field_3-container" class="wpforms-field wpforms-field-textarea" data-field-id="3"><label class="wpforms-field-label" for="wpforms-14-field_3">Comentario o mensaje</label><textarea id="wpforms-14-field_3" class="wpforms-field-medium" name="wpforms[fields][3]" aria-errormessage="wpforms-14-field_3-error" ></textarea></div><script>
				( function() {
					const style = document.createElement( 'style' );
					style.appendChild( document.createTextNode( '#wpforms-14-field_4-container { position: absolute !important; overflow: hidden !important; display: inline !important; height: 1px !important; width: 1px !important; z-index: -1000 !important; padding: 0 !important; } #wpforms-14-field_4-container input { visibility: hidden; } #wpforms-conversational-form-page #wpforms-14-field_4-container label { counter-increment: none; }' ) );
					document.head.appendChild( style );
					document.currentScript?.remove();
				} )();
			</script></div><!-- .wpforms-field-container --><div class="wpforms-submit-container" ><input type="hidden" name="wpforms[id]" value="14"><input type="hidden" name="page_title" value="Uncategorized"><input type="hidden" name="page_url" value="https://ferredia.com/category/uncategorized/feed/"><input type="hidden" name="url_referer" value=""><button type="submit" name="wpforms[submit]" id="wpforms-submit-14" class="wpforms-submit" data-alt-text="Enviando..." data-submit-text="Enviar" aria-live="assertive" value="wpforms-submit">Enviar</button><img loading="lazy" decoding="async" loading="lazy" src="https://ferredia.com/wp-content/plugins/wpforms/assets/images/submit-spin.svg" class="wpforms-submit-spinner" style="display: none;" width="26" height="26" alt="Cargando"></div></form></div>  <!-- .wpforms-container -->]]></content:encoded>
					
					<wfw:commentRss>https://ferredia.com/wordpress-y-acf-la-formula-para-portafolios-y-sitios-corporativos-dinamicos/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Caché de objetos 44/127 objetos usando APC
Page Caching using Disk: Enhanced 
Caché de base de datos 4/66 consultas en 0.028 segundos usando Disk

Served from: ferredia.com @ 2026-06-18 06:10:04 by W3 Total Cache
-->