Family Network część 2

Oto kolejny wpis o projekcie drzewa genealogicznego. Dziś trochę więcej o samej strukturze projektu i w jaki sposób przejść od koncepcji do planu działania i wreszcie do samej implementacji.

Domowe projekty to zwykle dobry sposób aby nauczyć się nowych technologii lub poprsotu nabyć jakieś nowe umiejętności. Co prawda nikt nam za nie nie płaci, ale jeśli napiszemy coś naprawdę dla nas przydatnego i rozwiązującego jakiś problem to tak naprawdę oprócz umiejętności coś faktycznie na tym zyskamy. Drzewo które tu opisuję jest takim przykładem z życia wziętym. Podczas pewnej wizyty u krewnych, jaką odbyłem kilka lat temu usłyszałem opowieść mojego wuja o spisywanych przez niego losach tamtej części rodziny. Zaintrygowany poprosiłem o kopię. Wuj był starszą osobą wychowaną dawno przed nadejściem cyfrowego świata, wszystkie swoje zapiski prowadził więc ręcznie. Dostałem zatem je w formie kserokopii. Było tam dużo informacji o życiu kilku pokoleń bardzo rozległej gałęzi rodziny. Niektóre wspomnienia sięgały nawet XIX wieku. Historia jest już sprzed kilku lat, wuj obecnie nie żyje, i te nietrwałe zapiski to prawdopodobnie ostatnia pozostałość niektórych wspomnień i informacji. Dotarła wtedy do mnie dość oczywista prawda, że przeszłość szybko znika wraz z nietrwałymi jej dowodami i ludzką pamięcią. No ale do czego innego służą technologie informatyczne jak nie do przechowywania i przetwarzania informacji? Wyznaczyłem więc sobie następujące cele:

  • Przenieść na format cyfrowy wszelkie rodzinne kroniki, zapiski oraz pamiątkowe zdjęcia
  • Stworzyć miejsce do przechowywania tych informacji
  • Spróbować odtworzyć drzewo genealogiczne rodziny aby moje i następne pokolenia mogły poznać swoje korzenie a także dalszych, żyjących krewnych.

Mamy już więc konkretne cele i tzw „korzyść biznesową” do osiągnięcia. Teraz warto się zastanowić jak to osiągnąć. Normalnie, kiedy chcemy rozwiązać tego typu problem powinniśmy unikać wyważania już otwartych drzwi i poszukać dostępnego narzędzia pasującego do naszych potrzeb. Na wiele problemów istnieją już gotowe rozwiązania, nie ma więc sensu tracić czas i środki na zrobienie kolejnej wersji czegoś co możemy zaadoptować. Zastanówmy się więc na szybko czy w tym wypadku też tak jest. Tutaj dwie kwestie wchodzą w grę – pierwszą jest dość wrażliwy charakter danych jakie będziemy przechowywać. Żyjemy w czasach gdzie troska o bezpieczeństwo naszych danych osobowych jest bardzo ważnym czynnikiem, a jakby nie patrzeć chcemy przechowywać dane osobowe wielu naszych krewnych. Zależy nam więc na tym aby mieć jak największą kontrolę nad nimi i nie udostępniać ich obcym organizacjom.
Druga sprawa to sama struktura drzewa. Kiedy spojrzymy na typowe projekty drzew genealogicznych to można łatwo zauważyć, że mają one na celu pokazać rozrost jakiegoś rodu zaczynając od jakiejś pojedynczej pary przodków będących korzeniem drzewa i pokazać jej przyszłych dziedziców. Ewentualnie wersja w drugą stronę kiedy mamy młodą parę i chcemy pokazać zawiłości ich rodów sięgające wstecz kilka pokoleń. Ogólnie więc gdzieś zawsze jest jakiś centralny punkt, czyli korzeń drzewa. Co jednak jeśli chcemy pokazać powiązania bardzo wielu rodzin? Które będą się mogły zmieniać w czasie, bez jednej centralnej pary? Z każdym małżeństwem dodajemy tak naprawdę kolejne poddrzewo. W rezultacie bardziej interesuje nas rozłożysta struktura sieci zamiast drzewa.
Mając te wytyczne w głowie możemy przyjrzeć się dostępnym na rynku rozwiązaniom. No i tutaj przyznam, że nie udało mi się znaleźć niczego spełniającego powyższe kryteria. Obecny rynek wspiera raczej rozwój dużych usług opartych o chmurę co oznacza przekazywanie danych zewnętrznym podmiotom. Mniejsze aplikacje są zwykle dość niszowe albo ograniczone. Mi w każdym razie nie udało się znaleźć niczego co pasowało by do założeń.
Skoro nie możemy użyć niczego gotowego pozostaje nam napisać coś samemu.

