Ile samolotów musiałem rozbić…?
…żeby zrozumieć, jak działają Sockety, komunikacja klient-serwer w Pythonie i na końcu przepisać cały projekt na nowoczesny moduł asyncio?
Setki? Tysiące? Setki tysięcy?
Myślę, że ta ostatnia liczba jest najbliższa prawdy…
Ale do sedna.
Wyzwanie: Własna wieża kontroli lotów
Za mną pierwszy tak rozbudowany projekt: symulacja wieży kontroli lotów (serwer) oraz pojawiających się na radarze samolotów (klienci). Cel był prosty w założeniach, ale jak się okazało – bardzo trudny w realizacji: stworzyć system, w którym wieża bezpiecznie prowadzi każdą maszynę do lądowania.
W praktyce oznaczało to, że:
- Wieża musiała na bieżąco odbierać dane o pozycji każdego samolotu.
- Na podstawie tych danych zarządzała korytarzami powietrznymi, aby uniknąć kolizji.
- Lądowanie kończyło się sukcesem tylko wtedy, gdy maszyna wylądowała z paliwem w baku i bezkolizyjnie na wyznaczonym pasie.
Początki, czyli festiwal kraks
Pierwsze wersje to same kolizje, nieudane lądowania, rozłączenia z bazą, braki w synchronizacji między klientem(samolotem) i serwerem(wieżą) i sypanie się programu praktycznie na każdym kroku.
Zaczynałem z wiedzą programistyczną OOP, DRY, KISS, SOLID, rozumiałem zarys komunikacji klient-serwer, ale nie miałem pojęcia, jak połączyć te wszystkie klocki w działającą całość.
Teraz
Dzisiaj projekt pięknie „śmiga”. Samoloty się pojawiają, wysyłają cały czas swoje położenie i stany do wieży, wieża analizuje co się dzieje i odpowiada o kolejnych krokach – system działa. Kolizji brak, sukces praktycznie za każdym razem.
Początkowo oparłem projekt na standardowych Socketach. Gdy wszystko zaczęło działać, w ramach nauki postanowiłem zrefaktoryzować kod, używając asyncio. Skutek? Nowoczesna biblioteka tak uprościła logikę, że z projektu wyleciało ponad 600 linii kodu!
Cena tego sukcesu
Za tym efektem kryją się dziesiątki wieczorów spędzonych na myśleniu, analizie i pisaniu czasami jednej linijki kodu, by ruszyć do przodu. Były momenty demotywacji i zwątpienia, gdy po całym dniu pracy i popołudniu z dzieckiem więcej czasu zajmowało poprawianie wczorajszych błędów, niż tworzenie nowego kodu. Pojawiały się pytania – “czy kiedykolwiek skończę ten projekt?”, ale jest!
Znając życie gdy za miesiąc spojrzę na ten kod – znowu złapie się za głowę, ale jest to fajna miara progresu i rozwoju w tym programistycznym świecie. 🙂
Jeszcze dużo przede mną jeżeli chodzi o programowanie, ale działam dalej. Czas na kolejny projekt. Jak skończę to zapewne również podzielę się efektami 🙂
A z jakim wyzwaniem Ty ostatnio się mierzysz lub mierzyłeś po godzinach? Koniecznie daj znać w komentarzu!
Link do repozytorium: https://gitlab.com/DawDro/airport-automatic-landing-system
