Author Archive

Kiedy i dlaczego tworzyć oprogramowanie pod klucz i dlaczego framework Symfony2 pasuje tu jak ulał?

Author: Wojtek Sznapka (wojciech.sznapka) | wrzesień 20th, 2011
avatar

Gotowe rozwiązania Open Source

Na rynku istnieje mnóstwo rozwiązań Open Source, rozwiązujące różne klasy zagadnień. Mowa tu o produktach e-commerce (Magento, Presta Shop), CMS (Drupal, Joomla, WordPress), systemach klasy CRM, ERP, czy DMS, a także „community builders”, czyli np. fora internetowe (PHP BB). W zdecydowanej większości powyższych przypadków nie potrzeba wiedzy programistycznej aby wdrożyć i rozwijać serwisy. Mają one obszerne zbiory rozszerzeń i wtyczek (plugins), które pozwalają dostosowywać systemy do potrzeb. Takie podejście pozwala na znaczne zmniejszenie kosztów wdrożenia aplikacji.

Pomimo tych zalet, często jest tak, że systemy te pasują do prostych modeli biznesowych, które w życiu codziennym występują nad wyraz rzadko. W starciu z rzeczywistością, wdrażanie takich systemów, a przede wszystkim utrzymanie i reakcje na rozwój rynku mają przełożenie na zasadę Pareto, która mówi o tym, że 80% funkcjonalności jesteśmy w stanie osiągnąć w 20% czasu, a 20% krytycznych funkcji systemu konsumuje 80% budżetu.

Głównymi problemami z jakimi spotykają się wdrożenia oparte o gotowe rozwiązania to przede wszystkim komplikacja logiki biznesowej systemu, której nie da się odwzorować na możliwości produktu. Często dochodzi do paradoksalnych sytuacji, w których model biznesowy trzeba dopasowywać do systemu, co nigdy nie powinno mieć miejsca. Inną kwestia jest rozwój aplikacji i zwiększenie ruchu, które powoduje, że dobrze działające oprogramowanie dla małej liczby użytkowników staje się bezużyteczne przy wielkim obciążeniu. Poza tym istnieje potencjalne ryzyko związane z atakami hakerskimi, gdyż kod jest otwarty i dostępny dla potencjalnych włamywaczy. Aby dostrzec skalę problemu, wystarczy przejrzeć serwisy z dostępnymi exploitami. Ostatnią kwestią, która przychodzi w tym momencie na myśl, jest to, że czasem społeczność rozwijająca dany produkt, w pewnym etapie może zaprzestać dalszych prac. Powodów może być kilka, raz jest to skłócenie zespołu, innym razem przejście na nową technologię, lub do innego projektu, pozostawiając dotychczasowych użytkowników samych sobie.

Zalety tworzenia oprogramowania dedykowanego

Wszystkie problemy opisane powyżej rozwiązuje oprogramowanie dedykowane, a nawet można się pokusić o stwierdzenie, że wnosi tutaj wiele wartości dodanych. Przede wszystkim klient dostaje dokładnie to czego potrzebuje i za co płaci. Oczywiście trzeba mieć na względzie, że nie każdy klient jest osobą techniczną i nie koniecznie musi mieć doświadczenie z systemami informatycznymi, więc doradztwo technologiczne jest tutaj nieocenioną wartością. Firma programistyczna na etapie przygotowania oferty doradza klientowi najlepsze rozwiązania, proponuje pewne opcje, tworząc przy tym najlepszą możliwą ofertę, budując relację i zaufanie z zamawiającym. Dzięki temu klient odzwierciedla swój model biznesowy w tworzonym systemie, nastawiając się na zysk z inwestycji w przyszłości. Poza tym oprogramowanie jest gotowe na rozwój, co jest bardzo ważnym czynnikiem, gwarantującym skuteczność przedsięwzięcia i reakcję na sygnały spływające od użytkowników lub na trendy rynkowe. Ważnym czynnikiem jest tutaj również samopoczucie programistów, którzy nie klikają w panelach administracyjnych Drupala czy Magento, ale programują i rozwiązują problemy, realizując się przy tym zawodowo.

Nie wynajdujemy koła od nowa, czyli o frameworkach słów kilka