Oto jakie ważne funkcjonalności powinna posiadać nasza aplikacja:

  • Baza danych do przechowywania wprowadzanych informacji
  • Kontrola tego kto ma dostęp do drzewa – nie chcemy upubliczniać naszych danych. Potrzebny jest system kont i weryfikacja uprawnień który ograniczy grono odwiedzających jedynie do zatwierdzonych przez nas osób.
  • Mechanizm dodawania treści – czyli jakiś formularz w który będziemy wpisywać dane
  • Wizualizacja drzewa – chcemy aby powiązania między dodanymi krewnymi były czytelne i łatwe do zrozumienia
  • Możliwość zamieszczania plików i zdjęć

Przyjrzyjmy się tym punktom bliżej

1 . Baza danych.


W poprzednim artykule opisałem jak postawić relacyjną bazę danych MySQL. W tym przypadku również możemy z niej skorzystać. Będziemy potrzebować kilku tabel. Tabela do przechowywania danych o użytkownikach (users), tabela do przechowywania węzłów naszej sieci, czyli krewnych (node) i tabela do przechowywania połączeń między tymi węzłami (relation). Poniżej skrypt w SQL do utworzenia takich tabel.

CREATE TABLE users (
user_id int(11) NOT NULL,
user_name varchar(50) COLLATE utf8_bin NOT NULL,
user_pw varchar(255) COLLATE utf8_bin NOT NULL,
create_time date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

CREATE TABLE users (
user_id int(11) NOT NULL,
user_name varchar(50) COLLATE utf8_bin NOT NULL,
user_pw varchar(255) COLLATE utf8_bin NOT NULL,
create_time date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

CREATE TABLE relation (
rel_id int(11) NOT NULL,
node1_fk int(11) NOT NULL,
node2_fk int(11) NOT NULL,
type int(11) NOT NULL,
create_time date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

2. Moduł rejestracji kont i logowania

Chcemy mieć możliwość kontroli nad tym kto może odwiedzać naszą stronę, dodawać nowe treści itp. Potrzebujemy więc funcjonalności dzięki której użytkownicy będą mogli rejestrować się i logwać do systemu. Obecnie większość dużych frameworków ma gotowe rozwiązania w tym temacie. Ponieważ jednak projekt ten ma nauczyć nas pewnych podstaw warto napisać ją zupełnie od zera. W skrócie wygląda to tak. Kiedy ktoś trafia na naszą stronę powinien zobaczyć najpierw jakąś ogólną stronę powitalną z formularzem logowania. Nawet jeśli zna odsyłacz bezpośrednio do innej podstrony w naszym systemie to powienien być tutaj automatycznie odsyłany jeśli jeszcze się nie zalogował. Po podaniu przez niego loginu i hasła dane te po uprzednim „oczyszczeniu” powinny być porównane z informacją wyciągniętą z bazy danych. Jeśli weryfikacja wypadnie poprawnie zapisujemy w sesji informację, że użytkownik jest zalogowany i pozwalamy mu przejść dalej. Na samym formularzu logowania powinien też być odsyłacz do formularza rejestracji aby użytkownik mógł stworzyć nowe konto do późniejszego zatwierdzenia przez administratora.

Jest to bardzo powszechna funkcjonalność więc łatwo znaleźć na sieci tutoriale w jaki sposób można ją napisać. Oto kilka przykładowych wyników z googla:

https://www.tutorialrepublic.com/php-tutorial/php-mysql-login-system.php
https://www.tutorialspoint.com/php/php_mysql_login.htm
https://www.tutorialspoint.com/php/php_mysql_login.htm

3. Formularze dodawania informacji

To możemy napisać w php wykorzystując wiedzę z punktu 2.

4. Wizualizacja czyli interfejs użytkownika

To w sumie najbardziej kluczowy element tego projektu. Chcemy mieć ładne i czytelne drzewo, które będzie się automatycznie tworzyć na podstawie informacji z bazy danych. Jak dodamy nowego krewnego nie chcemy na nowo ustalać gdzie powinien się pojawić na ekranie. Program ma wiedzieć jak zrobić to za nas. Ten punkt rozwinę w jednym z następnych wpisów i pokażę jak można wykorzystać do tego istniejące biblioteki javascript.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *