<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
    <title>storagebits · #esp32</title>
    <subtitle>Firmware, apps de TV, un homelab, construidos de noche con una organización de agentes de IA. Y blok, el cuaderno de taller.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://blok.storagebits.workers.dev/es/tags/esp32/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://blok.storagebits.workers.dev"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-10-16T00:00:00+00:00</updated>
    <id>https://blok.storagebits.workers.dev/es/tags/esp32/atom.xml</id>
    <entry xml:lang="es">
        <title>Un reloj de 2020, un firmware completo, tres días</title>
        <published>2026-10-16T00:00:00+00:00</published>
        <updated>2026-10-16T00:00:00+00:00</updated>
        <author><name>François</name></author>
        <link rel="alternate" type="text/html" href="https://blok.storagebits.workers.dev/es/blog/ressusciter-kronograf/"/>
        <id>https://blok.storagebits.workers.dev/es/blog/ressusciter-kronograf/</id>
        <summary type="html">Un T-Watch de 2020 dormía en un rincón: desarrollar para él exigía demasiado esfuerzo. En tres días, con un agente, recibió un firmware escrito desde cero y publicado con licencia MIT.</summary>
        <content type="html" xml:base="https://blok.storagebits.workers.dev/es/blog/ressusciter-kronograf/">&lt;p&gt;Compré un LilyGO T-Watch 2020 hace seis años, porque era barato e ideal para probar y trastear. Desarrollar para él, en cambio, exigía una inversión real: C/C++, un framework que aprender, nociones de sistemas embebidos. Acabó en un rincón, junto a otros side projects sin terminar.&lt;/p&gt;
&lt;p&gt;Con la IA, todos esos frenos desaparecen: en pocos minutos, tenía un firmware completo, escrito desde cero. Sin la IA, no lo habría sacado del cajón: crear cualquier cosa en él exigía demasiado esfuerzo.&lt;/p&gt;
&lt;p&gt;¿Qué aparatos duermen en tu casa? Imagina lo que podrías hacer con ellos, en un tiempo récord.&lt;/p&gt;
&lt;p&gt;La &lt;a href=&quot;https://blok.storagebits.workers.dev/es/blog/quatre-jours/&quot;&gt;entrada sobre los cuatro días&lt;/a&gt; ya contó el primer flasheo. Aquí me quedo con el reloj.&lt;/p&gt;
&lt;h2 id=&quot;lo-que-queria&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#lo-que-queria&quot; aria-label=&quot;Anchor link for: lo-que-queria&quot;&gt;#&lt;/a&gt;
Lo que quería&lt;/h2&gt;
&lt;p&gt;Una esfera de cronógrafo de aviación y displays de 7 segmentos al estilo de los «circuitos temporales». Luego el tiempo, los autobuses y las notificaciones del iPhone. La lista completa de aplicaciones está en el README del repositorio.&lt;/p&gt;
&lt;p&gt;Mi método se resume en dos gestos. Expongo sencillamente las funciones que quiero. Luego pido enseguida una primera versión de principio a fin, para tener un ciclo de retroalimentación corto. El resultado se vuelve convincente muy rápido.&lt;/p&gt;
&lt;p&gt;Dirigí el desarrollo en lenguaje natural, expresando intenciones. Leyendo el código generado, también aprendí mucho, tanto sobre el lenguaje como sobre los frameworks y los conceptos de sistemas embebidos. ¡El alcance pedagógico es inmenso!&lt;/p&gt;
&lt;h2 id=&quot;el-comienzo&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#el-comienzo&quot; aria-label=&quot;Anchor link for: el-comienzo&quot;&gt;#&lt;/a&gt;
El comienzo&lt;/h2&gt;
&lt;p&gt;Primer commit a las 3:22. El prompt de misión imponía dos reglas: hacer una copia de seguridad de los 16 MB de flash originales antes de cualquier escritura, y no tocar nunca los eFuses ni la tensión del núcleo.&lt;/p&gt;
&lt;p&gt;La copia de seguridad estuvo a punto de fallar. A 921 600 baudios, el puerto USB desapareció en plena lectura. El agente volvió a empezar a 230 400 baudios, en bloques de 1 MB verificados uno a uno, porque por encima el cable introducía errores. A las 3:46, la copia completa estaba verificada y su hash SHA-256 registrado. A las 3:48, primer flasheo verificado en el reloj.&lt;/p&gt;
&lt;p&gt;Tuve un poco de miedo de brickear el reloj. No sabía de dónde venía el fallo; probablemente del cable. El agente se encargó de todo, hasta probar un flasheo lento y fraccionado para lidiar con ese cable defectuoso (!). Sus preguntas y sus métodos eran pertinentes y precisos, y eso era lo que me daba confianza.&lt;/p&gt;
&lt;p&gt;A las 4:09, la esfera de aviador aparecía en pantalla, con un segundero a 8 Hz.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/es/blog/ressusciter-kronograf/kronograf-t1-aviator.webp&quot; alt=&quot;La esfera de cronógrafo de aviación, captura del reloj real por el puerto serie: bisel graduado, tres subesferas de batería, minutos y pasos, segundero naranja&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;La esfera de aviador, capturada en el reloj real por el puerto serie. Captura ya publicada en la entrada anterior.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;el-momento-en-que-se-rompio&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#el-momento-en-que-se-rompio&quot; aria-label=&quot;Anchor link for: el-momento-en-que-se-rompio&quot;&gt;#&lt;/a&gt;
El momento en que se rompió&lt;/h2&gt;
&lt;p&gt;Conectado por USB, el reloj aguantaba. Con batería, se colgaba sistemáticamente al cabo de unos segundos. Durante la mañana, temía que estuviera brickeado, y le metía prisa al agente para que fuera rápido antes del siguiente cuelgue. Tuve que apagarlo y encenderlo tres veces.&lt;/p&gt;
&lt;p&gt;Había dos causas, encontradas una tras otra. Primero, el watchdog del procesador seguía armado durante el sueño ligero. Ahora se suspende antes de entrar en reposo y se rearma al despertar. Después, una pulsación del botón congelaba el reloj. La línea de interrupción del chip de alimentación se queda en nivel bajo mientras no se lee, y la interrupción se volvía a disparar sin fin. Las interrupciones GPIO ahora se desactivan durante el sueño, y comprobé que el reloj aguantaba muy bien.&lt;/p&gt;
&lt;h2 id=&quot;una-decision-dejar-de-depender-del-cable&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#una-decision-dejar-de-depender-del-cable&quot; aria-label=&quot;Anchor link for: una-decision-dejar-de-depender-del-cable&quot;&gt;#&lt;/a&gt;
Una decisión: dejar de depender del cable&lt;/h2&gt;
&lt;p&gt;Los cortes del USB volvían durante los flasheos. Había dos opciones: esperar a que volviera el puerto, o hacer que el cable fuera accesorio. El agente propuso el «modo taller»: cuando el reloj está alimentado por USB y el Wi-Fi está configurado, se queda conectado, acepta actualizaciones por Wi-Fi (OTA) y expone una consola TCP. Un Wi-Fi encendido todo el tiempo es normalmente un antipatrón. Enchufado a la corriente, la batería no está en juego, y la opción se puede desactivar.&lt;/p&gt;
&lt;p&gt;Como el cable fallaba, el agente pasó por su cuenta a las actualizaciones por Wi-Fi (OTA). ¡Magia! Más tarde, los cortes aparecieron también mientras el procesador estaba en su cargador de arranque en ROM: así que el problema es de hardware, no de software. Después llegó un modo seguro: tras tres cuelgues seguidos en el primer minuto, el Bluetooth no arranca, para poder reparar siempre el reloj a distancia.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/es/blog/ressusciter-kronograf/kronograf-photo.webp&quot; alt=&quot;El T-Watch 2020 real sobre la mesa: pantalla de diagnóstico de Kronograf, memoria, sensores detectados en verde, batería al 100 %&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;El reloj real en la pantalla de diagnóstico, la primera pantalla flasheada. Foto ya publicada en la entrada anterior.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;donde-estoy&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#donde-estoy&quot; aria-label=&quot;Anchor link for: donde-estoy&quot;&gt;#&lt;/a&gt;
Dónde estoy&lt;/h2&gt;
&lt;p&gt;El problema del cable (B2 en &lt;code&gt;BLOCKERS.md&lt;/code&gt;) sigue abierto: la conexión micro-USB sigue siendo frágil. El doble toque que despierta la pantalla sigue siendo algo aleatorio, pero funciona. El gesto de muñeca para despertar el reloj todavía hay que ajustarlo. La autonomía durante un día entero aún no se ha medido.&lt;/p&gt;
&lt;p&gt;Lo que más me impresionó fue la rapidez con la que el agente flasheó el reloj por su cuenta y me mostró resultados concretos. Tengo muchas ganas de probarlo en otros aparatos. De hecho, pronto voy a volver a sacar mis micro:bits: ¡tengo una idea de proyecto!&lt;/p&gt;
&lt;aside class=&quot;transparence&quot; aria-label=&quot;Cómo se escribió esta entrada&quot;&gt;
  &lt;p class=&quot;transparence-titre&quot;&gt;Cómo se escribió esta entrada&lt;/p&gt;
  &lt;p&gt;Redactada por Claude Opus 5.5 a partir de: un encargo y una entrevista escritos por François, sus mensajes de sesión, el repositorio &lt;code&gt;kronograf&lt;/code&gt;, &lt;code&gt;DECISIONS.md&lt;/code&gt; y &lt;code&gt;BLOCKERS.md&lt;/code&gt;.&lt;/p&gt;
  &lt;p&gt;Revisada y corregida por François en 30 min, 17 % del texto reescrito.&lt;/p&gt;
  &lt;p&gt;Traducida del francés por la IA, a partir de la versión revisada. La traducción no se revisó línea por línea.&lt;/p&gt;
