wtorek, 13 marca 2018

Aplikacja Maraton Rowerowy - historia wersji

Historia rozpoczęła się w 2013 roku około miesiąca przed planowaną datą rozpoczęcia Maratonu.
aktualna strona Śląskiego Maratonu Rowerowego
Strona Maratonu


Założenia do programu były bardzo skromne, program miał za zadanie odczytać czas zawodników na poszczególnych odcinkach i wyświetlić czas końcowy. Wygląd interfejsu technologia była dowolna.
Od pierwszej wersji aplikacja pisana była w oparciu o Visual Studio od 2005 do 2015 baza na początku lokalna MS SQL Express 2008 do MS SQL 2012 (hosting). Technologia zastosowana podczas odczytu czasów zawodników to RFID standard Unique.

Wersja numer 1 rok 2013.
  • odczyt kart na poszczególnych punktach,
  • lokalną bazę danych
  • wyświetlenie danych o zawodniku nazwisko, imię, numer, czas odcinka oraz czas końcowy
  • start zawodników odbywał się z listy rozwijanej (combo), start maksymalnie 15 zawodników.
Błędy (które jeszcze pamiętam)
  • jeżeli zawodnik odbił się dwa razy przeskakiwał na następny punkt kontroli czasu,
  • bazy się nie widziały, nie było globalnego serwera


Wersja numer 2 rok 2014

Kolejna wersja  jak wspominałem powyżej nie różniła się znacząco od poprzedniej (jeżeli chodzi o interfejs).
Byłą bogatsza o kilka opcji.
 
Baza została na nowo zrobiona.
Został dodany nowy punkt pomiaru czasu były teraz cztery jak widać na obrazku powyżej w pierwszej były trzy.
Interfejs dalej był nie co ubogi ale przynajmniej wszystko było widać, największym błędem w działaniu aplikacji była sytuacja gdy zawodnik odbił się dwa razy na tym samym punkcie, w tedy w systemie był widoczny jakby przejechał już do następnego punktu pomiarowego.
Czytnik dalej działał na kontrolce Timer.
Dodatkowe funkcje:
  • poszczególne komputery łączyły się z bazą globalną (miałem hosting po raz pierwszy), 
  •  każdy klient lokalnie zapisywał pliki z odbiciami zawodnika na danym punkcie. Została stworzona struktura katalogów, każdy katalog to numer identyfikujący zawodnika,
  • kolejną nowością w prowadzenie pliku konfiguracyjnego, który zawierał connection string do bazy globalnej dzięki temu łatwiejsze było przenoszenie aplikacji między komputerami,
  • ekran wyszukiwania zawodnika z jego dokładnymi pomiarami czasu na punktach,
  • ekran z czasami przejechanych odcinków,
  • start zawodników z listy na której kontrolki checkbox generowały się dynamicznie zależnie od zawodników którzy wystartowali
  • podział aplikacji na klienta zaawansowanego oraz klienta prostego
  • przy braku połączenia, przełączenie się na klienta piszącego do lokalnej bazy
  • włączenie podświetlenia czytnika (co się bardzo przydało w nocy)
Błędy:
Brak porządnych testów i sprawdzenia punktów.
Połączenie głównego komputera przez wifi. Połączenie było ale wcześniej nie przetestowałem tego, problem z poprawnym działaniem tego połączenia ujawnił się już na starcie gdy startowałem 15 osobową grupę a czasy startu między pierwszym a ostatnim zawodnikiem były kilku sekundowe (co nie powinno mieć miejsca), problem pojawił się również  przy "odbijaniu" na punkcie kontrolnym (który był równocześnie metą) dochodziło do sytuacji że zawodnicy musieli odbijać się dwu lub trzy krotnie bo czasy nie chciały "przejść" na serwer.

Po tej edycji nauczyłem się , że przed rozpoczęciem maratonu należy wykonać testy na każdym punkcie pomiaru czasu, testy polegające na zasymulowaniu startu oraz przyjazdu dużej grupy zawodników (odbijanie raz po raz dyskietek).

 Była również strona napisana w WebFormsach wyświetlająca zawodników i ich wyniki, wadą tej strony było to że nie było filtrów oraz samo odświeżenia.

Wersja numer 3 rok 2015

