Blog aplikacji Polskie Góry  

Na moim blogu obejrzysz setki zdjęć panoram górskich z opisami, a także poznasz wiele ciekawych pojęć, takich jak: undulacja, refrakcja, deniwelacja, deklinacja, inklinacja, analema, paralaksa, aberracja, dystorsja. Zbyt skomplikowane? To dowiesz się np. dlaczego o wschodzie i zachodzie słońce jest czerwone oraz dlaczego lepiej nie stawać z boku na zdjęciu grupowym. Na dole ekranu znajduje się spis treści wszystkich wpisów na blogu. Zapraszam :-)

^/\^ Robert Celiński, autor aplikacji Polskie Góry ^/\^

18 stycznia 2018 - Przyspieszenie aplikacji Polskie Góry i 500 szczytów w paśmie

Ten wpis może się okazać ciekawy dla osób bardziej technicznych, ale również laicy znajdą tu coś dla siebie i dowiedzą się więcej na temat pracy programisty ;-)

W poprzednim wpisie rozwodziłem się na temat wydajności - jak szybko generuje się opis górskiej panoramy w zależności od miejsca, w którym uruchomimy aplikację i jaki wpływ mają na to parametry naszego telefonu (generalnie im nowszy model, tym szybciej powinna działać aplikacja).

Wpis na temat wydajności aplikacji Polskie Góry

Niedługo potem uzupełniałem bazę szczytów w aplikacji i doszedłem do limitu 400 pozycji wprowadzonych w Beskidach Zachodnich. Dzięki temu wygenerowane panoramy były bardzo dokładne (obejmowały górki, o których istnieniu przeciętny turysta nie ma pojęcia), ale w czasie testów zauważyłem, że w najbardziej panoramicznych miejscach aplikacja nie działa błyskawicznie i dość długo trzeba czekać na wygenerowany opis panoramy z zarysowanymi kształtami gór.

Stwierdziłem, że winę za tak długie generowanie ponosi nie tylko duża liczba szczytów, ale również nieoptymalny algorytm określania ich widoczności - których gór nie widać z danego miejsca, bo są zasłaniane przez inne, bliższe. Ten algorytm powstał 2,5 roku temu, a od tego czasu był dodatkowo łatany różnymi dodatkowymi funkcjami i to spowolniło jego działanie. Co początkowo działało szybko przy 100 szczytach w paśmie, okazało się dławić przy 400. Do próby usprawnienia algorytmu podchodziłem już wcześniej, ale stwierdzałem, że ta szybkość zależy też od tego, z jakiego miejsca uruchamiam aplikację - czy jest ono panoramiczne i widać z niego wiele gór, czy np. użytkownik znajduje się gdzieś głęboko w dolinie i widzi z tego miejsca np. tylko 3 najbliższe szczyty. Czasem moje zmiany w kodzie mogły nieco przyspieszyć generowanie panoramy, ale w innym miejscach tylko pogorszyłyby sprawę.

Po ostatnich obserwacjach stwierdziłem jednak, że muszę coś w końcu zrobić z wydajnością aplikacji i "zaorać" ten fragment kodu, dokonując jego gruntownej zmiany. Refaktoryzacja (lub refaktoring) to wprowadzanie zmian w programie komputerowym, w wyniku których zasadniczo nie zmienia się funkcjonalność. Mógłbym tutaj wiele pisać na temat aspektów refaktoryzacji. Generalnie chodzi o to, żeby kod programu był krótszy, bardziej czytelny, nie zawierał redundantnych (nadmiarowym) elementów oraz by wprowadzanie ewentualnych późniejszych zmian było wygodniejsze. W aplikacji Polskie Góry refaktoryzacja miała na celu znaczące skrócenie kodu programu (ostatecznie udało się zejść w tym fragmencie ze 143 do 86 linijek), zwiększenie przejrzystości i przyspieszenie. Wynik działania miał być ten sam (lista widocznych szczytów z danego miejsca), ale chciałem go uzyskać znacznie szybciej.