Framework to z definicji zestaw uniwersalnych narzędzi na bazie których tworzy się aplikacje. Nie wyobrażalne jest, aby w tych czasach tworzyć systemy informatyczne bez wykorzystania takiego narzędzia. Aby lepiej zobrazować temat, możemy porównać do płyty podwoziowej samochodu. Daje nam ona wszelkie potrzebne mechanizmy, czyli ramę całego auta, łożyska, układ wydechowy, wiązki elektryczne. Na takiej ramie możemy stworzyć wiele rodzajów samochodów, np. pickup, miejski hatchback, średniej klasy sedan, lub ekskluzywny, drogi wóz. Podobnie jest z frameworkiem – zapewnia mechanizmy potrzebne w większości systemów. Mowa przede wszystkim o kontrolerze aplikacji, reagującym na żądania użytkownika, warstwie widoku, prezentującą dane w formie graficzne, warstwie dostępu do bazy danych, mechanizmie bezpieczeństwa, pozwalającą na autoryzowanie użytkowników i ograniczanie dostępu do poszczególnych części serwisu. To tylko niektóre z rozwiązań, nowoczesne frameworki dostarczają wiele więcej. Inną kwestią jest standaryzacja kodu tworzonego przy ich użyciu. Jest o wiele łatwiej nowej osobie wejść w projekt, jeśli framework narzuca standardy kodowania i rozwiązania umieszczane są w odpowiedniej strukturze kodu. Pozwala to na szybsze wdrażanie się nowych członków zespołu, a co za tym idzie na przyspieszenie całego rozwoju.

Jest jeszcze jedna ważna kwestia, która decyduje o sukcesie danego frameworka – liczba gotowych rozwiązań w postaci wtyczek lub komponentów. Jest to sytuacja analogiczna do gotowych rozwiązań Open Source, z tym, że tutaj łatwo rozszerzyć dany komponent oraz dostosować go do wymagań systemu. Mamy też zapewnione wsparcie społeczności w kwestii rozwiązywania problemów, tworzenia nowych funkcjonalności czy aktualizacji i wydawania poprawek.

Dlaczego Symfony2 pasuje tutaj jak ulał?

Symfony2 kontynuuje dobrą passę swojego poprzednika, który istnieje już 6 lat. Programiści wyciągnęli naukę z poprzedniej wersji, podpatrzyli rozwiązania z innych platform (Java, Ruby On Rails, Python i Django, czy Zend Framework) i przepisali całość od podstaw. Dzięki temu powstał najlepszy aktualnie framework PHP, który wygrywa przede wszystkim bardzo dobrą strukturą niezależnych modułów, które można rozwijać oddzielnie, a nawet wykorzystywać w innych projektach. Autorzy przewidzieli strukturę projektu tworząc tzw. Bundle, które są modułami, gotowymi do użycia w innych projektach (nawet wnętrze frameworka się z nich składa). W tym momencie warto wspomnieć o Bundlach dostarczanych przez programistów i firmy zewnętrzne (jest ich już prawie 600). Całość systemu jest oparta o nowoczesny kontener wstrzykiwania zależności (Dependency Injection Container), przez co podmiana kluczowych części systemu może być zrobiona w mgnieniu oka (to rozwiązanie bardzo szeroko stosuje się w Java EE oraz innych dojrzałych rozwiązaniach). Warto też zauważyć, że autorzy duży nacisk kładą na wydajność i szybkość działania, co jest zauważalne na pierwszy rzut oka, bez wnikliwych badań obciążeniowych.

O powadze sytuacji świadczy też fakt, że Symfony2 zostało w całości przeniesione do gita i jego kod jest utrzymywany w serwisie Github.com. Dzięki temu każdy może go sklonować kod źródłowy, pracować na nim lokalnie wprowadzając poprawki czy tworząc nowe funkcjonalności, a później jednym kliknięciem wysłać prośbę o włączenie swoich zmian do głównego repozytorium. To powoduje, że na dzień dzisiejszy Symfony2 jest najczęściej rozgałęzianym i najchętniej oglądanym repozytorium PHP na Githubie, a liczba osób, które miały swój wkład w rozwój przekracza 250. Poza tym za frameworkiem stoi francuska firma Sensio Labs, wraz z założycielem i głównym programistą Fabienem Potencierem. Ten fakt zapewnia stabilność rozwoju, wysoką jakość dokumentacji oraz dostępność szkoleń i materiałów. Firma ta zorganizowała nawet zbiórkę pieniędzy wśród społeczności i zleciła audyt bezpieczeństwa organizacji zajmującej się tego typu działaniami .

Reasumując, trzeba przyznać, że Symfony2 zrewolucjonizowało świat frameworków PHP, a można się nawet pokusić o stwierdzenie, że programiści innych języków (Python, Ruby, Groovy) też z szacunkiem patrzą na to rozwiązanie. Symfony2 idealnie nadaje się do rozwoju aplikacji dedykowanych i na pewno można go polecić do większości projektów.

RESTful Symfony2

Author: Wojtek Sznapka (wojciech.sznapka) | sierpień 1st, 2011
avatar