&lt;/aside&gt;
</content>
    </entry>
    <entry xml:lang="es">
        <title>Doce minutos entre la idea y la tele</title>
        <published>2026-10-12T00:00:00+00:00</published>
        <updated>2026-10-12T00:00:00+00:00</updated>
        <author><name>François</name></author>
        <link rel="alternate" type="text/html" href="https://blok.storagebits.workers.dev/es/blog/quatre-jours/"/>
        <id>https://blok.storagebits.workers.dev/es/blog/quatre-jours/</id>
        <summary type="html">Cuatro días, seis proyectos, 159 commits. El tiempo entre «me gustaría» y «funciona en el aparato» se ha vuelto ridículo. Lo que aún frena soy yo, mis cables y mis cuotas.</summary>
        <content type="html" xml:base="https://blok.storagebits.workers.dev/es/blog/quatre-jours/">&lt;p&gt;Jueves 8 de octubre, 20:34. Envío un prompt de misión a un agente. A las 20:46, la hora aparece en grande en mi tele, con una tipografía que eligió el agente.&lt;/p&gt;
&lt;p&gt;Cuatro días después: seis proyectos, 159 commits, unos 240 mensajes míos, buena parte de menos de cinco palabras. «go T8». «vas-y présente la tranche 3» [venga, enséñame el tramo 3]. «c’est fait, reteste» [hecho, prueba otra vez].&lt;/p&gt;
&lt;p&gt;El tiempo entre la intención y lo concreto se ha vuelto ridículo. Doce minutos para la aplicación Almanak. Dieciséis para Lukarne. El cuello de botella ahora soy yo: mi sueño, mis cables, mis cuotas.&lt;/p&gt;
&lt;figure class=&quot;frise&quot;&gt;&lt;div class=&quot;defile&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Cronología, se desplaza horizontalmente&quot;&gt;&lt;svg viewBox=&quot;0 0 900 412&quot; role=&quot;img&quot; aria-labelledby=&quot;frise-titre frise-desc&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title id=&quot;frise-titre&quot;&gt;Cuatro días de commits, proyecto por proyecto&lt;/title&gt;&lt;desc id=&quot;frise-desc&quot;&gt;Una fila por proyecto, del jueves 8 de octubre a las 19 h al lunes 12 a las 19 h. Cada trazo es un commit. El círculo vacío marca el primer mensaje al agente; el lleno, por encima de la fila, el primer resultado concreto. Las noches están sombreadas.&lt;/desc&gt;&lt;rect class=&quot;nuit&quot; x=&quot;157.3&quot; y=&quot;34&quot; width=&quot;55.0&quot; height=&quot;338&quot;/&gt;&lt;line class=&quot;grille&quot; x1=&quot;157.3&quot; x2=&quot;157.3&quot; y1=&quot;34&quot; y2=&quot;372&quot;/&gt;&lt;text class=&quot;axe&quot; x=&quot;161.3&quot; y=&quot;28&quot;&gt;vie. 9&lt;/text&gt;&lt;rect class=&quot;nuit&quot; x=&quot;345.8&quot; y=&quot;34&quot; width=&quot;55.0&quot; height=&quot;338&quot;/&gt;&lt;line class=&quot;grille&quot; x1=&quot;345.8&quot; x2=&quot;345.8&quot; y1=&quot;34&quot; y2=&quot;372&quot;/&gt;&lt;text class=&quot;axe&quot; x=&quot;349.8&quot; y=&quot;28&quot;&gt;sáb. 10&lt;/text&gt;&lt;rect class=&quot;nuit&quot; x=&quot;534.3&quot; y=&quot;34&quot; width=&quot;55.0&quot; height=&quot;338&quot;/&gt;&lt;line class=&quot;grille&quot; x1=&quot;534.3&quot; x2=&quot;534.3&quot; y1=&quot;34&quot; y2=&quot;372&quot;/&gt;&lt;text class=&quot;axe&quot; x=&quot;538.3&quot; y=&quot;28&quot;&gt;dom. 11&lt;/text&gt;&lt;rect class=&quot;nuit&quot; x=&quot;722.8&quot; y=&quot;34&quot; width=&quot;55.0&quot; height=&quot;338&quot;/&gt;&lt;line class=&quot;grille&quot; x1=&quot;722.8&quot; x2=&quot;722.8&quot; y1=&quot;34&quot; y2=&quot;372&quot;/&gt;&lt;text class=&quot;axe&quot; x=&quot;726.8&quot; y=&quot;28&quot;&gt;lun. 12&lt;/text&gt;&lt;text class=&quot;axe&quot; x=&quot;118.0&quot; y=&quot;28&quot;&gt;jue. 8&lt;/text&gt;&lt;text class=&quot;nom&quot; x=&quot;104&quot; y=&quot;85.0&quot; text-anchor=&quot;end&quot;&gt;Almanak&lt;/text&gt;&lt;line class=&quot;rail&quot; x1=&quot;118&quot; x2=&quot;872&quot; y1=&quot;81.0&quot; y2=&quot;81.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;669.9&quot; x2=&quot;669.9&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;669.6&quot; x2=&quot;669.6&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;611.3&quot; x2=&quot;611.3&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;145.9&quot; x2=&quot;145.9&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;145.3&quot; x2=&quot;145.3&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;140.8&quot; x2=&quot;140.8&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;139.4&quot; x2=&quot;139.4&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;137.5&quot; x2=&quot;137.5&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;135.9&quot; x2=&quot;135.9&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;133.6&quot; x2=&quot;133.6&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;131.9&quot; x2=&quot;131.9&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;path class=&quot;delai&quot; d=&quot;M130.3,81.0 L131.9,81.0 L131.9,63.0&quot;/&gt;&lt;circle class=&quot;intention&quot; cx=&quot;130.3&quot; cy=&quot;81.0&quot; r=&quot;5&quot;&gt;&lt;title&gt;jue. 20:34 · prompt de misión&lt;/title&gt;&lt;/circle&gt;&lt;circle class=&quot;concret&quot; cx=&quot;131.9&quot; cy=&quot;63.0&quot; r=&quot;5.5&quot;&gt;&lt;title&gt;20:46 · la hora aparece en la tele&lt;/title&gt;&lt;/circle&gt;&lt;text class=&quot;etiquette&quot; x=&quot;140.9&quot; y=&quot;67.0&quot;&gt;12 min&lt;/text&gt;&lt;text class=&quot;compte&quot; x=&quot;880&quot; y=&quot;85.0&quot;&gt;11&lt;/text&gt;&lt;text class=&quot;nom&quot; x=&quot;104&quot; y=&quot;139.0&quot; text-anchor=&quot;end&quot;&gt;Homelab&lt;/text&gt;&lt;line class=&quot;rail&quot; x1=&quot;118&quot; x2=&quot;872&quot; y1=&quot;135.0&quot; y2=&quot;135.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;869.9&quot; x2=&quot;869.9&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;863.8&quot; x2=&quot;863.8&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;863.3&quot; x2=&quot;863.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;859.6&quot; x2=&quot;859.6&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;847.3&quot; x2=&quot;847.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;843.9&quot; x2=&quot;843.9&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;838.3&quot; x2=&quot;838.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;820.5&quot; x2=&quot;820.5&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;819.9&quot; x2=&quot;819.9&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;819.9&quot; x2=&quot;819.9&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;811.7&quot; x2=&quot;811.7&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;810.2&quot; x2=&quot;810.2&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;807.8&quot; x2=&quot;807.8&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;777.1&quot; x2=&quot;777.1&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;762.2&quot; x2=&quot;762.2&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;757.2&quot; x2=&quot;757.2&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;755.4&quot; x2=&quot;755.4&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;752.5&quot; x2=&quot;752.5&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;747.7&quot; x2=&quot;747.7&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;729.7&quot; x2=&quot;729.7&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;729.1&quot; x2=&quot;729.1&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;715.3&quot; x2=&quot;715.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;707.6&quot; x2=&quot;707.6&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;706.1&quot; x2=&quot;706.1&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;704.2&quot; x2=&quot;704.2&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;703.4&quot; x2=&quot;703.4&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;697.9&quot; x2=&quot;697.9&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;693.0&quot; x2=&quot;693.0&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;692.3&quot; x2=&quot;692.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;690.6&quot; x2=&quot;690.6&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;688.3&quot; x2=&quot;688.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;675.3&quot; x2=&quot;675.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;672.7&quot; x2=&quot;672.7&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;670.4&quot; x2=&quot;670.4&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;666.2&quot; x2=&quot;666.2&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;665.0&quot; x2=&quot;665.0&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;663.7&quot; x2=&quot;663.7&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;663.4&quot; x2=&quot;663.4&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;661.3&quot; x2=&quot;661.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;660.2&quot; x2=&quot;660.2&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;656.5&quot; x2=&quot;656.5&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;651.3&quot; x2=&quot;651.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;640.9&quot; x2=&quot;640.9&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;639.3&quot; x2=&quot;639.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;627.0&quot; x2=&quot;627.0&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;624.1&quot; x2=&quot;624.1&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;617.1&quot; x2=&quot;617.1&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;615.1&quot; x2=&quot;615.1&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;579.8&quot; x2=&quot;579.8&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;532.9&quot; x2=&quot;532.9&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;532.8&quot; x2=&quot;532.8&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;527.1&quot; x2=&quot;527.1&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;526.5&quot; x2=&quot;526.5&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;526.0&quot; x2=&quot;526.0&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;496.1&quot; x2=&quot;496.1&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;495.7&quot; x2=&quot;495.7&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;494.8&quot; x2=&quot;494.8&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;488.8&quot; x2=&quot;488.8&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;488.2&quot; x2=&quot;488.2&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;487.9&quot; x2=&quot;487.9&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;484.2&quot; x2=&quot;484.2&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;484.2&quot; x2=&quot;484.2&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;478.5&quot; x2=&quot;478.5&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;path class=&quot;delai&quot; d=&quot;M136.2,135.0 L141.6,135.0 L141.6,117.0&quot;/&gt;&lt;circle class=&quot;intention&quot; cx=&quot;136.2&quot; cy=&quot;135.0&quot; r=&quot;5&quot;&gt;&lt;title&gt;jue. 21:19 · «¡vamos!»&lt;/title&gt;&lt;/circle&gt;&lt;circle class=&quot;concret&quot; cx=&quot;141.6&quot; cy=&quot;117.0&quot; r=&quot;5.5&quot;&gt;&lt;title&gt;22:00 · doble autenticación activa en la pasarela&lt;/title&gt;&lt;/circle&gt;&lt;text class=&quot;etiquette&quot; x=&quot;150.6&quot; y=&quot;121.0&quot;&gt;41 min&lt;/text&gt;&lt;text class=&quot;compte&quot; x=&quot;880&quot; y=&quot;139.0&quot;&gt;63&lt;/text&gt;&lt;text class=&quot;nom&quot; x=&quot;104&quot; y=&quot;193.0&quot; text-anchor=&quot;end&quot;&gt;Lukarne&lt;/text&gt;&lt;line class=&quot;rail&quot; x1=&quot;118&quot; x2=&quot;872&quot; y1=&quot;189.0&quot; y2=&quot;189.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;852.5&quot; x2=&quot;852.5&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;842.4&quot; x2=&quot;842.4&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;812.1&quot; x2=&quot;812.1&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;743.0&quot; x2=&quot;743.0&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;730.6&quot; x2=&quot;730.6&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;729.1&quot; x2=&quot;729.1&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;726.2&quot; x2=&quot;726.2&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;724.3&quot; x2=&quot;724.3&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;708.1&quot; x2=&quot;708.1&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;705.9&quot; x2=&quot;705.9&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;705.3&quot; x2=&quot;705.3&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;703.9&quot; x2=&quot;703.9&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;656.5&quot; x2=&quot;656.5&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;655.3&quot; x2=&quot;655.3&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;652.0&quot; x2=&quot;652.0&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;650.7&quot; x2=&quot;650.7&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;643.4&quot; x2=&quot;643.4&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;642.9&quot; x2=&quot;642.9&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;610.2&quot; x2=&quot;610.2&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;531.0&quot; x2=&quot;531.0&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;429.2&quot; x2=&quot;429.2&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;321.5&quot; x2=&quot;321.5&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;317.3&quot; x2=&quot;317.3&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;312.5&quot; x2=&quot;312.5&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;307.7&quot; x2=&quot;307.7&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;306.0&quot; x2=&quot;306.0&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;300.5&quot; x2=&quot;300.5&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;path class=&quot;delai&quot; d=&quot;M298.4,189.0 L300.5,189.0 L300.5,171.0&quot;/&gt;&lt;circle class=&quot;intention&quot; cx=&quot;298.4&quot; cy=&quot;189.0&quot; r=&quot;5&quot;&gt;&lt;title&gt;vie. 17:58 · prompt de misión&lt;/title&gt;&lt;/circle&gt;&lt;circle class=&quot;concret&quot; cx=&quot;300.5&quot; cy=&quot;171.0&quot; r=&quot;5.5&quot;&gt;&lt;title&gt;18:14 · primera webcam en directo a pantalla completa&lt;/title&gt;&lt;/circle&gt;&lt;text class=&quot;etiquette&quot; x=&quot;309.5&quot; y=&quot;175.0&quot;&gt;16 min&lt;/text&gt;&lt;text class=&quot;compte&quot; x=&quot;880&quot; y=&quot;193.0&quot;&gt;27&lt;/text&gt;&lt;text class=&quot;nom&quot; x=&quot;104&quot; y=&quot;247.0&quot; text-anchor=&quot;end&quot;&gt;DropboksTV&lt;/text&gt;&lt;line class=&quot;rail&quot; x1=&quot;118&quot; x2=&quot;872&quot; y1=&quot;243.0&quot; y2=&quot;243.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;687.6&quot; x2=&quot;687.6&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;683.4&quot; x2=&quot;683.4&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;682.4&quot; x2=&quot;682.4&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;679.4&quot; x2=&quot;679.4&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;679.4&quot; x2=&quot;679.4&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;677.5&quot; x2=&quot;677.5&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;676.7&quot; x2=&quot;676.7&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;673.1&quot; x2=&quot;673.1&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;668.8&quot; x2=&quot;668.8&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;666.6&quot; x2=&quot;666.6&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;663.3&quot; x2=&quot;663.3&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;660.2&quot; x2=&quot;660.2&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;path class=&quot;delai&quot; d=&quot;M654.4,243.0 L660.2,243.0 L660.2,225.0&quot;/&gt;&lt;circle class=&quot;intention&quot; cx=&quot;654.4&quot; cy=&quot;243.0&quot; r=&quot;5&quot;&gt;&lt;title&gt;dom. 15:18 · «lee el prompt y adelante»&lt;/title&gt;&lt;/circle&gt;&lt;circle class=&quot;concret&quot; cx=&quot;660.2&quot; cy=&quot;225.0&quot; r=&quot;5.5&quot;&gt;&lt;title&gt;16:02 · emparejamiento logrado en la tele&lt;/title&gt;&lt;/circle&gt;&lt;text class=&quot;etiquette&quot; x=&quot;669.2&quot; y=&quot;229.0&quot;&gt;44 min&lt;/text&gt;&lt;text class=&quot;compte&quot; x=&quot;880&quot; y=&quot;247.0&quot;&gt;12&lt;/text&gt;&lt;text class=&quot;nom&quot; x=&quot;104&quot; y=&quot;301.0&quot; text-anchor=&quot;end&quot;&gt;shot2cart&lt;/text&gt;&lt;line class=&quot;rail&quot; x1=&quot;118&quot; x2=&quot;872&quot; y1=&quot;297.0&quot; y2=&quot;297.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;775.5&quot; x2=&quot;775.5&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;770.9&quot; x2=&quot;770.9&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;768.6&quot; x2=&quot;768.6&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;767.6&quot; x2=&quot;767.6&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;760.8&quot; x2=&quot;760.8&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;754.5&quot; x2=&quot;754.5&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;751.4&quot; x2=&quot;751.4&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;745.4&quot; x2=&quot;745.4&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;731.1&quot; x2=&quot;731.1&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;718.0&quot; x2=&quot;718.0&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;716.9&quot; x2=&quot;716.9&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;715.1&quot; x2=&quot;715.1&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;694.1&quot; x2=&quot;694.1&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;path class=&quot;delai&quot; d=&quot;M693.1,297.0 L715.0,297.0 L715.0,279.0&quot;/&gt;&lt;circle class=&quot;intention&quot; cx=&quot;693.1&quot; cy=&quot;297.0&quot; r=&quot;5&quot;&gt;&lt;title&gt;dom. 20:13 · «forget about previous session»&lt;/title&gt;&lt;/circle&gt;&lt;circle class=&quot;concret&quot; cx=&quot;715.0&quot; cy=&quot;279.0&quot; r=&quot;5.5&quot;&gt;&lt;title&gt;23:01 · foto → lista → enlaces de tienda&lt;/title&gt;&lt;/circle&gt;&lt;text class=&quot;etiquette&quot; x=&quot;724.0&quot; y=&quot;283.0&quot;&gt;2 h 48&lt;/text&gt;&lt;text class=&quot;compte&quot; x=&quot;880&quot; y=&quot;301.0&quot;&gt;13&lt;/text&gt;&lt;text class=&quot;nom&quot; x=&quot;104&quot; y=&quot;355.0&quot; text-anchor=&quot;end&quot;&gt;Kronograf&lt;/text&gt;&lt;line class=&quot;rail&quot; x1=&quot;118&quot; x2=&quot;872&quot; y1=&quot;351.0&quot; y2=&quot;351.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;861.6&quot; x2=&quot;861.6&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;845.9&quot; x2=&quot;845.9&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;844.8&quot; x2=&quot;844.8&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;843.7&quot; x2=&quot;843.7&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;839.5&quot; x2=&quot;839.5&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;823.0&quot; x2=&quot;823.0&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;820.9&quot; x2=&quot;820.9&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;817.6&quot; x2=&quot;817.6&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;813.3&quot; x2=&quot;813.3&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;811.5&quot; x2=&quot;811.5&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;810.9&quot; x2=&quot;810.9&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;809.4&quot; x2=&quot;809.4&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;802.1&quot; x2=&quot;802.1&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;776.0&quot; x2=&quot;776.0&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;775.4&quot; x2=&quot;775.4&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;767.6&quot; x2=&quot;767.6&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;761.5&quot; x2=&quot;761.5&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;760.7&quot; x2=&quot;760.7&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;759.9&quot; x2=&quot;759.9&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;759.1&quot; x2=&quot;759.1&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;756.9&quot; x2=&quot;756.9&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;756.8&quot; x2=&quot;756.8&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;756.2&quot; x2=&quot;756.2&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;756.0&quot; x2=&quot;756.0&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;755.5&quot; x2=&quot;755.5&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;754.2&quot; x2=&quot;754.2&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;754.1&quot; x2=&quot;754.1&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;752.7&quot; x2=&quot;752.7&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;752.4&quot; x2=&quot;752.4&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;752.1&quot; x2=&quot;752.1&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;751.5&quot; x2=&quot;751.5&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;749.9&quot; x2=&quot;749.9&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;749.3&quot; x2=&quot;749.3&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;path class=&quot;delai&quot; d=&quot;M748.8,351.0 L752.6,351.0 L752.6,333.0&quot;/&gt;&lt;circle class=&quot;intention&quot; cx=&quot;748.8&quot; cy=&quot;351.0&quot; r=&quot;5&quot;&gt;&lt;title&gt;lun. 3:19 · «read it and get started»&lt;/title&gt;&lt;/circle&gt;&lt;circle class=&quot;concret&quot; cx=&quot;752.6&quot; cy=&quot;333.0&quot; r=&quot;5.5&quot;&gt;&lt;title&gt;3:48 · primer flasheo verificado en el reloj&lt;/title&gt;&lt;/circle&gt;&lt;text class=&quot;etiquette&quot; x=&quot;761.6&quot; y=&quot;337.0&quot;&gt;29 min&lt;/text&gt;&lt;text class=&quot;compte&quot; x=&quot;880&quot; y=&quot;355.0&quot;&gt;33&lt;/text&gt;&lt;g class=&quot;legende&quot; transform=&quot;translate(118,394)&quot;&gt;&lt;circle class=&quot;intention&quot; cx=&quot;6&quot; cy=&quot;0&quot; r=&quot;5&quot;/&gt;&lt;text x=&quot;16&quot; y=&quot;4&quot;&gt;primer mensaje al agente&lt;/text&gt;&lt;circle class=&quot;concret&quot; cx=&quot;236&quot; cy=&quot;0&quot; r=&quot;5.5&quot;/&gt;&lt;text x=&quot;246&quot; y=&quot;4&quot;&gt;primer resultado concreto&lt;/text&gt;&lt;line class=&quot;commit&quot; x1=&quot;452&quot; x2=&quot;452&quot; y1=&quot;-7&quot; y2=&quot;7&quot;/&gt;&lt;text x=&quot;462&quot; y=&quot;4&quot;&gt;un commit&lt;/text&gt;&lt;rect class=&quot;nuit&quot; x=&quot;560&quot; y=&quot;-7&quot; width=&quot;14&quot; height=&quot;14&quot;/&gt;&lt;text x=&quot;580&quot; y=&quot;4&quot;&gt;noche&lt;/text&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;figcaption&gt;Una fila por proyecto, del jueves a las 19 h al lunes a las 19 h. La cifra de la derecha cuenta los commits. Pasa el cursor por los círculos para ver las horas exactas.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Cada fila es un proyecto, cada trazo un commit. El círculo vacío es mi primer mensaje al agente. El lleno, por encima de la fila, es lo primero concreto: la app funcionando en la tele, el firmware en el reloj, la doble autenticación activa en la pasarela del homelab. Las bandas grises son las noches. Hay commits dentro. No siempre porque yo estuviera despierto.&lt;/p&gt;
&lt;h2 id=&quot;jueves-por-la-noche-tres-agentes-en-45-minutos&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#jueves-por-la-noche-tres-agentes-en-45-minutos&quot; aria-label=&quot;Anchor link for: jueves-por-la-noche-tres-agentes-en-45-minutos&quot;&gt;#&lt;/a&gt;
Jueves por la noche: tres agentes en 45 minutos&lt;/h2&gt;
&lt;p&gt;La noche del 8, en 45 minutos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;20:34: sale la misión Almanak.&lt;/li&gt;
&lt;li&gt;20:36: retomo shot2cart, un proyecto empezado en septiembre con otra herramienta. «inspect project, it comes from an other AI conversation, inspect and we pursue».&lt;/li&gt;
&lt;li&gt;21:07: descargo desde claude.ai el &lt;code&gt;CLAUDE.md&lt;/code&gt; de mi homelab, que estoy rediseñando con un LLM. Lo acababa de escribir con otra instancia mientras la primera construía Almanak.&lt;/li&gt;
&lt;li&gt;21:19: «je viens de créer CLAUDE.md pour toi, c’est parti !» [acabo de crear CLAUDE.md para ti, ¡vamos!]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nadie espera a nadie. Mientras un agente compila, escribo la misión del siguiente con un tercero.&lt;/p&gt;
&lt;h2 id=&quot;almanak-la-chispa&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#almanak-la-chispa&quot; aria-label=&quot;Anchor link for: almanak-la-chispa&quot;&gt;#&lt;/a&gt;
Almanak, la chispa&lt;/h2&gt;
&lt;p&gt;El north star cabía en una frase:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Una pantalla que apetece dejar encendida. Cuando paso por delante de mi tele, sé en 2 segundos la hora, la fecha, el tiempo que hace y que va a hacer, y en cuántos minutos pasa mi próximo autobús. Es bonita como un objeto de diseño, no como un panel de administración.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Y una regla que mantuve en todos los proyectos siguientes: ningún tramo está terminado hasta que el agente lo ha visto funcionar en la Shield. Hace una captura por adb, la lee, la critica. Legibilidad a 3 m, overscan, desbordes. Y para cada tramo visual, dos variantes; nos quedamos con la mejor.&lt;/p&gt;
&lt;div class=&quot;galerie&quot;&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/es/blog/quatre-jours/almanak.webp&quot; alt=&quot;Almanak en la tele, tema oscuro: la hora en grande, la fecha, el día del año, los próximos autobuses y el tiempo a cinco días&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/es/blog/quatre-jours/almanak-papier.webp&quot; alt=&quot;Almanak, tema papel: la hora, el santo del día, los autobuses y la curva de temperatura de las próximas horas&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Almanak en la Shield la primera noche: el tema oscuro a las 22:17, el tema papel a las 21:38.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Siete tramos entre las 20:46 y las 22:32. Para el reloj, el agente comparó una serif editorial con una sans-serif suiza y se quedó con Fraunces, porque a 3 m, Inter con grosor 200 «empieza a parecer un alambre». Tiene razón.&lt;/p&gt;
&lt;p&gt;El mejor bug: la sincronización de horarios de autobús devolvía &lt;code&gt;HTTP 441&lt;/code&gt; en la Shield y funcionaba desde el Mac. El agente rebuscó en &lt;code&gt;dumpsys connectivity&lt;/code&gt; y encontró la VPN que corre en la Shield: la web de la STM (la red de transporte de Montreal) rechaza las IP de salida de las VPN. Pasó a un espejo del mismo flujo, byte a byte, y documentó el split tunneling en el README. El prompt no decía nada de una VPN.&lt;/p&gt;
&lt;p&gt;Para ser honesto: mi definición de «terminado» pedía 24 horas de salvapantallas sin fuga de memoria. La medida real cubre más o menos una hora. Terminado, pues. Entre comillas.&lt;/p&gt;
&lt;h2 id=&quot;lukarne-mi-favorito&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#lukarne-mi-favorito&quot; aria-label=&quot;Anchor link for: lukarne-mi-favorito&quot;&gt;#&lt;/a&gt;
Lukarne, mi favorito&lt;/h2&gt;
&lt;p&gt;Al día siguiente, 17:58, segunda misión. Una ventana al mundo: girar un globo con el mando, lanzarse sobre una región, ver un mosaico de webcams en directo, saltar de una cámara a otra. La frase que cuenta en el prompt:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Si una interacción no es fluida con el mando, ha fracasado, aunque sea técnicamente correcta.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Y otra, más discreta, que explica por qué todo fue tan rápido: «Ya desarrollé otra app de Google TV contigo en esta misma Shield. Antes de nada, busca en mi entorno […] cómo nos conectamos […]. Reutiliza lo que funciona.» Cada proyecto deja tras de sí una dirección adb, un script de despliegue, un formato de &lt;code&gt;DECISIONS.md&lt;/code&gt;. El siguiente arranca desde ahí.&lt;/p&gt;
&lt;p&gt;18:14: primer directo a pantalla completa en la tele, HLS y YouTube, izquierda/derecha para pasar de uno a otro. 16 minutos. A las 20:54, la V1 estaba lista: un globo día/noche en OpenGL a 60 imágenes por segundo (3 ms por imagen), 1640 cámaras en 34 regiones (19 más desde el lunes), un mosaico 3×3 cuya casilla seleccionada pasa a directo en dos segundos, y un botón «sorpréndeme» que te manda adonde es de día. Dos pruebas de resistencia de 22 minutos, cero cuelgues.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/es/blog/quatre-jours/lukarne-globe.webp&quot; alt=&quot;El globo de Lukarne centrado en Europa de noche, Venecia seleccionada, una webcam de la cuenca de San Marcos en una esquina&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Lukarne: Europa de noche, Venecia seleccionada, 16 webcams en directo, la cuenca de San Marcos en la esquina.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Lo más fácil es verla funcionar:&lt;/p&gt;
&lt;figure class=&quot;video&quot;&gt;&lt;video controls muted playsinline preload=&quot;metadata&quot; poster=&quot;lukarne-visite-poster.jpg&quot;&gt;&lt;source src=&quot;lukarne-visite.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/video&gt;&lt;figcaption&gt;78 segundos en la Shield, sin sonido: el globo hasta California, la zambullida en Pollock Pines, el mosaico de cámaras de autopista en directo, la pantalla completa, la cámara siguiente, la subida, y luego «surprise me».&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Este vídeo lo grabó el agente, el lunes por la noche, para esta entrada. Manejaba la Shield con un mando virtual (&lt;code&gt;adb shell input keyevent&lt;/code&gt;) y grababa la pantalla con &lt;code&gt;screenrecord&lt;/code&gt;. La primera toma fue en francés, sobre Europa, donde era la 1 de la madrugada: todo estaba negro. Repitió la toma en inglés, sobre California, de día.&lt;/p&gt;
&lt;div class=&quot;galerie&quot;&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/es/blog/quatre-jours/lukarne-mosaique.webp&quot; alt=&quot;El mosaico de Pollock Pines: nueve cámaras de la autopista US 50 en directo, la casilla seleccionada recuadrada&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/es/blog/quatre-jours/lukarne-plein-ecran.webp&quot; alt=&quot;Pantalla completa de una cámara de autopista en California, un coche rojo en el cruce, el nombre del lugar y la hora local abajo&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;El mosaico de un lugar y luego la pantalla completa. Izquierda/derecha salta a la cámara vecina sin volver al mosaico.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/es/blog/quatre-jours/lukarne-aurore.webp&quot; alt=&quot;Una aurora boreal verde sobre Fairbanks, Alaska, con el nombre de la cámara y la hora local&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;«surprise me» cayó aquí, en pleno rodaje. La cámara de auroras de explore.org en Fairbanks, 15:09 hora local: seguramente una reposición de la noche entre dos planos en directo.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Luego la usé, y me quejé. Sábado, 23:20: «je suis assez surpris du peu de flux video , bcp d’images fixes qui apportent peu» [me sorprende lo poco que hay en vídeo, muchas imágenes fijas que aportan poco]. 23:34, commit: primero el directo, las imágenes fijas como opción. Catorce minutos.&lt;/p&gt;
&lt;p&gt;En la noche del domingo al lunes, a las 00:08: «parfait , je vais dormir là» [perfecto, me voy a dormir]. Y dos peticiones: «les vignettes pixelisée : on peut trouver un moyen de charger ne serait ce qu 1 frame propre plutôt que la vignette degeueu ?» [las miniaturas pixeladas: ¿podemos cargar aunque sea 1 fotograma limpio en vez de esa miniatura asquerosa?], y para el último nivel de zoom, un «effet plongeant genre zoom google earth» [efecto de zambullida tipo zoom de Google Earth]. A las 00:26, las miniaturas son fotogramas reales capturados en el aparato durante la reproducción. A las 00:48, te lanzas sobre un lugar con un zoom ×30, se encienden las luces, y vuelves a subir. A las 00:59, prueba de resistencia de 10 minutos después de todo eso. Yo dormía.&lt;/p&gt;
&lt;p&gt;El lunes por la tarde pedí un modo demo, para que la tele viaje sola. 41 minutos después:&lt;/p&gt;
&lt;figure class=&quot;video&quot;&gt;&lt;video autoplay loop muted playsinline preload=&quot;metadata&quot; poster=&quot;lukarne-demo-poster.jpg&quot;&gt;&lt;source src=&quot;lukarne-demo.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/video&gt;&lt;figcaption&gt;El modo demo: cámaras al azar donde es de día, nunca dos veces la misma región, con un fundido a un cartel entre una y otra.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/es/blog/quatre-jours/lukarne-reglages.webp&quot; alt=&quot;El panel de ajustes de Lukarne abierto sobre el globo: idioma, temperatura, imágenes fijas, reproductor en esquina, tiempo por cámara del modo demo, créditos de las fuentes&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Los ajustes, a un botón del mando: idioma (inglés, francés, español), unidades, imágenes fijas o solo directo, reproductor en esquina, tiempo por cámara del modo demo y los créditos de cada fuente.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Lo que aún falta: la cobertura en directo fuera de Norteamérica es escasa. El primer día, el agente gastó toda la cuota de búsqueda de YouTube mientras dos bugs ocultaban los resultados. Ahora un repositorio público republica cada día el catálogo de directos, y la app lo descarga detrás de su logo. Y hay un bug que no siempre consigo reproducir: una webcam de YouTube que se queda congelada al encadenar dos. Lo señalé a las 15:46 y hubo un arreglo a las 16:31. Falta comprobarlo en la tele.&lt;/p&gt;
&lt;h2 id=&quot;dropbokstv-un-domingo-por-la-tarde&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dropbokstv-un-domingo-por-la-tarde&quot; aria-label=&quot;Anchor link for: dropbokstv-un-domingo-por-la-tarde&quot;&gt;#&lt;/a&gt;
DropboksTV, un domingo por la tarde&lt;/h2&gt;
&lt;p&gt;Un cliente de Dropbox para la tele, pensado para el sofá: fotos y vídeos primero, solo lectura, sin backend. Domingo, 15:18: «read prompt-dropbokstv-claude-code.md and go». 16:02: el emparejamiento por teléfono funciona en la tele. 18:28: octavo y último tramo, con búsqueda, modo sin conexión, salvapantallas y 128 textos traducidos por idioma.&lt;/p&gt;
&lt;p&gt;Lo más retorcido es el emparejamiento. Conectarse a Dropbox desde una tele, sin teclado, debería ser un código que escribes en el teléfono. Solo que la API de Dropbox no ofrece ese flujo. El agente lo comprobó en el SDK y lo anotó en su registro de decisiones. Así que montó otra cosa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la tele muestra un código QR que apunta a una página servida por la propia tele, en el wifi de casa;&lt;/li&gt;
&lt;li&gt;el teléfono abre esa página, que lo manda a autorizar DropboksTV en Dropbox;&lt;/li&gt;
&lt;li&gt;Dropbox muestra un código, lo pegas en el teléfono, y la tele lo cambia por un token (PKCE: el secreto nunca sale de la tele, sin backend);&lt;/li&gt;
&lt;li&gt;la sesión caduca a los 10 minutos y la tele renueva el QR sola. Un error al teclear no quema la sesión. Y si el teléfono no ve la tele, un botón cambia al enlace directo de Dropbox.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El pequeño servidor HTTP de la tele (150 líneas) lo sacó de Almanak.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/es/blog/quatre-jours/dropbokstv-appairage.webp&quot; alt=&quot;Pantalla de emparejamiento de DropboksTV: tres pasos numerados y un código QR, difuminado aquí&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;El emparejamiento&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Y luego está el visor. En tres tramos, entre las 16:25 y las 18:07, el agente escribió un visor que abre prácticamente todo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;las fotos, con zoom ×2 y ×3 que se desplaza con las flechas, y un pase de diapositivas con fundido o Ken Burns;&lt;/li&gt;
&lt;li&gt;los vídeos: H.264, HEVC hasta 4K, reanudación donde lo dejaste, subtítulos &lt;code&gt;.srt&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;los PDF, página a página, con zoom;&lt;/li&gt;
&lt;li&gt;Word y PowerPoint, que Dropbox convierte a PDF, y las hojas de cálculo, escaladas al 170 % para leerlas desde el sofá;&lt;/li&gt;
&lt;li&gt;el Markdown con formato, el código con números de línea y colores;&lt;/li&gt;
&lt;li&gt;la música, MP3 y FLAC, con la portada;&lt;/li&gt;
&lt;li&gt;y para todo lo demás, un código QR que manda el archivo al teléfono.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El reproductor de vídeo llevó 16 minutos. Los documentos, la música y el envío al teléfono, 27. Una locura.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/es/blog/quatre-jours/dropbokstv-formats.webp&quot; alt=&quot;Ocho pantallas de DropboksTV: una foto ampliada, un vídeo, un PDF, una hoja de cálculo, notas en Markdown, código Kotlin, una canción con su portada y la pantalla de envío al teléfono&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;En orden: foto ampliada, vídeo, PDF, hoja de cálculo, Markdown, código, música, envío al teléfono (QR difuminado). Los archivos de prueba los fabricó el propio agente y los dejó en una carpeta de Dropbox dedicada. Capturas tomadas durante el desarrollo, en francés.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;kronograf-o-la-vuelta-del-hardware&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kronograf-o-la-vuelta-del-hardware&quot; aria-label=&quot;Anchor link for: kronograf-o-la-vuelta-del-hardware&quot;&gt;#&lt;/a&gt;
Kronograf, o la vuelta del hardware&lt;/h2&gt;
&lt;p&gt;Lunes, 3:19 de la madrugada, un reloj LilyGO T-Watch de 2020 conectado por USB, y una misión: una esfera de cronógrafo de aviación y unos visores de 7 segmentos «circuitos temporales». A las 3:48, primer flasheo verificado en el reloj, después de una copia completa del flash original. Era la regla n.º 2 del prompt: no se escribe nada en el reloj sin red de seguridad. El cable falló durante la primera copia, y el agente se negó a flashear hasta tener una completa.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/es/blog/quatre-jours/kronograf-photo.webp&quot; alt=&quot;El T-Watch 2020 real sobre la mesa: pantalla de diagnóstico de Kronograf, memoria, sensores detectados en verde, batería al 100 %&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;El reloj real, el lunes a las 18:11: la pantalla de diagnóstico, la primera que se flasheó. En verde, los chips detectados; en gris, lo que la V1 no tiene.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;duo&quot;&gt;&lt;img src=&quot;kronograf-t1-aviator.webp&quot; alt=&quot;Esfera de cronógrafo de aviación: bisel graduado, tres subesferas de batería, minutos y pasos, segundero naranja&quot;&gt;&lt;img class=&quot;carre&quot; src=&quot;kronograf-t2-face1.webp&quot; alt=&quot;Esfera con visores de 7 segmentos: destino en rojo, presente en verde, última sincronización en naranja&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;A la izquierda, captura del reloj real por el puerto serie. A la derecha, la esfera «circuitos temporales» en el simulador, que compila exactamente la misma interfaz.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Aquí el tiempo vuelve a subir, y no es culpa del agente. Ya no es código contra un emulador, es un conector micro-USB cansado. Mis mensajes de esa mañana: «elle plante systematiquement au bout de quelque secondes» [se cuelga siempre a los pocos segundos], «va vite sinon elle plante» [date prisa o se cuelga], «j’espère qu’elle n’est pas brikée» [espero que no se haya quedado brickeado]. El problema venía del sueño ligero, con una tormenta de interrupciones al despertar con el botón. A las 11:17: «ce semble tres bien tenir maintenant» [ahora parece aguantar muy bien]. A las 11:18: «go pour la météo» [adelante con el tiempo]. A las 11:31, el reloj muestra el tiempo y el próximo autobús en tiempo real.&lt;/p&gt;
&lt;p&gt;Esta noche tiene 33 commits, alarmas, cronómetro, podómetro, actualizaciones por wifi y las notificaciones del iPhone por Bluetooth, que todavía no enganchan bien. El doble toque es «un peu alétoire , comme le mouvement du poignet … mais ca passe» [algo aleatorio, como el gesto de muñeca… pero vale].&lt;/p&gt;
&lt;h2 id=&quot;el-homelab-y-la-app-shot2cart&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#el-homelab-y-la-app-shot2cart&quot; aria-label=&quot;Anchor link for: el-homelab-y-la-app-shot2cart&quot;&gt;#&lt;/a&gt;
El homelab, y la app shot2cart&lt;/h2&gt;
&lt;p&gt;La obra más larga no se ve. Sesenta commits y 276 mensajes para rehacer el servidor de casa: inventario, copias de seguridad con pruebas reales de restauración, acceso remoto con passkeys para la familia, alertas, una página de inicio con un esquema animado de la infraestructura y otro de la red local.&lt;/p&gt;
&lt;p&gt;Mi mensaje favorito de toda la serie, la primera noche: «ignore cet audit ; je ne compte que sur toi maintenant» [olvida esa auditoría; ahora solo cuento contigo]. El más sincero, el domingo: «Nest dans Home Assistant c’est payant ??!!» [¿¿Nest en Home Assistant es de pago??!!]. Pues sí, 5 $, gracias Google.&lt;/p&gt;
&lt;p&gt;shot2cart es el contraejemplo. La idea de la app: una foto de una lista de la compra, y el carrito se abre en la tienda en menos de 15 segundos, sin teclear nada. Primer intento en septiembre, con otra herramienta y un flujo basado en especificaciones: tres días, dos commits. El jueves por la noche lo retomé sobre esa base. Domingo, 20:13, lo archivé todo: «forget about previous session, I archived the previous project and to start a new one with better prompt». 23:01: foto, análisis con un modelo de visión, enlaces de tienda artículo por artículo. 00:04: «I’m going to sleep […] please go as far as you can in full autonomy». Por la mañana había detección en streaming, fichas de revisión y recorridos de prueba automatizados.&lt;/p&gt;
&lt;p&gt;Misma idea, mismo desarrollador. La diferencia entre septiembre y este domingo es la calidad de los modelos, y en particular Opus 5.5. ¡¡¡Una bestia!!!&lt;/p&gt;
&lt;h2 id=&quot;el-tiempo-medido&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#el-tiempo-medido&quot; aria-label=&quot;Anchor link for: el-tiempo-medido&quot;&gt;#&lt;/a&gt;
El tiempo, medido&lt;/h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Tipo&lt;/th&gt;&lt;th&gt;Lo que pedí&lt;/th&gt;&lt;th&gt;Tiempo hasta el commit&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;FEAT&lt;/td&gt;&lt;td&gt;«ajoute la langue espagnole à l’application» [añade el español a la aplicación] (Lukarne)&lt;/td&gt;&lt;td&gt;5 min&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BUG&lt;/td&gt;&lt;td&gt;Los vecinos a 2500 km: «je suis sur Londres mais la Patagonie est listée» [estoy en Londres pero sale la Patagonia]&lt;/td&gt;&lt;td&gt;5 min&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BUG&lt;/td&gt;&lt;td&gt;El logo que solo aparece medio segundo al arrancar&lt;/td&gt;&lt;td&gt;2 min&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;FEAT&lt;/td&gt;&lt;td&gt;Más directo, menos imágenes fijas&lt;/td&gt;&lt;td&gt;14 min&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;FEAT&lt;/td&gt;&lt;td&gt;El zoom de zambullida «tipo Google Earth», pedido antes de irme a dormir&lt;/td&gt;&lt;td&gt;40 min&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;FEAT&lt;/td&gt;&lt;td&gt;Un modo demo que encadena webcams al azar&lt;/td&gt;&lt;td&gt;41 min&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BUG&lt;/td&gt;&lt;td&gt;El vídeo reciente que siempre abre un vídeo de 2012 (DropboksTV)&lt;/td&gt;&lt;td&gt;2 min&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;FEAT&lt;/td&gt;&lt;td&gt;«go pour la météo» [adelante con el tiempo] en el reloj&lt;/td&gt;&lt;td&gt;13 min&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Lo que no va más rápido: un cable micro-USB que se suelta, una cuota de YouTube que se reinicia a las 3 de la madrugada, una clave de API que el portal del proveedor rechaza, mi suscripción. Domingo, 16:46: «il me reste que 10% pour notre session en cours» [solo me queda un 10 % para nuestra sesión actual]. Y mi sueño, que acabé metiendo en el plan: «je vais dormir la , avance au maximum de ton autonomie» [me voy a dormir, avanza todo lo que puedas por tu cuenta].&lt;/p&gt;
&lt;p&gt;Lo que todavía no sé: cuántos de estos seis proyectos seguiré usando dentro de un mes. Ahora toca llegar hasta el final, publicar lo que se pueda publicar, alimentar a otros agentes.&lt;/p&gt;
&lt;p&gt;Esta entrada se hizo igual. Un mensaje mío el lunes al final de la tarde, a lo bruto, con mis erratas: «génère moi un article complet […] mettre en avant le délai ridicule que c’est devenu entre l’intention et le concret» [escríbeme un artículo completo […] destaca lo ridículo que se ha vuelto el tiempo entre la intención y lo concreto]. Contarlo todo con transparencia y honestidad. El propio blog estaba en línea 45 minutos después de mi primer mensaje, el lunes a las 4 de la madrugada.&lt;/p&gt;
&lt;p&gt;En fin, ¡buen fin de semana!&lt;/p&gt;
&lt;aside class=&quot;transparence&quot; aria-label=&quot;Cómo se escribió esta entrada&quot;&gt;
  &lt;p class=&quot;transparence-titre&quot;&gt;Cómo se escribió esta entrada&lt;/p&gt;
  &lt;p&gt;Redactada por Claude Opus 5.5 a partir de: un encargo de François en un solo mensaje, sus sesiones de Claude Code (unos 240 mensajes), seis repositorios Git (159 commits), sus &lt;code&gt;DECISIONS.md&lt;/code&gt; y capturas, vídeos grabados por el agente en la Shield, una foto del reloj.&lt;/p&gt;
  &lt;p&gt;Revisada y corregida por François, 19 % del texto reescrito.&lt;/p&gt;
  &lt;p&gt;Traducida del francés por la IA, a partir de la versión revisada. La traducción no se revisó línea por línea.&lt;/p&gt;
&lt;/aside&gt;
</content>
    </entry>
</feed>
