Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 11.

Slides:



Advertisements
Podobne prezentacje
Java Data Objects.
Advertisements

PROPOZYCJE ZAPISU Autorzy: Uczniowie należący do Samorządu Szkolnego.
Jak żyć długo i szczęśliwie ?
Czyli jak zrobić prezentację komputerową?
Co można zwiedzić w WIELKIEJ BRYTANII Pamiętajmy o miejscach które możemy zwiedzić na przykład w WIELKIEJ BRYTANII. I też czym różni się ta wyspa od naszego.
Małgorzata Pietroczuk
Irina Svichenyuk Valeria Poligova Skąd biorą się motywy dla podróży? Skąd biorą się motywy dla podróży? Każdy człowiek ma jakieś własne potrzeby. To.
Alicja Przepióra Grupa 1015a. Tekst nieuporządkowany ZYCIORYS Urodziłam sie 9 listopada 1992 w Gorlicach. Mieszkam w Strzeszynie. Mam dwóch braci. Lubię
Portal Systemu Jakości Kształcenia Jak się zalogować? Instrukcja dla pracowników UMCS Przygotowanie: Urszula Wojtczak, Zespół Obsługi Systemu Jakości Kształcenia.
AUTOR :WOJTEK NOWIK REPORTER : PATRYK SORMAN LUK SMIS PIOTREK COLO (KOLO) MAX SOWT.
Elektronika cyfrowa Prezentacja Remka Kondrackiego.
PROJEKT WEDŁUG DILBERTA
AUTOR :WOJTEK NOWIK REPORTER : LUK SMIS PATRYK SORMAN PIOTREK COLO (KOLO)
Kolejna gra mająca na celu pokazanie świata kierowców ścigających się w nielegalnych ulicznych wyścigach podrasowanymi do granic możliwości samochodami.
Zastanówmy Się…...
To jest bardzo proste  Lekcja nr 3
WNIOSKI Z PRZEPROWADZONEJ ANKIETY NA TEMAT SAMORZĄDU UCZNIOWSKIEGO ORAZ GAZETKI SZKOLNEJ „KUJONEK”
Po co nam samorz ą d ? XVIII Sesja Sejmu Dzieci i MłodzieżySZKO Ł A DEMOKRACJI.
Debata- samorządność.. Samorząd Uczniowski to działająca w szkole instytucja, obejmująca całą społeczność uczniowską, niezależna od administracji oświatowej.
Młodzież a wolontariat.. Opracowanie: Judyta Szłapa Urszula Buczek.
Pomoc słabszym w nauce Sprzątanie pobliskiego terenu Pomoc starszym.
Podstawy programowania
Cechy dobrej i udanej strony www Net etykieta. Ergonomia stron WWW.
Szkoła w chmurze.
fotografie - Marcel Cohen
Fragmenty z książki „Dobrego dnia”
Program wspomagający sekretariat Korespondencja. Wprowadzenie Instytucja dla którego ma być aplikacja pracuje w sieci Ethernet. Serwery pracują na systemie.
Co każdy użytkownik komputera wiedzieć powinien
Prawa Dziecka.
Można powiedzieć, że nasi dziadowie, jeżeli chodzi o kuchnię i gotowanie byli dużo bardziej ekologiczni niż my czy choćby nasi rodzice. Potrawy były zazwyczaj.
Nieformalne miejsca spotkań. ANKIETY Przeprowadziliśmy wśród uczniów gimnazjum ankietę na temat nieformalnych miejsc spotkań. Przedstawimy przykładowe.
ALGORYTMY.
Wykonała Sylwia Kozber
Powrót do sukcesu Analiza przypadku Princessy (rola badań marketingowych podczas rozwoju produktu: ) Powrót do sukcesu Analiza przypadku Princessy.
xHTML jako rozszerzenie HTML
Instalacja serwera WWW na komputerze lokalnym
HTML Podstawy języka hipertekstowego Damian Urbańczyk.
Ruch jednostajny po okręgu Ciało porusza się ruchem jednostajnym oraz torem tego ruchu jest okrąg.
Dominik Jedliński oraz Bartek Kurczab
Bazy danych w systemie SimCallCenter Krótkie omówienie wyboru baz danych stosowanych w CallCenter, integracja z zewnętrznymi bazami danych Czas 15 min.
J AK ZACZĄĆ PRACĘ Z ?. przed rejestracją Upewnij się, że posiadasz: aktywne konto zainstalowaną przeglądarkę Internet Explorer indywidualny studencki.
Bezpieczeństwo na drodze
SKĄD WIEM, KIM JESTEM? O TOŻSAMOśCI I TOŻSAMOŚCIACH
Warsztaty C# Część 2 Grzegorz Piotrowski Grupa.NET PO
Warsztaty C# Część 3 Grzegorz Piotrowski Grupa.NET PO
BEZPIECZNY INTERNET. PRZEGLĄDANIE STRON INTERNETOWYCH.
SKALA MAPY Skala – stosunek odległości na mapie do odpowiadającej jej odległości w terenie. Skala najczęściej wyrażona jest w postaci ułamka 1:S, np. 1:10.
Sieci komputerowe. Nowe technologie komputerowe
To śmieszne...
Lokalne konta użytkowników i grup
12 luty 2008r.- Dzień Bezpieczeństwa Internetu Bezpieczeństwo dziecka w SIECI.
PolGIS jako nowoczesny system do paszportyzacji sieci
Biznes Społecznie Odpowiedzialny My też mamy coś do powiedzenia! Ogólnopolski Konkurs CSR Biznes Społecznie Odpowiedzialny My też mamy coś do powiedzenia!
„Bezpieczny Internet każdego dnia”
Budowa programu #include /*instrukcje preprocesora */ #include int main(void) { /*podstawowa funkcja programu */ int a=1; /*deklaracja i inicjalizacja.
ZŁUDZENIA OPTYCZNE Większe, mniejsze? Jest czy nie ma? Wygięte! ..?
Gol I GOL 2 Moje REFLEKSJE NA temat filmu. Film Gol - moim zdaniem - był bardzo ciekawy… Pokazał że nawet ci najsilniejsi zmieniają się pod wpływem pieniędzy…
Druga debata szkolna W piątek 21 XI 2008 roku odbyła się w naszej szkole kolejna debata. Zgromadziliśmy się jak zwykle w sali nr 33.
Temat 5: Elementy meta.
Temat 6: Elementy podstawowe
WoF PLATFORMA KOMUNIKACJI. WoF jest platformą komunikacji systemem wspomagającym obieg informacji oraz zarządzanie w firmie Zapewnia elektroniczny obieg.
PRZYCHODZI BABA DO LEKARZA.
Instrukcja switch switch (wyrażenie) { case wart_1 : { instr_1; break; } case wart_2 : { instr_2; break; } … case wart_n : { instr_n; break; } default.
GABRIEL GARCÍA MÁRQUEZ
Komtech Sp. z o.o. Magic Janusz ROŻEJ.
Magic Janusz ROŻEJ Komtech Sp. z o.o.
w/g Grzegorz Gadomskiego
Największym bólem w życiu nie jest śmierć, lecz bycie ignorowanym.
TYPY KOBIET WEDŁUG INTERNAUTÓW.
KW2 Czy można żyć bez KW2? - Można, ale co to za życie?... [S.Toton 2001r.n.e.]
Zapis prezentacji:

Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 11

DataReactor Poprzednio przygotowaliśmy edycję książek – teraz musimy zapisać zmiany w bazie Mieliśmy sześć typów edycji – potrzebujemy reaktora który wszystkie obsłuży Edycje danych poszczególnych typów są obsługiwane przez kontrolki o różnych nazwach Możemy je umieścić w jednym reaktorze

Potwierdzenie sprzedaży function processData() { $result = false; // processing acknowledge the sale $sold = new SelectedItems("sold"); foreach ($sold->items as $sale) { $this->data->acceptTransaction($sale); $result = true; } Sprzedane książki są po prostu zaznaczane - nie potrzebujemy więcej informacji. Wołamy dla nich odpowiednią procedurę…

Potwierdzenie sprzedaży… function acceptTransaction($transactionID) { $rs = $this->database->query(" select OffersUsers.UsersID, Offers.OffersID, UsersBooksID from OffersUsers inner join Offers on OffersUsers.OffersID = Offers.OffersID where OffersUsersID=$transactionID;"); $data = $rs->get(); $buyerID = $data[0]; $offerID = $data[1]; $ownership= $data[2]; $this->database->query( update UsersBooks set UsersID = $buyerID where UsersBooksID=$ownership;"); $this->database->query( delete from OffersUsers where OffersUsersID=$transactionID;"); $this->database->query( delete from Offers where OffersID=$offerID;"); }

Anulowanie sprzedaży Anulowanie jest równie proste jak zatwierdzenie a nawet prostsze: // processing canceling the sale $canceled = new SelectedItems("canceled"); foreach ($canceled->items as $sale) { $this->data->cancelTransaction($sale); $result = true; } function cancelTransaction($transactionID) { $this->database->query(" delete from OffersUsers where OffersUsersID=$transactionID;"); }

Zgubione książki // processing lost books $lost = new SelectedItems("lost"); foreach ($lost->items as $drop) { $this->data->bookWasLost($drop, $this->user); $result = true; } W kodzie reaktora zgubionych książek nie ma nic więcej, ale część bazodanowa jest nieco bardziej skomplikowana

Zgubione książki … function bookWasLost($bookId, $userId) { $rs = $this->database->query(" select UsersBooks.UsersBooksID, Offers.OffersID, OffersUsers.OffersUsersID from UsersBooks left outer join Offers on offers.UsersBooksID= UsersBooks.UsersBooksID left outer join OffersUsers on OffersUsers.OffersID= Offers.OffersID where UsersBooks.UsersID=$userId and UsersBooks.BooksID=$bookId;"); $rs = $rs->get(); $own = $rs[0]; $sale = $rs[1]; $buy = $rs[2];

Zgubione książki … if ($buy != "") { $this->database->query(" delete from OffersUsers where OffersUsersID=$buy;"); } if ($sale != "") { $this->database->query(" delete from Offers where OffersID=$sale;"); } if ($own != "") { $this->database->query(" delete from UsersBooks where UsersBooksID=$own;"); }

To proste Taki podział zadań znacznie upraszcza programowanie Każde z elementarnych zadań jest proste Programując – możemy koncentrować się na pojedynczych elementach funkcjonalności Każdy z elementów można niezależnie uruchamiać i co ważniejsze - testować

Oferta sprzedaży $toSell = new SelectedItems("sellId"); $sell = new SelectedItems("sell"); foreach ($toSell->items as $selling) { if ($sell->is($selling)) { $comment = new Control("comment". $selling, ""); $price = new Control("price". $selling, ""); $comment = $comment->value; $price = str_replace(",", ".", $price->value); $this->data->editorAddOffer($selling, $this->user, $comment, $price); } else { $this->data->removeOffer($selling, $this->user); } $result = true; }

Oferta sprzedaży … Zauważmy, że oferta może być składana lub odwoływana Potrzebujemy dwu procedur do obsługi tych zadań Drobna komplikacja: potrzebujemy rozróżnić poprawianie i dodawanie function editorAddOffer($bookId, $userId, $comment, $price) { $rs = $this->database->query(" select UsersBooks.UsersBooksID, Offers.OffersID from UsersBooks left outer join Offers on Offers.UsersBooksID= UsersBooks.UsersBooksID where UsersBooks.UsersID=$userId and UsersBooks.BooksID=$bookId;");

Oferta sprzedaży … $rs = $rs->get(); if ($rs[1] == "")// add new offer entry { $this->database->query(" insert into Offers( UsersBooksID, OffState, OffPrice) values(". $rs[0]. ", '$comment', $price);"); } else { $this->database->query(" update Offers set OffState = '$comment', OffPrice = $price where OffersID = ". $rs[1]. ";"); }

Zakupy! $offers = new SelectedItems("offers"); foreach ($offers->items as $bookId) { $offerId = new Control("take". $bookId, ""); $offerId = $offerId->value; if ($offerId == -1) { $this->data->setHaveBook($bookId, $this->user); } else if ($offerId != "") { $this->data->setAcceptOffer($offerId, $this->user); } $result = true; }

Pozostałe dane Dotychczas koncentrowaliśmy się na najczęściej używanej funkcjonalności Pozostaje jeszcze przygotowanie danych: Listy i danych książek Listy użytkowników Listy grup Edycja tych danych nie jest potrzebna, trzeba je tylko wprowadzić do systemu

Import! Zamiast przygotowywać formatki dla każdego typu danych – przygotujemy import danych Dane książek są bardzo złożone: Tytuł, Lista autorów! Inne dane (także listy) Uniwersalną strukturą jest XML – ale potrzebujemy analizator (parser)

Inne formaty Lista użytkowników na stałą strukturę Imię Nazwisko Login Hasło Inne dane (jeśli będą potrzebne) Takie dane mogą być w formacie CSV Taki format można wyciągnąć z Excela – to wygodne bo w takim formacie są zazwyczaj listy uczniów

Inne formaty... Grupy są tylko nazwami, ale… Są także grupy grup! Format plików INI będzie odpowiedni Trzy różne formaty pozwalają rozpoznawać typ danych Jeśli dane zaczynają się od < – to są to ksiązki (XML) Jeśli dane zaczynają się od [ – to są to grupy (INI) W przeciwnym wypadku – są to użytkownicy (CSV)

Strona importu

Przypisania Warto także przygotować stronę która pozwoli na przypisanie uczniów i książek do grup

Czy to już koniec ? Czy nasza aplikacja jest gotowa ? Cała funkcjonalność jest przygotowana Program pozwala na pracę Można go zainstalować u klienta I można zacząć liczyć przyszłe zyski Ale to dopiero początek! Program działa tak jak sobie to wyobraża programista a nie jak potrzebuje uzytkownik.

To dopiero początek Teraz musimy zapytać czego potrzebuje użytkownik Proponowana przez nas aplikacja jest punktem wyjścia Użytkownik może a nawet powinien zaproponować zmiany i funkcjonalność z której wcześniej nawet sobie nie wyobrażał I zrobi to niekoniecznie od razu

Bez względu na… Jeśli nasza aplikacja była pisana na zamówienie – teraz możemy zweryfikować na ile rozumiemy problem jaki postawił użytkownik. I teraz użytkownik zaczyna rozumieć czego naprawdę potrzebuje. Gdy dostanie nową wersję – zrozumie więcej i kolejne zmiany będą konieczne w programie Ale możemy liczyć na zysk.

Bez względu na… Jeśli pomysł na aplikację był naszego autorstwa – teraz jest czas na jego weryfikację Programu jeszcze nie można sprzedać – najpierw musi się sprawdzić Instalacja nieznanego programu to są koszta również dla klienta (serwer, administracja przeszkolenie użytkowników itp..) Nie można go dodatkowo obciążać

Liczymy zyski Pojedynczy klient nigdy nie sfinansuje całego programu Tym bardziej taki u którego instalujemy program w ramach instalacji testowej lub pilotażowej Ale mamy produkt – teraz trzeba znaleźć inwestorów I przygotować propozycje – jak na aplikacji można zarobić

Zysk W naszym przypadku – mamy kilka możliwości zysku: Opłaty licencyjne Finansowanie przez fundację Wyświetlanie reklam. Prowizja od sprzedaży Połączenie z inną – komercyjną działalnością Sprzedanie aplikacji komuś kto wie jak na niej zarobić

Zysk… Opłaty licencyjnie w naszym przypadku nie wchodzą w grę – kto miałby płacić? Fundacja – to jest pomysł ! – ale tu możemy liczyć tylko na jednorazowy zysk w ramach jakiegoś eko- przyjaznego programu Wyświetlanie reklam nie wyjdzie – program będzie używany sporadycznie – w na początku roku szkolnego

Zysk… Prowizja od sprzedaży – nie wyjdzie – jak wyegzekwować takie groszowe opłaty od uczniów Połączenie z inną – komercyjną działalnością – to wygląda obiecująco Połączenie ze sprzedażą nowych książek i zysk z prowizji od księgarni/hurtowni Sprzedanie aplikacji komuś kto wie jak na niej zarobić – nie warto!

Co by tu jeszcze Zarządzanie kontem użytkownika Hasło Dane kontaktowe Powiadamianie mailem o transakcji Terminarz pozwalający na automatyczne uzgadnianie terminów przekazania kupionych książek Zakup nowych książek poprzez aplikację – zamawianie z hurtowni

Co by tu jeszcze … Rozliczenia między użytkownikami – aby nie musieli rozliczać się gotówkowo – system może bilansować wzajemne długi a pozostałe rozliczenia załatwiać zbiorczo przez skarbników szkolnych Przy okazji wyjdzie system zbierania pieniędzy na nowe podręczniki zamawiane w hurtowni

Co by tu jeszcze … Wypożyczenia książek pomiędzy użytkownikami systemu Antyprzypisania – zapisanie się na fakultet który wymaga rozszerzonych podręczników likwiduje potrzebę posiadania podstawowych Opcja nie chcę – do oznaczenia podręczników których uczeń nie chce kupować mimo, że są potrzebne

A co na to użytkownicy To są propozycje które w czasie pracy przyszły do głowy programistom A co będą chcieli użytkownicy – to się okaże w ciągu jej użytkowania… Listę propozycji będziemy realizować sukcesywnie zależnie od Komplikacji zmian Potrzeby użytkowników Możliwości technologicznych Wiedzy programistów

Koniec Kiedy następuje koniec prac nad aplikacją? W zasadzie nigdy! Jeśli aplikacja przestaje mieć sens – wtedy jej życie się kończy Ale to oznacza koniec zysków! Do tego czasu – ulega ciągłemu rozwojowi i ciągłym zmianom