<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Javascript on Blog de Sergio Comerón</title>
		<link>https://sergiocomeron.com/blog/tags/javascript/</link>
		<description>Recent content in Javascript on Blog de Sergio Comerón</description>
		<generator>Hugo</generator>
		<language>es</language>
		
		
		
		
			<lastBuildDate>Wed, 05 Aug 2026 13:00:00 +0200</lastBuildDate>
		
			<atom:link href="https://sergiocomeron.com/blog/tags/javascript/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>El mayor ataque a npm no me ha rozado, y no fue por previsión</title>
				<link>https://sergiocomeron.com/blog/posts/npm-sin-dependencias/</link>
				<pubDate>Wed, 05 Aug 2026 13:00:00 +0200</pubDate>
				<guid>https://sergiocomeron.com/blog/posts/npm-sin-dependencias/</guid>
				<description>&lt;p&gt;Ayer alguien robó las credenciales del mantenedor de &lt;code&gt;keyv&lt;/code&gt;, una librería de caché con unos 127 millones de descargas semanales, y con ese acceso publicó versiones envenenadas de todo lo que ese mantenedor tocaba.&lt;/p&gt;&#xA;&lt;p&gt;El resultado, según el análisis de Microsoft: &lt;strong&gt;más de 400 paquetes comprometidos&lt;/strong&gt;, y contando las versiones, más de mil trescientas. Entre ellos &lt;code&gt;flat-cache&lt;/code&gt; y &lt;code&gt;file-entry-cache&lt;/code&gt;, que suman por sí solos más de mil millones de instalaciones al mes porque cuelgan de ESLint, que cuelga de casi todo. En total, del orden de &lt;strong&gt;dos mil millones de instalaciones mensuales&lt;/strong&gt; afectadas.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Moodle ha elegido React, y mi plugin va detrás</title>
				<link>https://sergiocomeron.com/blog/posts/moodle-react/</link>
				<pubDate>Mon, 15 Jun 2026 09:00:00 +0200</pubDate>
				<guid>https://sergiocomeron.com/blog/posts/moodle-react/</guid>
				<description>&lt;p&gt;Llevo tiempo con una idea rondándome: modernizar el frontend de mi plugin de Moodle. Hoy genera HTML en el servidor y recarga la página para cualquier cosa. Quiero que la interfaz &lt;strong&gt;reaccione&lt;/strong&gt; —que cambie sola cuando cambian los datos, sin recargar—.&lt;/p&gt;&#xA;&lt;p&gt;El primer paso ya lo di, y lo conté en el &lt;a href=&#34;https://sergiocomeron.com/blog/podcast/ep012/&#34;&gt;episodio del podcast «Datos, no comportamiento»&lt;/a&gt;: el servidor dejó de fabricar páginas y pasó a exponer &lt;strong&gt;datos&lt;/strong&gt; a través de Web Services. Ese es el cimiento. Lo que faltaba era decidir &lt;strong&gt;quién pinta esos datos en el navegador&lt;/strong&gt;. Y la respuesta, esta vez, no la pongo yo: la ha puesto Moodle.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Cómo sé qué se lee en mi blog sin Google Analytics ni cookies</title>
				<link>https://sergiocomeron.com/blog/posts/analitica-sin-cookies/</link>
				<pubDate>Sun, 14 Jun 2026 00:00:00 +0200</pubDate>
				<guid>https://sergiocomeron.com/blog/posts/analitica-sin-cookies/</guid>
				<description>&lt;p&gt;El post más leído de este blog es el de &lt;a href=&#34;https://sergiocomeron.com/blog/posts/self-hosting-cloudflare-mac-mini/&#34;&gt;cómo me autoalojo en un Mac mini&lt;/a&gt;. Lo sé con certeza. Y lo sé &lt;strong&gt;sin Google Analytics, sin una sola cookie y sin entregar los datos de mis lectores a una empresa de analítica&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Lo sé porque la analítica de este sitio me la monté yo, y cabe en un beacon de veinte líneas, un fichero de texto y un panel que solo veo yo. Va de eso este post.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Deuda técnica, parte 4: creía que había terminado… y quedaba el último que recargaba la página entera</title>
				<link>https://sergiocomeron.com/blog/posts/deuda-tecnica-mod-jitsi-4/</link>
				<pubDate>Sun, 07 Jun 2026 18:30:00 +0200</pubDate>
				<guid>https://sergiocomeron.com/blog/posts/deuda-tecnica-mod-jitsi-4/</guid>
				<description>&lt;p&gt;Le he cogido el vicio y no podía parar. Así que, aprovechando que es domingo, me senté a rematar otro fleco del plugin. Y salió esto.&lt;/p&gt;&#xA;&lt;p&gt;En la &lt;a href=&#34;https://sergiocomeron.com/blog/posts/deuda-tecnica-mod-jitsi-3/&#34;&gt;tercera parte&lt;/a&gt; cerré diciendo que el gran refactor estaba &lt;em&gt;hecho&lt;/em&gt;: &lt;code&gt;external.php&lt;/code&gt;, &lt;code&gt;lib.php&lt;/code&gt;, la videollamada y &lt;code&gt;view.php&lt;/code&gt;. Y lo estaba… casi. Porque al refactorizar &lt;code&gt;view.php&lt;/code&gt; dejé, a propósito, un fleco para más tarde: la &lt;strong&gt;tabla de grabaciones&lt;/strong&gt;. Era el último rincón del plugin que seguía haciendo las cosas como en 2015 —recargar la página entera cada vez que borras, ocultas o añades una grabación— y con todo el HTML de cada fila cosido a mano.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Deuda técnica, parte 3: refactoricé una vista de 1.000 líneas… y debajo había una consulta escaneando toda la tabla de logs</title>
				<link>https://sergiocomeron.com/blog/posts/deuda-tecnica-mod-jitsi-3/</link>
				<pubDate>Sun, 07 Jun 2026 12:00:00 +0200</pubDate>
				<guid>https://sergiocomeron.com/blog/posts/deuda-tecnica-mod-jitsi-3/</guid>
				<description>&lt;p&gt;Tercera y última parte de la serie de deuda técnica en mi plugin de Jitsi para Moodle. En la &lt;a href=&#34;https://sergiocomeron.com/blog/posts/deuda-tecnica-mod-jitsi/&#34;&gt;parte 1&lt;/a&gt; troceé dos &amp;ldquo;archivos-dios&amp;rdquo;; en la &lt;a href=&#34;https://sergiocomeron.com/blog/posts/deuda-tecnica-mod-jitsi-2/&#34;&gt;parte 2&lt;/a&gt; desmonté la función de 924 líneas de la videollamada. Quedaba el último monstruo: &lt;strong&gt;&lt;code&gt;view.php&lt;/code&gt;&lt;/strong&gt;, la página que ve el alumno o el profesor al entrar en la actividad. 971 líneas que lo mezclaban todo.&lt;/p&gt;&#xA;&lt;p&gt;La refactoricé con la receta de siempre. Pero esta vez el refactor en sí es lo de menos —es el mismo patrón de las partes anteriores—. Lo interesante fue &lt;strong&gt;lo que apareció al levantar las alfombras&lt;/strong&gt;: una consulta escaneando la tabla de logs de todo el sitio, un caché que la tapaba, un N+1, un bug que dejaba grabar y emitir a la vez, y un par de &amp;ldquo;cápsulas del tiempo&amp;rdquo; enterradas en el código.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Deuda técnica, parte 2: &#34;mover no era mejorar&#34;, así que esta vez lo desmonté de verdad</title>
				<link>https://sergiocomeron.com/blog/posts/deuda-tecnica-mod-jitsi-2/</link>
				<pubDate>Sat, 06 Jun 2026 19:00:00 +0200</pubDate>
				<guid>https://sergiocomeron.com/blog/posts/deuda-tecnica-mod-jitsi-2/</guid>
				<description>&lt;p&gt;En la &lt;a href=&#34;https://sergiocomeron.com/blog/posts/deuda-tecnica-mod-jitsi/&#34;&gt;primera parte&lt;/a&gt; os dejé en el peor momento posible: con una lección a medio cumplir. La moraleja de aquel post era &lt;strong&gt;&amp;ldquo;mover no es mejorar&amp;rdquo;&lt;/strong&gt;, y la ilustré con mi peor pieza de código —una función de casi 924 líneas que genera la videollamada— a la que hice justo eso: &lt;strong&gt;moverla&lt;/strong&gt; de sitio sin tocarla por dentro. Seguía ahí, intacta, escupiendo HTML y unas 600 líneas de JavaScript concatenado a mano. Prometido quedaba arreglarla &amp;ldquo;más adelante&amp;rdquo;.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
