Publiczne adresy URL cytowane przez bazę danych stref czasowych IANA: Spis uszkodzonych linków
Spis 1 327 adresów URL z cytatami tzdata: bezpośrednie pobieranie, odblokowywanie przez proxy, odzyskiwanie z Wayback oraz to, co pozostaje, gdy archiwa zawodzą.
Baza danych stref czasowych IANA opisuje, w jaki sposób zmieniają się lokalne zegary na całym świecie. Mniej oczywiste jest to, że jej bloki komentarzy wskazują również źródło tych zasad. Główny repozytorium znajduje się pod adresem https://github.com/eggert/tz.
Sprawdzenie tych odnośników postawiło praktyczne pytanie: z publicznych adresów URL umieszczonych w komentarzach, ile z nich nadal funkcjonuje dzisiaj? Każdy taki adres został zebrany, sprawdzony, a w razie potrzeby odzyskany – najpierw za pomocą proxy umożliwiającego obejście typowych blokad botów, a następnie za pośrednictwem API Wayback, gdy serwer oryginalny przestał istnieć. Kod, tabele wyników oraz procedury odzyskiwania danych dla 1 327 adresów URL są dostępne pod adresem https://github.com/sixthextinction/tzdata-citation-census.
„Nora królika” powstała dzięki notatce z 2008 roku napisanej przez wolontariusza Patrice’a Scattolina. Próbował on odtworzyć dokładny moment wprowadzenia zmiany czasu w Maroku w 2008 roku (tło: https://en.wikipedia.org/wiki/Daylight_saving_time_in_Morocco), czytając współczesny raport na stronie https://www.avmaroc.com/actualite/heure-dete-comment-a127896.html oraz borykając się z niejednoznacznością w tłumaczeniu z francuskiego na angielski. Jego notatka jest typowa dla tego zbioru – wymienia dekret 2–08–224 i przyznaje, że oficjalnego tekstu nie udało się wtedy znaleźć online.
Bazy danych historycznych są pełne takich notatek – numerów dekretów, gazet, adresów stron internetowych, dat oraz wyjaśnień, dlaczego jedno źródło okazało się bardziej wiarygodne niż inne. Większe pytanie brzmi, ile z tych publicznych adresów internetowych nadal funkcjonuje po latach.
Czym właściwie jest tzdata?
Baza danych stref czasowych IANA to zbiór plików tekstowych utrzymywanych przez wolontariuszy. Systemy operacyjne oraz środowiska programistyczne korzystają z niej, gdy potrzebują czasu według zegara ścianowego dla danej strefy. Końcowi użytkownicy rzadko otwierają te pliki, a mimo to niemal każda dystrybucja Linuxa oraz środowisko programistyczne je dostarczają. Gdy jakikolwiek region zmienia czas, baza danych musi zostać zaktualizowana, w przeciwnym razie każde zależne od niej oprogramowanie wyświetli błędną godzinę lokalną.
Wolontariusze mogą kierować się przewodnikiem korekty dostępnym pod adresem https://data.iana.org/time-zones/tz-how-to.html przy proponowaniu poprawek.
Samych zasad może być niewiele. Zmiana czasu letniego w Maroku z 2008 roku jest reprezentowana dwiema liniami tekstowymi w pliku africa:
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
Rule Morocco 2008 only - Jun 1 0:00 1:00 -
Rule Morocco 2008 only - Sep 1 0:00 0 -
Liny te określają daty 1 czerwca i 1 września, które maszyny na całym świecie muszą uwzględniać.
Komentarze otaczające zawierają informacje o historii tworzenia. Osoby odpowiedzialne za utrzymanie dokumentują dowody: numery dekretów, gazety rządowe, komunikaty ministerstw, artykuły prasowe lub dane osoby, która przekazała informację, zazwyczaj wraz z datą dodania notatki.
Czasami źródła się różnią. Osoby odpowiedzialne za utrzymanie czasami dokumentują te rozbieżności i wskazują, której stronie ufają. W 2006 roku Paul Eggert odrzucił daty z atlasu na rzecz krajowego urzędu metrologicznego Austrii (https://www.bev.gv.at/):
# From Paul Eggert (2006-03-22): Shanks & Pottenger give 1918-06-16 and
# 1945-11-18, but the Austrian Federal Office of Metrology and
# Surveying (BEV) gives 1918-09-16 and for Vienna gives the "alleged"
# date of 1945-04-12 with no time. For the 1980-04-06 transition
# Shanks & Pottenger give 02:00, the BEV 00:00. Go with the BEV,
# and guess 02:00 for 1945-04-12.
Nie jest jasne, czy ta kultura pozyskiwania źródeł została zaprojektowana od samego początku, czy rozwinęła się naturalnie. W każdym razie zapewnia ona użyteczny ślad audytowy decyzji podjętych w ciągu ponad trzydziestu lat wspólnego utrzymania, szczególnie gdy dowody są słabe lub sprzeczne.
I co się dzieje, gdy faktycznie sprawdzasz te cytaty?
Każda adresa URL została wydobyta z bloków komentarzy w dziewięciu plikach źródłowych tzdata. W trakcie tego przeglądu znaleziono sześćset dziewiętnaście bloków komentarzy zawierających trzynaście set pięćdziesiąt dwa wzmianki o adresach URL, co dało łącznie trzynaście set dwadzieścia siedem unikalnych adresów na sześćset dwadzieścia trzy hosty. Bloki, które odnosiły się wyłącznie do książek, dekretów lub korespondencji bez żadnych adresów URL, nie wchodziły w zakres badania.
Każdy adres został sprawdzony za pomocą zwykłego żądania HTTP GET, standardowego nagłówka Identity w przeglądarce (jak opisano w dokumentacji User-Agent na MDN) oraz ustalonego limitu czasowego, aby hosty uwięzione w błędzie nie mogły opóźnić procesu pomiarowego.
Pierwszy przegląd dostarczył użyteczne treści dla 663 adresów URL. Pozostałe 664 nie zadziałały z różnych powodów, więc zostały starannie sklasyfikowane: błąd 404 nie jest tym samym co aktywna strona, która odrzuca automatyzację.
Wśród nieudanych prób:
- 433 nie dało się pobrać bezpośrednio, ale udało się to zrobić za pośrednictwem proxy. 178 odrzuciło bezpośrednią prośbę (głównie błąd HTTP 403, niektóre 429). Kolejne 255 nie udało się pobrać z sieci domowej z powodu błędów DNS, przekroczenia czasu oczekiwania lub problemów z TLS, a nie ze względu na wyraźną blokadę botów. W obu grupach próby zostały powtórzone za pomocą narzędzia Bright Data’s Web Unlocker i udało się je odzyskać.
- 123 naprawdę zniknęło. Zwróciły błędy HTTP 404 lub 410. Po sprawdzeniu w archiwum Internet Archive’s Wayback Machine wszystkie z wyjątkiem dwóch miały pełną archiwalną kopię — udało się odzyskać 121 stron.
- 108 pozostało nierozwiązanych (57 bez żadnego wyniku w archiwum, 39 nadal nie dawało się odzyskać za pomocą narzędzia, a 12 zwracało błąd HTTP 500). U osiemnastu z tych nierozwiązanych przypadków, wszystkich z gazety meksykańskiej
dof.gob.mx, wystąpiły błędy certyfikatów — najprawdopodobniej wynikało to z błędnej konfiguracji serwera, a nie usunięcia strony, ale leżało to poza zasięgiem spisu.
Zniknięty serwis to niepowodzenie w jego zachowaniu. Serwer aktywny, który odrzuca automatyczne żądania GET, to niepowodzenie w dostępie. Oba przeszkadzają prostemu skanowaniu; wskazują one różne rzeczy na temat tego, czy dane nadal istnieją.
Samych liczb nie wystarczy, by opisać sytuację operacyjną. 663 bezpośrednie sukcesy obejmuje portale rządowe, archiwa gazet oraz strony osobiste, które nadal odpowiadają na żądania. 433 odzyskania przez proxy pokazują, jak często „uszkodzone” odnośniki w rzeczywistości wynikają z polityk przeciwdziałających automatyzacji. 121 przypadków uzupełnienia danych z Wayback pokazuje, jak często Internet Archive posiadało już użyteczny zrzut stanu — z wyjątkiem dwóch przypadków 404/410, gdy nawet archiwum było puste. Dzięki oddzieleniu tych kategorii spis ten jest zrozumiały dla każdego, kto chce później powtórzyć pomiar.
Dlaczego odnośnik miałby zostać zablokowany od samego początku?
Większość stron obecnie traktuje klienty z skryptami inaczej niż zwykłe przeglądarki. Prośby, które pomijają JavaScript lub nie przechodzą sprawdzeń oznaczników przeglądarki, mogą być ograniczane pod względem częstotliwości, odrzucane lub kwestionowane.
To komplikuje masową weryfikację starych cytatów. Adres URL, który działał, gdy ktoś go wkleił, może nadal być aktywny, ale odmówić prostej automatycznej prośbie po latach.
W korpusie często pojawiają się oficjalne gazety i bazy danych prawnych – dre.pt z Portugalii, resmigazete.gov.tr z Turcji, nevo.co.il z Izraela oraz podobne strony. Ich administratorzy intensywnie ich wykorzystywali, a niektóre z tych stron nadal nie da się pobrać bezpośrednio.
Zatem nieudana prośba nie dowodzi zniknięcia. Może oznaczać usunięcie lub to, że metoda pobierania jest już niedozwolona. Proces odzyskiwania traktował takie przypadki jako odrębne kategorie.
Czy to rzeczywiście problem z tzdata?
Nie w głównej mierze. Eksperyment mierzy, jak dobrze przetrwały zewnętrzne źródła zapisane w długowiecznym zbiorze danych historycznych.
tzdata nie może przechowywać materiałów, na które się odwołuje. Zasady znajdują się w drzewie kontrolowanym wersjami i są dostępne na całym świecie w systemach operacyjnych, ale odwoływane strony pozostają na niezależnych stronach internetowych, portalach rządowych oraz w archiwach gazet.
Problemy z dostępem nie są nowością. Notatka z 2014 roku dotycząca zmiany czasu w Egipcie już odnotowywała, że strona z ogłoszeniem gabinetu (http://www.cabinet.gov.eg/Media/CabinetMeetingsDetails.aspx?id=347) nie mogła być załadowana spoza kraju. Problemy z dostępem ze względu na ograniczenia geograficzne istniały już długo przed tym spisem.
Jak właściwie wyglądał proces odzyskiwania?
Proces odzyskiwania przebiegał w oddzielnych etapach, aby tryby awarii pozostały odrębne.
Próba zastosowania każdej metody do każdego adresu URL — bezpośrednio, przez proxy, a następnie z archiwum — powiększyłaby liczbę „odzyskanych” stron, jednocześnie zamazując różnice między kategoriami. Błąd 404 różni się od tymczasowego zablokowania strony. Zrzut ekranu z archiwum również nie jest identyczny ze stroną, którą przeczytał administrator; stanowi on tylko zapis z pewnego wcześniejszego lub późniejszego momentu.
Kolejna grupa obejmowała tylko żądania bezpośrednie, przy których rejestrowano dokładny stan HTTP. Adresy URL zwracające błędy 404 lub 410 trafiały do odrębnej grupy, poddawanej ograniczeniom szybkości w interakcji z API dostępności Internet Archive. Adresy URL, które uległy timeoutowi lub zostały zablokowane, nie były w tym etapie wysyłane do archiwum.
Koncepcyjnie:
async function checkCitation(url) {
const direct = await get(url); // one plain GET, no tricks
if (isOk(direct)) return { status: "live", via: "direct" };
if (direct.status === 404 || direct.status === 410) {
const archived = await wayback(url); // only for confirmed-dead
if (archived.hit) return { status: "recovered", via: "wayback" };
}
return { status: "unresolved" };
}
Kolejnym etapem była metoda przechodzenia przez proxy. Była ona skierowana na adresy URL, których nie można było uzyskać bezpośrednio z powodu blokad lub problemów z dostępnością, a nie na te, które już wykazywały błędy 404 lub 410. Zablokowane adresy URL były próbowane ponownie jako zwykłe żądania GET za pośrednictwem narzędzia Bright Data’s Web Unlocker, które funkcjonuje jako lokalny proxy HTTPS:
import { ProxyAgent, fetch as proxyFetch } from "undici";
const AUTH = process.env.BRIGHT_DATA_UNLOCKER_AUTH; // format like USER:PASS
const dispatcher = new ProxyAgent({
uri: `@brd.superproxy.io:44445`">http://${AUTH}@brd.superproxy.io:44445`,
requestTls: { rejectUnauthorized: false },
proxyTls: { rejectUnauthorized: false },
});
const res = await proxyFetch(url, {
dispatcher,
headers: { "User-Agent": UA, Accept: "*/*" },
redirect: "follow",
});
To rozwiązanie nie jest produktem renderowanym przez przeglądarkę – to jedynie żądanie HTTP kierowane przez ten unlocker. Dane uwierzytelniające powinny znajdować się w pliku .env:
BRIGHT_DATA_UNLOCKER_AUTH=brd-customer-XXXXX-zone-web_unlocker:PASSWORD
BRIGHT_DATA_UNLOCKER_PROXY_HOST=brd.superproxy.io
BRIGHT_DATA_UNLOCKER_PROXY_PORT=44445
Różne metody przechodzenia umożliwiają w końcowej tabeli odróżnienie bezpośrednich dostępów, odzyskań za pomocą proxy, odzyskań z archiwum oraz nierozwiązanych odniesień.
Z metodologicznego punktu widzenia klucz do odblokowania jest ważny, ponieważ rozróżnia „stronę, która nadal istnieje za wyzwaniem” od „strony, która zniknęła”. Bez tego rozróżnienia naiwny crawler przeliczyłby błędnie przypadki uszkodzonych linków. Podobnie wysyłanie jedynie odpowiedzi 404/410 do Wayback pozwala uniknąć zalewania API archiwum hostami, które jedynie blokowały boty, co zakłóciłoby statystyki odzyskiwania danych i zużywało limity przepustowości przy prostej wartości zapytań.
Co można zrobić z danymi źródłowymi po ich uzyskaniu?
Kluczowym pytaniem jest dostępność: czy wymieniony URL nadal można pobrać, a jeśli nie, to czy dokument da się odzyskać w innym miejscu?
Dla zbiorku danych historycznych kolejnym krokiem jest zachowanie treści z samej odzyskanej strony. W przypadku gazety lub bazy danych prawniczych może to oznaczać wyodrębnienie numeru dekretu, daty, tytułu oraz odpowiedniej treści i przechowywanie tych danych obok oryginalnego odnośnika. W ten sposób dane przetrwają nawet wtedy, gdy URL przestanie być dostępny, bez konieczności ponownego przeszukiwania w celu odnalezienia linków.
Powtarzające się hosty są szczególnie odpowiednie do zautomatyzowania procesów. Po odblokowaniu możliwości pobierania danych, zorganizowany kolektor może określić pola i działać na tej samej infrastrukturze. Zwykłe strony HTTP nadają się do obsługi przez proces skoncentrowany na kodzie; strony bogate w JavaScript wymagają procesu w przeglądarce.
Cóż więc faktycznie pozostaje, gdy archiwum tego nie ma?
Sto osiem adresów URL odnoszących się do cytatów pozostało nierozwiązanych – to około 8 procent z 1 327 unikalnych adresów URL; choć jest to niewielki odsetek, stanowi on znaczną ilość nieodzyskanych źródeł. Odsetek ten jest niewielki, ale każdy z tych adresów kiedyś odpowiadał konkretnej zasadzie strefy czasowej.
Zasady te wciąż istnieją w pliku tzdata. Brakuje natomiast części lub całej strony zewnętrznej pod tym adresem.
Z tych 108 adresów 57 zwróciło błędy 404 lub 410 bez żadnych rekordów dostępności w Wayback. Trzydzieści dziewięć nadal nie działało przez proxy (osiem z nich to błędy certyfikatów z Meksyku). Dwanaście wygenerowało inne błędy HTTP, które nie zostały ani ponownie spróbowane, ani przesłane do Wayback.
Mogło dojść do bardziej nietypowych sposobów odzyskania danych, ale badanie wymagało ustalonej zasady zakończenia: należało zmierzyć strukturę cytatów za pomocą jednej spójnej procedury, zamiast wiecznie gonić za coraz mniejszą liczbą pozostałych adresów.
Ograniczenia wykorzystania cytatów jako metody konserwacji
Zbiory danych historycznych oraz strony, które je cytują, charakteryzują się asymetrycznymi właściwościami przechowywania.
Zasada dotycząca stref czasowych znajduje się w systemie kontroli wersji i rozprzestrzenia się poprzez niezliczone dystrybucje oprogramowania. Gdy zostanie włączona, może przetrwać dłużej niż dowody, które ją uzasadniały.
Materiał cytowany nie ma takiej gwarancji. Może istnieć pod jedną adresem URL w ramach jednej organizacji. Jeśli ta organizacja przeniesie się, usunie treść, zmieni dostęp lub porzuci usługę, odnalezienie cytatu staje się trudne lub niemożliwe. Ten rodzaj awarii jest powszechnie nazywany „zepsuciem linków”.
Opiekunowie projektu tzdata od dziesięcioleci dokumentują źródła i często zaznaczają istniejącą niepewność. Dzięki temu późniejsze badania są znacznie łatwiejsze niż w przypadku niepopartych twierdzeń. Dokładne cytowanie nadal nie archiwizuje cytowanego materiału, a opiekunowie nie są zobowiązani do kopiowania wszystkiego, na co się odnoszą.
Spis ten jest zatem raczej demonstracją tego, w jakim stopniu można ufać zewnętrznym adresom URL jako źródłom historycznym, niż krytyką bazy tzdata. Większość cytatów dało się odzyskać w jakiejś formie. Mniejsza, lecz istotna grupa nie dała się odzyskać. Baza danych nadal przechowuje zasady ustalone przez te źródła; w 108 przypadkach nie jest już w stanie odzyskać adresu URL.
Powtórzenie spisu rok później prawdopodobnie spowodowałoby przesunięcie niektórych adresów URL między kategoriami, ponieważ strony zmieniają zasady TLS, CDN lub polityki dotyczące robotów. Interesującym wskaźnikiem nie jest pojedynczy procent zamrożony w czasie, lecz szybkość, z jaką cytaty przechodzą od statusu „bezpośrednio dostępne” do stanu „wymagają proxy” lub „tylko archiwum”, oraz liczba tych, które trafiają do nierozwiązanej grupy, której nie może rozwiązać żaden automatyczny proces.
Dla osób pracujących z innymi długowiecznymi zestawami danych — danymi lokalizacyjnymi CLDR, plikami geoname oraz narzędziami do pobierania informacji prawnych — stosuje się tę samą metodologię pomiarową. Ulistuj wszystkie publiczne adresy URL w komentarzach lub polach informacji o pochodzeniu, sklasyfikuj błędy według semantyki protokołu HTTP, odzyskaj dostęp za pomocą narzędzia do odblokowywania tylko wtedy, gdy błąd wynika z polityki dostępu, a skorzystaj z archiwum jedynie wtedy, gdy źródło potwierdzi utratę zasobu. Opublikuj liczbę bucketów obok listy surowych adresów URL, aby późniejsi czytelnicy mogli powtórzyć ten sam proces zamiast polegać na pojedynczym procentowym wskaźniku.
Literatura pokrewna
- Strukturyzuj wyzwanie dla systemu agenta AI zanim stanie się drugą bazą danych — Podziel tożsamość, zachowanie, narzędzia, zasady i ograniczenia, aby agenci produkcyjni pozostawali łatwi w utrzymaniu, oraz przechowuj logikę deterministyczną w kodzie aplikacji zamiast w wyzwaniu.
- Pięć wskazówek rel-linki, które przyspieszają pierwsze wyświetlenie treści — Użyj preconnect, preload, dns-prefetch, prefetch i modulepreload w nagłówku dokumentu, aby przygotować połączenia i zmniejszyć zużycie zasobów, bez konieczności przepisywania aplikacji.