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:
Jest wieloplatformowa - dzięki frameworkowi flutter działa natywnie na
urządzeniach z systemem Android, iOS, Windows, MacOS oraz jest wstanie
działać w przeglądarce i w systemach wbudowanych.
Ma możliwość tłumaczenia na inne języki - aktualnie ze strony
ucznia do wyboru jest język angielski, polski i ukraiński.
Jest bezpieczna - uwieżytelnianie za pomocą JWT, podzielenie na role i
weryfikacja dostępu na poziomie krotki zapewnia bezpieczeństwo poufnych
danych zawartych w systemie.
Jest open-source - kod jest otwarty i dostępny dla każdego, dzięki czemu
można go zmieniać ku swoim upodobaniom.
Jest darmowa - szkoły mają możliwość używania systemu bez płacenia
wielo-tysiąco-złotowych subskrypcji za system, który praktycznie się nie
zmienia.
Jest zoptymalizowana - nawet duże placówki mogą z łatwością prowadzić
system na energooszczędnych komputerach lub niedrogich serwerach w
chmurze a aplikacje dla nauczyciela i ucznia działają płynnie nawet na
przesatrzałych komputerach.
Jest oparta na sprawdzonych technologiach - rozwiązania zastosowane w
moim projekcie są szeroko użwane w tego typu systemach, zapewniają
pewność działania, znakomitą skalowalność oraz pewność, że będą
wspierane przez lata.
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:
Wygląd oparty na zasadach projektowania Material Design 3 pozwala na
łatwe i intuicyjne korzystanie z dziennika. Trzymanie się zasad md3 wraz
z flutterem zapewnia nowoczesny wygląd oraz dostępność dla osób z wadami
wzroku (wsparcie dla wysokiego kontrastu i ciemnego trybu, wsparcie dla
powiększonego rozmiaru tekstu) oraz dla osób używających technologi
asystujących (czytniki ekranu, alternatyne sposoby nawigowania
komputera). Wszystkie funkcje programu są rówinież dostępne na
telefonie, więc w razie problemów w szkole (np. braku prądu lub
internetu) nauczyciel i administrator może korzystać z telefonu.
Proces uwieżytelnianinia jest napisany w bezpieczny i solidny sposób.
Nazwy użytkownika są osobne od imion i nazwisk, więc szkoła może używać
już istniejącego sposobu nazywania kont (np. ten sam używany w
skrzynkach email lub na laptopach). Istnieje możliwość nadawania haseł
pojedynczego użytku które użytkownik musi zmienić po zalogowaniu, a nowe
hasło jest bezpiecznie zawszyfrowane w taki sposób, że nawet osoba z
dostępem do bazy nie jest w stanie go odczytać. Istnieje też możliwość
tworzenia kont, które nie mają loginu - mogą być użyteczne do np.
układnaia planów gdy nie ma jeszcze potrzeby logowania się danych
użytkowników.
Uproszczona nawigacja po aplikacji minimalizuje cofanie się i
przemieszczanie między elementami aplikacji. Możliwość kliknięcia na
lekcje na planie lekcji albo segment panelu głównego z aktualną lekcją i
planem na dziś pozwala na zwinniejsze używanie aplikacji.
Starannie złożone panele główne minimalizują czas spędzony na szukaniu
tego, czego potrzebujemy - Uczeń po wejściu na ekran główny ma wgląd do
następnych sprawdzianów, lekcji na dzisiaj (lub w weekend - na
poniedziałek) i aktualnie przeprowadzianiej lekcji. Na panelu lekcji
uczeń może zobaczyć zaplanowane wydarzenia na daną lekcje, oceny,
obecność oraz alert jeżeli jeszcze nie zatwierdził swojej obecności.
Ekran ocen jest przejrzysty i funkcjonalny - po najechaniu na ocenę
widać jej szczegóły, tabelka jest podzielona na przedmioty dla ucznia i
na pojedynczych uczniów dla nauczyciela.
Plan lekcji jest przejrzystą tabelką, prostą do odczytania na
urządzeniach mobilnych jak i na komputerze czy w przeglądarce. Na planie
możemy klikać w lekcje aby dowiedzieć się o nich więcej a jest on
zsynchronizowany z rospiską w bazie danych, więc jest on natychmiast
aktualizowany przy zmianie lekcji lub skróceniu godzin lekcyjnych.
Kalendarz jest dynamicznie generowany i przedstawia wszystkie
wydarzenia. W przeciwieństwie do innych dzienników
jesteśmy w stanie w aplikacji spojrzeć na cały miesiąc i
przeglądać zbliżające się wydarzenia.
System wiadomości w mojej aplikacji był elementem nad którym spędziłęm
najwięcej czasu. Jest bardzo dopracowaną częścią mojego systemu. Pozwala
na wysyłanie tej samej wiadomości do grupy i do pojedynczej osoby.
Posiada przejrzysty interfejs, który pozwala na użycie wszystkich funkcji bez
wprowadzania użytkownika w błąd. Wiadomości przychodzą natychmiastowo do
adresta gdy ten ma otwarte okno aplikacji. Jest to też prawdopodobnie
najbardziej skomplikowana struktura w bazie danych programu.
Aplikacja zawiera ekran ze spisem wszystkich licencji używanych biblotek
- wymóg w wielu systemach dystrybucji aplikacji oraz w aplikacjach
używanych w instytucjach rządowych.
Administrator ma możliwość edytowania oraz dodawania kont i resetowania
hasła. Może przydzielać wiele użytkowników na raz do grup.
Administrator ma też możliwość edycji czasu trwania się lekcji.
Konta w aplikacji są zażądzane systemem grup - Użytkownicy mogą być
przydzielani do grup w zależności od ich roli w placówce. Jeden
użytkownik może należeć do wielu grup, np. klasa 5c dla
przdmiotów realizowanych wspólnie z klasą i klasa 5c I dla
przedmiotów które realizuje tylko jedna połowa klasy. Grupy mogą też być
przydzialena nauczycielom w zależności od typu przedmiotu jakich uczą (np.
matematycy) co w przyszłości pomoże z automatycznym układaniem
planu lekcji.
System pozwala uczniom na wstawienie sobie obecności za pomocą aplikacji
- w założeniu na każdej ławce jest niedroga naklejka NFC, a uczeń
skanując ją za pomocą aplikacji przyspieszy sprawdzanie obecności i może
być pewny, że nie zostanie pominięty.
Sprawdzanie obecności przez nauczyciela jest zrobione tak, żeby trwało
jak najkrócej - osoby, które już mają obecność ze względu na
zeskanowanie naklejki NFC mają wpisaną obecność, zmiana stanu z obecnego na nieobecny to jedno klinknięcie w
komórke w tabelce a inne stany są ukryte w menu obok - ułatwia to
sprawdzanie obecności na telefonach z małym ekranem.
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?
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.