Giter VIP home page Giter VIP logo

sea-units-monitoring's Introduction

Sea Units Monitoring

CircleCI

Informacje ogólne

Aplikacja ta powstała z jednej strony w celach edukacyjnych, a z drugiej (a może przed wszytkim) na potrzeby konkursu zorganizowanego przez Przemysława Bykowskiego oraz Ośrodek Badawczo-Rozwojowy Centrum Techniki Morskiej S.A.: https://bykowski.pl/wez-udzial-w-konkursie-programistycznym-monitorowanie-jednostek-morskich/


[EDIT] Aplikacja zyskała uznanie jury i zajęła 🏆 5 miejsce https://bykowski.pl/wyniki-konkursu-monitorowanie-jednostek-morskich/

Została także uhonorowana dodatkową nagrodą społeczności 😃 https://www.youtube.com/watch?v=zauJmUWArxQ


Zadaniem uczesników konkursu było stworzenie aplikacji do śledzenia jednostek morskich w czasie rzeczywistym.

"Wykorzystując dane pobierane z AIS utwórz aplikację, która będzie wyświetlała informacje na temat jednostek morskich na mapie."

Oceniana była:

  • Jakość kodu (max 10 pkt)
  • Pomysł (max 10 pkt)
  • Wykorzystane technologie (max 10 pkt)

Korzystając z podwalin aplikacji, którą Przemek stworzył w czasie swojego live'a na kanale Youtube (https://www.youtube.com/channel/UCjWnQvpQgSRLeDEYQC0ZuLg) rozbudowałem aplikację o następujące funkcjonalności:

  1. Wyświetlanie na mapie jednostek morskich konkretnego typu.
    • Domyślnie przy odpytaniu endpointu "/app" wyświetlamy pustą mapę (pierwotnie wyświetlały się wszystkie jednostki każdego typu ale pobieranie z API trwało wieczność, więc w celach deweloperskich kod za to odpowiadający został zakomentowany)
    • Wybieramy z listy rozwijanej rodzaj statku, które chcemy zobaczyć. Do wyboru są jednostki rybackie, wojskowe, pasażerskie, towarowe, tankowce i inne.
  2. Automatyczne pobieranie nowego tokenu do Barentswatch API.
    • Pobrany token jest ważny tylko przez godzinę. Przy pisaniu kodu i testowaniu aplikacji uciążliwe było generowanie nowego kodu ręcznie, więc funkcjonalność powstała głównie z potrzeby chwili ;)
  3. API pogodowe - OPENWEATHER (https://openweathermap.org/)
    • Dodałem api pogodowe w celu pobrania i wyświetlenia dla każdego statku aktualnej pogody temperatury, predkości wiatru oraz ikony pogodowej.
  4. Alert wojenny!
    • Gdy w pobliżu danego punktu (konkretnie w odległości do 100km od miasta Trondheim) pojawi się statek wojenny (kod 35) wysyłany jest alert na MAILA, a dane jednostki zapisywamne są do bazy danych.
  5. Warstwa UI
    • Nadałem wygląd aplikacji aby była przyjemniejsza dla oka
    • Zamieniłem standardowe znaczniki na łodzie wikingów ;)
  6. Wyświelanie linii do punktu docelowego.
    • funkcjonalność dodana przez Przemysława Bykowskiego
    • uwaga, ze wzlgędu na wykorzystany miesięczny limit połączenia do positionstack aktualnie dane nie sa pobierane i każdy statek wskazuje pozycje 0,0.

Technologie

  • Java 11
  • Spring Boot
  • Maven
  • Hibernate & Spring Data JPA
  • Java Mail Sender
  • MySQL
  • H2
  • Jasypt (szyfrowanie haseł)
  • Liquibase
  • Docker
  • Thymeleaf
  • HTML
  • CSS
  • JS
  • Lombok
  • CircleCi CI/CD
  • Heroku
  • Cleardb

Demo aplikacji

https://sea-units-monitoring.herokuapp.com/app

Aplikacja została umieszczona na heroku. Niestety ze względu na to, że jest to darmowy plan, połączenie często trwa dosyć długo. Może wystepować też problem z maksymalną ilością połączeń do bazy danych (przy pobieraniu tokena oraz przy wyświetlaniu jednostek militarnych :( )

Edit: Znalazłem przyczynę wyrzucania błędu 500, przy wyborze jednostek militarnych: Google zablokowało tymczasowo maila (tak się dzieje gdy podejrzewają o spam...) "org.springframework.mail.MailSendException: Failed messages: com.sun.mail.smtp.SMTPSendFailedException: 550 5.4.5 Daily user sending quota exceeded." Przepraszam testujących aplikację. Rozwiązania problemu: inny adres mailowy, poczekać 24h lub wyłączyć wysyłanie maili przez aplikację. Tymczasowo przychylam się ku trzeciemu rozwiązaniu.

Docker Image

Aplikację można także pobrać z mojego DockerHuba. Przetestowałem lolaknie ale w razie problemów z uruchomieniem proszę o kontakt.

docker pull -a kristovski/sea-units-monitoring
docker run -d -p 8080:8080 -e "SPRING_PROFILES_ACTIVE=prod" kristovski/sea-units-monitoring:latest

localhost:8080/app

Screenshots

Wygląd główny:

Wybieranie typu jednostki:

Wyświetlanie informacji o statku, położeniu, warunkach pogodowych:

Przychodzące maile:

Mail z ostrzeżeniem:


You can find me on LinkedIn

sea-units-monitoring's People

Contributors

kristovski avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.