Refaktoryzacja nie była taka prosta, wymagała dużego skupienia i pokonania po drodze kilku problemów algorytmicznych, które czasem pochłaniały sporo czasu. Przy tworzeniu tego kodu na bieżąco musiałem stosować debugowanie. Jest to proces systematycznego redukowania liczby błędów w oprogramowaniu, do których często używa się tak zwanego debuggera - za Wikipedią: programu służącego do dynamicznej analizy innych programów, w celu odnalezienia i identyfikacji zawartych w nich błędów, zwanych z angielskiego bugami (robakami). Debugger pozwala np. ustawiać breakpointy (pułapki) w kodzie programu, dzięki czemu jego wykonywanie zatrzymuje się w tych miejscach i można odczytać jego aktualny stan (np. wartości zmiennych). Informacje o działaniu programu można również często wyczytać z jego logów. Przy testowaniu moich aplikacji mobilnych stosuję prosty sposób debugowania i pewne dane wyświetlam po prostu na roboczo na ekranie smartfona. W szczególności były to np. informacje na temat czasu, jaki potrzebowała aplikacja do przetworzenia danego fragmentu kodu. Przed jego uruchomieniem aplikacja zapamiętywała aktualny czas, a po zakończeniu operacji sprawdzała różnicę czasu bieżącego i tego zapamiętanego wcześniej oraz pokazywała tę informację na ekranie. Dzięki temu na bieżąco wiedziałem, czy moje zmiany odnoszą pożądany skutek wydajnościowy.

Refaktoryzacja polegała przede wszystkim na odpowiednim uporządkowaniu danych przed ich analizą. Wcześniej przebiegało to w dość chaotyczny sposób, bo kod działał na nieuporządkowanym zbiorze danych i dokonywał przez to znacznie większej liczby obliczeń, co przekładało się na czas wykonania. Teraz najpierw dokonałem sortowania szczytów malejąco według dystansu, jaki je dzieli od obserwatora. Dokonałem obliczeń tych wartości, które interesują mnie do analizy (dystans oraz kierunek geograficzny widzenia szczytu), a inne zmienne zostawiłem do przypisania dopiero po przeprowadzeniu całej operacji. W najważniejszy fragmencie kodu, polegającym na sprawdzaniu zasłaniania gór, działałem już na posortowanych malejąco według odległości identyfikatorach szczytów i sprawdzałem, czy bliższe góry ich nie zasłaniają. Co ważne, sprawdzanie szczytów zasłaniających rozpoczynałem od najbliższych gór, bo to one przy większym prawdopodobieństwie zasłaniają dalsze. Przykład praktyczny: stańmy u podnóża jakiegoś masywu górskiego, a zorientujemy się, że nic poza nim nie widzimy żadnych innych. Ten najbliższy masyw może zasłonić nam np. 200 innych gór, które są zarejestrowane w ramach pasma. Na koniec, jak już wyeliminowałem zasłaniane szczyty, przypisałem odpowiednio wszystkie ich zmienne (np. nazwy) na podstawie identyfikatorów i miałem gotową listę do prezentacji na ekranie.

Wynik tej zmiany przerósł moje najśmielsze oczekiwania pod względem wydajności generowania panoramy w aplikacji. Żeby porównać działanie stałego i nowego algorytmu, opierałem się na symulacji położenia w danym miejscu i podanej wysokości n.p.m. Jeżeli była ona liczbą parzystą, to obliczenia przebiegały starą metodą, a jeżeli nieparzysta, to nową. Symulowana wysokość jest widoczna w lewym dolnym rogu ekranu na poniższych rysunkach - różnica jednego metra wysokości w punkcie obserwacji nie ma wpływu na liczbę widocznych szczytów na panoramie. Wzgórze Trzy Lipki w Bielsku-Białej to bardzo panoramiczne miejsce, ale położone relatywnie nisko, przez co widać stąd "tylko" 68 szczytów z bazy aplikacji Polskie Góry. Tutaj czas generowania panoramy nie był wcześniej bardzo długi (1,6 sekundy), ale nowy algorytm ograniczył go czterokrotnie - do 0,4 sekundy.





Barania Góra zapewnia rekordowo dużą liczbę widocznych szczytów - aż 318.



Generowanie panoramy na szczycie Baraniej Góry zajmowało na moim telefonie aż 7,2 sekundy, natomiast po wdrożeniu nowego algorytmu trwa to tylko 0,1 sekundy! Aplikacja po prostu śmiga na szczycie Baraniej Góry! :-)





Postęp wynika z tego, że dane do analizy są wcześniej odpowiednio uporządkowane, a aplikacja musi wyeliminować niewiele zasłoniętych szczytów - niecałe 100. Podobny wynik da się uzyskać na nieco wyższym Skrzycznem, z którego widać 314 szczytów.

