2020-12-29. Wojciech Jóźwiak. Cykl: Kronika AstroAkademii

« Projekty AstroAkademii SPIS ↓ Krótkie podsumowanie sezonu 2020-21 w AstroAkademii »

Czytaj w Czytelni

Rysowanie kosmogramów od (informatycznej) kuchni ! Do not copy for AI. Nie kopiować dla AI.

Krótko i przystępnie opowiadam, jak jest zbudowany program do rysowania kosmogramów, jak działa i jak go się robi.

Chcemy mieć kosmogram narysowany na stronie. W tej technologii, o której tu piszę, trzeba zacząć od zarezerwowania prostokąta w ramach strony. Ten prostokąt nazywa się canvas (po ang. płótno do malowania na płótnie) i nazwa ta w kodzie HTML (który służy do robienia stron przeglądarkowych) jest zastrzeżoną komendą. Nazwą elementu. Temu elementowi jest dedykowany specjalny obiekt w języku JavaScript. (JavaScript służy do robienia-czegoś-z elementami HTML. JavaScript jest praktycznie nieskończony: prawdopodobnie żaden człowiek nie zna całego JS.)

Samo <canvas> gdy wystąpi w kodzie strony, gołe, bez dodatków, zostanie wyrysowane tak:

Upss. Nie jest całkiem gołe, ponieważ określiłem jego rozmiary, dodałem kolor tła i kropkowaną obwódkę – inaczej tego kanwasa nie byłoby widać.

Żeby na kanwasie coś się pokazało, zostało narysowane, potrzebny jest skrypt rysujący, zbudowany w JavaScript-cie:

Ten skrypt wykorzysta funkcje graficzne, które już są w JavaScript-cie (nie trzeba ich samemu wymyślać), do rysowania linii, prostokątów i okręgów, w różnych kolorach i grubościach, z których trzeba zestawić kosmogram. Oczywiście, taki skrypt musi zostać zbudowany, i faktycznie, jeden kiedyś na próbę zrobiłem, działa na stronie Kosmogram Canvas.

Kosmogram przecież musi przestawiać „coś”, musi mieć jakąś określoną treść. Powinien przedstawiać pozycje planet na tle horyzontu (i południka) w pewnej chwili czasu i z pewnego miejsca na Ziemi. Te pozycje planet trzeba wprowadzić do skryptu rysującego, żeby je przerobił na odpowiedni wykres. Pozycje planet, ascendentu itd., cały liczbowy surowiec do narysowania kosmogramu, nazwę dla krótkości nasieniem kosmogramu. (Po ang. byłoby zapewne chart seed. Odpowiednik ang. seed ma dwa polskie znaczenia, drugie retranslowane brzmi: sperm. Nie przejmujemy się tym zupełnie.) Nasienie kosmogramu wcześniej zapisywałem w formacie JSON („dżejson”) i dla chwili mniej więcej „teraz” (gdy to piszę) wygląda ono tak:

{"orient":156.85832,"mc":59.0239,"asc":156.85832,"planetLong":[278.57458,94.8561,284.20144,257.70302,26.44213,302.30025,301.38762,36.83497,348.46507,294.28903]}

Z tego numerycznego surowca program rysujący robi i rysuje kosmogram.

Użalić się? Nieee... Może jednak? Jednak. Program rysujący napisany w JavaScript-cie jest pieruńsko złożony, długi, przegadany – taka jest natura tamtego języka. Prymitywny! Poprawiając lub rozbudowując łatwo w nim uszkodzić coś, co już było i działało. Właśnie ta podatność na uszkodzenia jest (dla mnie) główną nieprzyjemnością JavaScriptu. Też, nie wiem, jak inni, ale ja źle znoszę w JS-ie jego „przeciekliwość”, czyli to, że nazwy zmiennych „przeciekają” przez nawiasy, w których definiuje się funkcje. Ale dość narzekań. W końcu jakoś to działa.

Mamy więc taki stan rzeczy:

Nasienie kosmogramu, czyli ten zestaw współrzędnych planet, jednak ktoś i jakoś musi wyliczyć. Do tego służy program liczący planety i inne elementy „nieba”. Liczenie odbywa się na podstawie algorytmu Flanderna i Pulkkinena – o którym i jego autorach kiedyś pisałem, jak link świadczy. Algorytm ten jest „długi”, bo zawiera tablice współczynników, których są setki dla jednej planety, ale wybitnie prosty w budowie i można łatwo zapisać go w postaci kilku pętli.

