Szkolny ślad

Piotr Kuchowicz - Zespół Szkół Elektrycznych w Gorzowie Wlkp

Przykładowe dane logowania- login: uczen123hh hasło: uczen1pass88

Link do prezentacji na temat aplikacji


Link do repozytorium GitHub
Link do aplikacji na android (pakiet instalacyjny apk)
Link do aplikacji na linux (plik wykonywalny w zipie)

Prezentacja logowania za pomocą kodu QR:

Prezentacja sprawdzania obecności z wykorzystaniem NFC:

Ogólna prezentacja systemu:

Schemat wykorzystanych technologii:

Opis projektu

Na jakie potrzeby/problem odpowiada Wasze rozwiązanie? W jaki sposób wpisuje się w temat Hack Heroes 2023?

Mój projekt odpowiada na potrzebę innowacji systemów informatycznych w oświacie. Zastosowanie systemów informatycznych w szkole samo w sobie jest automatyzacją, ale mój projekt idzie krok dalej. Jako pokaz możliwości dalszej automatyzacji mój projekt posiada automatyczne logowanie za pomocą kodu QR , które znacznie przyśpiesza logowanie nauczyciela przed lekcją, oraz zwiększa bezpieczeństwo, ponieważ nauczyciel nie musi nigdzie wpisywać swoich danych do logowania. Aplikacja zawiera też możliwość sprawdzenia obecności za pomocą tagów NFC, co znaczne przyśpiesza sprawdzanie obecności na lekcji.

Najbardziej znanymi dziennikami na rynku są Vulkan i Librus. Ja używałem tylko Librusa i od pierwszej klasy podstawówki do teraz praktycznie się nie zmienił. Według mnie brakuje w tej dziedzinie konkurencji, która napędzałaby innowację. Moja aplikacja wyróżnia się wieloma atutami:

Opisz działanie Waszej aplikacji/narzędzia

Moja aplikacja jest elektronicznym dziennikiem przeznaczonym dla szkół. Ma funkcje podobne jak papierowy odpowiednik - pomóc nauczycielom w zręcznym prowadzeniu lekcji, uczniom i rodzicom zapewniać szybki dostęp do informacji, a administracji spokój ducha i sprawne funkcjonowanie szkoły. Elektroniczny dziennik powinien być sam w sobie nie widzialny dla użytkownika - nie powinien wymagać objaśnień ani nauki, a powinnien być intuicyjny i prosty w obsłudze. Oto funkcjolaność mojego programu:

Jak widzicie dalszy rozwój Waszego rozwiązania?

Obecny stan projektu jest wynikiem kompromisu pomiędzy priorytetami rozwoju i dostępnym czasem. Podstawowe funkcje, takie jak dzielenie ocen na semestry, zostały odłożone na później, aby umożliwić implementację bardziej innowacyjnych funkcji, takich jak np. sprawdzanie obecności przez NFC. Pierwszym krokiem do wdrożenia była by implementacja podstawowych funkcji, których w moim projekcie brakuje, oraz narzędzii importu danych , które usprawniają wdrożenie systemu. W dalszym rozwoju projektu mogą pomóc szkoły, które są w stanie przesyłać opinię zwrotną podczas używania aplikacji.

Docelowo chciałbym, żeby mój system mógł radzić sobie również z placówkami operującymi wyłącznie online. Wymaga to implementacji bardziej dynamicznej komunikacji z nauczycielami w formie czatu podczas lekcji oraz obsługi spotkań wideo i audio. Również proces instalacji systemu powinien zostać usprawniony - nawet niezbyt technicznie uzdolniony administrator szkoły powinien być w stanie zainstalować i skonfigurować system na lokalnym serwerze, za to ja mogę oferować rozwiązanie placówkom, które potrzebują systemu zarządzanego zewnętrznie.

Dużo starań włożyłem w to aby nie kopać pod sobą dołków. Wszystkie elementy programu starałem się pisać w taki sposób żeby dodanie nowych funkcji było bardzo proste.

W jakich językach programowania, jakich technologiach powstała aplikacja/narzędzie?

Schemat zastosowanych technologii

Frontend jest zrobiony na podstawie języka programowania Dart oraz biblioteki Flutter. Jest to zestaw technologii rozwijany przez Google, wspierający wiele platform.