Jak wynika z powyższych przykładów, nowy algorytm znacznie przyspieszył generowanie panoram w miejscach, z których widać dość dużo szczytów, natomiast w przypadku najbardziej panoramicznych punktów widokowych, jest to niesamowity postęp! :-)

Takie przyspieszenie działania programu pozwoli na zwiększenie liczby szczytów zarejestrowanych w bazie aplikacji, bo to właśnie problemy z dużą ilością danych do analizy stanowiły inny problem wydajnościowy. Limit liczby szczytów w ramach pasma lub grupy górskiej (przypomnę, że w aplikacji Polskie Góry jest ich 11) został zwiększony do 500, a np. obecnie w Beskidach Zachodnich jest zarejestrowanych 412 pozycji. Dzięki temu górskie panoramy będą rysowane i opisywane jeszcze dokładniej. Przykładowo, w ostatniej wersji dodany został mało wybitny Czupel ponad Straconką w Bielsku-Białej (nie mylić z położonym niedaleko najwyższym szczytem Beskidu Małego o tej samej nazwie). W kolejnych miesiącach baza aplikacji zostanie uzupełniona również o inne, niższe szczyty.





Wszystkie wpisy
18 stycznia 2018 - Przyspieszenie aplikacji Polskie Góry i 500 szczytów w paśmie

6 stycznia 2018 - Wydajność aplikacji Polskie Góry

6 stycznia 2018 - Jak ukraść górę?

5 stycznia 2018 - Zniekształcenia obrazu i panorama 180 stopni (edytowany)

5 stycznia 2018 - Godzina wschodu i zachodu słońca w aplikacji Polskie Góry

4 stycznia 2018 - Opis panoramy Tatr z Chopoka w Tatrach Niżnych

1 stycznia 2018 - Aplikacja Polskie Góry na Lanzarote

19 grudnia 2017 - Sztuczna inteligencja w aplikacji Polskie Góry

16 grudnia 2017 - Zdobywanie szczytów na Trasie Skaczącego Tygrysa w Beskidzie Małym

16 grudnia 2017 - Jak odległe góry możemy zobaczyć z terytorium Polski?

15 grudnia 2017 - Brzydka ikona -4° - dlaczego nie ma jej w aplikacji Polskie Góry

10 grudnia 2017 - Fotorelacja z wycieczki Magura -> Klimczok -> Szyndzielnia -> Kozia

9 grudnia 2017 - Testy terenowe modułu kolekcjonowania szczytów

4 grudnia 2017 - Kolekcjonuj zdobyte szczyty z aplikacją Polskie Góry! (edytowany)

25 listopada 2017 - Fotorelacja z wycieczki na Magurkę Wilkowicką

25 listopada 2017 - Widok na Tatry z lotniska Aleksandrowice w Bielsku-Białej

23 listopada 2017 - Wschód słońca na Gaikach i widok na Pradziada w Sudetach

21 listopada 2017 - Górska granica Polski na mapie w aplikacji Polskie Góry

16 listopada 2017 - Szlak Huli dookoła Szczyrku (edytowany)

15 listopada 2017 - Pierwsze mrozy na Gaikach i panorama Tatr

7 listopada 2017 - Panoramiczne zdjęcie Tatr z Jurgowa (edytowany)

6 listopada 2017 - Widoczność szczytów przy zmianach wysokości (edytowany)

5 listopada 2017 - Fotorelacja z wycieczki na Skrzyczne i Malinowską Skałę

5 listopada 2017 - Nowości dla rolników - rozpoznawanie upraw w aplikacji Polskie Góry

4 listopada 2017 - Wschód słońca na Klimczoku

31 października 2017 - Pierwsze zimowe wejście na Gaiki

29 października 2017 - Identyfikatory szczytów w bazie danych aplikacji Polskie Góry

29 października 2017 - Zmiana czasu z letniego na zimowy - czy ostatnia?

22 października 2017 - Wyszukiwarka szczytów na portalu RunCalc

22 października 2017 - Aplikacja RunCalc dla turystów górskich

22 października 2017 - Widoki na Tatry z nowej wieży widokowej w słowackim Zdziarze

21 października 2017 - Fotorelacja z wycieczki Gaiki -> Międzybrodzie -> Czupel

20 października 2017 - Tolerancja przy identyfikacji linii horyzontu

18 października 2017 - Burza Ophelia i czerwone niebo na zachodzie o wschodzie

17 października 2017 - Zachód słońca w Bielsku, wschód na Gaikach - panorama Tatr

14 października 2017 - Fotorelacja z Biegu Ultra Granią Beskidu Małego

