Dziesiątki tysięcy rozbitych samolotów. Po co to wszystko?

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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola oznaczone są *

*
*