Backend składa się z kilku części: dane są przechowywane w relacyjnej bazie danych PostgreSQL. Dane są głównie przesyłane przez API GraphQL postawione na silniku Hasura. Hasura zajmuje się także pozwoleniami nadawanych na poziomie każdej krotki (Row level security), dzięki czemu aplikacja jest zabezpieczona przed wyciekami.

Uwierzytelnianie jest zaimplementowane na osobnym serwisie napisanym w TypeScriptie uruchamianym w środowisku Node. Wykorzystuje framework NestJS i konstruktor zapytań Kanel oraz działa jako REST API. Backend i Frontend są połączone za pomocą automatycznie generowanego kodu klienta, dzięki czemu mamy pewność, że nie będzie problemu z przekazem między klientem a serwerem. Hasła w bazie danych są przechowywane jako hash bcrypt, dzięki czemu mamy pewność, że hasła są niedostępne dla złych aktorów.

Jakie widzicie zagrożenia/ryzyka dla Waszego rozwiązania?

Największym zagrożeniem jest brak chęci wdrożenia systemu przez placówki oświatowe. Za moim rozwiązaniem nie ma żadnej firmy oferującej wsparcie ani historii używania w innych szkołach. Wiele szkół nie chciałoby ryzykować zmianą systemu, a wiele innych nawet o tym nie decyduje i system ma narzucony odgórnie od urzędu miasta. W moim systemie brakuje również spisów tematów z popularnych podręczników, które pomogłyby w prowadzeniu lekcji, więc mój projekt potrzebowałby pomocy ze strony wydawnictw.

Dlaczego akurat Wy powinniście wygrać?

Wygrana w hackathonie pozwoliłaby mi na dalszy rozwój systemu, oraz nadałaby mojemu programowi wiarygodności, która zachęciłaby szkoły do jego wdrożenia.

Budowa tego projektu była dla mnie wielkim wyzwaniem. Nie miałem dużego doświadczenia z zastosowanymi w nim technologiami - we Flutterze nigdy nie zgłębiałem się dalej niż do przysłowiowego hello world'a, Hasurę zacząłem się uczyć dopiero po rozpoczęciu projektu i pierwszy raz użyłem w projekcie GraphQL oraz OpenAPI. Dojazdy do szkoły (które dzięki często opóźnionym pociągom potrafiły się bardzo przedłużać) spożytkowałem na czytanie dokumentacji na temat bibliotek i technologii, które planowałem użyć w systemie, a podczas wolnych lekcji rysowałem w zeszycie schematy baz danych.

W projekcie starałem się używać najnowszych wersji narzędzi programistycznych (tzw. bleeding edge) i często mierzyłem się z problemami, których rozwiązania nie są jeszcze dostępne w Internecie. W trakcie programowania znalazłem nawet błąd w samym języku programowania Dart, którego używałem do frontendu mojej aplikacji.: ( dart-lang/sdk/issues/53961 i dart-lang/sdk/issues/53828 ). Mam nadzieję, że z natury open-source mój projekt pomoże innym którzy napotkają podobne trudności.

Zastosowałem też technologie nietypowe dla dziennika szkolnego: NFC do sprawdzania obecności i kody QR do logowania. Wpadnięcie na pomysł architektury, która pozwala na bezpieczne logowanie QR, którego nie da się zkompromitować, zajęło mi dużo czasu. Również wymyślenie architektury, która pozwala na bezpieczne tagi NFC, których nie da się sklonować, wymagała czytania dokumentacji technicznej różnych technologii i protokołów używanych przez NFC (niestety nie zdążyłem zaimplementować wszystkich zabezpieczeń).

Słowa końcowe

Udział w hackathonie był dla mnie wspaniałym doświadczeniem. Podczas tworzenia systemu nauczyłem się wiele nowych technologii, zarządzania moim czasem i planowania długoterminowych projektów. Dużymi krokami zbliża się dla mnie matura, ale planuję kontynuować rozwój projektu Szkolny Ślad w przyszłości (linki na stronie są stanem projektu z dnia zakończenia hackathonu). Mam nadzieję, że będę mógł się pochwalić tym, że mój projekt jest używany w szkołach w całej Polsce.