12 października 2017 - Rozpoznawanie obrazu w praktyce (edytowany)

6 października 2017 - Film promocyjny aplikacji Polskie Góry

5 października 2017 - Przyjazna nazwa miejsca w aplikacji Polskie Góry

3 października 2017 - Paralaksa i naturalny pomiar odległości w górach (edytowany)

1 października 2017 - Fotorelacja z wycieczki wokół Koszarawy

30 września 2017 - Fotorelacja z wycieczki na Rycerzową, Bendoszkę i Praszywkę

28 września 2017 - Piramida krakowska

23 września 2017 - Pozycjonowanie stron aplikacji Polskie Góry

20 września 2017 - Aplikacja Polskie Góry jako nawigacja samochodowa

19 września 2017 - Rozpoznawanie obrazu - określanie linii horyzontu

9 września 2017 - Fotorelacja z wycieczki na Romankę i Rysiankę

3 września 2017 - Rozpoznawanie obrazu i utrudnione testy nowej wersji aplikacji

31 sierpnia 2017 - Jak użytkownicy pomagają rozwijać aplikację Polskie Góry

31 sierpnia 2017 - Wieczorne widoki z Gaików

27 sierpnia 2017 - Fotorelacja z wycieczki na Hrobaczą Łąkę

26 sierpnia 2017 - Fotorelacja z wycieczki na Magurkę Wilkowicką

26 sierpnia 2017 - Prezentacja aplikacji Polskie Góry na zjeździe PTTK

26 sierpnia 2017 - Powrót do przyszłości z aplikacją Polskie Góry

19 sierpnia 2017 - Bieg Ultra Granią Tatr - widoki z Czerwonych Wierchów

16 sierpnia 2017 - Widoki z Góry Żar i Magurki Wilkowickiej

16 sierpnia 2017 - Polskie Góry na Maderze

31 lipca 2017 - Nowy wygląd aplikacji Polskie Góry

31 lipca 2017 - Widoki z Baraniej Góry

26 lipca 2017 - 10 tysięcy pobrań aplikacji Polskie Góry! :-)

23 lipca 2017 - Były sobie dwa Minčoly

23 lipca 2017 - Burzowe zdjęcia rentgenowskie Skrzycznego

21 lipca 2017 - RunCalc Panoruna - zagraniczne panoramy i opisywanie posiadanych zdjęć

16 lipca 2017 - Widoki z Wielkiej Raczy

16 lipca 2017 - Polskie Góry w Alpach Julijskich i słynny Triglav

9 lipca 2017 - Polskie Góry w Alpach Kamnickich

5 lipca 2017 - Ustawienia ostrości oraz wpływ strefy czasowej na położenia słońca

5 lipca 2017 - Panoramy z Hrobaczej Łąki i Gaików (edytowany)

4 lipca 2017 - Bieg Ku Słońcu i opisywanie wykonanych wcześniej zdjęć

26 czerwca 2017 - Komunikat dla użytkowników, którzy ostatnio zainstalowali aplikację

25 czerwca 2017 - Widoki ze Śnieżki

21 czerwca 2017 - Lato oficjalnie rozpoczęte :-)

19 czerwca 2017 - Podstawowe informacje po zainstalowaniu aplikacji Polskie Góry

14 czerwca 2017 - Poszerzanie horyzontów na temat horyzontu

13. června 2017 - Aplikácia Polskie Góry na slovenských horách

13. června 2017 - Aplikace Polskie Góry ve českých horách

9 czerwca 2017 - Szyndzielnia i Klimczok przy pięknej pogodzie

8 czerwca 2017 - Ostatnie poprawki w aplikacji Polskie Góry

7 czerwca 2017 - Pradziad widziany z Gaików

4 czerwca 2017 - Aplikacja Polskie Góry - wschód słońca na Gaikach, Magurka, Czupel

3 czerwca 2017 - Aplikacja Polskie Góry na Biegu Marduły w Tatrach

1 czerwca 2017 - Cień wielkiej góry (edytowany)

30 maja 2017 - Ciekawe nazwy gór (edytowany)

28 maja 2017 - Babia Góra i Mała Babia ze Słonej Wody

24 maja 2017 - Królewicz Śnieżnik, Królewna Śnieżka i... Cycki Bardotki

20 maja 2017 - Sztuczki w aplikacji Polskie Góry (edytowany)

15 maja 2017 - Nowości w aplikacji: 200 szczytów w paśmie i górskie gwiazdy (edytowany)