Kolejna wersja, bardzo dużo zmian, zastosowanie strony internetowej do wyświetlania wyników, interfejs lokalny został również zmieniony nastawiony bardziej na zarządzanie bazą. Dzień przed rozpoczęciem maratonu straciłem źródła strony (dysk mi z laptopa wypadł i uszkodził się definitywnie).
Zmiana lokalizacji imprezy z Radlina do Mszanej.
Tę wersję najmniej pamiętam widzę po menu że pewne zmiany zaszły



Największa zmiana dotyczyła odczytu z dyskietek, odbywało się to za pomocą wątków, komunikacja z bazą również była na osobnym wątku.
Struktura plików została zastąpiona bazę lokalną, dodatkowo była baza globalna.
Odcinki były 100 km jeden punkt mniej na trasie. Do tej pory odcinki były 150 km.
Start zawodników pozostał bez zmian.
Jak wspominałem była wersja webowa ale źródeł brak.
Podział na klienta głównego i ograniczonego pozostał.

Wersja numer 4 rok 2016

W tej wersji po raz pierwszy część webowa napisana została w ubogim MVC.

Klient ograniczony
 Klient zarządzający bazą:

Kilka opcji zostało dodane w roku 2017 i w tymże roku został ten klient przebudowany i pozmieniany, nie posiadam klienta z 2016 roku.

Strony zbudowanej w MVC również ale nie była to skomplikowana  miała wyświetlić tylko wyniki.

Wersja numer 5 rok 2017 

Ta wersja różniła się tym, że została ponownie napisana od nowa (to chyba nie różnica skoro każda wersja była nowa), po raz pierwszy dodałem rejestracje zawodników, historię i listy startowe i wiele innych rzeczy.
Ta wersja to było już bardziej świadome wykorzystanie MVC.

Z powodu przejęcia całości maratonu ,  strona musiała zostać zbudowana na nowo, strona posiadała:
  • Rejestracje użytkowników,
  • Listę zarejestrowanych,
  • Opis trasy z wykorzystaniem GoogleMaps oraz znaczników,
  • Historie poprzednich wersji,
  • Statystyki wszystkich edycji,
  • Statystyki bieżącej edycji,
  • Stronę aktualności, opłat, kontakt.
Błąd z podwójnym odbiciem zawodnika na punkcie został wyeliminowany.
Aplikacja desktopawa została podzielona na klienta głównego z prostym zarządzaniem bazą (wywoływaniem procedur) i startem oraz klienta uproszczonego tylko do odczytu danych z czytnika i przesyłaniu rejestracji do globalnej bazy danych.
 Baza z powodu powyższych zmian oraz wprowadzenia startu z list została ponownie mocno zmodyfikowana (napisana odnowa).

Dodatkowo został utworzony program napisany w WPF (chciałem zobaczyć co to jest, bez wzorca MVVM), aplikacja służy do rejestracji zawodników w biurze maratonu (prosty formularz).



Wersja numer 6 rok 2018

W końcu nie pisze na nowo.
A jedynie poprawki związane z dodaniem nowego dystansu oraz dodanie Entity Frameworka do desktopa.
A strona wygląda tak: www.maraton24.hw7.pl

Wersja numer 7 2019

10 edycja z tego powodu jest plan na pisania strony oraz części programu na nowo.

Plany:
Dodanie do strony panelu administratora wraz logowanie.
Część napisana w WPF zostanie wrzucona do tego panelu.
Zarządzanie bazą będzie przerzucone prawdopodobnie również na weba, start zawodników, tworzenie list startowych (z automatyzowane bez używania managmenta).

Podsumowanie

Wersja nr pięć okazała się najlepiej zbudowaną i przemyślaną. Przejście na MVC pozwoliło na zbudowanie całkiem dobrej strony (funkcjonalnej ,gorzej z wyglądem).
Problemem pozostały nie które klasy sięgające drugiej wersji, co powoduje mały bałagan w aplikacji (chodzi o desktopa).
Baza jest dobrze zbudowana, procedury min. generacji list, rejestracji zawodników, .... są sprawdzone i działają bardzo dobrze.
Dodatkowo, co się tyczy także weba,  do połączenia z danymi jednocześnie używany jest SQLCommed i Entity Framework, to zostanie zmienione w następnej wersji, stawiam na EF-a.