1. Raport końcowy

1.1. Implementacja bazy danych

(utworzenie bazy, implementacja obiektów) (realizacja struktury pustej bazy; w oparciu o diagramy ERD i SQL)

Projekt bazy danych

Projekt bazy danych uległ kilkukrotnym modyfikacjom, które jednak nie wpłynęły na ogólną koncepcję bazy.
W trakcie implementacji dodane zostały miedzy innymi: tabela Votes, służąca do przechowywania danych o głosach na albumy, kolumny służące do geolokalizacji zdjęć, czy dodatkowe pole 'accepted' w tabeli Comment.

Tworzenie bazy danych

Projekt został skonfigurowany tak, że możliwe było łatwe stworzenie i przebudowanie bazy danych w razie zmian oraz załadowanie opcjonalnych danych startowych do bazy. Możliwe to było dzięki stworzeniu pliku BuildInitializer, który był wykonywany podczas budowania projektu. Uruchamiał on skrypt sql (patrz link niżej) oraz ładował dane do bazy. Klasa BuildInitializer była wykorzystywana na etapie tworzenia aplikacji. Gdy zachodziły zmiany w bazie, pozostali członkowie zespołu uruchamiali metody tej klasy, aby zaktualizować strukturę bazy danych. Obecnie jest ona wyłączona (wykomentowane tworzenie tabel oraz uzupełnianie danymi testowymi, w razie potrzeby można odkomentować wymagane metody). Aby uruchomić aplikację należy najpierw utworzyć bazę danych o następujących opcjach:

Nazwa=pastexplorer
Port=5432
User=postgres
Hasło=qwe

oraz wykonać wspomniany wyżej skrypt SQL:

Skrypt sql do tworzenia bazy danych: create_tables.sql

Do działania aplikacji nie są wymagane żadne początkowe dane. Wszystkie dane są wprowadzane przy użyciu formularzy.

1.2. Zdefiniowanie interfejsów do prezentacji, edycji i obsługi danych

Poniżej przedstawione zostały formularze służące do wprowadzania danych przez użytkowników, w większości związane z dodawaniem przez nich nowych treści (albumów, zdjęć) do serwisu.

Rejestracja użytkownika

Logowanie użytkownika

Tworzenie albumu

Dodawanie zdjęcia do albumu

1.3. Zdefiniowanie dokumentów do przetwarzania i prezentacji danych

Poniżej przedstawione zostały widoki służące do wyświetlania danych (albumów, zdjęć, itp.) stanowiących treść serwisu tworzoną przez użytkowników.

Strona główna serwisu

Przeglądanie albumu

Przeglądanie profilu użytkownika

Przeglądanie albumów

Rankingi albumów

1.4. Zdefiniowanie panelu sterowania aplikacji

Poniżej przedstawione zostały formularze pozwalające użytkownikowi na zarządzenie jego kontem oraz zawartością dodaną przez niego do serwisu, np. albumami i zdjęciami.

Panel użytkownika

Zarządzanie albumami

Ustawienia konta/profilu użytkownika

Zmiana hasła do konta

Zarządzanie albumem

1.5. Zdefiniowanie makropoleceń dla realizacji typowych operacji

Do mapowania ORM w projekcie wykorzystaliśmy framework NHibernate. Dokonuje on mapowania obiektów na tabele bazy danych.

Nasze podstawowe polecenia zostały podzielone na kategorie: Album, User, Photo (operacje na albumach, na kontach użytkownika oraz na zdjęciach). Wykorzystano wzorzec Repository do implementacji dostępu do bazy danych. Każde repozytorium obiektów (UserRepositor, AlbumRepository, PhotoRepository) posiada podstawowe funkcje:

  • GetById - zwraca obiekt o danym ID
  • Create - zapisuje obiekt w bazie danych
  • Delete - usuwa obiekt z bazy danych
  • Update - aktualizuje obiekt w bazie danych

Wszelkie zapytania do bazy danych wykonywane są przy użyciu języka HQL (obiektowy język zapytań do bazy danych dla Hibernate, podobny w składni do SQL). Dodatkowo w pewnych przypadkach, gdy nie potrafiliśmy zapisać pewnych zapytań w języku HQL (z powodu małej znajomości tego narzędzia) wykorzystaliśmy czysty język SQL.

Ponadto każde repozytorium posiada własne dodatkowe funkcje (np. AlbumRepository - AddComment, Subscribe itd.) NHibernate standardowo zapewnia funkcje: Create, Delete, Update które przyjmują pewien obiekt. Dodatkowe polecenia wymagają użycia HQL lub SQL, np.
Pobranie albumu po id:
session.CreateQuery(„from AlbumModel where Id = :id”).SetParameter(„id”, id).UniqueResult<AlbumModel>();

