Le osservazioni
Un'osservazione è ciò che un testimone riferisce di ciò che ha visto: quando, dove, che aspetto aveva, come si muoveva e com'erano il cielo e il tempo. È l'evento che UFO@home riproduce. Un caso ne contiene almeno una e può contenerne altre: altri testimoni dello stesso fatto, ciascuno con il proprio resoconto, e spiegazioni alternative, che sono anch'esse osservazioni. Un'osservazione può essere designata da un'intervista condotta con il testimone, e rimandarvi a sua volta.
Parte tecnica: il file di osservazione#
Quanto segue è per chi scrive questi file a mano, li genera o li legge nel codice. Nell'editor non serve conoscerne nulla.
Una registrazione è un semplice file JSON. Niente al suo interno è un blob binario, un identificativo in un database o un riferimento a questo sito — puoi scriverne una a mano, generarla dal tuo archivio, o confrontarne due in una revisione del codice.
Ogni estratto qui sotto è in sola lettura, e ognuno conosce il formato: metti il cursore dentro un oggetto e premi Ctrl+Spazio (⌥+I su Mac) per elencare tutte le chiavi che potrebbero stare lì, con ciò che il modello dice di ciascuna.
L'osservazione#
| Campo | Significato |
|---|---|
version | Sempre 1 |
id | Quale resoconto è, unico fra tutte le registrazioni ovunque: il giorno, poi chi l'ha visto ("1964-04-24-ZamoraLonnie"), o il luogo per un osservatore anonimo ("1964-04-24-Socorro"). Ciò con cui un caso lo designa non è questo id ma quello del suo evento (vedi più sotto). |
time, endTime | { year, month, day, hour, minute, second, raw }, ogni parte facoltativa — è così che il formato esprime “1954” o “verso le 05:00”. raw è la data come scritta in EDTF, ed è ciò che la data significa: "1948-07-24T02:45~" (approssimativa), "2025-06?" (incerta), "1965-07-01%" (entrambe le cose), "19XX" (un anno mascherato), oppure "05:00" da solo per un'ora del giorno ricordata senza la sua data. I numeri sono tenuti in accordo con essa per ciò che si calcola (il cielo, l'orologio). È un sottoinsieme di EDTF (livello 0, questi qualificatori sull'intera data, anni mascherati); @rr0/time è il modello EDTF completo di RR0, in cui gli strumenti propri di UFO@home convertono le date di una registrazione season (spring, summer, autumn o winter) dice una data nota solo come «in primavera del 2022» (EDTF 2022-21), dove month e day sono omessi. |
durationSeconds | Un'alternativa a endTime, e prevale se sono date entrambe |
durationText | La durata come è stata enunciata quando non era esatta: una durata ISO 8601 con un dubbio (PT10M~) o un intervallo (PT5M/PT10M). durationSeconds è allora l'unica durata a cui si riproduce, scelta a partire da essa |
utcOffsetHours | L'ora LEGALE su cui era regolato l'orologio dell'osservatore (+1 per la Francia nel 1965). Se manca, viene approssimata dalla longitudine, che non può conoscere l'ora legale né un passaggio all'ora estiva |
timeZone | Il fuso IANA da cui è stato ricavato lo scarto ("Europe/Paris"): la regola, mentre utcOffsetHours è il numero che dava a quella data. Per collocare il cielo si legge solo il numero; il fuso è ciò che permette di ricavare di nuovo lo scarto quando la data cambia |
place | [{ lat, lng, name }] — name è il nome completo del luogo da cui sono state risolte le coordinate |
observer | { id, title, lastName, firstNames }, tutti facoltativi; da omettere del tutto per un osservatore anonimo. id è un riferimento alla persona (su RR0, la sua directory: "ZamoraLonnie"); gli altri campi la descrivono quando nessuno gliene ha ancora dato uno |
description | Il resoconto in prosa — una stringa, o una per lingua (vedi sotto) |
image, summary, summaryTime | Ciò che rappresenta l'osservazione dove è solo collegata e mai riprodotta: la scheda che mostra un link condiviso (vedi Condividere). image è un'immagine, un indirizzo (assoluto, relativo al file, o un percorso RR0 dalla radice del sito); summary una o due frasi, una stringa o una per lingua. Assenti, la scheda mostra il logo e dice chi l'ha vista, in quale caso e quando, per quanto lo dica il file. summaryTime è il secondo della registrazione in cui si fotografa l'immagine della scheda (0 per default: la prima immagine), per una registrazione la cui prima immagine non mostra il fenomeno; solo lo strumento di cattura del progetto lo legge, mai il lettore |
tags | Un elenco di stringhe, scritte in inglese: sono termini tecnici, e due registrazioni che ne condividono uno devono coincidere su di esso. A ogni lettore vengono mostrati nella sua lingua quando se ne conosce una traduzione, come avviene oggi per landing, trace, aerial observation, project sign, paralysis, contact, occupants, close encounter, photograph, radar, electromagnetic effect. L'elenco non è chiuso: qualsiasi altro viene mostrato come è scritto, e i codici di classificazione ("RR3", "NL") o i riferimenti di caso ("Blue Book 8729") si scrivono così come sono. Uno cambia la riproduzione: paralysis tiene immobile la vista dell'osservatore |
account | Chi l'ha visto e come ha viaggiato il resoconto: observerAgeYears (all'epoca), observerBirth (data di nascita, tenuta in fase con esso), observerPerception (visione dei colori, alcol, stanchezza: solo ciò che differisce da un osservatore tipico), observerOccupation, source (come è arrivato a chi ha scritto la registrazione: on-site, interview, telephone, questionnaire, letter, social-media, press) e followedUp (se l'osservatore è stato ricontattato in seguito) |
sources | Dove leggere il resoconto così come è stato dato, nella forma di una fonte RR0: [{ type, title, authors, url, publication: { publisher, time }, index }], con type book o article, o niente per una pagina web o un post, che è allora solo il suo url. Mostrate nel pannello ?del lettore, come link quando hanno un indirizzo; riprese così come sono in un fascicolo RR0 |
milestones | I momenti con un nome del resoconto, mostrati sulla barra di riproduzione: [{ t, label, note }], dove label è la lettera o il numero che usa il resoconto stesso ("A", "B") o un paio di parole, e note ciò che è accaduto allora, con le parole del resoconto quando possibile (una stringa, o una per lingua) |
roads | Le strade o i sentieri che disegna la pianta del resoconto stesso, quando la mappa non li ha: [{ id, title, surface, widthM, path, source }], dove surface è paved, gravel o dirt, path la linea mediana come [{ eastM, northM }] dal luogo dell'osservatore all'inizio, e source la pianta o il rilievo da cui è stata ricavata |
Più osservatori: il caso#
Ogni osservatore ha una registrazione propria, e una registrazione non dice a quale caso
appartiene: un resoconto sta in piedi da solo. Ciò che li mostra insieme è il
caso, che li nomina: il
case.json di un fascicolo RR0, che indica il
titolo, la data e la classificazione del caso, ed elenca tutto ciò che vi è accaduto come
events. I suoi eventi di tipo sighting sono i suoi resoconti, ciascuno dei quali
punta alla registrazione di un osservatore:
{
"id": "ChilesWhitted",
"title": "Chiles et Whitted",
"time": "1948-07-24 02:45",
"events": [
{ "type": "event", "eventType": "sighting", "url": "observer-chiles.json" },
{ "type": "event", "eventType": "sighting", "url": "observer-whitted.json" }
]
}
| Campo | Significato |
|---|---|
id | L'identificativo proprio del caso. Su rr0.org è la directory del fascicolo e può essere omesso; un file di caso a sé stante lo indica |
title, time | Il nome del caso, e quando è avvenuto come RR0 scrive un'ora ("1948-07-24 02:45", "1954"). Il lettore designa un caso che apre con il suo titolo |
events | La cronologia del caso. Vengono riprodotti solo i sighting, ciascuno tramite il suo url, letto rispetto all'indirizzo del file di caso stesso (così lo stesso caso funziona dalla pagina del suo fascicolo e da qualsiasi altro luogo); quelli contrassegnati da interpretationOf sono letture di uno di essi (vedi sotto); gli altri (un articolo, un filmato, una confessione) sono di RR0 Un evento porta un id quando una lettura lo designa, e solo allora: appartiene al caso, quindi deve essere unico fra gli eventi del caso e in nessun altro posto, e un riferimento si legge nel file che lo scrive. Un interpretationOf che nessun evento porta è letto, come prima, come l'id che dichiara una registrazione che il caso elenca; quello che non corrisponde a nessuno dei due è un difetto del caso, che il lettore segnala sulla sua console, l'editor sopra le sue registrazioni, e il validate.py dello skill quando gli si dà il file del caso. |
image, summary | Ciò che mostra un link condiviso al caso, come per una registrazione (vedi Condividere): un'immagine, e una o due frasi, una stringa o una per lingua |
Dallo a <rr0-sighting src> o al lettore, e ogni osservatore potrà essere
scelto da un elenco. Una registrazione può essere data direttamente, senza caso, ma un caso con un solo
avvistamento funziona allo stesso modo e nomina ciò che mostra. Provalo con
case-chiles-whitted.json
(riproducilo).
Dirlo in più di una lingua#
Una registrazione passa da un lettore all'altro, quindi ogni campo scritto da un autore può contenere
una stringa per lingua invece di una sola: description, il title di una forma
o di un elemento dello scenario, e il label e la note di una tappa.
{
"description": {
"fr": "Tout le compte rendu de Lonnie Zamora, d'un seul tenant…",
"en": "Lonnie Zamora's whole account, of a piece…"
}
}
Le chiavi sono etichette di lingua come le fornisce un browser (fr, en,
pt-BR), e nessuna è obbligatoria. Una stringa semplice resta perfettamente valida e
significa “nella lingua in cui è stata scritta” — come ogni registrazione fatta prima di questo.
Un lettore le cui lingue non sono nessuna di quelle presenti riceve ciò che il file HA invece
di un campo vuoto: una traduzione mancante non deve mai trasformare qualcosa che l'osservatore
ha detto in qualcosa che non ha detto.
La lingua che riceve un lettore è quella del suo browser, a meno che la pagina non dica altrimenti: un
lang sull'elemento stesso, o su qualsiasi cosa intorno a esso, viene preso per primo — un
articolo che dichiara la propria lingua ha già detto in quale lingua il suo lettore lo sta leggendo.
L'elenco del browser viene dopo, quindi dichiararne una impone una scelta senza scartare le
altre.
L'editor mostra una sola lingua, quella del lettore, e scrivendo tocca solo quella — quindi aprire un file nell'altra lingua e scrivere è il modo in cui si aggiunge una traduzione, e un autore non può cancellare quella di un altro.
Ciò che è stato visto#
timeline.keyframes è un elenco di { t, shapes }, con t in
millisecondi dall'inizio. Ogni forma porta un sourceId — più forme possono
condividere una linea temporale (il fenomeno, una fiamma che lo segue, una seconda luce) — e una shape:
{
"kind": "oval",
"bounds": { "x": 0, "y": 0, "width": 0, "height": 0 },
"color": "#39ff14",
"angle": 0,
"transparency": 0,
"haloScale": 1.5,
"brightness": 0,
"blur": 0,
"selected": false,
"title": "il fenomeno",
"angular": { "widthDeg": 1.2, "heightDeg": 0.4 },
"aim": { "azimuthDeg": 353.6, "altitudeDeg": 0.6 }
}
| Campo | Significato |
|---|---|
kind | oval, oppure polygon, che allora prende anche points: [{ x, y }] in pixel dall'angolo in alto a sinistra di bounds, estesi sulla sua larghezza e altezza, così che il contorno si allunghi con esso quando l'angolo ridimensiona il riquadro. Quando bounds è omesso (il caso comune: è derivato da aim e angular), scrivere points come FRAZIONI del riquadro, da 0 a 1, e non in pixel |
title | Il suo nome, mostrato quando il puntatore ci passa sopra; una stringa, o una per lingua |
color | Qualsiasi colore CSS |
angle | La sua inclinazione, in radianti attorno al proprio centro, positiva in senso orario sullo schermo |
transparency | Da 0 opaco a 1 invisibile |
haloScale | Il bagliore intorno; 0 per nessuno |
brightness | Quanto abbaglia: un velo, le punte del diaframma, un nucleo saturato al bianco |
blur | Quanto indistinti l'osservatore ha detto che apparivano i bordi |
angular | La sua dimensione apparente in gradi — vedi sotto |
aim | Dove si trovava nel cielo dell'osservatore: la direzione del suo centro, azimuthDeg in senso orario dal nord vero e altitudeDeg sopra l'orizzonte. Non la direzione in cui guardava l'osservatore, che è l'headingDeg e il pitchDeg della posa — vedi sotto |
aim lo colloca, angular lo dimensiona. bounds
è la proiezione di entrambi sulla tela fissa di 640×360 con la direzione e il campo visivo della
posa, attraverso lo strumento della registrazione stessa; viene ricavato di nuovo al caricamento, così
un file sopravvive a un cambiamento di tela, di campo visivo, di strumento, o di dove guardava
l'osservatore. Se i pixel e gli angoli dovessero divergere, vincono gli angoli: spostare
bounds in un file non ha effetto finché c'è aim. Un file scritto a mano
può omettere bounds del tutto.
timeline.order è l'ordine di disegno da dietro in avanti, timeline.groups gli
identificativi di sorgente raggruppati. Entrambi facoltativi.
Tutto ciò che c'è intorno#
| Campo | Significato |
|---|---|
observerTrack | { keyframes: [{ t, pose }] } — pose contiene lat, lng, elevationM (sopra il suolo locale), headingDeg, pitchDeg, rollDeg, fovDeg, e per una fotocamera fNumber e focusDistanceM. Riprodotto come si muove una persona: esattamente la posa indicata a ogni fotogramma chiave, e fra l'uno e l'altro un movimento che prende velocità, la mantiene attraverso i fotogrammi chiave che continuano a muoversi, e rallenta fino a una pausa — due fotogrammi chiave con lo stesso luogo, o la stessa direzione. Uno sguardo inizia e finisce fermo; una camminata o un tragitto in auto già in corso al primo fotogramma chiave prosegue. Fermarsi e ripartire a piedi aggiungono il loro sobbalzo, un cenno del capo che si spegne in un secondo e mezzo, trasferito nell'immagine quanto lo strumento lo lascia passare (appena per un occhio, del tutto per una fotocamera tenuta in mano). E un corpo a riposo non è mai del tutto immobile: in piedi o in attesa, la vista oscilla di qualche millimetro e deriva di un decimo di grado, lentamente, allo stesso modo nello stesso istante — tranne per un osservatore che il resoconto dice paralizzato (tag paralysis). Il pitchDeg indicato è come l'osservatore guardava nel riferimento di ciò che lo portava: finché si sposta, il lettore aggiunge la pendenza della strada sotto la traccia (letta dal rilievo, positiva in salita, attenuata quando lo sguardo si allontana dalla sua strada), così che una salita alza la vista e il chip Inclinazioneindica la somma filter è ciò che si teneva davanti allo strumento, un id di FILTERS come solar-visual per un'eclissi. Viene mantenuto tra i fotogrammi chiave, non sfumato (nessuno porta mezzi occhiali), e si toglie dichiarando "none". |
weatherTrack | { keyframes: [{ t, weather }] } — le condizioni del cielo lungo la registrazione: precipitazioni, vento, temporale, e le nuvole come strati ad altezze reali, ognuno in grado di contenere nuvole singole collocate in metri. Ogni campo di un weather è nella sezione seguente |
weatherSource | { id, name, url } del dato da cui è stato ricavato il meteo. La sua presenza significa che la registrazione viene riprodotta esattamente come è stata composta e non viene mai più consultata. Se manca, è il resoconto dell'osservatore stesso |
lightPollution | La brillanza del cielo notturno del luogo, città comprese: lo zenit di una notte senza Luna in magnitudini per secondo d'arco quadrato, come lo legge uno Sky Quality Meter o come lo dà l'atlante mondiale della brillanza artificiale del cielo notturno (la sua cifra «SQM», Falchi et al. 2016, che lightpollutionmap.info mostra per ogni luogo). 22 è un cielo naturale, una periferia intorno a 19, un centro città 17. Se manca, un cielo naturale. La parte delle città, ciò che resta tolti i 22 naturali, si aggiunge al cielo come luce: più forte verso l'orizzonte, dove l'aria bassa ne rimanda di più, e disegnata nel bianco caldo di una lampada a 3000 K. Annega la Via Lattea e la luce zodiacale, e toglie stelle, della differenza nella stella più debole che un occhio distingue (Crumey 2014): circa due magnitudini a 19. Ora la Luna fa lo stesso. "derived" quando è ricavata dall'atlante, "stated" quando l'osservatore l'ha misurata. L'editor la compila dall'atlante per un'osservazione dal 2015 in poi, come "derived" con l'atlante nominato, e non sostituisce mai una cifra scritta a mano; prima del 2015 non consulta nulla, perché il cielo era più buio di quello dell'atlante |
observerMap | Se la mappa di dove si trovava l'osservatore parte aperta quando la registrazione viene riprodotta o modificata: true o false. Se manca, decide il lettore: aperta per un osservatore che si è spostato, chiusa per uno rimasto fermo. Una pagina che incorpora il lettore ha l'ultima parola (il suo attributo show-observer-map). L'editor lo scrive quando la mappa viene aperta o chiusa al suo interno, così che un lettore veda ciò che l'autore ha lasciato |
frozen | Dove sono conservati, in file accanto alla registrazione (allegati), i dati che la scena chiederebbe altrimenti a terzi a ogni riproduzione, perché una registrazione finita si riproduca uguale fra dieci anni senza chiedere nulla a nessuno: relief (l'altezza del suolo, come la fonte di quota l'ha data per ogni porzione di terreno che la scena costruisce, uno zip), imagery (la foto del suolo, come le tessere servite dalla fonte di immagini, uno zip), roads, water, railways (strade, acque e binari di ogni porzione, in JSON), upperAir (l'aria alla quota degli aerei, in JSON) e map (la foto sotto la mappa dell'osservatore, come le tessere servite dalla fonte di immagini per il terreno a cui la mappa è adattata, uno zip: una mappa congelata mostra quella foto e non ne chiede altre, ingrandita avvicinandosi, vuota oltre allontanandosi). Ognuno è { src, takenOn, attribution }, con src letto rispetto all'indirizzo della registrazione, o un URL data: per un allegato conservato dentro la registrazione stessa. Un gruppo letto dal suo allegato non chiede nulla a nessuno; uno senza allegato è chiesto in diretta, come tutto prima. "live": true su un gruppo lo chiede in diretta a ogni riproduzione e non lo congela mai (ciò che dice scegliere la sua fonte in diretta invece di File), e su frozen stesso tutti i gruppi; "refresh": true su un gruppo lo chiede in diretta una volta, e l'editor lo rileva al salvataggio successivo. L'editor rileva ciò che manca al salvataggio, e salva la registrazione e i suoi allegati in un unico zip da decomprimere dove è pubblicata. weather, place, lightPollution e decor dicono che il meteo (weatherTrack, weatherSource), il nome del luogo, la cifra del cielo notturno e la scenografia sono letti dal file invece di essere richiesti di nuovo (ai dati meteo quando cambiano la data o il luogo, al geocodificatore, all'atlante e al rilievo quando l'osservatore si sposta): {} se sono dentro la registrazione, { src } per un allegato con le loro chiavi, che i lettori rimettono nella registrazione caricandola. Se mancano, sono dentro la registrazione e l'editor li richiede. Il fuso orario non è qui: è congelato nella registrazione stessa |
soundTrack | { keyframes: [{ t, sound }] } — kind (none/hum/whistle/rumble/crackle), volume, pitchHz, e un src facoltativo di una registrazione reale. volume e pitchHz scorrono fra i fotogrammi chiave, kind e src cambiano al fotogramma chiave. Un src su un altro sito deve essere servito a qualsiasi origine (CORS) |
references | Immagini del luogo sovrapposte alla scena: src (un indirizzo, o un URL data: per un'immagine aggiunta da un disco), kind (photo/panorama), registration (headingDeg, pitchDeg, rollDeg, fovDeg), opacity, credit/creditUrl, t e drawing facoltativi, from ({ lat, lng }, dove è stata scattata: il lettore la dissolve man mano che l'osservatore si allontana da quel punto; se manca, non si dissolve mai), e i landmarks su cui è stata allineata (id, label, picture come { u, v } dall'angolo in alto a sinistra, scene come { azimuthDeg, altitudeDeg }) |
traces | Ciò che un investigatore ha disegnato sul luogo, importato dal suo file Google Earth (KML o KMZ) e mostrato sulla scena come suo, mai come parte della ricostruzione: [{ id, title, kind, points, altitude, color, source }], dove kind è point, line o polygon, points i vertici come [{ lat, lng, altM }] esattamente come li aveva il file, altitude come si legge altM (ground, predefinito, relative al suolo sotto ogni punto, o absolute sul livello del mare), color un #rrggbb e source di chi è |
instrument, exposureSeconds | Attraverso che cosa è stato osservato, e per quanto tempo è rimasto aperto l'otturatore. Se manca, l'occhio nudo. instrument è uno fra eye, rectilinear-lens (una fotocamera di marca sconosciuta), roamer-1-120, instamatic-126, slr-35mm-50, slr-35mm-zoom, phone-landscape, phone-portrait, o una reflex digitale (eos-5d-iii, nikon-d7000… i sensori del catalogo di Stellarium), un binocolo (binoculars-nikon-10x42-edg…) o un telescopio (telescope-celestron-c8…); exposureSeconds è un unico valore per tutta la registrazione, contenuto nell'intervallo proprio di quel dispositivo |
iso | La sensibilità della pellicola o del sensore su cui è stata scattata l'immagine, quando è nota: 400 per una pellicola da 400 ISO. Se manca, quella del dispositivo stesso (il negativo a colori di una reflex è 100, quello di una Instamatic 64). L'immagine di una fotocamera non risponde come quella di un occhio: una pellicola non si adatta al cielo, riceve un'esposizione — la luce, per il tempo di otturazione, divisa per il quadrato del numero f — e vi risponde con la propria curva (quella morbida di un negativo, quella più ripida di una diapositiva, la linea retta di un sensore che si ferma al bianco). Così una posa notturna esce con un cielo nero e ciò che vi brillava in risalto |
sway | Quanto il corpo che tiene lo strumento muove la vista quando non cammina: 1 per una persona in piedi o seduta, 0 per una fotocamera su treppiede, qualsiasi valore intermedio o superiore per meno o per più. Se manca, 1 — tranne per un osservatore che il resoconto dice paralizzato (tag paralysis), per cui è 0, e per un'esposizione più lunga di mezzo secondo, che nessuna mano tiene ferma: quello è un treppiede, e anche 0 |
vehicle | Il veicolo in cui si trovava l'osservatore, quando lo scenario non lo disegna: { kind, windowsOpen, noise }, dove kind è car, van, truck, motorcycle o generic. Sentito dall'interno: il suo motore segue il tragitto dell'osservatore stesso — la marcia dalla velocità, i giri dalla marcia, lo sforzo dall'accelerare o dal rallentare — con il rotolamento e il vento, attutiti da un abitacolo chiuso, lasciati entrare da finestrini aperti; noise è il suo livello sonoro rispetto a uno ordinario del suo tipo (1 per impostazione predefinita). È anche ciò che tiene attivo il pulsante del suono del lettore quando il file non ha soundTrack: il pulsante risponde di tutto ciò che la scena riproduce — questo motore, un engine dello scenario, la pioggia e il vento — e non solo della traccia Le sue luci: headlights è una regolazione come per un veicolo dello scenario (off, position, dipped, main, fog) o auto, predefinito: gli anabbaglianti dal crepuscolo e niente di giorno, come fa un conducente. headlightKeyframes è [{ t, mode }] per un cambiamento durante la registrazione. Il fascio illumina la strada davanti all'osservatore, nella direzione in cui va il veicolo. |
decor | Scenario a eastM/northM reali dall'osservatore: edifici (con floors, windows), alberi, arbusti, lampioni, veicoli, ponti, linee aeree, altri osservatori, aeromobili — facoltativamente con una track e delle lights il cui pattern porta una cadenza di lampeggio reale. Vedi sotto |
Un elemento dello scenario si esprime in metri, come tutto ciò che non è il fenomeno:
| Campo | Significato |
|---|---|
eastM, northM, headingDeg | Dove si trova rispetto all'osservatore, e verso dove è rivolta la sua parte anteriore, in senso orario dal nord vero |
sizeM | { widthM, lengthM, heightM } lungo i suoi assi, la lunghezza essendo la direzione verso cui è rivolto. Ogni asse è facoltativo: uno che nessuno ha misurato mantiene la proporzione propria della forma integrata |
model | Un vero modello 3D al posto della forma integrata: una voce del catalogo tramite id, o un file glTF/GLB a url (che prevale, deve essere leggibile da qualsiasi origine, e allora richiede il suo credit; uno relativo si legge dal file che lo indica). Non decide mai la dimensione: viene scalato, mantenendo le proporzioni, sul primo asse misurato fra lunghezza, altezza e larghezza, o sulla dimensione reale che gli dà il catalogo. Visto dall'interno, e ogni volta che il modello non si può ottenere, viene disegnata invece la forma integrata headingOffsetDeg ruota il modello caricato attorno al suo asse verticale perché il muso punti dove la scena se lo aspetta (0 guarda a nord con una prua di 0); una voce del catalogo porta la sua. credit è { title, author, license, sourceUrl }: license come la enuncia il suo autore ("CC BY 4.0") e sourceUrl da dove viene, perché l'affermazione sia verificabile. |
bridge | Per un "bridge": come è costruito. sizeM.lengthM è tutta la sua lunghezza lungo la strada, rilevati compresi, widthM la larghezza dell'impalcato e heightM l'altezza della carreggiata sull'impalcato sopra il suolo; spanM è la luce libera sotto l'impalcato, con la strada che corre su un rilevato di terra digradante fino al suolo su ciascun lato; deckThicknessM lo spessore della soletta (1,2 per impostazione predefinita); railing { heightM, postSpacingM, rails } il parapetto lungo entrambi i bordi, montanti e correnti le cui aperture sono rettangoli (1,05 m, 1,5 m e 2 correnti per impostazione predefinita). Disegnato con quelle misure, mai stirato |
wire | Per un "wire" (una linea elettrica o telefonica): sizeM.lengthM è la campata fra i suoi pali, lungo il suo headingDeg, e heightM l'altezza del filo più basso; strands [{ heightM, acrossM }] ne appende diversi (quelli sovrapposti condividono un acrossM, quelli di una traversa differiscono); poles è both (predefinito), start o end (l'estremità da cui la sua direzione si allontana o verso cui punta: l'altra è ancorata a un edificio) o none; diameterM (8 mm per impostazione predefinita) e poleHeightM (mezzo metro sopra il filo più alto). Dritta, senza catenaria, e disegnata a quelle misure, mai allungata |
track | [{ t, eastM, northM, altitudeM, headingDeg }] quando si muove, altitudeM sopra il suolo sotto di esso (l'occhio è a elevationM + 1,6 m: un corpo all'altezza dell'occhio ha quell'altitudeM). La posizione è interpolata fra i fotogrammi chiave; la direzione è mantenuta dall'uno al successivo |
lights | Le sue luci: id, offsetM { x, y, z } dal suo centro (destra, alto, davanti), color, intensity (1 è una normale luce di navigazione) e un pattern: { "kind": "steady" }, oppure { "kind": "flash", perMinute, dutyCycle, phase }, la cadenza come la stabiliscono i regolamenti, la frazione accesa di ogni ciclo (circa 0,5 per un lampeggiatore a filamento, 0,01 per uno stroboscopio) e uno sfasamento da 0 a 1 fra le luci. L'editor le compila da preimpostazioni: “Aereo di linea”, “Elicottero”, “Auto, fari accesi”, “Auto, luci di emergenza”, “Lampeggianti di veicolo di soccorso”, “Lampione” |
engine | Un veicolo che si sente in moto: { kind, noise }, come vehicle sopra. Il suo motore segue la sua track, sentito da dove si trova l'osservatore, più debole e più sordo con la distanza |
occludesSourceIds | I fenomeni davanti ai quali l'osservatore ha detto che si trovava — vedi le regole sotto |
facade | Solo il genere building: { color?, plain? }. color è il muro, "#rrggbb"; salvo che plain sia true, si disegnano finestre a ogni piano e una porta al piano terra della faccia frontale. Disegnata alla sizeM enunciata (devono esserlo tutti e tre i lati), mai stirata, e non per un edificio con un osservatore dentro. L'editor prende il colore dal materiale che la carta enuncia per i muri (pietra, mattone, calcestruzzo, blocco, legno), o un intonaco dove non ne enuncia. Assente è la semplice scatola. |
roof | Solo il genere building: { shape, riseM, color?, ridge? }. shape è "flat" (la scatola), "gable" (due falde fino a un colmo lungo il lato maggiore, o la profondità con ridge: "depth") o "hip" (quattro falde); riseM è quanto il colmo sta sopra la gronda, quindi i muri sono sizeM.heightM meno quello; color è il tetto visto dall'alto, "#rrggbb". L'editor li legge dal laser e dalla foto aerea del rilievo. Assente è un tetto piano del colore dei muri. |
origin | Il rilievo da cui è stato ricavato questo oggetto, dall'id del suo fornitore ("ign-lidar-topo"), quando l'editor lo ha preso dal rilievo del luogo e l'autore non lo ha collocato a mano: un albero, un edificio, un ponte o una campata di linea. Scegliere un altro rilievo, o nessuno, o un altro luogo, sostituisce o toglie ciò che porta un origin, e mai ciò che non lo porta |
surveyedOn | Il giorno (AAAA-MM-GG) del rilievo più recente da cui è tratto questo oggetto, quando viene da uno (vedi origin): l'editor avvisa quando è successivo all'osservazione. |
lit, litKeyframes | Se la lampada di un lampione o i fari di un veicolo sono accesi. litKeyframes è [{ t, lit }], ordinato per t, per una luce che si accende o si spegne durante la registrazione; senza, lit vale per tutta la durata. Ignorato per un edificio, un albero o un osservatore |
headlights, headlightKeyframes | Come sono regolate le luci di un veicolo, perché non tutti le accendono, né come si dovrebbe: off, position (le luci di posizione, che mostrano il veicolo e non illuminano nulla), dipped (gli anabbaglianti), main (gli abbaglianti: lontani, stretti, accecanti) o fog (i fendinebbia: bassi e larghi). Un fascio illumina la strada, i bordi, gli alberi e i muri davanti al veicolo, comunque sia disegnato. headlightKeyframes è [{ t, mode }], ordinato per t, per una regolazione che cambia durante la registrazione. Senza nessuno dei due, lo dice lit: acceso sono gli anabbaglianti. Ignorato per tutto ciò che non è un veicolo. Solo quattro veicoli (quello dell'osservatore, poi i più vicini dello scenario) hanno un vero fascio. I fari dell'osservatore proiettano ombre (una scarpata, un palo o una pila di ponte trattiene la luce di ciò che sta dietro), e il fascio si vede nell'aria in proporzione a ciò che l'aria ne diffonde: una traccia lieve con aria limpida, un cono di luce nella nebbia |
observerSide, observerFacing, observerKeyframes, occupiedFloor | L'osservatore dentro l'oggetto, per un building o un veicolo (un solo oggetto alla volta lo contiene). observerSide dice dov'è: front, behind, left, right, front-left, front-right, behind-left o behind-right, l'occupante di un veicolo trovandosi a una delle sue quattro portiere. observerFacing è il finestrino da cui guarda quando non è quello del suo posto: un conducente siede in front-left e guarda dal parabrezza, front. observerKeyframes, [{ t, side, facing }], dice dove siede nel tempo, ciascuno mantenuto fino al successivo, e un fotogramma senza side significa fuori da lì in poi, come un conducente che scende. occupiedFloor è il piano di un edificio su cui si trova, da 0 (piano terra) a floors |
modelParameters | Le impostazioni del modello con cui l'oggetto è disegnato, per la chiave con cui la voce del catalogo pubblica ciascuna: { "costumeColor": "#5a6b3a" } per i vestiti di una persona, foliageColor per un albero, hullColor per un velivolo, gearUp per un aereo di linea in volo. Un modello porta le sue (l'editor disegna un campo per ciascuna); un oggetto disegnato come forma integrata non ne ha, è dipinto da color |
sightingUrl | Per un observer: l'indirizzo della registrazione propria di quell'osservatore, quando è noto, così che il menu della scena possa offrire di vedere la sua testimonianza |
Che cos'era: le interpretazioni#
Una registrazione esprime angoli, e un corpo in metri non fa mai parte di ciò che è stato visto. È
un'affermazione su di esso, e la si mette alla prova collocandola nella scena e guardandola da dove
si trovava l'osservatore: proietta la sua ombra, il suolo può nasconderla, e il suo contorno viene misurato
in ogni istante rispetto a ciò che l'osservatore ha detto. Un'interpretazione viene mostrata da sola, come il
mondo che afferma; se si chiede il confronto (il pulsante ◌, o compare-account su
<rr0-sighting>), il lettore disegna accanto tutto ciò che l'osservatore ha visto come
contorni tratteggiati e indica di quanto si discosta la direzione e quante volte più largo e più alto
appare ciascun corpo, in rosso quando un osservatore non avrebbe potuto sbagliarsi di tanto.
La lettura dell'osservatore stesso va nella registrazione, come interpretation. Quella di un altro non è nel resoconto: è un'altra osservazione, elencata nel caso (vedi sotto). Un resoconto il cui osservatore ha detto che cosa
fosse viene disegnato a tutto tondo, come l'ha detto; uno che non dice nulla in metri viene disegnato come gli
angoli che esprime. Il lettore lo propone, insieme all'interpretazione di ciascun analista, una alla volta.
{
"interpretation": {
"title": "Un velivolo posato sulle sue zampe",
"bodies": [{
"id": "craft",
"explains": ["ufo-1"],
"model": { "id": "ellipsoid" },
"track": [
{ "t": 52000, "eastM": -571.6, "northM": -965.5, "onGround": true,
"sizeM": { "widthM": 3.36, "lengthM": 3.36, "heightM": 1.73 },
"appearance": { "color": "#e8e6df", "albedo": 0.7 } },
{ "t": 83000, "azimuthDeg": 195.9, "altitudeDeg": 4.1, "distanceM": 44 }
]
}]
}
}
| Campo | Significato |
|---|---|
explains | I sourceId dei fenomeni che questo corpo afferma di essere |
model | Una forma costruita qui (ellipsoid, sphere, disc, cylinder, cone, box, torus, figure), un modello del catalogo tramite id, o un file glTF a url con il suo credit; un url relativo si legge dal file che lo indica, non dalla pagina. Stirato a sizeM in ogni caso headingOffsetDeg e credit ({ title, author, license, sourceUrl }) sono quelli del modello di un oggetto dello scenario. |
track | Dove si trova e che aspetto ha a ogni t. Una posizione si esprime o nel mondo (eastM/northM da dove si trovava l'osservatore all'inizio, come lo scenario, con onGround o altitudeAboveGroundM) o dall'osservatore in quell'istante (azimuthDeg, altitudeDeg, distanceM). Un corpo onGround poggia sul rilievo; una direzione senza distanza incontra allora il suolo dove lo incontra quella linea. sizeM, attitude (headingDeg, pitchDeg, rollDeg) e appearance (color, albedo, luminanceCdM2, transparency da 0 a 1, haloScale come multiplo dell'abbagliamento della sua luce propria) valgono finché un fotogramma chiave successivo non li indica di nuovo, e si mescolano tra due fotogrammi chiave. present: false toglie il corpo dalla scena a partire da quel fotogramma chiave, e present: true lo riporta. Una flame (lengthM, widthM, color all'ugello, tipColor, luminanceCdM2) si accende al fotogramma chiave che la indica, esce dal nodo del modello chiamato exhaust (o da quello che nomina il suo node), illumina ciò che la circonda, solleva polvere dove tocca il suolo quando raisesDust lo dice, e si spegne con una luminanceCdM2 pari a 0 |
motions | In un fotogramma chiave: a che punto è ciascuno dei movimenti propri del suo modello, con il nome del movimento — le animazioni del file glTF. 0 è l'inizio di un movimento, 1 la sua fine, e uno che si ripete prosegue oltre 1: { "legs-turn": 7 } sono sette giri. Il modello dice che cosa si muove e come; la traccia dice quando. Ogni movimento si interpola fra i fotogrammi chiave che lo indicano, qualunque altro fotogramma chiave sposti il corpo nel frattempo, si mantiene dopo l'ultimo e vale 0 prima del primo. La partenza di Valensole si scrive così: { "t": 246000, "motions": { "pivot-retract": 0 } }, { "t": 248000, "motions": { "pivot-retract": 1, "legs-turn": 0 } }, … { "t": 262000, "motions": { "legs-turn": 7 } } |
lights | In un fotogramma chiave: la luminanza, in cd/m², di ciascuna delle luci proprie del suo modello, con il nome del materiale della luce nel file glTF — così che uno stesso corpo porti luci che fanno ciascuna la propria cosa, una bianca fissa a ogni estremità e una rossa che lampeggia fra le due. Il modello dice dove si trova ogni luce, quanto è grande e di che colore; la traccia dice quanto brilla e quando. Ogni luce si interpola fra i fotogrammi chiave che la nominano e si mantiene dopo l'ultimo, quindi un'accensione o uno spegnimento sono due fotogrammi chiave a un millisecondo di distanza; una luce che nessun fotogramma chiave nomina brilla con la sua parte di appearance.luminanceCdM2. Una luce troppo piccola per vedersi si vede dal suo abbagliamento, e ciò che si trova fra essa e l'occhio — lo scafo del corpo stesso, un ponte — la nasconde. La luce rossa di Silly-le-Long: { "t": 499, "lights": { "front-red": 1500 } }, { "t": 500, "lights": { "front-red": 0 } } |
outlineNode | Il nodo del modello che è ciò che l'osservatore ha disegnato ("hull" per un velivolo le cui zampe non sono nel disegno): ciò su cui si misura il suo contorno |
smoke | Sull'interpretazione stessa: ciò che fa bruciare al suolo, come { eastM, northM, fromT, untilT? }, visto dal suo fumo portato via dal vento della registrazione halfLifeS dice quanto in fretta si spegne, in secondi per perdere metà del suo spessore (20 per default): un fuoco di sterpaglia divampa e poi cova. Non si ferma mai del tutto prima di untilT. |
Eventi del cielo#
Ciò che è accaduto nel cielo durante la registrazione, come fatti: un tiro laser, un lancio di razzo, un rientro. Ciascuno è avvenuto che qualcuno l'abbia visto o no: non è quindi l'interpretazione, che legge il resoconto, né lo scenario, che dura più dell'osservazione (una casa, un albero). Sono dichiarati sotto skyEvents, al primo livello della registrazione; una registrazione che li metteva nella sua interpretation, come facevano le versioni precedenti, viene ancora letta.
{
"skyEvents": {
"beams": [{
"id": "meudon-paris",
"path": [
{ "lat": 48.805055, "lng": 2.231171, "altitudeM": 172.5 },
{ "lat": 48.83632, "lng": 2.33702, "altitudeM": 88 }
],
"wavelengthNm": 532,
"powerW": 10
}]
}
}
| Campo | Significato |
|---|---|
reentries | I rientri atmosferici avvenuti, un satellite o uno stadio di razzo che si disintegra in pezzi che bruciano. Non sono corpi: un rientro brucia tra 70 e 100 km di quota e si vede a centinaia di chilometri, quindi è collocato sulla Terra e visto attraverso la sua curvatura dal punto in cui stava l'osservatore. La sua track dà il punto di testa in istanti della registrazione, { t, lat, lng, altitudeKm }, uniti da cerchi massimi; ciascuno dei suoi fragments segue lo stesso percorso lagS secondi dietro, si vede da fromT finché si spegne a untilT, brilla della sua absoluteMagnitude (a 100 km, come per un bolide) riportata alla distanza reale, nel suo color, con una scia degli ultimi trainS secondi del percorso. La sua luce è propria: si vede che il Sole la raggiunga o no. object nomina ciò che è ricaduto (name, cosparId, norad). Nulla è propagato da elementi orbitali, sbagliati di minuti nell'ultima orbita: il percorso è ciò che le fonti stabiliscono, con la sua provenienza |
launches | I lanci di razzo avvenuti, illuminato da un Sole tramontato per il suolo ma non per la scia, la «medusa spaziale». Collocati sulla Terra come un rientro: la loro track dà lo stadio in istanti della registrazione, { t, lat, lng, altitudeKm } (può cominciare prima della registrazione), e burnFromT e burnUntilT i secondi in cui il motore ha bruciato. La scia è una fila di sbuffi lasciati lungo quel percorso, ciascuno che si allarga con l'età; ciò che si vede di ciascuno è la luce del Sole che diffonde verso l'osservatore. L'ombra della Terra (dove il Sole illumina o no all'altezza dello sbuffo, e quanta aria ha sfiorato la sua luce, che la arrossa o la rende blu), l'angolo di diffusione e l'espansione sono calcolati dal vero Sole alla vera data: nulla ne è dichiarato. Un plume facoltativo sostituisce i valori predefiniti: exhaustKgPerS (273, un Merlin Vacuum), condensedShare (0,1, l'unico numero che nessuno ha misurato), particleRadiusUm, expansionKmPerS, initialRadiusKm, lifetimeS, e per il collare (lo scarico appena rilasciato, largo e presto sparito, accanto alla scia stretta che resta) collarShare (0,85), collarExpansionKmPerS (2,5), collarLifetimeS (20). vehicle nomina ciò che ha volato e, in engine, il motore di cui è lo scarico: thrustKN e specificImpulseS (da cui si ricavano la portata dello scarico e la sua velocità, quindi la larghezza del collare) e propellant (rp1-lox, methane-lox, hydrogen-lox, hypergolic o solid, che dice quanta parte diventa particelle e di che dimensione). Ciò che dice plume prevale su ciò che dice il motore. La scia ha bisogno della data della registrazione: senza non c'è Sole che la illumini vehicle.mission nomina la missione che compiva ("Starlink Group 10-49"). |
beams | I fasci di luce inviati nell'aria dal suolo, un tiro laser o un proiettore. Ciascuno ha un path di almeno due punti { lat, lng, altitudeM } (altitudini sul mare): dove lascia l'emettitore, dove uno specchio lo devia se c'è, e dove finisce. Tra due punti è una retta nello spazio, non lungo il suolo, che si abbassa sotto di essa. wavelengthNm è il suo colore (532 per un laser verde), powerW la sua potenza ottica media, divergenceMrad quanto in fretta si allarga (0,1 se assente) e apertureM la sua larghezza alla partenza (0,01 m se assente); fromT e untilT dicono quando è acceso. Nulla della sua luminosità è dichiarato: ciò che si vede di ogni metro è ciò che l'aria in quel punto (molecole e foschia, alla sua lunghezza d'onda) diffonde verso l'occhio della potenza che gli resta, secondo l'angolo di cui la luce deve girare; è quindi molto più vivo visto risalendolo che guardandolo allontanarsi. È nascosto da ciò che gli sta davanti e si ferma dove incontra il suolo. |
Un'altra lettura: un'interpretazione è un'altra osservazione#
La lettura che un altro fa di un resoconto (quella di un analista, di un investigatore, un confronto fatto per
metterla alla prova) non fa parte del resoconto: è un'altra osservazione, quella che c'è stata come la sostiene il
suo autore. Perciò è elencata nel caso come l'originale, come evento di tipo sighting, contrassegnato
come lettura da interpretationOf, e ha una registrazione propria a url:
{
"id": "McMinnville1950",
"events": [
{ "type": "event", "eventType": "sighting", "id": "trent", "title": "Paul Trent", "url": "observer-mcminnville.json" },
{ "type": "event", "eventType": "sighting",
"interpretationOf": "trent",
"time": "2013-06",
"by": [{ "people": "CousynAntoine" }, { "people": "LouangeFrancois" }],
"title": "A model on a thread under the line",
"url": "interpretation-mcminnville-2.json" }
]
}
| Campo | Significato |
|---|---|
interpretationOf | L'id dell'evento del caso di cui è una lettura ("trent"), o un elenco di id quando una lettura serve più resoconti (le fotografie e un primo piano). Ciò che la distingue da un resoconto: gli eventi senza questo campo sono gli osservatori del caso |
time | Quando l'interpretazione è stata elaborata, come RR0 scrive un tempo ("2013-06"): non quando l'osservazione è avvenuta |
by | Chi la sostiene: { "people": id } o { "org": id }, che designano una voce che vive altrove (su RR0, una directory di persone o di organizzazioni), o una persona descritta nel valore. Assente per un confronto che nessuno sostiene |
title | Come si chiama la lettura nel menu del lettore e nel selettore dell'editor: poche parole, una stringa o una per lingua |
url | La sua registrazione, letta relativamente all'indirizzo del file del caso, come quella di un osservatore |
La registrazione a url è una registrazione come le altre. Condivide il luogo, l'ora e la posa
dell'osservatore del resoconto che legge, così che un corpo collocato dall'osservatore, o in metri da dove si
trovava, significa la stessa cosa in entrambe; non disegna alcuna forma (una timeline vuota); e tiene i
corpi nella propria interpretation, descritta sopra. L'explains di un corpo designa le
forme del resoconto.
{
"version": 1,
"id": "1950-05-11-TrentPaul-interpretation-2",
"time": { "year": 1950, "month": 5, "day": 11, "hour": 19, "minute": 45 },
"utcOffsetHours": -7,
"place": [{ "value": { "lat": 45.104167, "lng": -123.330556 } }],
"observerTrack": { "keyframes": [{ "t": 0, "pose": { "lat": 45.104167, "lng": -123.330556, "headingDeg": 41.3, "pitchDeg": 14.85, "fovDeg": 33.4 } }] },
"tags": ["interpretation"],
"timeline": { "keyframes": [], "order": [], "groups": [] },
"interpretation": {
"title": "A model on a thread under the line",
"bodies": [{
"id": "model",
"explains": ["ufo-1"],
"model": { "id": "disc" },
"track": [
{ "t": 0, "eastM": -52, "northM": 118, "altitudeAboveGroundM": 7.5,
"sizeM": { "widthM": 0.3, "lengthM": 0.3, "heightM": 0.1 } }
]
}]
}
}
Il lettore elenca gli osservatori del caso dagli eventi senza interpretationOf e propone ogni lettura
accanto al resoconto che designa, una alla volta (il pulsante ◌ la misura contro il resoconto). Una registrazione
da sola non ha altra lettura che la propria interpretation. La forma più vecchia, un evento di tipo
interpretation che designa la registrazione in sighting con i corpi in linea o in un file
a url, si legge ancora. L'editor apre un caso: il suo selettore sopra il rendering elenca i resoconti e
le letture, ciascuno aprendosi come la registrazione che è, con un pulsante per aggiungere una lettura (una nuova
registrazione che condivide luogo, ora e posa del resoconto, e un evento per essa), uno per eliminarla, e uno per
esportare il caso e ogni registrazione aggiunta o modificata in uno zip. Provalo con
case-mcminnville.json
(riprodurlo,
modificarlo).
Il meteo, e le sue nuvole#
Un fotogramma chiave weather esprime le condizioni del cielo in un momento dell'orologio
della registrazione; fra due fotogrammi chiave ogni numero viene interpolato, mentre il tipo di precipitazione e il
temporale vengono mantenuti. Contiene:
| Campo | Significato |
|---|---|
cloudLayers | Le nuvole, come elenco di strati — vedi sotto. Se manca, le descrivono i campi più vecchi delle righe vicine, adattati in uno strato d'acqua e un velo di cirri; un elenco vuoto significa un cielo sereno che qualcuno ha guardato |
cloudCover, lowerCloudCover, highCloudCover | Frazioni di cielo (0–1): il totale, solo gli strati d'acqua, e solo il velo ghiacciato. Scritte dalle registrazioni fatte prima che esistessero gli strati, e ancora tenute aggiornate dall'editor come riassunto di questi |
cloudBaseM, cloudDarkness | L'unica base della stessa epoca, in metri sopra il suolo di riferimento, e un'unica tonalità (0 bianco, 1 molto scuro) |
iceCrystalAlignment | 0–1, con quanta regolarità cadevano i cristalli di ghiaccio — ciò che trasforma un semplice anello in pareli, archi e una colonna. Nessun dato lo misura; uno strato di cirri porta il proprio |
rareIceCrystals | 0–1, la quota dei cristalli di un velo di cirri che sono di tipi rari: colonne con estremità piramidali (gli aloni a raggio dispari, a 9°, 20° e 35°) e lastrine libere di ruotare attorno a un asse orizzontale (gli archi di Lowitz). Assente significa 5%, un velo ordinario. Come l'allineamento, nessun dato li conta: è dichiarato. La simulazione che ne deriva è stata verificata coerente con Atmospheric Optics |
relativeHumidity | 0–1, vicino al suolo. Decide quanto è lattiginoso il cielo sereno: la foschia si gonfia d'acqua man mano che l'aria si avvicina alla saturazione. Un dato consultato la contiene (dalla temperatura e dal punto di rugiada di ERA5); se manca, una foschia tipica |
precipitationType, precipitationIntensity | none/rain/snow/hail, e 0–1. Indicata a un fotogramma chiave, riprodotta come cade: un rovescio inizia al fotogramma chiave che lo avvia con le sue prime gocce, e non raggiunge l'intensità indicata più in fretta di una pioggia reale (da niente al massimo in venti secondi); smette allo stesso modo. Un cambiamento che i fotogrammi chiave distribuiscono su un tempo più lungo viene seguito esattamente precipitationAmount (0–1, assente significa tutta) dice quanta parte di quella precipitazione sta già cadendo. |
windDirectionDeg, windSpeed | Il vento generale: la direzione VERSO cui soffia, in senso orario dal nord, e metri al secondo. È ciò che trasporta le nuvole — dall'istante zero, così che cercare e riprodurre di nuovo diano lo stesso cielo |
storm | Fulmini e tuoni, con il giusto ritardo |
Ogni strato di cloudLayers è una coltre di nuvole a un'altezza
reale, e resta sé stesso da un fotogramma chiave al successivo:
| Campo | Significato |
|---|---|
id | Stabile fra i fotogrammi chiave — gli strati vengono abbinati tramite esso, mai per posizione nell'elenco. Uno strato presente in un fotogramma chiave e assente dal successivo svanisce; riordinarli non cambia nulla |
type | cumulus, stratus, stratocumulus, cirrus o unknown. Decide la forma delle sommità e quanto è sottile il velo; un cirro è anche quello che rifrange gli aloni. Cambia al fotogramma chiave, non viene interpolato |
baseM, thicknessM | Metri. La base è sopra il suolo di RIFERIMENTO della registrazione, non sopra un osservatore che sale; un osservatore sopra la base è dentro la coltre o al di sopra, e il cielo viene disegnato di conseguenza |
coverage | 0–1, e significa ciò che dice: la frazione di cielo che questo strato copre, qualunque sia la dimensione delle sue nuvole |
sizeM | La larghezza caratteristica di una nuvola, in metri. Indipendente dalla copertura: la stessa frazione di cielo può essere molte nuvole piccole o poche grandi |
density | 0–2, quanto è opaca la materia della nuvola; 0 è trasparente. Anch'essa indipendente dalla copertura |
darkness | Da 0 bianco a 1 molto scuro. Se manca, il cloudDarkness del fotogramma chiave |
seed | Quale motivo, fra gli infiniti che gli stessi numeri possono disegnare. Se manca, uno ricavato dall'id, ed è per questo che l'id non deve cambiare |
windDirectionDeg, windSpeed | Il vento proprio di questo strato, quando differisce da quello generale — di solito è il caso dello strato alto. Se manca, il vento generale |
iceCrystalAlignment | Solo per un cirro |
instances | Nuvole singole all'interno di questo strato — vedi sotto |
Una nuvola singola in instances è una nuvola del suo strato che il
file colloca con esattezza, perché il resoconto lo ha fatto: quella dietro cui è passato il fenomeno, quella che
era lì e da nessun'altra parte. Viene disegnata come una delle altre del suo strato — la stessa texture, la stessa
soglia —, distinta dalle vicine soltanto da dove si trova e da quanto è grande,
ed è presente anche quando la coverage dello strato è nulla. Segue il vento dello strato
come le altre, e nasconde un fenomeno davanti al quale passa.
| Campo | Significato |
|---|---|
id | Stabile fra i fotogrammi chiave, stessa regola di uno strato |
eastM, northM | Dove si trovava il suo centro all'istante zero, in metri dal punto di partenza dell'osservatore. Il vento la trasporta da lì |
baseM, thicknessM | La sua base e la sua altezza, in metri — una nuvola può stare più in basso o elevarsi più della sua coltre |
widthM, depthM, rotationDeg | La sua impronta, in metri, e la direzione verso cui quell'impronta è ruotata |
density, darkness | Le proprie; se manca l'oscurità, quella dello strato |
{
"weather": {
"cloudLayers": [
{
"id": "low", "type": "cumulus",
"baseM": 1500, "thicknessM": 800,
"coverage": 0.55, "sizeM": 1400, "density": 1, "darkness": 0.15,
"instances": [
{ "id": "the-one", "eastM": 0, "northM": 4200,
"baseM": 1500, "thicknessM": 800,
"widthM": 1900, "depthM": 1300, "rotationDeg": 12, "density": 1 }
]
},
{ "id": "high", "type": "cirrus", "baseM": 8000, "thicknessM": 400,
"coverage": 0.2, "sizeM": 2200, "density": 0.35, "iceCrystalAlignment": 0.65 }
],
"precipitationType": "none", "precipitationIntensity": 0,
"windDirectionDeg": 90, "windSpeed": 5, "storm": false
}
}
Una registrazione il cui meteo è stato consultato (ha un weatherSource)
contiene la risposta del dato, non un link a esso: ERA5 fornisce le fasce bassa, media e alta come tre
strati chiamati record-low, record-mid e record-high, la
base bassa stimata dallo scarto fra temperatura e punto di rugiada, le altre due a 3 500 m
e 8 000 m. Il loro tipo è unknown (cirro per quello alto), la loro dimensione e la loro
densità sono ipotesi di disegno: una rianalisi sa quanta parte di ogni fascia era coperta, non che aspetto
avessero le nuvole. Richiedi il dato dall'editor e gli strati vengono riscritti; modifica
uno strato a mano e la registrazione diventa dell'autore, con la fonte rimossa.
Da dove viene ogni valore#
Qualsiasi valore di una registrazione può essere scritto così com'è, o avvolto con la sua provenienza:
{
"durationSeconds": {
"value": 15,
"basis": "derived",
"rationale": "Da 13 a 18 s nella sintesi dell'inquirente; preso il valore medio"
}
}
basis è stated (l'ha detto l'osservatore, ed è ciò che significa un valore
semplice), derived (ricavato da ciò che ha detto più qualcosa di verificabile: la larghezza di una
strada, una mappa, un disegno misurato; rationale dà il ragionamento) o
assumed (scelto perché la ricostruzione abbia comunque un valore, senza basarsi su nulla di ciò che
l'osservatore ha detto). L'elenco dei valori assumed è l'elenco di ciò per cui tornare dall'osservatore
o al fascicolo, ed è per questo che vale la pena scriverlo anche quando non si scrive nient'altro.
Verificare un file#
Il formato è pubblicato anche come JSON Schema, generato dagli stessi tipi del lettore: ogni chiave che conosce, ciò che ciascuna può contenere, e le parole che accetta un elenco chiuso. Una chiave scritta male o un valore sconosciuto non lo superano. Non dice nulla di ciò che si può omettere, che è una questione di senso a cui risponde questa pagina. Per vedere il risultato, apri il file nel lettore, da un link, o dal tuo disco con le immagini e i modelli che nomina. Il lettore lo verifica allo stesso modo al caricamento, e indica dietro un ⚠ sull'immagine ciò che non ha potuto riprodurre così come è scritto: una chiave che nulla legge, una parola fuori dal suo elenco, e ciò che ha dovuto inventare perché il primo fotogramma chiave di una forma lo ometteva (un campo mantenuto dal fotogramma chiave precedente è la regola di cui sopra, non un problema).
Un file completo#
La registrazione più piccola che esprima ancora qualcosa — un ovale silenzioso che attraversa il cielo in dodici secondi, in una data reale e in un luogo reale. Tutto il resto del formato è facoltativo, e tutto ciò che segue ha una funzione:
{
"version": 1,
"description": "The smallest recording that still states something: one silent orange oval, a degree and a half wide, crossing the south-western sky from left to right over twelve seconds.",
"time": { "year": 2024, "month": 8, "day": 12, "hour": 22, "minute": 30 },
"durationSeconds": 12,
"utcOffsetHours": 2,
"place": [{ "lat": 45.19, "lng": 5.72, "name": "Grenoble, Isère, France" }],
"timeline": {
"keyframes": [
{
"t": 0,
"shapes": [
{
"sourceId": "ufo-1",
"shape": {
"kind": "oval",
"bounds": { "x": 150, "y": 150, "width": 10, "height": 3 },
"angular": { "widthDeg": 1.6, "heightDeg": 0.5 },
"color": "#ff8c1a",
"angle": 0,
"transparency": 0,
"haloScale": 1.2,
"selected": false
}
}
]
},
{
"t": 12000,
"shapes": [
{
"sourceId": "ufo-1",
"shape": {
"kind": "oval",
"bounds": { "x": 480, "y": 130, "width": 10, "height": 3 },
"angular": { "widthDeg": 1.6, "heightDeg": 0.5 },
"color": "#ff8c1a",
"angle": 0,
"transparency": 0,
"haloScale": 1.2,
"selected": false
}
}
]
}
]
},
"observerTrack": {
"keyframes": [
{
"t": 0,
"pose": { "lat": 45.19, "lng": 5.72, "elevationM": 0, "headingDeg": 215, "pitchDeg": 20, "fovDeg": 60 }
}
]
},
"soundTrack": { "keyframes": [{ "t": 0, "sound": { "kind": "none", "volume": 0, "pitchHz": 100 } }] }
}
Per modificarlo e vederlo riprodotto, incollalo nell'editor, che completa ogni chiave del formato, propone le parole che ciascuna accetta, e dice ciò che il modello ne dice.
È /demo-data/example-minimal.json
su questo sito, quindi puoi scaricarlo, e
riprodurlo prima di cambiare
qualsiasi cosa. Nota che compaiono sia angular sia bounds: l'angolo è ciò che
il file SIGNIFICA, e i pixel ne vengono ricavati di nuovo al caricamento — scrivi l'angolo, e lascia
che una stima errata dei pixel venga corretta per te.
Altri più grandi da leggere#
Ogni demo di questo sito è un semplice file che puoi aprire. Questi quattro sono quelli che vale la pena leggere per vedere come è costruita una registrazione reale:
| File | Che cosa guardarci |
|---|---|
observer-chiles.json | Un caso reale: un osservatore, un id di caso condiviso con una seconda registrazione, dieci fotogrammi chiave, un weatherTrack consultato con il suo weatherSource |
sky-test-halos.json | Nessun fenomeno — un cielo preparato da un weatherTrack i cui fotogrammi chiave cambiano l'allineamento dei cristalli, la quota di cristalli rari, la copertura di cirri e una coltre di cumuli, osservato attraverso un observerTrack che percorre lo spettacolo e poi si ferma |
sky-test-clouds.json | Tre strati di nuvole con altitudine, spessore, dimensione, densità e vento in metri, che evolvono sulla linea temporale del meteo — e nel primo una voce instances: una nuvola del campo, collocata e dimensionata in metri, che cresce e si scurisce nel corso dei due minuti |
sky-test-aircraft.json | Un instrument, un exposureSeconds e un iso, e un aeromobile di decor con una track e nove lights alle loro cadenze di lampeggio reali, fari di atterraggio compresi |
sky-test-reentry.json | Nessun fenomeno: skyEvents con una reentries, il lanciatore di Zond 4 che si disintegra sopra il Kentucky nel 1968, il percorso derivato e orario, quote e luminosità supposti, ogni valore con la sua provenienza |
sky-test-launch-plume.json | Nessun fenomeno: skyEvents con una launches, lo scarico di Starlink Gruppo 10-49 (Falcon 9, 25 agosto 2026, 05:33 EDT) illuminato nel crepuscolo e visto da Hoboken (New Jersey), il percorso dello stadio supposto con la sua provenienza e l'ombra, l'espansione e la luce calcolate |
sky-test-laser-meudon.json | Nessun fenomeno: skyEvents con un beams, il laser verde da 10 W che l'Osservatorio di Parigi sparò dalla sua cupola di Meudon a quella di Parigi il 9 ottobre 2026, visto dal parco di Meudon, l'altezza dell'emettitore e l'apertura supposte con la loro provenienza, la luce calcolata |
instrument-instamatic.json | Lo stesso avvistamento di observer-socorro.json, cambiato in un solo campo. Confronta i due |
Quattro regole che decidono che cosa significa un file#
- I campi discreti vengono mantenuti, quelli continui interpolati. Una forma omessa in
un fotogramma chiave successivo resta com'era, e così qualsiasi campo che un fotogramma chiave omette in una forma
che invece indica di nuovo: un fotogramma chiave che dà solo un nuovo
aimsposta la forma e mantiene tutto il resto (indicare di nuovoboundssenzaaimnéangularviene inteso come spostarla tramite i suoi pixel); una il cui primo fotogramma chiave è a cinque secondi è già dipinta, in quello stato, da zero. Per fare in modo che qualcosa smetta di essere visibile, dagli un fotogramma chiave contransparency: 1. - Solo angoli. Nessuna dimensione reale e nessuna distanza reale sono memorizzate da nessuna parte. I metri
vengono ricavati, come disuguaglianze, da ciò dietro o davanti a cui si è detto che il fenomeno passava
(
decor[].occludesSourceIds). - Il dichiarato prevale sul dedotto.
occludesSourceIdsregistra affermazioni dell'osservatore. Niente in questo formato può dedurle: descrive un aspetto in un campo visivo, non una posizione nello spazio. - Assente non è zero. Nessuna traccia sonora significa che nessuno l'ha chiesto;
kind: "none"significa che l'osservatore ha riferito di non aver sentito nulla. La stessa distinzione attraversa il meteo e la nube di ghiaccio.
Questa pagina è il riferimento del formato. Il ragionamento dietro ogni campo si trova nei commenti di documentazione del suo tipo, con cui si completano gli estratti qui sopra, e nel codice sorgente.
I componenti#
Tre degli elementi standard riguardano un'osservazione: la scena in cui viene riprodotta, il lettore che la mostra e l'editor che la descrive. L'editor di casi e l'editor di interviste hanno le loro sezioni, nelle pagine che ne parlano.
Standard, ed è questo tutto il progetto#
Sono cinque Web Component — lo standard del browser stesso per un elemento personalizzato, non un componente del framework di qualcuno. Ciò che ne consegue merita di essere detto, perché è ciò che permette di metterti in mano lo strumento:
- Funzionano in qualsiasi pagina. Un sito statico, WordPress, un'applicazione
React o Vue, un wiki, un file HTML scritto a mano. Sono elementi: una pagina che può
contenere un
<video>può contenere anche questi. - Niente da compilare. Nessun bundler, nessuna fase di compilazione, nessuna configurazione nel tuo progetto. Il modulo registra il suo elemento all'importazione e il browser fa il resto.
- Niente da inseguire. Non c'è una versione di framework a cui adeguarsi, quindi la nuova major release di qualcun altro non può renderli obsoleti.
- Il loro interno è affar loro. Ognuno porta il proprio markup e i propri stili in uno shadow root, quindi il CSS della tua pagina non può romperli e loro non possono rompere la tua pagina.
Si compongono in una riga: sia <rr0-sighting> sia
<rr0-sighting-editor> contengono un <rr0-scene>, e la scena
contiene lo strato di riproduzione — la linea temporale, i controlli, il canvas del puntatore.
Quindi tutto ciò a cui risponde la scena è disponibile in tutti e tre — tramite
.scene e .scene.ufoElement dal più esterno, poiché la composizione
vive in uno shadow root.
A cosa serve ciascuno#
<rr0-scene>— il fenomeno nel mondo che lo circonda. La forma disegnata da un osservatore, il suo colore, il suo alone e il suo movimento, collocata nel cielo, nell'orizzonte, nel meteo e nel suolo reali di una data, un'ora e un luogo dichiarati — nascosta da ciò che stava davanti. Utile anche da sola, per un cielo in cui non c'è niente.<rr0-sighting>— il resoconto, da guardare. Una scena più chi testimonia, i metadati dell'osservazione, i suoi crediti e le righe che permettono a un lettore di portarlo altrove. È così che appare un avvistamento pubblicato.<rr0-sighting-editor>— il resoconto, da ricostruire. Tutto quanto sopra più la barra degli strumenti di redazione: descrivere un'osservazione, o correggerne una.<rr0-case-editor>— un caso, da assemblare. Contiene un<rr0-sighting-editor>e gli presenta una registrazione di uncase.jsonalla volta: i resoconti degli osservatori e le letture che se ne fanno. Li aggiunge, li seleziona e li elimina, ed esporta il caso.<rr0-date-input>— una data, con la sua precisione. Un selettore per un istante completo, un testo per meno (EDTF), e il grado di certezza. Gli editor lo usano per l'inizio e la fine di un'osservazione e per la data di un caso; dice ciò che contiene con un eventodatechange.
Come si incastrano#
Non scrivi mai l'annidamento. Ogni elemento costruisce quello sottostante dentro il proprio shadow root, quindi ciò che la tua pagina contiene è un solo tag:
<rr0-sighting> chi testimonia, il pannello dei metadati, le righe di incorporamento
└─ <rr0-scene> il cielo, l'orizzonte, il meteo e lo scenario reali, il fenomeno, la riproduzione
<rr0-sighting-editor> gli otto pannelli di redazione
└─ <rr0-scene> una scena, non un avvistamento: un editor ha la propria barra degli strumenti
Ecco perché un solo tag script si porta dietro quelli sottostanti:
| Caricando questo | si registra |
|---|---|
/lib/rr0-scene.mjs | <rr0-scene> |
/lib/rr0-sighting.mjs | <rr0-sighting>, <rr0-scene> |
/lib/rr0-sighting-editor.mjs | <rr0-sighting-editor>, <rr0-scene> |
Così una pagina che mostra un avvistamento e, più in basso, un cielo tutto suo ha bisogno di un solo script e di due tag — il secondo elemento è già registrato.
Si può entrare in una composizione, una proprietà alla volta:
const sighting = document.querySelector("rr0-sighting")
sighting.scene // il <rr0-scene> che compone
sighting.scene.ufoElement // e lo strato di riproduzione sotto di esso
sighting.scene.ufoElement.play() // quindi la riproduzione è a due proprietà di distanza
<rr0-sighting-editor> tiene per sé la propria composizione: ciò che offre a
una pagina è la registrazione — sightingData — e l'evento che segnala che è
cambiata.
Quale ti serve#
Non sono varianti di un unico bundle: ognuno è autonomo, quindi carica solo quello che ti serve. Tutti e tre includono Three.js e un catalogo stellare, che è il prezzo di un cielo reale.
| Cosa stai facendo | Componente | Modulo | gzip |
|---|---|---|---|
| Mostrare un avvistamento UFO — un fascicolo, un articolo, un rapporto | <rr0-sighting> | /lib/rr0-sighting.mjs | 249 KB |
| Permettere a qualcuno di descriverne o correggerne uno | <rr0-sighting-editor> | /lib/rr0-sighting-editor.mjs | 293 KB |
| Mostrare un cielo senza niente — che aspetto avevano quella notte un alone, una cometa o il passaggio di un satellite | <rr0-scene> | /lib/rr0-scene.mjs | 238 KB |
| Mostrare un avvistamento dentro una scena tua, senza barra degli strumenti sopra | <rr0-scene> | /lib/rr0-scene.mjs | 238 KB |
| Non sei sicuro | <rr0-sighting> | /lib/rr0-sighting.mjs | 249 KB |
Metterne uno in una pagina richiede due righe.
Integrarlo nella tua applicazione#
Dopo npm install @rr0/ufoathome:
import "@rr0/ufoathome/scene" // registra <rr0-scene>
import "@rr0/ufoathome/sighting" // registra <rr0-sighting>
import "@rr0/ufoathome/editor" // registra <rr0-sighting-editor>
Oppure copia il contenuto delle cartelle dist-embed* del pacchetto sul tuo
server e punta lì il <script src>. Ogni modulo fa riferimento alle proprie
risorse — il catalogo stellare, l'audio meteorologico — in modo relativo a se stesso,
quindi continua a funzionare da qualsiasi percorso; basta tenere insieme i file di ogni
bundle. A quel punto nulla dipende più da questo sito.
Lingua#
Ogni etichetta è tradotta per rilevamento, senza selettore: prima la lingua dichiarata dalla
pagina stessa — l'attributo lang più vicino, quindi <html lang="fr">
ottiene etichette in francese — poi le preferenze del browser, poi l'inglese. Una pagina che non
dichiara nulla ricade sul browser esattamente come prima.
<rr0-sighting>#
La vista standard di un avvistamento
La scelta predefinita per un avvistamento reale, con uno o più osservatori. Compone un
<rr0-scene> e aggiunge la barra degli strumenti: chi rende il resoconto, e il pannello i
con i metadati propri dell'osservazione e i suoi crediti, e un pulsante di condivisione: il link che la riproduce, e le sue righe di incorporamento.
<rr0-sighting src="sighting.json"></rr0-sighting>
<rr0-sighting src="case.json"></rr0-sighting> <!-- un caso, e tutti i suoi osservatori -->
| Membro | Tipo | Cosa fa |
|---|---|---|
src | attributo | Una sola registrazione, o un caso i cui eventi sighting ne elencano diverse — distinti dalla loro forma. Un semplice array di registrazioni viene rifiutato: elencale come eventi sighting di un caso |
observerUrls | proprietà | Le registrazioni da mostrare, come semplice array di URL, invece di src. Reimpostarla mantiene l'osservatore mostrato se la nuova lista lo contiene ancora |
sightingData | proprietà | Una registrazione, impostata direttamente — per una pagina che ne tiene una in memoria invece che a un URL |
scene | proprietà (lettura) | Il <rr0-scene> composto, e attraverso scene.ufoElement i membri di riproduzione |
loadFromSrc(url) | metodo (async) | Ciò che l'attributo innesca |
show-labels | attributo | La striscia di chip che enunciano la registrazione sotto l'immagine, raggruppati (riepilogo, osservazione, posizione, momento, meteo, suono, osservatore): la data detta a parole con il suo giorno della settimana, e un chip Descrizioneche mostra le prime parole del resoconto e apre il testo intero, con scorrimento oltre un'altezza massima, al posto dei chip. Disattivata per impostazione predefinita sull'elemento — la pagina del lettore la attiva — e un lettore può aprirla o chiuderla dal pannello i |
show-observer-map / hide-milestones | attributo | Passati attraverso il <rr0-scene> composto fino al lettore che li possiede |
start-time | attributo | Dove si apre la registrazione, come una durata dall'inizio: secondi (125), 1:30, 1m30s o una durata ISO 8601 (PT1M30S). Applicato una volta, alla registrazione che l'elemento carica dopo; un valore oltre la fine apre alla fine |
start-clock | attributo | Dove si apre la registrazione, come un'ora detta durante l'osservazione, nella sua ora locale: 02:33:15, o con il giorno 2026-08-11T02:33:15. L'inizio della registrazione la colloca; prevale su start-time quando può, ed è ignorata per una registrazione che non dice la sua ora |
compare-account | attributo | Parte con il resoconto dell'osservatore mostrato accanto all'interpretazione scelta, e misurato rispetto ad essa |
Una registrazione che non nomina alcun osservatore non ha nessuna riga “resoconto di”, ed è la cosa esatta da dire di un cielo preparato per mostrare un alone.
La registrazione di ogni osservatore viene caricata non appena la lista è nota, quindi sceglierne un'altra
è immediato. La lista nomina ciascuno con il suo title, altrimenti con nomi e cognome,
altrimenti con il suo id; uno che non nomina nessuno è numerato secondo il suo posto nella lista.
Il pannello i
si apre come popover, che Esc o un clic all'esterno chiudono (solo un clic
all'esterno, su un browser senza popover). Indica il caso, la data, il luogo, il
resoconto e i tag; data, luogo e tag ne escono finché la striscia show-labels
li indica già. La data è all'ora dell'osservatore stesso (utcOffsetHours, o
un'ora approssimata dalla longitudine), non a quella del lettore. La versione in fondo apre questa
osservazione nell'editor. Anche la descrizione lo lascia finché i chip sono mostrati: è nella loro scatola
Riepilogo
, che si apre con un clic.
Il pulsante Condividi
, tra quelli del lettore, apre un'unica finestra che dà il link o il codice da incorporare
(il codice in un editor che va a capo e si può modificare), per il lettore o per l'editor, con
le opzioni della pagina di condivisione, ciascuna offerta com'è il lettore. Il codice carica l'elemento da dovunque questa copia
sia stata a sua volta caricata, così che uno snippet copiato da una copia locale o di staging rimandi a quella
copia.
Cosa emette
| Evento | Quando | Dove ascoltarlo |
|---|---|---|
observerchange | Quando cambia la registrazione mostrata: caricata, impostata tramite sightingData, o un altro osservatore scelto dalla lista. detail.src è il suo indirizzo, vuoto per una registrazione impostata da script | Su questo elemento. Non fa bubbling: ascolta sul <rr0-sighting> stesso, poi rileggi il suo sightingData (la sua descrizione, il suo id) |
recordingissues | Una volta che una registrazione caricata è stata verificata rispetto al formato: detail.issues elenca ciò che non è stato riprodotto come scritto (una chiave che nulla legge, un valore del tipo sbagliato o fuori dalla sua lista, un valore inventato perché il file lo ometteva), ciascuno con il suo kind e il suo path. Vuota quando non c'è nulla da dire. La stessa lista è mostrata sull'immagine dietro un ⚠, e scritta nella console | Ovunque sopra l'elemento: si propaga fuori da tutte le shadow root |
Inserirlo nella tua pagina
<script type="module" src="https://ufoathome.org/lib/rr0-sighting.mjs"></script>
<rr0-sighting src="sighting.json"></rr0-sighting>
sighting.json è un file di avvistamento. Oppure, dopo npm install @rr0/ufoathome: import "@rr0/ufoathome/sighting".
Il bundle pesa 249 KB compresso con gzip e registra il tag da sé — nient'altro da chiamare.
La presentazione sopra dice cos'altro comporta, e
condividere un'osservazione ha l'esempio completo, da provare e da copiare.
<rr0-scene>#
Il fenomeno, il cielo e il suolo
La forma disegnata da un osservatore, collocata nel cielo, nell'orizzonte, nel meteo e nel suolo reali della data, dell'ora e del luogo della registrazione, e nascosta da ciò che le stava davanti — con i comandi di riproduzione sotto. È l'elemento su cui si costruiscono gli altri due.
<rr0-scene src="sighting.json"></rr0-scene>
| Membro | Tipo | Cosa fa |
|---|---|---|
src | attributo | URL di una registrazione, caricata alla connessione e a ogni cambiamento |
sightingData | proprietà | La registrazione come oggetto semplice (vedere il formato) — da rileggere dopo la modifica, o da impostare invece di usare src |
loadFromSrc(url) | metodo (async) | Ciò che l'attributo innesca internamente. Attendilo quando la registrazione deve essere GIÀ caricata prima di fare qualsiasi altra cosa |
ufoElement | proprietà (lettura) | Il livello di riproduzione che compone — la cronologia, i comandi, il canvas su cui agisce il puntatore — e, attraverso di esso, tutti i membri di riproduzione qui sotto |
sceneRenderer | proprietà (lettura) | Il motore di rendering 3D, per ciò che nient'altro espone |
show-compass | attributo | Le etichette N/NE/E/… lungo l'orizzonte. Disattivato per impostazione predefinita: utile quando si imposta una direzione, rumore quando si guarda |
star-catalog-src / deep-star-catalog-src | attributo | Da dove caricare il catalogo stellare, quando ne ospiti una tua copia invece di quella accanto al bundle: il livello base (fino alla magnitudine 7,5, caricato da ogni scena) e il livello profondo (da 7,5 a 9, caricato solo da una registrazione il cui strumento va oltre 7,5) |
max-pixel-ratio | attributo | Il massimo di pixel del dispositivo per pixel CSS con cui la scena può disegnare; quello dello schermo stesso, fino a 2, se assente. La scena lo abbassa da sé finché i fotogrammi sono in ritardo |
show-observer-map / hide-milestones | attributo | Passati tali e quali al livello di riproduzione sottostante — scrivili sul tag che la tua pagina contiene davvero |
Al passaggio del puntatore nomina ciò che c'è sotto — una stella con la sua magnitudine e la sua altezza, un pianeta, una cometa, un edificio, un altro osservatore — e non dice nulla dove il suolo nasconde ciò che stai indicando.
Il pulsante ©
nel suo angolo elenca i crediti di ciò che mostra — le immagini del
suolo e della mappa, i modelli, le foto del luogo, i suoni. Dentro
<rr0-sighting> il pulsante è nascosto: sono nel suo pannello i
.
La riproduzione, su ufoElement
Tutto ciò che riguarda la riproduzione della registrazione sta una proprietà più in basso, nel livello di riproduzione —
scene.ufoElement.play() — lo stesso livello che gli altri due componenti raggiungono attraverso
la propria scene.
| Membro | Tipo | Cosa fa |
|---|---|---|
src | attributo | URL di una registrazione, caricata alla connessione e a ogni cambiamento |
sightingData | proprietà | La registrazione come oggetto semplice (vedere il formato) — da rileggere dopo la modifica, o da impostare invece di usare src |
sighting | proprietà (lettura) | Il modello vivo: ora e luogo reali più la cronologia della registrazione |
loadFromSrc(url) | metodo (async) | Ciò che l'attributo innesca internamente. Attendilo quando la registrazione deve essere GIÀ caricata prima di fare qualsiasi altra cosa — riprodurre prima che si risolva trova una cronologia di durata zero |
play() / pause() | metodo | Dicono quale stato si vuole, invece di invertire quello attuale |
togglePlayPause() | metodo | Ciò che fanno il pulsante, il clic e la barra spaziatrice |
playbackState | proprietà (lettura) | "stopped", "playing" o "paused" |
currentTime | proprietà | La testina di riproduzione, nelle unità proprie della cronologia — non in millisecondi reali, vedere positionLabel |
seekableDuration | proprietà (lettura) | L'intervallo che currentTime può assumere |
autoReplayEnabled | proprietà | La ripetizione in loop, disattivata per impostazione predefinita: una riproduzione va una volta, poi emette ended. Attivala per un loop |
positionLabel / durationLabel | proprietà (lettura) | La posizione e la durata già formattate dall'elemento: l'ora dell'orologio quando l'osservazione indica una data e la sua durata è nota, il tempo trascorso altrimenti. Un clic su uno dei due contatori sotto la barra (o Invio su di esso) passa dall'uno all'altro, ed emette timedisplaychange |
refresh() | metodo | Rilegge la durata e ridisegna — chiamalo dopo aver modificato sighting.timeline dall'esterno |
canvasElement / renderer | proprietà (lettura) | Il <canvas>, e il renderer che ci dipinge sopra |
enableClickToPlay | proprietà | Se un clic avvia o ferma la riproduzione e un doppio clic attiva o disattiva lo schermo intero (entrambe le cose, o nessuna). Il doppio clic riporta anche la riproduzione allo stato in cui era prima del suo primo clic. Impostala a false dove il canvas ti serve per altro |
fullscreenTarget | proprietà | Quale elemento viene ingrandito dal pulsante schermo intero. <rr0-scene> la imposta sul proprio palco, così che sia il cielo ad andare a schermo intero e non solo il livello sovrapposto. Dove il browser non offre lo schermo intero (un iPhone, un iframe senza allow="fullscreen"), l'elemento riempie invece la finestra, ed Esc ne esce allo stesso modo |
show-observer-map | attributo | Se la mappa del punto in cui si trovava l'osservatore parte aperta: presente la apre, "false" la tiene chiusa. Assente, decide la registrazione: il suo observerMap se lo indica, altrimenti aperta quando l'osservatore si è spostato (una camminata in un campo, un tragitto in auto, un volo), chiusa quando è rimasto dov'era. Decide lo stato iniziale della mappa, non se esista: il pulsante c'è per ogni registrazione che indica un luogo |
toggleObserverMap() | metodo | Ciò che fa quel pulsante. Sulla mappa stessa la rotella ingrandisce attorno al puntatore, un trascinamento sposta il terreno, e i suoi pulsanti ingrandiscono e tornano al percorso intero. Ingrandita, si ricentra sull'osservatore ogni volta che questi ne raggiunge il bordo, perché non ne esca mai |
observerPlacing | proprietà | Se un clic sul suolo libero della mappa emette observerplace con { lat, lng } — disattivata per impostazione predefinita, perché dire dove si trovava l'osservatore spetta alla registrazione. L'editor la attiva e scrive la posizione alla testina di riproduzione |
hide-milestones | attributo | Toglie i momenti nominati del resoconto — le tacche lungo la barra, la didascalia che nomina quello in riproduzione e i punti con lettera sulla mappa. Compaiono ovunque una registrazione ne nomini qualcuno, quindi questo è l'unico modo di dire il contrario |
toggleMilestones() | metodo | Ciò che fa quel pulsante |
Quei due sono gli unici valori predefiniti positivo e negativo di questo elemento, e la differenza è voluta. I momenti nominati di una registrazione sono le sue stesse parole su di sé, quindi si mostrano ovunque esistano; la mappa costa richieste di tile a una terza parte la prima volta che si apre, e non spetta a una pagina spenderle per conto di un lettore senza dirlo. In entrambi i casi il lettore conserva i due pulsanti, accanto a quello dello schermo intero — una pagina che imposta un valore predefinito non è una pagina che vieta il contrario.
La barra degli strumenti e i pulsanti dell'angolo compaiono solo mentre il puntatore è sopra l'immagine, in riproduzione o in pausa, o quando la tastiera vi porta il focus. Uno schermo tattile, che non ha un puntatore con cui passarci sopra, li tiene visibili.
Con la barra del tempo attiva, i tasti funzionano come su un sito di video: ← torna indietro di 5 s, → va avanti di 5 s e Spazio avvia o mette in pausa. Avviare o mettere in pausa, con un tasto, con il pulsante o con un clic sull'immagine, ne mostra il simbolo per un istante al centro dell'immagine.
Cosa emette
| Evento | Quando | Dove ascoltarlo |
|---|---|---|
ended | Una volta, quando la riproduzione arriva alla fine senza ripartire in loop. Non a una pausa, né trascinando fino alla fine | Ovunque: è bubbling e composed, quindi esce da <rr0-scene> e da <rr0-sighting> e raggiunge l'elemento che hai messo nella pagina. È così che si riproducono più registrazioni una dopo l'altra |
timedisplaychange | Quando i contatori passano dall'ora dell'orologio al tempo trascorso, o viceversa | Ovunque, come sopra |
timeupdate | A ogni passo della riproduzione e a ogni salto, con detail.time | Solo su questo elemento. Non è né bubbling né composed, quindi una pagina che contiene un <rr0-scene> deve passare dal suo ufoElement — è pensato per gli elementi che compongono questo |
Inserirlo nella tua pagina
<script type="module" src="https://ufoathome.org/lib/rr0-scene.mjs"></script>
<rr0-scene src="sighting.json"></rr0-scene>
sighting.json è un file di avvistamento. Oppure, dopo npm install @rr0/ufoathome: import "@rr0/ufoathome/scene".
Il bundle pesa 238 KB compresso con gzip e registra il tag da sé — nient'altro da chiamare.
La presentazione sopra dice cos'altro comporta, e
condividere un'osservazione ha l'esempio completo, da provare e da copiare.
<rr0-sighting-editor>#
L'editor
Tutto quanto sopra più la barra degli strumenti di creazione. Mettilo in una pagina dove le persone devono poter descrivere o correggere un'osservazione da sé.
<rr0-sighting-editor></rr0-sighting-editor>
<rr0-sighting-editor src="sighting.json"></rr0-sighting-editor>
Il suo canvas è una superficie di modifica, quindi enableClickToPlay lì è disattivato: un clic
seleziona e trascina una forma invece di avviare o fermare la riproduzione. Cosa fanno gli otto gruppi della sua barra degli strumenti
è spiegato nella pagina dell'editor.
| Membro | Tipo | Cosa fa |
|---|---|---|
ufoElement | proprietà (lettura) | Dà accesso al canvas, alla cronologia e al lavoro sull'aspetto |
appearance | proprietà | L'aspetto che avrà la prossima forma disegnata: { presetId, color, transparency, haloScale, blur, brightness }, dove presetId vale "oval" o "polygon" e gli altri sono i campi di forma con lo stesso nome. Impostarla prende solo i campi che fornisci |
sightingchange | evento | Emesso dopo ogni modifica — l'unico segnale che la registrazione è cambiata |
Cosa emette
| Evento | Quando | Dove ascoltarlo |
|---|---|---|
sightingchange | Dopo una modifica: un campo scritto, uno strumento scelto, un fuso orario dedotto, una forma spostata lungo la cronologia | Su questo elemento. Non fa bubbling, quindi ascolta sul <rr0-sighting-editor> stesso — poi rileggi il suo sightingData |
Inserirlo nella tua pagina
<script type="module" src="https://ufoathome.org/lib/rr0-sighting-editor.mjs"></script>
<rr0-sighting-editor></rr0-sighting-editor>
Oppure, dopo npm install @rr0/ufoathome: import "@rr0/ufoathome/editor".
Il bundle pesa 293 KB compresso con gzip e registra il tag da sé — nient'altro da chiamare.
La presentazione sopra dice cos'altro comporta, e
condividere un'osservazione ha l'esempio completo, da provare e da copiare.
Fonti e scelte#
Nulla di ciò che lo strumento disegna è inventato. Ogni valore viene da una fonte nominata, letta in un momento dichiarato, e dove non esiste alcun dato l'interfaccia lo dice invece di colmare il vuoto.
I principi#
- Una fonte è letta solo quando serve. I cataloghi sono costruiti una volta nel repository; i servizi sono chiamati solo per una registrazione che ne ha bisogno (un luogo, una data nel loro intervallo, un pulsante premuto), e mai per una data anteriore all'inizio del loro archivio.
- Ciò che può scomparire è ospitato qui. I dati che una terza parte potrebbe ritirare o che non possono essere letti da un browser (elementi orbitali, modelli 3D) sono copiati, ridotti e serviti da ufoathome.org con il loro credito, così che ogni pagina che incorpora una scena li ottenga.
- Il misurato batte il modellato, e il modellato batte il supposto. Una luminosità è un'osservazione pubblicata dove ne esiste una; una formula completa solo ciò che nessuno ha misurato, e un oggetto senza né l'una né l'altra è calcolato ma non disegnato.
- Ogni servizio è sostituibile. Meteo, rilievo, immagini, luogo, fuso orario, modelli e redazione passano per uno stesso registro: la fonte è una scelta visibile, con il suo credito accanto, e se ne può aggiungere una seconda senza toccare il resto.
- I limiti sono dichiarati. Ogni fonte qui sotto dice dove si ferma: prima del 1940 per il meteo, prima del 1957 per i satelliti, prima del febbraio 2021 per i singoli passaggi.
Il cielo · L'aria · Satelliti · Aerei e scie · Meteo · Il suolo · Luogo e ora · Scenografia, foto e suono
Il cielo
| Fonte | Cosa fornisce | Quando viene letta | Hosting e credito | Scelte e limiti |
|---|---|---|---|---|
| astronomy-engine | Posizioni e magnitudini del Sole, della Luna e dei pianeti; la fase della Luna; coordinate celesti; e, per un'eclissi, quanta parte del Sole la Luna nasconde da questo luogo in questo istante. | Nella pagina, per ogni registrazione datata. | Libreria inclusa, MIT. | Effemeridi complete anziché formule approssimate: ricostruire un cielo ha senso solo se è giusto. La sua precessione porta anche i cataloghi dell'anno 2000 (stelle, la Galassia, radianti delle meteore, novae) alla data osservata. |
| HYG Database | Posizioni, magnitudini e colori delle stelle; nomi delle stelle fino alla magnitudine 3. | Costruito una volta (build:stars). La pagina carica le stelle fino alla magnitudine 7,5, e fino a 9 solo per uno strumento che arriva così in profondità. | Servito con il bundle della scena. CC BY-SA. | Tagliato a 9 perché oltre il catalogo stesso si dirada: i conteggi di stelle smettono di crescere come dovrebbero. |
| JPL Horizons | L'orbita di ogni cometa visibile a occhio nudo dal 1910, com'era al perielio di quel passaggio. | Costruito una volta (build:comets); la pagina propaga l'orbita da sé, senza richieste. | Generato nel codice. NASA/JPL. | La luminosità NON è presa dal JPL: i suoi parametri di magnitudine rendono NEOWISE 4 magnitudini troppo debole. Le magnitudini di picco osservate all'epoca sono inserite a mano, con le loro date. Una coda è disegnata solo dove ne è stata registrata la lunghezza. |
| AAVSO, via Strope, Schaefer & Henden 2010 | La curva di luce misurata di ogni nova dal 1891 che abbia raggiunto la magnitudine 5, raggruppata a partire dalle osservazioni dell'AAVSO. | Costruito una volta (build:novae) con le supernovae qui sotto; la pagina interpola la curva, senza richieste. | Generato nel codice. Catalogo VizieR J/AJ/140/34. | Una curva registrata anziché una formula di declino: le leggi usuali mancano la maggior parte delle novae reali, e disegnerebbero DQ Herculis brillante per un anno mentre la polvere l'aveva attenuata di dieci magnitudini in poche settimane. Nulla è disegnato prima della prima osservazione né dopo l'ultima. RS Oph 2021 e T CrB 1866 riprendono la curva della loro eruzione precedente, spostata sul loro picco registrato. |
| Historical supernovae | Le supernovae del 1006, 1054, 1181, 1572, 1604 e 1987A: dove si trovavano, e quanto erano luminose ogni notte. | Costruito una volta (build:novae). | Generato nel codice. Posizioni da SIMBAD; 1572 e 1604 ridotte da Ruiz-Lapuente (2004, 2017) a partire dalle stime di Tycho, di Keplero e degli astronomi coreani; 1006, 1054 e 1181 dalle cronache (Stephenson & Green); 1987A dall'Open Supernova Catalog. | Ogni curva dice di che tipo è, perché la loro qualità varia di due ordini di grandezza: di 1054 e 1181 si hanno solo un picco e il giorno in cui furono viste per l'ultima volta, e il declino del 1006 è preso in prestito dal 1572, lo stesso tipo di esplosione. Le date del calendario giuliano sono lette come tali. V1369 Cen (2013), il cui archivio AAVSO non è raggiungibile da uno script e di cui non è pubblicata alcuna tabella, è letta dai marcatori vettoriali di una figura pubblicata (Izzo 2017, arXiv:1704.07214), entro la parte che quella figura mostra. |
| IMO meteor shower list | Radiante, periodo di attività, tasso orario al picco e velocità degli sciami annuali; un fondo sporadico. | Tabella nel codice, calcolata per qualsiasi data. | Nel codice. International Meteor Organization. | Il tasso orario è una media su più anni, non una previsione per una notte: esplosioni e tempeste non vi sono comprese. |
| Global Meteor Network, trajectories | I bolidi che le sue telecamere hanno triangolato dal dicembre 2018: dove ciascuno è iniziato e finito, a quale quota, per quanto tempo e quanto luminoso al massimo. | Ridotto una volta (build:fireballs). Una scena scarica solo il mese della sua registrazione, e nulla per una data precedente. | Servito da ufoathome.org/fireballs/, citato nei crediti del lettore. CC BY 4.0. | Su tre milioni e mezzo di meteore, si conservano solo quelle di magnitudine assoluta -3 o più luminose: le più deboli sono il fondo sporadico che la scena calcola. Più luminose di -9 vengono scartate: oltre -8 il loro numero smette di calare come quello delle meteore e forma una coda fino a -45, la fotometria di una telecamera saturata. Uno stesso evento risolto due volte è conservato una sola volta. La luminosità disegnata è quella del picco lungo tutto il percorso, addolcita alle estremità, poiché il registro dà il picco e non la curva di luce. Anche le rilevazioni di FRIPON sono archiviate ma non usate: il suo sito chiede di essere contattato per qualsiasi uso. |
| Milky Way, zodiacal light, sky brightness | Il bagliore della Galassia e della polvere zodiacale, e la luminosità del cielo al crepuscolo e al chiaro di luna. | Calcolato nella pagina, nessun dato scaricato. | Modelli dalla letteratura: Leinert et al. 1998 e Hong 1985 (luce zodiacale), Patat et al. 2006 e Krisciunas & Schaefer 1991 (luminosità del cielo con cui si confrontano i bagliori; la luce del cielo stesso è sotto l'aria). | Nessuna fotografia della Via Lattea: una Galassia modello integrata lungo la linea di vista, confrontata con tre misure anziché adattata a una sola. |
| World Atlas of the artificial night sky brightness (Falchi et al. 2016) | Quanto è luminoso il cielo notturno di un luogo con le sue città, lo zenit di una notte senza Luna in magnitudini per secondo d'arco quadrato; ciò che fa di un cielo sereno un cielo inquinato. | Ritagliato una volta in piccole tessere (build:light-pollution). L'editor scarica una tessera, qualche kilobyte, quando un luogo non ha un valore dichiarato; il lettore legge il valore che la registrazione porta. | Tessere servite accanto alla pagina, poi da ufoathome.org, con il credito conservato nel loro indice. L'atlante è CC BY-NC 4.0, una licenza non commerciale: il suo uso su un sito pubblico è ancora da decidere. | Una misura del 2015 vale per qualsiasi data: l'atlante non può dire come una città si sia illuminata o spenta da allora. È solo ciò che propone l'editor: un valore dichiarato dal testimone o dall'investigatore (una lettura di Sky Quality Meter) prevale, e una registrazione che non ne ha è riprodotta sotto un cielo naturale. |
| NASA LOLA shape map of the Moon (LDEM_16) | Il rilievo del bordo della Luna, perché il lembo non sia un cerchio perfetto: le montagne e i crateri che lasciano passare l'ultima luce del Sole come grani di Baily. | Ritagliato una volta (build:lunar-limb) in un file caricato con la scena, la prima volta che un'eclissi si avvicina alla totalità. | Servito con il bundle della scena, circa 2 MB. NASA, Planetary Data System. | 16 campioni per grado, e solo la fascia in cui il lembo può cadere (librazione e parallasse dell'osservatore comprese), conservata in unità di 100 m: abbastanza per i grani, una frazione della mappa da 33 MB. Quale eclissi ci sia, e quanta parte del Sole sia coperta, non è mai elencato: si calcola dalle posizioni reali dei due astri. |
L'aria
La luce del cielo è calcolata, non disegnata: la luce del Sole e della Luna è seguita attraverso un'atmosfera sferica di aria, foschia e ozono a quindici lunghezze d'onda, poi mostrata come la vedrebbe un occhio adattato o una fotocamera. Ogni dato in ingresso qui sotto è una misura o un modello pubblicato; i due ancoraggi di visualizzazione sono le sole scelte.
| Fonte | Cosa fornisce | Quando viene letta | Hosting e credito | Scelte e limiti |
|---|---|---|---|---|
| Hillaire 2020; Bruneton & Neyret 2008 | Il metodo: diffusione singola lungo ogni linea di vista, e tutti gli ordini superiori raccolti in una tabella della luce che arriva a ogni quota per ogni altezza del Sole. | Tabelle costruite sulla scheda grafica una volta per pagina e per livello di foschia (circa un secondo di GPU, condiviso da tutte le scene della pagina); la vista del cielo è ridisegnata quando il Sole, la Luna o l'osservatore si muovono. | Implementato nel codice, due volte: un riferimento in TypeScript e il suo gemello su GPU. | Scelto perché abbastanza veloce per una pagina web. Confrontato con un calcolo Monte Carlo della stessa atmosfera: entro 0,25 magnitudini e 0,012 di colore da un mezzogiorno nebbioso a un Sole a -16°, tranne l'ombra della Terra nel crepuscolo nautico, troppo scura di 0,7 magnitudini. La risoluzione delle tabelle è stata misurata, non scelta: tabelle più grossolane sbagliavano uno zenit a -10° di oltre mezza magnitudine. |
| Bodhaine et al. 1999 | Quanto fortemente l'aria diffonde la luce a ogni lunghezza d'onda. | Calcolato nella pagina. | Formula dall'articolo. | Derivato dall'indice di rifrazione dell'aria, misurato con molte cifre: niente da regolare. |
| Serdyuchenko-Gorshelev ozone cross-sections | L'assorbimento dell'ozono nel visibile (la banda di Chappuis), che rende blu uno zenit crepuscolare. | Mediate una volta nel codice. | IUP Brema, Gorshelev et al. 2014 e Serdyuchenko et al. 2014 (Atmos. Meas. Tech. 7). | Prese a 223 K, la temperatura della stratosfera; la banda cambia al massimo del 3 % tra 193 e 293 K. Senza di essa, uno zenit sei gradi dopo il tramonto risulta quasi bianco (Hulburt, 1953), e un test verifica che sia così. |
| ASTM E 490-00a | La luce del Sole sopra l'atmosfera, lunghezza d'onda per lunghezza d'onda. | Mediato una volta nel codice. | La tabella 3 della norma. | Mediato su 20 nm, il che elimina le righe di Fraunhofer: giusto per un cielo, sbagliato per uno spettrografo. Restituisce l'illuminamento misurato del Sole, da 128 a 133 mila lux, cosa che un test verifica. Il cielo della Luna usa lo stesso spettro, scalato secondo la magnitudine della Luna. |
| Kasten 1969; Hänel 1976 | Quanto è lattiginoso il cielo sereno: lo spessore ottico della foschia, ricavato dall'umidità relativa del dato meteorologico. | Con il meteo: l'umidità viene dalla temperatura e dal punto di rugiada di ERA5 (formula di Magnus, Alduchov & Eskridge 1996). | Legge di crescita dalla letteratura. | Le particelle di foschia si gonfiano d'acqua man mano che l'aria si avvicina alla saturazione; un carico continentale tipico si gonfia come (1 - umidità) alla potenza -0,3, il che dà il consueto 0,1 al 50 %. Quante particelle ci fossero (una città, un incendio, la storia del vento) non è in alcun dato, e non viene indovinato. Limitata al 95 %: oltre, è nebbia. |
| Patat et al. 2006 (Paranal) | La luminosità misurata dello zenit durante il crepuscolo, la verifica che un cielo reale offre al modello. | Nei test, e nella pagina per sapere se la Via Lattea e la luce zodiacale potevano essere viste. | L'adattamento in banda V dell'articolo, tabella 1. | Mai usata per adattare: il modello la raggiunge entro mezza magnitudine da -6° a -16°. Leggere l'adattamento pubblicato ha anche corretto una tabella dello strumento che rendeva il crepuscolo civile dieci volte troppo scuro. |
| Krawczyk et al. 2005; Thompson et al. 2002 | Come lo mostra un occhio adattato a quel cielo: una risposta compressiva che segue la luminosità del cielo stesso, e il passaggio a un grigio-blu tenue quando i bastoncelli prendono il sopravvento. | Nella pagina, per ogni pixel del cielo. | Miscela dei bastoncelli secondo Krawczyk, Myszkowski e Seidel; blu notturno secondo Thompson, Shirley e Ferwerda, preso a metà strada verso il bianco. | Le uniche scelte della catena, dichiarate come tali: lo zenit di un giorno sereno e quello di una notte senza Luna sono fissati dove lo strumento li mostrava prima, e tutto ciò che sta in mezzo segue. Una fotocamera (un supporto di registrazione) non ha bastoncelli, e il suo guadagno rispetto all'occhio schiarisce ciò che registra. |
Satelliti
Due livelli. Per ogni data dallo Sputnik, ciò che l'ombra della Terra consentiva e quanti oggetti erano in orbita. Dal febbraio 2021, quali satelliti hanno davvero attraversato il cielo, dove e con quale luminosità.
| Fonte | Cosa fornisce | Quando viene letta | Hosting e credito | Scelte e limiti |
|---|---|---|---|---|
| CelesTrak SATCAT | Data di lancio e di rientro di ogni oggetto tracciato: il numero in orbita ogni mese, e quando è esistita ogni classe (Echo, flare degli Iridium, ISS, Starlink). | Costruito una volta (build:satellites); fornisce anche le date di lancio all'archivio di elementi orbitali. | Generato nel codice. CC BY 4.0. | Qui si leggono solo le due colonne delle date (l'elenco dei rientri qui sotto legge anche l'inclinazione). Le sue colonne d'orbita descrivono l'ULTIMO stato di ogni oggetto: Echo 1 compare a 400 km quando volava intorno ai 1.500. I detriti non sono contati. |
| CORDS, The Aerospace Corporation | Ogni rientro che ha seguito dal 2000: l'ora prevista con l'incertezza dichiarata, e per un centinaio l'ora in cui fu visto ricadere e da dove. | Ridotto una volta (build:reentries), con i giorni di rientro del SATCAT per tutti gli anni dal 1957; l'editor scarica solo l'anno della registrazione. | Servito da ufoathome.org/reentries/. | Archiviato a mano, perché il sito non è leggibile da uno script. Un rientro è enunciato con la sua precisione e nulla di più fine: un'osservazione registrata entro un'ora e 1.500 km, una previsione la cui finestra incontra l'osservazione, o un semplice giorno di rientro. Solo la prima dice che può aver attraversato questo cielo. Un'orbita la cui inclinazione la tiene fuori vista dalla latitudine dell'osservatore non è mai elencata: la frenata abbassa un'orbita ma ne lascia il piano, per questo si legge questa sola colonna orbitale del SATCAT. |
| Orbital element archive, Laurent Chabin (SCEAU) | I set di elementi pubblici salvati una o due volte al giorno dal 22 febbraio 2021: l'elenco degli oggetti visibili a occhio nudo, tutti gli Starlink e, fino a gennaio 2025, il catalogo completo. | Ridotto una volta (build:tle). La pagina scarica solo le due settimane intorno all'osservazione, e solo per una data coperta dall'archivio; il propagatore stesso viene caricato solo allora. | Servito da ufoathome.org/tle/, citato nei crediti del lettore. | Ospitato qui perché il server originale non è leggibile da un browser. 2,8 GB di istantanee sono conservati in 113 MB: ogni giorno per gli oggetti visibili a occhio nudo e per gli Starlink nei loro primi 60 giorni (i treni), un set a settimana altrimenti. Detriti e oggetti che nessuno ha misurato sono scartati. Un set non è mai usato a più di 7 giorni dalla sua epoca, quindi un buco nell'archivio (tre mesi a fine 2025) è segnalato come buco anziché riempito con un'orbita superata. |
| satellite.js (SGP4) | Il propagatore standard per questi set di elementi, e la posizione del Sole; l'ombra e la penombra della Terra sono calcolate in aggiunta. | Caricato su richiesta, solo per le date coperte. | Libreria inclusa, MIT. | Fermo alla versione precedente a quella che include una build WebAssembly che rompe il bundle, senza alcun vantaggio qui. |
| Satellite brightness: McCants, Stellarium, Mallama et al. | Quanto appare luminoso ogni oggetto: magnitudini standard (McCants, completate dall'elenco di Stellarium per gli oggetti recenti), e medie pubblicate per le costellazioni che nessuno ha catalogato (Starlink, OneWeb, BlueBird). | Fuse nell'archivio in fase di build; applicate nella pagina. | Starlink 5,93 poi 7,21 (arXiv:2006.08422, 2101.00374), 4,58 sotto i 357 km durante l'innalzamento dell'orbita (2405.12007); OneWeb 7,18 (2012.05100); BlueBird 3,77 poi 4,32 (2608.23668). | Senza il valore di innalzamento dell'orbita nessun treno di Starlink verrebbe mai disegnato. Uno stadio di razzo non misurato prende la mediana di almeno tre stadi identici misurati; qualsiasi altro oggetto non misurato è calcolato ma non disegnato. Riflessi e flare non sono modellati: possono solo rendere un satellite più luminoso. |
Aerei e scie
Dal 2022, gli aerei che erano nel cielo dell'osservatore all'ora di una registrazione, l'aria in cui volavano e la scia che i loro motori vi lasciavano. Ciò che è disegnato è un candidato compatibile, mai un'identificazione, e un cielo vuoto nell'archivio non esclude nulla.
| Fonte | Cosa fornisce | Quando viene letta | Hosting e credito | Scelte e limiti |
|---|---|---|---|---|
| adsb.lol open history | Dove si trovava ogni aereo che ha trasmesso la propria posizione, dal 2022: la sua traccia, il tipo, la marca di registrazione e la categoria. Ognuno è disegnato con la sua vera dimensione, le sue luci (dal crepuscolo, secondo il tipo di velivolo), il Sole che lo illumina ancora quando il suolo l'ha perso, la foschia in mezzo e il suono che produce se può essere udito. | Ridotto una volta al giorno (build:aircraft) in un file compattato per ora e per riquadro di un grado. La pagina legge solo i riquadri entro 150 km dall'osservatore, per l'ora della registrazione e i cinque minuti precedenti, e mai per una data anteriore al 2022. Il codice che disegna, etichetta e fa sentire gli aerei è caricato solo se una scena ne ha. | Costruito dalle pubblicazioni quotidiane della cronologia di adsb.lol (ODbL 1.0), citato nei crediti del lettore. Non ancora ospitato: finché l'archivio non è servito da ufoathome.org/aircraft/, gli aerei compaiono solo da una copia locale. | Basta una sola istanza: prod-0, con staging-0 di riserva, contengono gli stessi voli con una differenza dello 0,02 %. Si conservano solo le posizioni del giorno UTC proprio di ogni pubblicazione, così che il risultato non dipenda dall'ordine in cui i giorni sono stati letti; i veicoli aeroportuali sono scartati. Ciò che nessun ricevitore ha sentito è assente: aerei leggeri, alianti, palloni e militari che spengono il transponder sono sottorappresentati, e un aereo su sette non dichiara alcun tipo, quindi è disegnato come un aereo di linea generico. |
| amvlab aircraft models (A320, 737, A350, A380, 787) | La cellula di un Airbus A320, A350 o A380, o di un Boeing 737 o 787, per un aereo di quei tipi abbastanza vicino da vederne la forma: motori, estremità alari, coda. | Caricato dalla pagina solo per un aereo di quei tipi entro circa 130 volte la sua lunghezza dall'osservatore (5 km per un A320, 10 km per un A380), una volta per la scena (da 170 a 250 KB ciascuno). Più lontano un aereo sono pochi pixel, e si disegna la forma integrata con le sue luci. | Ospitati di nuovo su ufoathome.org/models/ con la loro licenza, CC BY 4.0, © 2026 amvlab, e citati nei crediti del lettore. | Le varianti senza livrea, poiché la compagnia non è nota. Un modello per tutta la famiglia A320, uno per tutti i 737, uno per l'A350 (-900 e -1000), uno per l'A380 e uno per il 787 (-8, -9 e -10), ciascuno scalato alla lunghezza reale del tipo (un A321 è il modello A320 disegnato più lungo). Quale variante rappresenti ciascuno, e con quale fedeltà, il loro autore non lo documenta. Tutti gli altri tipi mantengono la forma integrata: un modello è una voce di catalogo e una riga di una tabella, non codice. |
| Open-Meteo, historical forecast API | Temperatura, umidità e vento a 500, 400, 300, 250, 200 e 150 hPa, ora per ora, dal 2022: l'aria in cui volano gli aerei. | Caricato dalla pagina, una volta per registrazione che ha aerei, per il luogo dell'osservatore e le ore della finestra: mai per una data anteriore al 2022, né per una scena senza aerei. | Open-Meteo.com, CC BY 4.0, senza chiave, citato nei crediti del lettore. | Non è la rianalisi usata dal meteo: il suo archivio non fornisce livelli di pressione. Sono le analisi proprie dei modelli di previsione, note per sottostimare la frequenza con cui l'aria a quota di crociera è sovrasatura rispetto al ghiaccio, per cui una scia che dura nel cielo può essere una che l'archivio dice non dovrebbe. Letto solo nel luogo dell'osservatore: un aereo a cento chilometri vola in un'aria che il modello può descrivere diversamente. L'umidità è relativa all'acqua (verificato sul tetto che i dati fanno alla saturazione rispetto al ghiaccio, vicino al 60 % a -47 C). |
| Schmidt-Appleman criterion (Schumann 1996) | Se lo scarico di un motore lascia una scia in quell'aria, e se dura. Lo scarico si raffredda lungo una retta fissata dal rendimento del motore e dalla pressione; una scia si forma se quella retta incrocia la saturazione rispetto all'acqua, e dura solo dove l'aria è satura rispetto al ghiaccio. | Calcolato nella pagina per ogni posizione di ogni aereo, alla pressione data dalla sua quota barometrica (una quota barometrica è una pressione), e trasportato dal vento di quel livello. | Formula e costanti nel codice, con le pressioni di saturazione di Murphy e Koop (2005). | Il motore è uno tipico del tipo di velivolo, non quello di quella cellula: rendimento globale 0,38 per un widebody, 0,34 per un single-aisle, 0,30 per un jet executive, 0,22 per un caccia. Eliche, rotori, alianti e palloni non hanno scia. Come invecchia una scia è una parametrizzazione di ordini di grandezza osservati, non una simulazione: la sua larghezza cresce con il wind shear tra i due livelli ai lati dell'aereo (quanto il vento cambia con la quota) e una diffusione turbolenta fissa, la profondità è supposta, ed è disegnata ugualmente larga attraverso la linea di vista qualunque sia il verso dello shear; anche come svanisce e quanto dura una breve sono supposti. Una scia disegnata è stimata, mai un fatto; e manca quella di un aereo già andato via prima dei cinque minuti richiesti all'archivio. |
Meteo
| Fonte | Cosa fornisce | Quando viene letta | Hosting e credito | Scelte e limiti |
|---|---|---|---|---|
| Open-Meteo: ERA5 (Copernicus/ECMWF), then its forecast model for the last days | Copertura nuvolosa oraria per livello, precipitazioni, neve, codice meteo, vento, temperatura e punto di rugiada, nel luogo e all'ora dell'osservazione. | Scaricato dall'editor non appena sono noti una data e un luogo, solo dal 1940. Per gli ultimi cinque giorni, che ERA5 non ha ancora raggiunto, si legge invece l'analisi del modello di previsione (il file dice quale ha risposto). | API d'archivio e di previsione di Open-Meteo, senza chiave. © Copernicus/ECMWF. | Una rianalisi su una griglia di ~28 km, non una stazione: un rovescio locale può mancare. Le basi delle nubi sono dedotte (temperatura e punto di rugiada per lo strato basso), non misurate. Ogni campo può essere sbloccato e sostituito dal resoconto. In modalità archivio non è disponibile alcun profilo verticale, che è ciò che servirebbe per le anomalie di propagazione radar. |
Il suolo
| Fonte | Cosa fornisce | Quando viene letta | Hosting e credito | Scelte e limiti |
|---|---|---|---|---|
| IGN LiDAR HD (bare-earth model, MNT) and RGE ALTI | Il rilievo intorno all'osservatore in Francia, come il laser ha misurato la terra nuda, un punto al metro: senza alberi né tetti. | Scaricato con il rilievo, un'immagine del quadrato a quattro metri per pixel (meno di un megabyte), prima dal laser e, dove non ha ancora volato, dal RGE ALTI, il modello precedente al metro che copre tutto il paese. | © IGN, Licence Ouverte 2.0, servito dal WMS della Géoplateforme, che risponde ai browser da qualsiasi luogo. Fuori dalla Francia, o quando il servizio non risponde entro dodici secondi, si usa il rilievo mondiale qui sotto. | Il rilievo mondiale è un modello della superficie a quindici metri per pixel: misurato contro il laser, si scosta di uno o due metri vicino all'osservatore, e da cinque a venti metri sotto il bosco o accanto a una strada in rilevato, il che affonda o solleva ogni edificio posato sopra. La griglia non è mai mescolata da due rilievi vertice per vertice, il che disegnerebbe il loro raccordo come una scogliera. Dove risponde, il suolo è una maglia con un vertice ogni sette metri, non 28: una strada in rilevato è larga trenta metri, e una maglia più grossa affondava l'autostrada di Silly-le-Long di due metri e la faceva sobbalzare. Dove il laser ha visto l'impalcato di un ponte, il suolo è alzato fino all'impalcato (il laser toglie i ponti dalla terra nuda, così la strada precipiterebbe in una trincea a ogni cavalcavia); un viadotto su una valle larga vi lascia una diga larga quanto un impalcato. Per un osservatore immobile il cui scenario si estende oltre i primi 900 m (i silos all'orizzonte di Maffliers), la zolla di terreno reale è allargata, fino a 3 km al massimo, perché ciò che vi sorge poggi sul rilievo e non su un disco piatto; le zolle di un percorso lo seguono e non sono allargate. |
| AWS Terrain Tiles (SRTM, ETOPO1) | Il rilievo intorno all'osservatore. | Scaricato quando una scena ha un luogo reale, fuori dalla Francia o dove il rilievo dell'IGN qui sopra non risponde. | Amazon S3, senza chiave. © AWS Open Data. | Nessuna chiave e nessun limite di richieste, cosa di cui ha bisogno un componente incorporabile. Il modello del rilievo è troppo grossolano per alberi ed edifici: una foto del luogo allineata nella scena è il modo di dichiararli. |
| Esri World Imagery | Immagini aeree stese sul rilievo, e la mappa dell'osservatore. | Scaricate con il rilievo, e all'apertura della mappa. | Tile Esri, senza chiave. © Esri, Maxar, Earthstar Geographics. | Una fotografia attuale del suolo, qualunque sia l'anno del resoconto; la scena la scurisce secondo l'ora. In alternativa si può scegliere EOX Sentinel-2 cloudless. |
Luogo e ora
| Fonte | Cosa fornisce | Quando viene letta | Hosting e credito | Scelte e limiti |
|---|---|---|---|---|
| Nominatim (OpenStreetMap) | Cercare un luogo per nome, e dare un nome a un punto. | Solo quando l'autore preme Invio o il pulsante di ricerca, mai a ogni tasto premuto. | © contributori di OpenStreetMap. | Conosce frazioni, fattorie, strade e aeroporti minori, dove avvengono i resoconti; la sua politica d'uso è il motivo per cui nulla viene inviato durante la digitazione. |
| Open-Meteo time zones and the IANA database | Il fuso orario di un luogo, poi il suo scarto legale alla data del resoconto. | Non appena un luogo è noto; lo scarto storico viene dal browser. | © Open-Meteo; database tz nel browser. | Lo scarto attuale non è mai usato per una data antica: la Francia era a UTC+1 tutto l'anno nel 1965. |
Scenografia, foto e suono
| Fonte | Cosa fornisce | Quando viene letta | Hosting e credito | Scelte e limiti |
|---|---|---|---|---|
| IGN LiDAR HD (canopy height model and classification) and BD TOPO (map vectors) | Gli alberi, gli edifici, i ponti e le linee aeree attorno a un luogo, al loro posto, con altezza e larghezza misurate: dal laser, l'altezza di tutto ciò che sporge dal suolo e ciò che ogni punto è stato preso per essere (pianta, tetto), come immagini di un quadrato di cento metri; dalla carta (BD TOPO), l'asse di ogni ponte, la larghezza della strada che porta e ogni linea elettrica con la sua tensione; i nomi di ciò che nomina (un municipio, un ufficio postale, la strada che porta un ponte). In Francia le strade della scena vengono dalla stessa carta, con i loro nomi, e non da OpenStreetMap, con un marciapiede su ciascun lato delle sue strade urbane (la carta dice quali lo sono), e della vernice sulle strade asfaltate abbastanza larghe per due sensi: secondo ciò che la mappa dice di ogni tratto: una carreggiata di autostrada ha i bordi continui (quello dello spartitraffico, e quello della corsia d'emergenza dove finiscono le sue corsie) e una linea tratteggiata tra le sue corsie; una strada a doppio senso ha il centro tratteggiato, continuo nelle curve, e i bordi continui da sette metri o 80 km/h, a tratti corti sotto; una strada a quattro corsie ha una doppia linea continua al centro; niente su una rotatoria, un sentiero o una pista. Dove la mappa non dà corsie né senso (le strade di OpenStreetMap spesso non ne hanno), la strada è dipinta come qualsiasi strada larga, una linea di bordo per lato e il centro tratteggiato. La mappa non ha barriere: ne è disegnata una, a metà strada, tra due carreggiate di autostrada che vanno in sensi opposti affiancate. Il tutto su una grana screziata di asfalto, a meno di 450 m dalla zolla di terreno, e il suo codice è caricato solo per una scena che ha una strada così. | Da sola, dal rilievo che l'autore ha scelto con il selettore accanto all'elenco (il laser e la carta insieme di default, l'uno o l'altra soli, o nessuno), quando l'autore dà alla registrazione un luogo che il rilievo copre (la Francia, una scatola che il servizio stesso restringe non rispondendo nulla dove non ha volato), un istante dopo l'ultima modifica del luogo; mai quando una registrazione è solo caricata. | © IGN, Licence Ouverte 2.0, servito dal WMS della Géoplateforme, che risponde ai browser da ovunque. La data del rilievo non è data dal servizio. I ponti e le linee vengono dal WFS della stessa Géoplateforme; i tralicci stanno ai vertici della linea come la traccia la carta, alti 22 m per 90 kV dove il laser non li ha misurati. | Il solo modello di altezza prende un tetto per una quercia (291 m alla torre Eiffel), perciò si chiede anche la classificazione e si tengono solo le sue piante e i suoi tetti. È una scansione di un giorno, e una registrazione è di un altro: ciò che porta è segnato come proveniente da un rilievo, sostituito quando il luogo cambia, e lasciato com'è dove l'autore ha collocato alberi o edifici. |
| IGN aerial photograph (ORTHOIMAGERY.ORTHOPHOTOS) | Il colore del tetto di ogni edificio, visto dall'alto: la mediana della fotografia sotto il suo contorno, senza i verdi, un po' schiarita perché la fotografia è già illuminata dal sole. | Con la scenografia di un rilievo (vedi sopra), nella stessa richiesta: un quadrato di al più mille pixel. | © IGN, Licence Ouverte 2.0, dal WMS della Géoplateforme. La fotografia è del giorno del volo, non della registrazione. | La forma di un tetto (piano, due falde, quattro, verso del colmo) si legge nelle altezze del laser dentro il contorno, solo entro 150 m; un tetto che non si sa leggere resta una scatola e non una supposizione. |
| INSEE, Enquête Emploi du temps 2009-2010 (via Rauch, Économie et statistique 522-523, 2021) | Quando la gente di una città è alzata, per quante finestre dei suoi edifici sono accese secondo l'ora dell'orologio: metà dorme alle 22:40, metà è alzata alle 7:00, nove su dieci dormono dall'1:00 alle 6:00. | Integrata nelle finestre accese della scena; non si scarica nulla. | Pubblicata dall'INSEE; si usano solo le tre cifre precedenti. | L'indagine dà mediane e un limite, non una curva: la dispersione intorno alle mediane, i due su cento sempre svegli e la metà delle finestre accese quando tutti sono svegli sono ipotesi, e l'uso del tempo della Francia è preso per qualsiasi luogo. |
| OpenStreetMap buildings (Overpass) | Gli edifici intorno a un luogo in qualsiasi parte del mondo, come li hanno disegnati i volontari di OpenStreetMap: ogni contorno come un rettangolo (o rettangoli), la sua altezza dove la dà (height, building:levels), il suo tetto (roof:shape, roof:height, roof:colour), il colore e il materiale dei suoi muri, il suo nome. Niente alberi. | Da sola, per un luogo fuori della portata dei rilievi dell'IGN quando non ne è stato scelto nessuno (o quando il laser dell'IGN risulta non aver volato lì, come sul Belgio), o quando l'autore la sceglie dall'elenco. | © collaboratori di OpenStreetMap (ODbL), tramite le istanze pubbliche di Overpass, una richiesta alla volta come le strade. Sono cariche: gli edifici di una città possono richiedere un minuto o più, e l'indicatore sull'immagine si ferma scegliendo «Nessuno». | La maggior parte degli edifici porta solo building=yes: sono disegnati con le misure ordinarie (due piani, un tetto piano, un intonaco chiaro). Solo ciò che è scritto è disegnato come scritto. La copertura vale quella dei volontari: una città belga conta 4.600 edifici in un chilometro e mezzo quadrato, un villaggio del West americano una manciata. |
| OpenStreetMap street lamps (Overpass) | I lampioni pubblici intorno a un luogo: ogni lampione mappato (highway=street_lamp), e un lampione ogni 35 m, a lati alterni, lungo ogni strada marcata lit=yes. Si accendono col buio (il Sole sotto l'orizzonte), e gli otto più vicini illuminano la scena. | Con la scenografia di un rilievo (vedi sopra), nello stesso momento. | © collaboratori di OpenStreetMap (ODbL), tramite le istanze pubbliche di Overpass, una richiesta alla volta come le strade. | I volontari segnano una strada come illuminata molto più di quanto ne collochino i lampioni (tre lampioni e otto strade illuminate nel centro di Saint-Lô), quindi i lampioni lungo le strade illuminate sono disegnati, non rilevati. Una strada non segnata non è necessariamente buia. Molte città francesi spengono l'illuminazione di notte: una registrazione di una notte così deve avere i lampioni rimossi o spenti. |
| 3D models (Kenney, Jagobo, Jungle Jim, Nicholas-3D, amvlab, Poly by Google, MakeHuman) | Automobili, una casa, alberi, un lampione, aerei di linea (A320, 737, A350, A380, 787), persone; e i velivoli e gli esseri dei casi, costruiti dal progetto a partire dai loro racconti. | Quando un oggetto della scenografia o un corpo nomina un modello; il catalogo stesso è letto una volta. | Ri-ospitati su ufoathome.org, ciascuno con il suo file di licenza: CC0 (Kenney, MakeHuman e quelli del progetto), CC BY 4.0 (gli alberi, gli aerei di amvlab, la cabina di pilotaggio dell'A320 di davidmarton1987), CC BY 3.0 (Poly by Google). Il catalogo è letto prima da /models/index.json accanto alla pagina, poi da ufoathome.org, così che un sito possa servirne una propria copia. Ogni credito è mostrato nei crediti del lettore. | Ospitati qui perché i kit liberi stanno su mirror di durata incerta. Un modello di cui non si conosce il credito non è disegnato; i modelli di Google Earth sono stati rifiutati per la loro licenza, e l'albero latifoglia stilizzato perché non abbastanza realistico. Le persone sono costruite con i soli asset di sistema di MakeHuman, di licenza CC0: i pacchetti della comunità non sono usati, le loro licenze differiscono. Un velivolo o un essere è fatto dai documenti del suo caso da uno script che dice quali dei suoi dettagli sono ipotizzati, e qualsiasi modello migliore lo sostituisce prendendo il suo id. Ogni modello è un sostituto del tipo giusto, non di una marca o di un anno precisi, e il selettore lo dice. Un modello pubblica le sue impostazioni (un costume, il fogliame, uno scafo, il carrello retratto, quali luci e quale rumore gli si addicono), che l'editor offre e che una registrazione dichiara in modelParameters. Ogni volta che un modello non può essere ottenuto, e quando l'osservatore si trova dentro l'oggetto, viene disegnata al suo posto la forma integrata. |
| Panoramax | Fotografie e panorami a livello stradale vicino al luogo, ciascuno con la sua posizione e direzione. | Solo quando l'autore cerca foto nell'editor. | API Panoramax, citata con l'autore e la licenza di ogni foto. | Aperta e leggibile da qualsiasi pagina. Google Street View è stato rifiutato: le sue condizioni tengono le foto dentro i visualizzatori di Google. |
| Weather sounds (OpenGameArt) | Pioggia, vento e tuono. | Caricati quando il meteo della scena ne ha bisogno. | Inclusi. Pioggia e vento CC0; tuono di Jerimee, CC BY 3.0, citato nel lettore. | Il suono proprio del fenomeno è sintetizzato dalla sua descrizione, non preso da una registrazione. |
Il dettaglio di ogni scelta, con le misure che l'hanno decisa, è nei commenti al codice di ogni fonte nel repository.