I tu najciekawsze: żeby wyliczyć położenia planet – tym programem-algorytmem lub innym – potrzebna i wystarczająca jest jedna liczba (tak, tylko jedna!) – ta liczbą jest czas. Na wejście programu liczącego planety wprowadzamy tylko tę jedną liczbę. Czas dla planetarnych wyliczeń wyrażony jest w specjalnym formacie jako tzw. dzień juliański. Teraz d.j. = 2459213.3711 . Ale ponieważ stoimy na powierzchni Ziemi, to jeszcze są potrzebne geograficzna szerokość i długość – te zostaną użyte do wyliczenia ascendentu i medium coeli i domów, jeśli ktoś lubi domy. Ewentualnie do zapisania planet topocentrycznie. Razem mamy trzy liczby (wciąż zaledwie trzy!) – i ich pakiet nazwę „czaso-miejscem”. Czaso-miejsce jest surowcem, którym karmimy program liczący planety (i inne elementy), ten produkuje nasienie kosmogramu (które zawiera kilkanaście liczb), które skrypt rysujący przerabia na kosmogram:

Program liczący planety jest napisany i działa w języku PHP, tradycyjnym już i prawie odwiecznym języku serwerowym, tzn. działającym na serwerze, czyli zdalnie.

Ale znów, skądś trzeba wziąć to czaso-miejsce do nakarmienia programu liczącego. Skąd? Trzeba jeszcze dorobić interfejs, w którym będziemy zadawać czas i miejsce dla kosmogramu. Musi być ten interfejs, bez niego ani rusz:

Interfejs to jest po prostu miejsce na stronie, gdzie wybieramy czyjeś urodzenie lub inne wydarzenie lub jakąkolwiek chwilę-w-miejscu. Możemy robić to z bazy danych. Możemy pracowicie wpisywać datę i współrzędne miejsca do formularza (ten formularz jest przykro zawiły i do dziś prawie bez zmian używam tego, który mi sporządził pewien zaprzyjaźniony programista kilkanaście lat temu. Staram się nie naruszać tamtej konstrukcji. Możemy brać czas z sieci – gdy jest równy „teraz”. I jeszcze mam taki pomysł, żeby program przerabiał na czas jakieś znane umowne napisy, np. „2020-12-29 20:28” – i to wszystko, czego by potrzebował: przetwarzałby taki napis daty w kosmogram.

Wszystko co wyżej, jest o rysowaniu kosmogramów na canvas. Chcę tę technologię szerzej wykorzystać, bardziej ożywić i rozruszać. Do tej pory dużo częściej i typowiej w AstroAkademii używamy kosmogramów rysowanych nie na kanwasie, tylko produkowanych jako pliki graficzne na serwerze i stamtąd wklejane na strony. Różnica między tymi technologiami jest taka, że plik graficzny (jak każdy plik) jest trwały – inaczej niż obraz na kanwasie, który jest znikliwy: wyświetlisz w tym samym oknie (karcie) przeglądarki inną treść – i zniknął, poszedł w null. To jest dobre, ponieważ nie musimy się martwić, że naprodukujemy jakiejś zbędnej masy e-śmiecia. Podczas gdy przy plikach trzeba dbać, żeby te które zbędne, były usuwane, ponieważ gdyby nie to, to zapchają serwer. Ulotność kanwasów aż prosi o to, żeby zaszaleć – i wyświetlać kosmogramy w różnych wariantach i formatach. Kiedyś zrobiłem rysowanie harmonicznych kosmogramów – i zaimplementowałem to tylko na kanwasie.

Produkcję plików graficznych na serwerze należałoby przedstawić na (trochę) innym wykresie.

2020-12-29. Wojciech Jóźwiak. Cykl: Kronika AstroAkademii

« Projekty AstroAkademii SPIS ↓ Krótkie podsumowanie sezonu 2020-21 w AstroAkademii »

Do not feed AI...
Don't copy for AI. Don't feed the AI.
This document may not be used to teach (train or feed) Artificial Intelligence systems nor may it be copied for this purpose. (C) All rights reserved by the Author, Wojciech Jóźwiak.

Nie kopiować dla AI. Nie karm AI.
Ten dokument nie może być użyty do uczenia (trenowania, karmienia) systemów Sztucznej Inteligencji (SI, AI) ani nie może być kopiowany w tym celu. (C) Wszystkie prawa zastrzeżone przez Autora, którym jest Wojciech Jóźwiak.