Jakiś czas temu na cotygodniowym evencie „Piątek z XSolve” przedstawiłem prezentację pt. „RESTful Symfony2″, opisującą jak w łatwy sposób przy użyciu frameworka Symfony2 i rozszerzenia RestBundle tworzyć API REST. RestBundle jest rozwijane przez grupę programistów Friends Of Symfony, którzy w większości tworzą również rdzeń frameworka. Zachęcam do zapoznania się z prezentacją i wypróbowania możliwości zarówno Symfony2 jak i FOSRestBundle. (więcej…)

XSolve na konferencji Confitura 2011

Author: Wojtek Sznapka (wojciech.sznapka) | czerwiec 14th, 2011
avatar

W minioną sobotę sześcioosobowa delegacja firmy  XSolve wzięła udział w konferencji Confitura 2011. Impreza organizowana przez grupę Warszawa JUG była poświęcona głównie technologii Java, ale nie zabrakło też nowinek z okolic Javy, czyli Scali, NoSQL, cloud computingu czy różnych tematów architektonicznych. (więcej…)

Dynamiczna konfiguracja środowiska LAMP dla lokalnej maszyny

Author: Wojtek Sznapka (wojciech.sznapka) | marzec 23rd, 2011
avatar

Jeśli kiedykolwiek rozwijałeś aplikacje w PHP na swoim lokalnym komputerze, prawdopodobnie używałeś konfiguracji Apache opartej o vhosty. Kilkoma trikami możesz zmienić swojego linuksa w serwer developerski, bez konieczności konfigurowania vhosta dla każdej aplikacji z osobna. Przy minimalnym wysiłku konfiguracyjnym, potrzebowałeś do tego trzech kroków:

  1. pobrania repozytorium na dysk
  2. stworzenie konfiguracji vhost z jakąś nazwą serwera
  3. stworzenie wpisu w /etc/hosts który będzie odzwierciedlał nazwę serwera użytego w vhoście na 127.0.0.1

Jestem pewny, że powyższa ścieżka jest używana przez wielu programistów. Możemy pominąć dwa ostatnie kroki, ograniczając przygotowanie środowiska do umieszczenia kodu źródłowego w specjalnym folderze na dysku. Aby to osiągnąć potrzebujemy moduł Apache’a mod_vhost_alias oraz prosty serwer DNS, który będzie rozwiązywał lokalne domeny dla nas.
Instalacja mod_vhost_alias jest dość prosta. Moduł jest prawdopodbnie dołączony do twojej instalacji Apache, pozostaje go tylko uruchomić następującą komendą:

sudo a2enmod vhost_alias

Dzięki mod vhost alias możemy dynamicznie wskazywać Document Root bazując na nazwie serwera. Wystarczy umieścić następującą konfigurację w pliku /etc/apache2/sites-enabled/000-default

Teraz wszystkie odwołania będą wskazywały na nasz /var/www/FIRST_PART_OF_DOMAIN/web, ponieważ użyliśmy modyfikatora %1. Możesz wprowadzić własną konwencję używając innych modyfikatorów w dyrektywie  VirtualDocumentRoot (patrz dokumentacja). Powyższa konfiguracja jest bardzo minimalistyczna, powinieneś dodać do niej jeszcze logowanie itp.

Ostatnią rzeczą, o jaką należy się zatroszczyć jest dynamiczne rozwiązywanie nazw domen. Najprostszym sposobem jest dodawanie nazwy serwera do pliku /etc/hosts, ale to wymaga dodawania wpisu dla każdego hosta. Na przykład wpis w /etc/hosts:

 127.0.0.1 myapp.local.dev

uruchomi aplikację zlokalizowaną w  /var/www/myapp/ (wskaże na katalog web/, według konwencji symfony). Jeśli chcesz to zautomatyzować, zainstaluj dnsmasq, prosty serwer DNS

sudo apt-get install dnsmasq

Następnie wyedytuj /etc/dnsmasq.conf file (może być położony gdzie indziej, tutaj na przykładzie Ubuntu):

listen-address=127.0.0.1
address=/.local.dev/127.0.0.1

Ostatnią rzeczą jest aktualizacja pliku /etc/resolv.conf przez dodanie adresu naszego DNSa na początek:

nameserver 127.0.0.1

Następnie restartujemy dnsmasqApache2:

sudo /etc/init.d/apache2 restart
sudo /etc/init.d/dnsmasq restart

Od teraz możesz się cieszyć nową konfiguracją środowiska LAMP. Każdy nowy projekt potrzebuje być tylko umieszczony w katalogu  /var/www/PROJECT_NAME i będzie od razu dostępny z poziomu przeglądarki pod adresem  PROJECT_NAME.local.dev