LunaPic
Datum objave: InfoTekst i fotografije: Ivica DrusanyKategorija: Info

Ivica Drusany
Rađanje ideje
Često poznate fotografe pitaju “što ste najuđe napravili za fotku”, pa se onda naslušamo svakakih priča iz kojih bi zaključili da fotografi nisu baš normalne osobe.
Moje priče nisu tolko ekstremne iako je bilo poteza koji se nisu trebali dogoditi poput raznih ležanja uz cest tijekom rallya, ili fotkanja u zoni izlijetanja diskova i ostalih NLO-a na atletskim mitinzima, stajanja u snijegu na brijegu dok ti noge odlaze u vječna lovišta, a ti čekaš da projuri neki skijaš. Veselo zna biti i u foto pitu kada imaš neuračunljivog izvođača koji ne voli fotografe ili pak fotkanje iz razularene mase ili možda šetnja uz natpise Pazi mine uz Tulove grede.
No nedavno sam imao novi trenutak “što ste najluđe napravili za fotku”, ne u smislu neke opasnosti ili fascinantne ideje, nego uopće razmišljanja i utroška vremena na razvoj nečega što bi mi moooožda pomoglo da ulovim jednu fotku. Ta fotka je među fotografima poznata kao Moon transit, odnosno prelazak aviona ispred mjeseca.
I baš taj nedavni dan mi je iskočio jedan lijepi primjerak takve fotografije na nekoj društvenoj mreži, a kako se već neko vrijeme “bavim” vibe codingom pomislio sam da bi nakon male FIFA 2026 stranice, Mr. Beans stranice posvećenoj kavi, Bezglutenske sile u kojoj se bavim borbom s celijakijom, BTC lokalne aplikacije za jelte Bitcoin, Tetrisa, novog lokalnog CMS-a za blog…bilo vrijeme za novi pet project i tako se rodio LunaPic.
Ideja je bila vibecodati aplikaciju koja će mi reći kada će avion preletjeti preko Mjeseca u odnosu na moju lokaciju da i ja konačno opalim tu fotku jer očekivati da će to moja sreća odraditi bilo bi naivno. Tražio sam gotova rješenja, ali nisam našao taj željeni spoj Flight Radara i Photo Pillsa i Transitchasera.
Odlazak u Bauhaus po materijal?
Dakle imam tri osnovne funkcije za koje trebam pribaviti materijale pa to naštrikati u neki kod.
Karta s avionima
Prikaz i izračun mjeseca
Obavijest o mogućim kandidatima za tranziciju
Karta se može dobiti preko API-a iz više izvora. Google, MapBox… Meni je u startu implementirana MapBox pa sam tako i ostavio.
Avione se također mogu povući preko API-a, a ja sam dodao besplatne Open Sky i ADSB One.
Računice za mjesec su također opće znanje, odnosno lako dostupni library koji će to omogućiti, samo treba pripaziti na preciznost odnosno koji izračun se koristi.
E sad su još ostale obavijesti što mi se neočekivano zakompliciralo jer je tu puno faktora, sigurnosti, usklađenosti OS-a, iOS-a, Safarija… Svako ima neku svoju začkoljicu i način kako bi hendlao taj dio sa slanjem alerta korisniku. Dakle nešto sam postavio, nešto pišti i skače, ali još je in progress.
Sad kad otprilike znam kaj mi od materijala treba možemo upogoniti agente da krenu u štrikanje.
Cursor VS Claude
I tako ja kao iskusan vajbkoder krećem skoncentirano i “profesionalno”. Definiranje arhitekture, pravila, dokumentacije…mrtav ozbiljan kao da znam kaj radim.
Sve je krenulo uz Cursor jer sam se u njemu navikao, ali taman nakon što se aplikacija postavila na noge sam spalio tokene i ušao u onu kretensku fazu vajbkodanja kada krene šarat po besplatnim modelima i kod koji je u početku imao smisla pretvarati u špagete i raditi probleme.
Kako sam sad već zagrizao u ovu aplikaciju tako sam se odlučio da ću okušat sreću s hvaljenim Claudeom jer i tako sam koristio njegov model, pa što ne bi i aplikaciju.
Tu je trebalo malo privikavanja i shvaćanja kako on pali tokene pa sam bio u defektu jer je efektivno radno vrijeme bilo par minuta, a onda hlađenje 5 sati do sljedećeg reseta. Taj način rada mi nije bio opcija jer je kranje besmislem pa sam se htio prebaciti natrag na Cursor, ali svaki dan slušati toliko hvaljenja Claudea me još malo zadržalo uz njega. A i platio sam tih 20€ pa da se ne bace.
Prvi korak maknuti najbolji model Opus 4.7 i staviti na 4.6 i odmah se osjetilo drastično manje trošenje tokena. Pa onda odustati od dizajna i malo precizirati oko uputa za čitanje i traženje pa se nekak i može raditi da vam ne iskače taj limit svako malo.
Iako ne razumijem čemu hvaliti i pumpati model koji možda je najbolji, ali eto na ovaj način neiskoristiv.
Ajmo sve malo zakomplicirati
Sad sam već nešto dobio, ali da to ne bude tako jednostavno jer kao da nije dovoljno čekati tu skoro nemoguću misiju preklapanja, nebo bez oblaka, čistu atmosferu, poziciju s koje vidim Mjesec, tako sam ja odlučio i aplikaciju malo nabildati.
Pokućni ADS-B.
Samo da prvo probam objasniti što je uopće ADS-B iliti Automatic Dependent Surveillance-Broadcast. To je tehnologija koja avionu omogućuje dobivanje podataka o letu i njihovo odašiljanje. Dakle avion preko GPS-a prikupi poziciju, visinu, brzinu… i to šalje na “javnoj” frekvenciji 1090 MHz, pa svaka budala s receiverom i antenom može uloviti podatke.
Ta budala sam naravno ja jer sam želio svoje podatke, a ne samo one s javno dostupnih API-a. Prvo jer oni kasne, drugo mogu biti blokirani ako ste npr. na Vercelu što mi se i dogodilo pa sam se zato prebacio na svoj server. Treće ne bi smjeli ili uopće ne možete obrađivati podatke koje prikupite nego ih možete samo prikazivati real-time.
Jedna od ideja za aplikaciju mi je bila i planiranje, a ne samo gledanje trenutnog stanja. A za planiranje nam trebaju rute kojima avioni lete.
No te rute nisu samo tako dostupne. Kao nisu tajne, ali nisu baš na izvolte i iskreno ne znam kako bi došao do njih. Ruta je u biti flight plan koji se dobije prije svakog leta od strane EUROCONTROL Network Managera, a na sami let i njegovu rutu utječe i kontrola leta koja u bilo kojem trenutku zbog razno raznih razloga može tu rutu mijenjati.
I zato vlastiti ADS-B jer trenutno prikupljam podatke od letova koje lovim i aplikacija će moći nacrtati neku srednju rutu kojom bi avion mogao proći i u koje doba. Ali i vremena su uvijek upitna zbog svih kašnjenja, ali eto, radimo malo statistike i nagađanja.
Pi, Raspberry Pi
E da bi mi taj skupljač podataka radio moram ga spojiti na nekakav server, a nema boljeg od Raspberry Pi i to kako kažu verzije 3. Naravno da se mogu upogoniti i stare ili nove kante koje će glumiti servere, ali za 24/7 s malom potrošnjom struje ova mala kantica je idealno rješenje.
Pi mora imati SD karticu, WiFi na neki način i to je to. U njega na USB ide ADS-B adapter, malo struje i onda se valjalo spojiti na njega da odradim i softversku problematiku.
No prvo sam na svom kompu skinuo Raspberry OS (lite) i prebacio na SD karticu pa natrag u Pi.
Ide on i na monitor uz miša i tastaturu, ali jednostavnije je spojiti se na njega sa svog kompjutera i tako odraditi potrebne instalacije. Ja sam na Macu pa sam to odradio preko Terminala, ali radit će i svi ostali pristupi.
Ima dosta Youtube tutoriala ali ja sam se odlučio za Gemini i step by step instalaciju.
Pokrenite 1090tar i ako dobijete kartu to bi trebalo biti to, još samo zadnji korak.
Antena
Kod antena vrijedi ono pravilo šro dulja, veća, to bolja. Možete staviti i onu malu kućnu tanku, nikakvu ili možete kupiti malo ozbiljniji komad. A možete i sami rezatii spajati kablove ako imate znanja i vremena. Imate upute kako rezati, koje deblji i sve ostalo.
Ja sam se odlučio za malo konkretniji komad antene, ali tu je i ona kućna za backup i test.
Antena bi trebala biti naravno vani, ne poziciji da lovi što više neba, 360 stupnjeva bez ometanja od strane zgrada, drveća.. je idealno. Radit će vam i iz topline doma, ali mi želimo što više i što preciznije.
Zadnja provjera je pokretanje 1090 tar i ako tamo vidite avione oko svoje lokacije onda je to to.
Još malo o aplikaciji
Prvo online postavljanje aplikacije je bilo preko Vercela, ali kako je tu došlo do problema s propuštanjem API-a za avione, vjerojatno blokiranog zbog potencijalnog prevelikog prometa i opterećenja, tako sam sve preselio na server gdje držim i blog i odlučio se na ručni deploy i još neke preinake da to sve radi.
Sad kad sam osposobio svoj ADS-B, trebalo je agente natjerati da to povežu s mojom aplikacijom, ali i naprave bazu, jer sada imam svoje podatke koje mogu zapisati na server i njima baratiti kako želim. A ideja je da se ucrtaju rute, da se nađe neka srednja ruta, srednji prolaz za one ponavljajuće linije, pa da se eventualno može planirati i unaprijed.
Ako npr. imamo liniju Zagreb-Frankfurt koja se ne mijenja previše i koja ima svoje vrijeme leta, tada bi mogli planirati fotografiranje, ali za to treba napuniti bazu, napraviti malo veći update, pa ću za to pričekati.
Trenutno LunaPic koristi OpenSky i ADS-B One API-je uz svoj LunaPic ADS-B, ali plan je skalameriju premjestiti na lokaciju koja će imati bolju pokrivenost bez ometanja i ugasiti ili ostaviti vanjske API-je samo kao backup. Tu bi dobio na fluidnosti i smanjio trzanje i zamrzavanje jer vanjski podaci i kasne i budu preopterećeni pa je malo naporno ako se duže gleda u kartu.
About stranica bi trebala pomoći oko shvaćanja što čemu služi i kako aplikacija radi, ali trenutno je dosta generički napisana i trebao bih uložiti vremena da to logičnije posložim i objasnim. Prvo sam sebi, a onda i drugima :)
S teorije na praksu
Evo u par crtica kako ja to koristim. Zumiram na svoju lokaciju da vidim da li me GPS dobro locirao, a ako nije, samo odvučem fotić na točnu lokaciju.
Sada malo odzumiram mapu i osim aviona vidim i jednu liniju koja označave smjer Mjeseca, pa neki krug na kojem se vidi kada Mjesec izlazi i kada zalazi. Vidim i još jedan bliži crtkani krug radijusa 80km što je prostor u kojem bi se avion u idealnim uvjetima na mojih 600mm mogao vidjeti, sve iznad toga nema smisla.
Avioni su raznih boja i veličina što predstavlja njihovu visinu leta. Manji lete više, a boje su objašnjane na Altitude skali. Na njoj možemo i filtrirati pojedinu visinu.
Vide se samo avioni u radijusu 200km jer mi iznad toga nije potrebno i na taj način rasteretim samu aplikaciju i API-je.
Da bi se uopće mogao nadati fotki tranzicije Mjesec naravno mora izaći, mora biti dovoljno visoko i mora biti vedro. E onda moram vidjeti da li ga uopće vidim sa svog balkona, da li će mu putanja biti dovoljno dobra da ga mogu pratiti ili će cijelo vrijeme biti nisko iza zgrade koja mi je pod nosom ili će izlazak kao danas biti u ponoć pa ga neću ni dočekati.
Kada se sve poklopi i vidimo da mi se avion kreće prema toj crti počeo sam se nadati da će biti nešto, ali sam s vremenom postrožio sva upozorenja i nade tako da se neće paliti opcija Transition Candidate ako avion stvarno nema neka šanse.
Kako nemam plan leta tako sam za svaki avion napravio predikciju za 90s na temelju podataka o letu, pa se tako računa i mogućnost tranzicije. Cilj mi je da avion uđe u ovaj zeleni prostor i da mu je Elevation Miss (Δalt 0°), to bi onda bilo drito po sredini, a 0,5 je već rubno. Sve iznad toga može biti fora za fotku, ali ne i za samu tranziciju.
Layeri
Početni layer nam je taj 3D s modelom aviona i mogućnosti 3D prikaza dok držimo desni gumb miša. Trenutno zna trzati ili se smrzne na kratko, ali mislim da će to prelazak na LunaPic ADS-B rješiti.
Poslije sam iz zezancije dodao ATC layer koji podsjeća na ekran koji gledaju kontrolori leta i koji nema 3D pa radi glađe.
Layer VFR je debela beta uz mogućnost brisanja, ali vijdet ćemo kada se napuni baza da li ću ga moći bolje iskoristiti.
I na kraju jako koristan Google Street View Layer koji mi na uličnoj fotki prikaže gdje je Mjesec sada i koja mu je putanja, a pomoću slidera za timeline ga mogu i micati da vidim točnu putanju po satnici.
Tabovi
Proletit ćemo kroz tabove redom. Active transit će priakzati jelte aktivne prelete, Transit Candidates one koji bi mogli biti prelet i one koji bi bili blizu odnosno u kadru. Tu je i zvonce za notifikacije koje bi trebale raditi, ali puno je faktora oko njihovog ispravnog rada pa ajmo reći da to još testiram.
Tab Photographer je meni dosta zanimljiv i u njemu odabirem svoj aparat i objektiv pa nam aplikacije govori koliko bi avion mogao biti velik u odnosu na Mjesec i koliko će mjesec biti pixela u frameu.
U njemu je i vizualni relani prikaz Mjeseca i smjer iz kojeg mu dolazi avion te njegova udaljenost. U trenutku tranzicije se vidi i avion u izračunatom omjeru. Sve je krenulo kao običan krug i crtica da bi završilo s povlačenjem realne slike s NASA-e i live izračunom približavanja.
Tu nam je još i Flight Filters, ako želite baš nešto odreženo loviti, Moon (nowcast), sa svim potrebnim podacima o vidljivosti Mjeseca, Observer u kojem se lociramo, AR sky overlay koji je fora igračka za okrenuti mobitel prema mjesecu i vidjeti na nebu gdje se koji avion približava. Compass, koji služi za određivanje pozicije Mjeseca na terenu, ali možda je on prvi kandidat za brisanje.
Flight Source koji će s prelaskom na LunaPic ADS-B nestati, Field Overlays koji je isto malo upitan i Flight Log koji je u biti prikaz baze odnosno crtanje prosječne rute za pojedinu liniju koju LunaPic ADS-B puni preko Raspberrya.
Logo
Glupa aplikacija zaslužuje i glupi logo pa sam se i s tim morao poigrati jer su AI generirana rješenje bila katastrofa.
Blenda, avion, Mjesec…ludilo od kreativnosti :)
Ima li kraja ovom postu?
Iako se sve pokrenulo oko fotke, u biti je ovo bio samo jedan dobar zadatak za igranje programiranja i otkrivanja nekih novih stvari.
Vjerojatno će svi lakše napraviti fotku tranzicije tako da nekad pogledaju u nebo i kažu “gle ide avion preko Mjeseca” nego ja s ovom aplikacijom, ali bila je ovo jedna dobra vide coding radionica, astro učionica, tehnička slagaonica… Možda nekad i ulovim the fotku pa ću onda biti dodatno zadovoljan, ali već je i ovo čudo.
Dokaz da danas uz malo truda i volje i skoro nikakava ulaganja možete fakat čuda napraviti. Ponovimo da ja s programiranjem nemam apsolutno nikakve veze, s astronomijom također, od slaganja znam s Ritom složiti legiće i promjeniti žarulju, ali eto tu je nekakva funkcionalna aplikacija i skalamerija koju sam složio koja lovi avione koji mi lete iznad glave.
Zato kada moram svaki dan slušati kako se nešto ne može, kako je sve problem, kako fali ovog ili onog…jednostavno pozelenim.
No...LunaPic je i dalje u razvoju, vjerojatno ću stalno neke glupe ideje dodavat i oduzimat. Znam da nije idealna, znam da će sve opcije potrošiti bateriju brže, da se mobitel grije, ali grije se i kod igrica i kod Flight Radara. Možda s vremenom postane ozbiljnija i bolja...stay tuned.

