Gå til hovedindhold

Min timeseddel kan spole tilbage

Indsendt af Lennart den

Om en lille side, der viser, hvad docujAI har lært om AI, og hvad tiden er gået med. Og om de to ting, der gik galt, mens den blev bygget.

Siden februar sidste år har jeg ført timeseddel over alt, hvad jeg laver i docujAI. Det er en tekstfil med en linje, hver gang jeg går i gang, og en linje, når jeg stopper. Ved siden af ligger vidensbasen: et par hundrede noter om AI og 137 udgivne blogindlæg.

Jeg havde aldrig set de to ting sammen. Så i dag byggede jeg en side, der gør det: dj.kiil.cross.stream.

Øverst står tallene. 921 timer fordelt på 575 arbejdsblokke. Under dem ligger en tidslinje, man kan trække i. Peger man på juli 2025, viser siden, hvordan det så ud dengang: 192 timer, tre indlæg og ingen af de atten lektioner, der står længere nede. Trykker man på afspil, kører den måned for måned frem til i dag, og lektionerne låser sig op, efterhånden som de blev lært.

Siden gemmer ingenting

Det, der gør tidslinjen mulig, er den samme idé, som jeg skrev om i Har du nogensinde ønsket, at du kunne spole tiden tilbage?. Der er ingen database bag siden. Hver time, hvert indlæg og hver lektion er en hændelse i en log, som kun kan skrives til i enden. Siden regner sig frem til sit indhold ved at læse loggen igennem, hver gang nogen kigger.

Vil man se, hvordan det så ud i juli 2025, læser man bare loggen til juli 2025 og stopper der. En almindelig database kan ikke det. Den ved, hvordan tingene ser ud nu, og hvordan de kom til at se sådan ud, er skrevet over.

Læserne kan også skrive i loggen. Under hver lektion er der en knap, man kan trykke på, hvis man kender den. Trykket bliver gemt som en hændelse ligesom alle de andre, og alle, der har siden åben, ser tallet stige i samme øjeblik.

Første fejl: hvem bestemmer tempoet?

Afspilknappen virkede fint på min egen maskine. På serveren hakkede den og hang til sidst fast på en tilfældig måned.

Browseren bad om en ny måned hvert 650. millisekund. Serveren brugte et sekund på at svare. Så inden svaret nåede frem, var der allerede kommet en ny bestilling, og den gamle blev kasseret. Grafen nåede aldrig at blive tegnet.

Den oplagte løsning er en hurtigere server. Den rigtige var at flytte beslutningen. Nu beder browseren om at få afspillet tidslinjen én gang, og så sender serveren måned for måned i det tempo, den selv kan holde. Er den langsom, bliver afspilningen lidt langsommere, men den springer ikke over noget.

Bagefter kom en cache, og her gav loggen noget gratis. Siden kan kun ændre sig, når der kommer en ny hændelse. Derfor kan hvert færdigt stykke side gemmes med den seneste hændelse som nøgle. Kommer der en ny, passer nøglen ikke længere, og stykket bliver bygget igen. Ingen skal huske at rydde op. Forsiden gik fra 1,7 sekunder til under et halvt.

Det er en pointe, jeg ser i mange AI-projekter. Når noget er for langsomt, spørger man efter mere kraft. Ofte er spørgsmålet i stedet, hvem der bestemmer tempoet, og om det er den rigtige part.

Anden fejl: en kunde i en fodnote

Timesedlen er privat. Den nævner kunder, leads og ansøgninger, så der sidder et filter mellem den og siden. Salgstimer vises kun som tal. Noter om udvikling og indhold kommer med, medmindre de indeholder ord fra en liste.

Da siden var i luften, spurgte jeg, om der nu heller ikke var kundeoplysninger på den. Svaret krævede en gennemgang, og den fandt én: en note fra juli 2025 om forberedelse af et kursus hos en navngiven kunde. Navnet stod ikke på listen, fordi listen var skrevet i hånden.

Nu henter filteret selv kundenavnene fra salgsnoterne, hver gang siden bliver opdateret. En ny kunde bliver filtreret fra, uden at nogen skal huske at skrive den på.

Men noten var allerede udgivet, og her viste loggen sin bagside. I en log skriver man en rettelse efter i stedet for at rette. Det er hele styrken ved den. Men en rettelse lader den oprindelige tekst stå, så enhver, der læser loggen fra begyndelsen, finder den stadig. Jeg måtte gøre det, man ellers aldrig gør, og slette hændelsen.

For en virksomhed, der overvejer en hændelseslog til sine AI-agenter, er det værd at tage med. Retten til at blive glemt og en log, der aldrig glemmer, mødes et sted, og det sted bør være bestemt, før man går i gang. Det billigste er at filtrere ved døren, så det, der aldrig må stå i loggen, heller aldrig kommer ind i den.

Hvad tiden gik med

Det mest interessante ved siden var måske tallene. Af de 921 timer er 217 gået til indhold og 213 til udvikling. Marketing har fået 160 og salg 141. Undervisning og research står tilsammen for under 80.

Jeg har brugt næsten lige så mange timer på at bygge værktøjer som på at skrive. Det passer med det, lektionerne på siden handler om. De fleste af dem er lært ved at bygge noget, der gik i stykker.

Siden er åben for alle: dj.kiil.cross.stream. Træk i tidslinjen, og giv en lektion et nik, hvis du kender den.