Dla pozostałych poleceń zapytania wyglądają analogicznie, różnią się tylko typem obiektu.

1.6. Uruchamianie i testowanie aplikacji

Początkowo każdy członek zespołu uruchamiał i testował aplikację lokalnie na swoim komputerze. Gdy zaimplementowano większość wymaganych funkcjonalności aplikacja została uruchomiona na serwerze i testowana zdalna przez każdego członka zespołu. Pozwoliło to operować na wspólnych danych. Testy były wykonywane ręcznie.

1.7. Wprowadzanie danych

Aplikacja nie wymaga dodatkowych danych do prawidłowego funkcjonowania. Dane są wprowadzane przy użyciu formularzy: tworzenie kont, albumów, wysyłanie zdjęć itp. Nie jest zalecana inne metoda, np. ręcznego wprowadzania danych do bazy oraz tworzenia katalogów, gdyż można naruszyć integralność danych. W przypadku użycia formularzy aplikacja zadba o to, by zawartość bazy danych odpowiadała zawartości plików na dysku. Możliwe jest przeniesienie danych z jednego serwera na inny, należy jednak przenieść zarówno zawartość bazy danych jak i strukturę folderów na dysku.

1.8. Wdrażanie systemu do użytkowania

Aby uruchomić aplikację należy najpierw utworzyć bazę danych o następujących opcjach:

Nazwa=pastexplorer
Port=5432
User=postgres
Hasło=qwe

oraz wykonać skrypt: create_tables.sql

Następnie aplikację należy uruchomić na serwerze IIS, który należy skonfigurować w zależności od potrzeb przy użyciu plików konfiguracyjnych serwera (np. applicationhost.config).

Najprostszym sposobem jest wykorzystanie środowiska VisualStudio, które większość kroków przeprowadzi automatycznie.

Wraz z aplikacją uruchomiony zostanie dodatkowo Scheduler zadań, odpowiedzialny za wysyłanie okresowych powiadomień e-mail.

1.9. Przeprowadzenie szkolenia użytkowników

Szkolenie użytkowników nie jest wymagane. Interfejs użytkownika bazuje na popularnych portalach społecznościowych, jest bardzo przejrzysty i intuicyjny.

1.10. Zapewnienie dokumentacji technicznej i użytkowej

Na obecnym etapie implementacji nie jest dostępna możliwość administracji. Każdy użytkownik może samodzielnie moderować komentarze i albumy, więc nie jest konieczne posiadanie administratora serwisu (chociaż w przyszłości taka rola na pewno zostanie wprowadzona).

Za dokumentację techniczną może posłużyć ten dokument jak i pozostałe dokumenty:

1.11. Zapewnienie obsługiwania systemu po wdrożeniu

Utrzymanie aplikacji jest ograniczone do utrzymania serwera www oraz bazy danych. Ze względu na charakter aplikacji wymagany jest duży transfer danych i stosunkowo duża pojemność dysków (przechowywanie zdjęć).

1.12. Rozwijanie i modyfikowanie aplikacji

Aplikacja jest łatwa do rozbudowy, wykonana jest przy użyciu wzorca MVC, więc warstwa logiki jest oddzielona od warstwy prezentacji i warstwy bazodanowej. Aplikacja może być rozbudowana o dodatkowe funkcjonalności (nie zostały one zaimplementowana z powodu ograniczenia czasowego):

  • Administracja aplikacją - statystyki, moderacja, banowanie użytkowników itp.
  • Integracja z innymi portalami społecznościowymi
  • Drzewko komentarzy - odpowiedź na konkretny komentarz
  • Ostatnie zmiany w profilu użytkownika - lista nowych komentarzy, zdjęć itp. od ostatniej wizyty
  • Wyszukiwanie albumów/zdjęć/użytkowników
  • PostGis - wyszukiwanie zdjęć na zadanym obszarze, w danej okolicy. Przeglądanie albumów sąsiadów (w zadanej odległości od miejsca zamieszkania użytkownika).
  • Aplikacja mobilna - wprowadzenie do aplikacji mobilnej wszystkich funkcjonalności portalu

1.13. Opracowanie doświadczeń wynikających z realizacji projektu

