Changelog

Kolofon · 1 września 2026

0.11.13 — wersje mówione wpisów

18:31 — synchronizacja silnika skasowałaby świeży odtwarzacz

0.11.13 — wersje mówione wpisów

Tekst: Kolofon

Wpis może mieć teraz wersję mówioną. Pod tytułem staje odtwarzacz, w wierszu metryki — obok autora, daty i odsłon — dochodzi czas nagrania, a ten sam czas widać przy tytule w liście serii i w strumieniu. Kto przyszedł słuchać, zastaje przycisk od razu i nie musi przewijać przez tekst, którego właśnie nie chce czytać.

Odtwarzacz jest z tych samych elementów co reszta strony: włosowa kreska, trójkąt, czas. Bez ramki, bez zaokrągleń, bez cienia. Element nie tyka pliku, dopóki nikt nie kliknie — długość bierze z danych wpisu, nie z metadanych nagrania. Inaczej każde wejście na wpis pobierałoby megabajt komuś, kto przyszedł czytać.

Pliki podaje osobna trasa, nie ta od zdjęć. Zdjęcie pobiera się w całości albo wcale, więc trasa obrazów odpowiada nagłówkiem `immutable` i nie zna żądań zakresu. Audio zachowuje się odwrotnie: przeglądarka prosi najpierw o dwa bajty, żeby poznać długość, potem o kolejne kawałki w miarę słuchania, a przy przewijaniu o zupełnie inny fragment. Safari na telefonie nie zacznie grać wcale, jeśli serwer odpowie pełnym plikiem zamiast wycinkiem. Wciśnięcie audio w trasę od zdjęć znaczyłoby: albo zepsuć zachowanie zdjęć, albo mieć audio bez przewijania.

Adres pliku niesie odcisk jego zawartości. To wygląda na drobiazg, a jest warunkiem działania: skoro trasa deklaruje, że pod danym adresem nic się nie zmieni przez rok, to podmiana pliku pod stałą nazwą nie dojdzie do nikogo, kto go już raz pobrał. Objaw jest mylący — strona pokazuje nową długość, bo dane przyszły świeże z serwera, a odtwarzacz gra starą, bo plik ma z pamięci podręcznej. Adres musi się zmieniać razem z zawartością, a nie razem z zamiarem.

Osobna sprawa to granica. Funkcja powstała w instancji prowadzącej, bo tam było ją widać najszybciej. Po jednym dniu okazało się, że blokuje synchronizację silnika: katalogi `src/lib/` i `src/components/` synchronizują się z usuwaniem, więc rozniesienie nowego wydania skasowałoby właśnie dopisany odtwarzacz. Wybór był prosty — albo każde kolejne wydanie robić ręcznie w czterech miejscach, albo przenieść mechanizm tam, gdzie jego miejsce.

Granica biegnie tak jak zawsze: silnik zna mechanizm, instancja zna swoje nagrania. Do silnika trafia trasa, odtwarzacz, budowanie adresu, pola w typie wpisu i dwa napisy. W instancji zostaje numer ramki, pliki i narzędzia, którymi się je robi. Żaden z przeniesionych plików nie wie nic o konkretnym serwisie — nazwę magazynu, numer ramki i napisy czyta z konfiguracji.

Wniosek na przyszłość: funkcja napisana po silnikowemu, ale leżąca w instancji, wygląda niegroźnie dokładnie do chwili, w której trzeba wydać cokolwiek innego. Koszt przeniesienia rośnie z każdym dniem zwłoki, bo rośnie liczba miejsc, w których trzeba potem robić to samo ręcznie.