7 maja 2017 - 5000 pobrań aplikacji Polskie Góry

3 maja 2017 - Polskie Góry w odwiedzinach w Górach Dynarskich

26 kwietnia 2017 - Tomasz, to masz ty maszty

23 kwietnia 2017 - Czujniki położenia, kompas i deklinacja

15 kwietnia 2017 - Aplikacja Polskie Góry i jej konkurencja

10 kwietnia 2017 - Aplikacja Polskie Góry w Ustrzykach Dolnych (Góry Sanocko-Turczańskie)

4 kwietnia 2017 - Nowości: rysunki panoram, kalibracja kompasu, wybór rozdzielczości

25 marca 2017 - Zmiana czasu z zimowego na letni

21 marca 2017 - Równonoc - wschód słońca na wschodzie, zachód na zachodzie

20 marca 2017 - Widoki ze wzgórza Trzy Lipki w Bielsku-Białej

13 marca 2017 - Co by było, gdyby Ziemia była płaska

7 marca 2017 - Tabela kalibracyjna w aplikacji Polskie Góry

6 marca 2017 - Aplikacja Polskie Góry jeszcze bardziej przyjazna użytkownikom

2 marca 2017 - Podział pasm górskich w aplikacji Polskie Góry

27 lutego 2017 - Wschód słońca na Magurze, widoki z Klimczoka i Szyndzielni

22 lutego 2017 - Karta kalibracyjna

15 lutego 2017 - Gaiki

14 lutego 2017 - Lubię nagie i zarośnięte...

4 lutego 2017 - Quizy z rozpoznawania panoram górskich

31 stycznia 2017 - Aplikacja Polskie Góry w ...Warszawie

29 stycznia 2017 - Wschód słońca na Magurce

28 stycznia 2017 - Wschód słońca na Klimczoku oglądany przez obiektyw szerokokątny

10 stycznia 2017 - Polskie Góry od kuchni (programistycznej)

1 stycznia 2017 - Noworoczny bieg Trasą Skaczącego Tygrysa, zachód słońca w Łodygowicach

31 grudnia 2016 - Sylwestrowy wschód słońca na Klimczoku

30 grudnia 2016 - Wschód słońca na Pilsku, zachód na Magurce

17 grudnia 2016 - Widoki z Góry Żar

13 grudnia 2016 - Wschód słońca na Klimczoku - opis panoramy Tatr

25 listopada 2016 - Aplikacja Polskie Góry bez GPS

22 listopada 2016 - Wschód słońca na Klimczoku

18 listopada 2016 - Aplikacja Polskie Góry - jak to działa?

6 listopada 2016 - Nowości w aplikacji: lista szczytów i rysowanie kształtów gór

25 października 2016 - Algorytm określania widoczności gór oraz nowe tatrzańskie szczyty

23 października 2016 - Aplikacja Polskie Góry w Tatrach

17 października 2016 - Wakacyjny konkurs fotograficzny rozstrzygnięty

2 października 2016 - Refrakcja - dlaczego o wschodzie i zachodzie Słońce jest czerwone?

15 września 2016 - Apel do użytkowników aplikacji Polskie Góry: przeczytajcie instrukcję :-)

12 września 2016 - Polskie Góry w odwiedzinach w Górach Riła

1 września 2016 - Mądrości na temat wybitności (edytowany)

31 sierpnia 2016 - Ulubione miejsce na górskiej panoramie

29 sierpnia 2016 - Więcej o historii i budowie polskich gór

25 sierpnia 2016 - Górska róża wiatrów w aplikacji Polskie Góry

18 sierpnia 2016 - Genialna luneta na szczycie Monte delle Rezze nad Livigno

13 sierpnia 2016 - Polskie Góry w Alpach - ciąg dalszy

11 sierpnia 2016 - Polskie Góry w... Alpach ;-)

1 sierpnia 2016 - Lekcja historii o Sudetach

12 lipca 2016 - W stronę Słońca

18 czerwca 2016 - Nowości w aplikacji: rysowanie panoram oraz wykorzystanie położenia Słońca

16 maja 2016 - Undulacja i ustawienia wysokości (edytowany)

5 maja 2016 - Kąt widzenia aparatu w telefonie (edytowany)

4 maja 2016 - Zniekształcenia obrazu w aparatach telefonów komórkowych (edytowany)

------------------------------------



Strona Polskie Góry

Copyright 2015-2018
Robert Celiński, Byledobiec Anin