El final de les restriccions de viatge a principis d'any va crear una crisi en el sistema de passaports suec. Al març vaig intentar reservar una cita per obtenir passaports per als nens. El mes de la cita que vaig rebre va ser octubre.


   Sala d'espera amb llums fluorescents i un rètol LED que indica les posicions actuals de la cua.
   Bancs de fusta en primer pla.
   Darrere d'ells hi ha diverses casetes amb cortines al seu voltant per fer fotos amb flash a l'interior.
Suècia té oficines de passaports on un policia vigila mentre et fas una foto de passaport,

Pass für alle

Al maig la crisi era tan dolenta que Pass für alle es va fer viral. Aquest era un codi que podria actualitzar automàticament la pàgina de reserva del passaport i reservar cites.

Va ajudar a algunes persones d'Estocolm que coneixia a aconseguir una cita millor, però a Skåne no em va funcionar. A Estocolm hi havia més de tot: més oficines de passaports, més cancel·lacions, més cites nous disponibles. A Skåne hi havia menys activitat, de manera que l'script necessitava córrer més temps per obtenir resultats. I aquí només hi ha una oficina de passaports per ciutat, així que la logística és més complicada.

Tenia moltes ganes de portar els nens al Regne Unit durant l'estiu si era possible perquè no ens passéssim tot el viatge a l'interior. Així que vaig començar a construir la meva pròpia versió.

Beep boop

El primer que vaig fer va ser fer sonar. El ritme més lent d'Skåne va fer que no fos pràctic seure a veure la pantalla. El so significava que el portàtil podria estar a l'altra banda de l'habitació i sabria com anava sense mirar.

Beep beep

Primer: uns sos aguts constants.

setInterval(() => {
 sfx(pow2(9), "triangle", pow2(8))
}, pow2(10))
setInterval(() => {
 sfx(pow2(9), "triangle", pow2(8))
}, pow2(11))
Beep beep

Va ser un batec fort perquè el silenci sobtat es notés si alguna cosa es trencava i deixava de córrer. És un so bastant agut i molest, però havia de competir amb el soroll de dos nens petits.

Boop boooooop

El més habitual que passava després de carregar la pàgina era que no es trobessin cites. Això també necessitava un soroll.

sfx(20, "square", 500)
 .then(() => wait(10))
 .then(() => sfx(40, "square", 4000))
Boop booooop.

Vaig utilitzar un to baix per a aquest. Això passava la majoria de les vegades, de manera que no necessitava molta atenció. A més, des d'una perspectiva musical, es va combinar força bé amb el to alt del batec del cor de càrrega de la pàgina,

Beep beep boop

De vegades hi havia una cita en un altre poble. Sempre que fos prou tard per arribar-hi a temps amb tren, aquesta va ser una gran notícia! Un so d'alerta agut va anunciar aquest escenari.

sfx(600, "sawtooth", 400)
 .then(() => wait(10))
 .then(() => sfx(400, "sawtooth", 420))
 .then(() => wait(10))
 .then(() => sfx(200, "sawtooth", 440))
Beep beep boop.

Boop boop beep

El millor dels casos va ser una cita aquí a Malmö. Un petit xiulet triomfal va ser el so d'això.

sfx(400, "triangle", 500)
 .then(() => wait(10))
 .then(() => sfx(500, "triangle", 220))
 .then(() => wait(10))
 .then(() => sfx(600, "triangle", 240))
Boop boop beep!

The finished product

Si estàs interessats, pots llegir el codi font complet. Durant uns dies ho vaig córrer durant diverses hores. Aquí tens una petita mostra de deu segons.

L'ingredient secret és la violència.

Final climàtic

Gairebé al mateix temps que vaig començar a funcionar, la policia va augmentar la seva capacitat. Immediatament després vaig trobar una cita a l'antiga. lol.