Projekt był prowadzony według określonej metodyki. W projektach studenckich etap projektowania i analizy jest często pomijany, w tym projekcie postąpiliśmy inaczej. Etap implementacji został poprzedzony analizą problemu i projektem bazy danych oraz architektury aplikacji. Pozwoliło to na uniknięcie wielu nieścisłości i problemów przy implementacji projektu.

Postanowiliśmy wykorzystać nieznane nam technologie (C#, MVC .Net, programowanie aplikacji na platformę Android, NHibernate, Quartz). Framework mapowania obiektowo-relacyjnego NHibernate jest popularnym narzędziem, wiedza wyniesiona z projektu na temat tego frameworku będzie na pewno wykorzystana w przyszłości, nie tylko przy tworzeniu aplikacji w środowisku .Net, ale też w środowisku Java, z którego wywodzi się Hibernate.

Poznaliśmy język C#, który nie występuje w programie studiów, co było cennym doświadczeniem. Podstawowa wiedza zdobyta w projekcie umożliwia nam tworzenie prostych aplikacji w tym języku.

Umiejętność pisania aplikacji na urządzenia mobilne również będzie użyteczna, gdyż urządzenia te zyskują coraz większą popularność.

W związku z tym, że wykorzystaliśmy zupełnie obce nam technologie (z wyjątkiem PostgreSQL, który był nam znany) musieliśmy rozwiązać wiele problemów wynikających z niewiedzy, poszukując różnych materiałów i informacji o użytych technologiach.

1.14. Aplikacja mobilna

W ramach projektu zaimplementowana została prosta aplikacja mobilna zintegrowana z serwisem i umożliwiająca korzystanie z podzbioru jego funkcjonalności za pomocą dowolnego telefonu wyposażonego w system Android. Obsługiwane funkcjonalności to:

  1. przeglądanie albumów zalogowanego użytkownika
  2. robienie nowego zdjęcia (z nałożonym przezroczystym ostatnim zdjęciem - ułatwienie kadrowania) oraz jego wysłanie do serwisu

Webservice (REST API)

Aplikacja komunikuje się z serwisem za pośrednictwem udostępnionego webserwisu z API zaprojektowanym w modelu REST. Poniżej przedstawione zostały przykładowe wywołania wraz ze zwróconymi wynikami.

Zwracanie informacji o użytkowniku

GET /api/users/JanekKowalski

{
    "ok": true,
    "data": {
        "id": 3,
        "username": "JanekKowalski",
        "date_of_birth": {
            "day": 1,
            "month": 3,
            "year": 1989
        },
        "about": "Jestem z Krakowa. Lubię jeździć na rowerze.",
        "albums": [ 
             "http://localhost:3518/api/albums/5",
             "http://localhost:3518/api/albums/18"
        ]
    }
}
Zwracanie informacji o albumie

GET /api/albums/5

{
    "ok": true,
    "data": {
        "id": 5,
        "name": "Moja twarz",
        "description": "Jak zmieniałem się w czasie",
        "category": "People",
        "owner": "JanekKowalski",
        "is_public": true,
        "rating": 10,
        "views": 1234,
        "photos": [
            "http://localhost:3518/api/photos/1",
            "http://localhost:3518/api/photos/2",
            "http://localhost:3518/api/photos/3",
            "http://localhost:3518/api/photos/4",
            "http://localhost:3518/api/photos/5",
            "http://localhost:3518/api/photos/6",
            "http://localhost:3518/api/photos/7"
        ],
        "comments": []
    }
}
Zwracanie informacji o zdjęciu

GET /api/photos/2

{
    "ok": true,
    "data": {
        "id": 2,
        "album": "http://localhost:3518/api/albums/5",
        "date": {
            "day": 30,
            "month": 4,
            "year": 2011
        },
        "description": "Oto ja",
        "image": "http://localhost:3518/Static/photos/photo_2012051022450267.jpg",
        "thumbnail": "http://localhost:3518/Static/photos/photo_2012051022450267_mini.jpg",
        "latitude": 25.21356,
        "longitude": 34.12357
    }
}
Wysyłanie zdjęcia

POST /api/photos

(... HTTP Body: zdjęcie, metadane ...)
// zdjęcie jako plik binarny zakodowany w Base64
// metadane: album id, opis zdjęcia, data zdjęcia, lokalizacja zdjęcia (GPS geotag)

1.15. Wykaz literatury, załączniki

Literatura

Andrew Troelsen, Pro C# 2010 and the .NET 4 Platform, Apress 2010

Użyte narzędzia oraz ich dokumentacje
pl/dydaktyka/ztb/2012/projekty/past_explorer/raport_koncowy.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0