Łukasz Łuczak
Language: Polish
Klienci lubią zmieniać zdanie, jeśli klient mówi, że dana aplikacja nie będzie równolegle użytkowana przez wielu użytkowników to na pewno będzie. To można przewidzieć ale co w przypadku gdy część z tych użytkowników będzie potrzebowała korzystać z niej offline, synchronizując dane z częścią centralną kiedy powrócą online? A co w przypadku kiedy nagle klient postanawia aplikacje zamówioną do użytku wewnętrznego sprzedawać? Rok developmentu projektu w PHP'ie z wykorzystaniem frameworka Zend Framework 2 oraz biblioteki Doctrine 2 a klient wywraca całkowicie architekturę do góry nogami a do tego neguje słuszność wyboru technologii. Można powiedzieć, że się nie da a można spróbować podjąć wyzwanie.
Chciałbym przedstawić zakres zmian jakie musieliśmy wprowadzić w projekcie, a także przedstawić cały proces modyfikacji aplikacji od rozwiązania gdy jest całkowicie online, przez rozwiązanie wspierające offline, a dalej przez możliwość sprzedaży produktu klientom by wreszcie zrobić z tego rozwiązanie boksowe dystrybuowane na Raspberry Pi.
Wśród poruszonych tematów będą: optymalizacja aplikacji napisanych z wykorzystaniem ZF2, Doctrine 2, audyt logi i synchronizacja danych, live update danych, zabezpieczanie aplikacji PHP'owej, rozdzielanie aplikacji niepodzielnej. przygotowywanie paczki dystrybucyjnej a także przygotowanie całego stosu by działał poprawnie na Raspberry Pi.
4. Klient
● Obsługuje zawody konne w zakresie
przygotowania list startowych, przebiegu
konkursów, przygotowywania list wynikowych
oraz komunikacji z organizacjami związkowymi
● Robi to od wielu lat
● Posiada desktopowe rozwiązanie, które spełnia
swoją rolę choć nie jest doskonałe
5. Wersja 1
● Potrzebne rozwiązanie umożliwiające
zapisywanie się na zawody oraz przetwarzanie
tych zapisów
● Potrzebne rozwiązanie pozwalające na
prezentowanie na żywo wyników konkursu
● Niech to rozwiązanie korzysta z bazy danych
zawodników oraz niech zawodnicy sami mogą
się dodawać do bazy
6. Wersja 1 cd
● Niech to rozwiązanie komunikuje się z
chronometrem
● W sumie możemy napisać aplikację od nowa
7. Wersja 1 cd
● Niech to rozwiązanie komunikuje się z
chronometrem
● W sumie możemy napisać aplikację od nowa
● Robimy aplikację webową!
● PHP (ZF2, Doctrine, DoctrineExtensions),
MySQL, JavaScript (jQuery), Twitter Bootstrap
8. Wersja 2
● „Wygląda świetnie, ale co z przypadkami kiedy nie
będę mieć dostępu do internetu na zawodach”
● „Nie, ta aplikacja nigdy nie będzie sprzedawana
chcę ją mieć tylko dla siebie!”
● Weźmy xamp'a!
● Ale co z synchronizacją danych?
● Dopiszmy moduł do Doctrine
9. Moduł Doctrine
● Bazując na Doctrine Extenstions
● Dodając sporo ręcznych wywołań filtrów w
kodzie oraz uzupełniając widok o logikę
● Opracowujemy rozwiązanie pozwalające na
logiczne blokowanie wierszy oraz obsługę ich
synchronizacji
10. Wersja 2 cd
● „Jest dobrze ale podczas zawodów uzupełniam
dane zawodników, koni i klubów. Chciałabym te
dane mieć synchronizowane z centralą”
● Skorzystajmy z rozwiązania jakie
przygotowaliśmy
● Dołóżmy do niego moduł różnicowy i niech
operator się martwi
11. Wersja 3
● „A czy nie można tego zrobić jakoś inaczej. Nie
zawsze mam dostępne laptopy na zawodach”
● „Aha i jeszcze jak są zawody WKKW to
operatorzy pracują na kilku stanowiskach nad
jednym konkursem”
● Hmm... to może jakiś lokalny serwer
dedykowany? A może jakieś rozwiązanie
boksowe?
12. Wersja 3 cd
● „Aha, przy rozpręrzalni potrzebuję wyświetlać
informacje kto będzie jechał a także bieżący
ranking.”
● „W sumie sędziowie też powinni to widzieć”
● Na rozprężalnie można dać smart tv i niech
wyświetla, a dla sędziów albo komputery albo
posy albo ….
● Ok. Bierzemy Raspberry Pi!
13. Hardware
● Zainstalowane środowisko
● MySQL robi problemy – zmieniamy na PostgreSQL
● Rozwiązanie udostępnia stronę po sieci na potrzeby
zawodów
● Rozwiązanie potrafi komunikować się z serwerem i
synchronizować informacje
● Ale pod rozwiązanie nie można podłączyć monitora,
myszki i klawiatury
● Już można
14. Wersja 4
● „A gdybym chciała sprzedać to klientom”
● „Ok, rozwiązanie na stronie jest dobre ale wiesz
konkurencja ma takie co się instaluje”
● Jak zabezpieczyć PHP'a?
● IonCube?
● Klucze Hasp?
15. Stan obecny
● Gotowa aplikacja webowa z modułami: zapisy,
wyniki, obsługa zawodów
● Moduł obsługa zawodów opracowany jako moduł
dostępny w sieci lokalnej i zamknięty w boksie
● Dostępny boks dla monitorów w rozprężalni,
sędziów i spikera
● W testach używanie online przez klientów
● W opracowaniu rozwiązanie do użytku offline przez
klientów
16. Stan obecny
● Gotowa aplikacja webowa z modułami: zapisy,
wyniki, obsługa zawodów
● Moduł obsługa zawodów opracowany jako moduł
dostępny w sieci lokalnej i zamknięty w boksie
● Dostępny boks dla monitorów w rozprężalni,
sędziów i spikera
● W testach używanie online przez klientów
● W opracowaniu rozwiązanie do użytku offline przez
klientów