Percibo la apertura de demasiados frentes para la energía que traigo. Lo que comenzó en una corrección de layout (mi sidebar se ha hecho grande) se convirtió en un proyecto de rediseño de los work logs para acomodar bien el contenido de Method of Action y demás. Encima de eso, por momentos me apetece escribir en castellano peninsular y en México eso es taboo. Escribiré como me da la gana.

Luego pensé que en todo lo nuevo tengo que usar Runge, una notación de color inspirada en… lo explicaré a su tiempo. Permite usar esquemas de color dinámicos. En algún momento lo voy a publicar, pero la mejor forma de hacerlo público es mostrando una buena aplicación. En el juego de Boolean hice el primer acercamiento. El darkmode de blank.page es otro. La notación sigue evolucionando, cuando perciba estabilidad la comparto.

Y por supuesto blank.page debería estar al tope de la lista, pero lo veo tan cerca que de alguna manera este monstruo ha ganado terreno y ahora me tienta a perseguirlo. Sería en definitiva un error.

El rediseño de Method esperará. Frente cerrado.

En realidad estoy escribiendo esto antes de finalizar mi jornada de trabajo, pero estoy esperando a que el teléfono cargue. Mierda, nuevamente el contador de palabras obstruye escribir. Voy a ver dónde está el problema…

Mierda, es el caché. Bien dicen (parafraseando porque no tengo internet) There’s only two difficult problems in computer science: cache invalidation and naming variables. Esto se corrige con urls parametrizados para obligar… Espera, no tengo internet! Cargó esto desde el caché. No sé si estoy viendo la versión que hubiese cargado con internet, pero mi teléfono ya ha encendido.

Voy a abrir un nuevo tab con blank.page….

Tenemos el mismo problema? Creo que no, tengo que escribir un poco más para ver… El problema no está si cargo blank.page con internet. My cache is stale. ¿Porqué no se actualizó la última… no actualicé la versión del caché! Es una variable para obligar al navegador a guardar una nueva versión de blank.page.

Bingo!

Como verifico que mi intuición es correcta? Si quito el internet, debe cargar la versión con el bug en el cual el contador obstruye la escritura. Veamos si es cierto… No lo entiendo, no es cierto! La invalidación del caché es difícil, sin duda. No lo puedo replicar. De todas formas debería que invalidarlo con cada release, para asegurar que el caché no se quede estancado después de la primera carga.

El problema es que tengo que hacerlo a mano ahora. Si necesito recordar actualizar una variable cada vez que deployo muy pronto se repetirá este escenario. Cómo lo hago dinámico? En el proceso de build? A ver si gulp me lo puede resolver… Hmmm también debería de parametrizar con el tiempo timestamp, pero vamos paso por paso:


Tarea 1: invalidar el service worker caché cuando haga un build

gulp-replace

Parece que hará la chamba, probemos…

Después de uno de esos errores inescrutables de npm descubrí que no gustan los trailing commas en los gulpfiles. Fácil de resolver. Ahora tengo…

var version = 'v4::';

Y tengo que cambiarlo a:

var version = 'v<timestamp>::';

Luego la configuración de Gulp:

[Paréntesis: el contador me está obstruyendo!]. Ahhhh, hay un bug en mi implmentación. Bajo ciertas condiciones se sobrepone. Estaba escribiendo entre [] cuando [se manifestó el problem, a ver si logramos que se confunda..!]. Ya lo entendí! Para generar el espacio en blanco al final de la pantalla es necesario que el scroll esté hasta abajo mientras escribes. Para evitar que escrollee mientras editas, no escrolea si el cursor no está en la parte final del texto.

Si eres como yo, que escribe primero los paréntesis () y luego el relleno (relleno) no va a escrolear porque el cursor no se encuentra al final del texto. Por lo tanto…

const caretAtEnd = writeSheet.el.selectionStart === writeSheet.el.value.length;

Y qué debería ser? Quizás la longitud de los caracteres de una linea completa. Pero eso ni yo lo sé, veamos cuántos puntitos caben…

………………………………………………………..

  1. Mi TOC lo quiere a 64, pero no nos desviemos por el momento

Me desvié: ya lo he puesto a 64 caracteres de ancho, luego he visto que me contestó el programador que me está echando una mano, y le he respondido. A veces intento ser muy breve y me tardo mucho haciendo mis mensajes breves.

Uy, repitió el bug de la sobreposición del contador, esta vez sin paréntesis () de por medio. Son carriage returns ↵. Si cambiamos a…

const charWidth = 64; const caretAtEnd = writeSheet.el.selectionStart >= writeSheet.el.value.length - charWidth;

A ver si sirve… Sí sirve! Un bug menos. Ni siquiera sé si estaba en Trello, veamos… Había un bug en el scroll que corregí hace semanas, el caché otra vez. Ugh Trello ahora no. Todo lo que intenta gestionar rompe el flow.

Pero el reporte de René me remite a mi tarea original: corregir de una vez por todas el problema del caché. Desviarme está justificado: si tu editor impide que escribas cómodamente es un problema más notorio a que si te carga una versión antigua (a pesar de lo frustrante que es para los devs).

Back on track: invalidar el service worker caché cuando haga un build.

Gulpfile.js

gulp.task('cache', function(){ return gulp.src(['./serviceworker.js']) .pipe(replace('<timestamp>', Date.now())) .pipe(gulp.dest('./dist/')); });

Veamos si funciona…

ReferenceError: replace is not defined

Me olvidé de incluir replace. Hecho. Ahora…

Error: File not found with singular glob: /Users/duopixel/Coding/blank.page/serviceworker.js (if this was purposeful, use `allowEmpty` option)

No está ahí el service worker? a ver? Ah claro, está mal la ruta. Que mensaje tan confuso, singular glob. Ahora sí compila, veamos el resultado…

var version = 'v1582664636013::';

Está hecho, a huevo! En teoría con esto resuelvo el stale caché. Es momento de hacer una pausa para comer.


Tarea 2: parametrizar los ficheros

Primero intenté una solución hecha en casa mediante el uso de Date.now(), luego me di cuenta que tendría que limpiar todos los ficheros antiguos en mis builds para que no se me acumularan, así que mejor recurrí a un plugin de gulp:

gulp-cache-bust

Funcionó de maravilla.

Bien! son 15:45 y si no me apuro el gimnasio se llena. Ya voy más de mil palabras escritas. Hoy no hace falta escribir más.