Technology stack in Wilda Software

25 august 2022
Jakub Rojek Jakub Rojek
Source: https://www.craiyon.com/
Categories: Offer, Industry, Programming

W innym artykule omawialiśmy stos technologiczny. Dla przypomnienia - jest to zbiór technologii, praktyk i różnorakich narzędzi, w których firma ma największe kompetencje i używa do pracy. Specjalnie piszę "największe kompetencje", gdyż nie jest tak, że warsztat danego zespołu jest ograniczony tylko do pozycji wymienionych w stosie technologicznym. Zwykle wiedza o różnych komponentach znacznie wykracza poza ten standardowy zestaw, natomiast z założenia "stack" pokazuje najbardziej "pewne" i najczęściej wykorzystywane elementy przez programistów danej firmy. I nie tylko programistów, ale to na nich skupia się ten termin.

W dzisiejszym tekście kontynuujemy ten wątek, ale nieco skonkretyzujemy nasze wynurzenia. Przedstawimy bowiem elementy stosu technologicznego wykorzystywanego w Wilda Software, a więc w naszym zespole.

Główna technologia i backend - Yii 2.0

Logo frameworka Yii (źródło: https://www.yiiframework.com/)

Framework Yii jest obecny wśród członków zespołu od dłuższego czasu, niegdyś w wersji pierwszej, ale od dawna już w drugiej. Z tego powodu posługujemy się nim swobodnie i rzadko nas zawodzi. Jest to komponent oparty o język PHP, ciągle rozwijany i dostosowywany do nowych wersji interpretera. Framework wyróżnia się wieloma cechami, wśród których można wymienić to, że:

  • jest łatwy w konfiguracji, a przy tym daje się łatwo dostosować do sytuacji,
  • jest dość szybki w działaniu (szczególnie w nowszych wersjach PHP) oraz w łatwy sposób wspiera cache'owanie,
  • umożliwia budowanie zarówno samego API (backend), jak i całkowitych, pełnoprawnych aplikacji z widokami,
  • pozwala budować wiele podaplikacji na bazie jednego kodu (np. paneli dla różnych typów użytkowników),
  • bardzo ułatwia budowanie paneli administratora oraz CRUD-ów,
  • ma bogatą bazę rozszerzeń, modułów i bibliotek,
  • PHP oznacza, że nie ma większych wymagań serwerowych.

Stosowaliśmy i nadal stosujemy Yii 2.0 w naprawdę wielu projektach, w różnej formie i szerokim zakresie. Pomaga w budowaniu zarówno małych aplikacji, jak i tych większych. Cały czas rozszerzamy też wewnętrzne rozwiązania architektoniczne, dzięki czemu ciągle polepszamy proces długookresowego wspierania aplikacji, ale też zaspokajamy potrzeby wynikające po prostu z życia. A w tym frameworku to ciągle możliwe.

Czy Yii 2.0 to jedyna technologia, którą używamy w tym obszarze? Nie - jak już wspomnieliśmy, niektóre wewnętrzne systemy (w tym Feedybacky) utrzymujemy na NestJS, polskiej platformie korzystającej z Node.js. Mamy też kontakt z bardzo popularnym PHP-owym frameworkiem Laravel - zresztą strona, na której czytacie ten tekst, korzysta właśnie z tej technologii. A dodatkowo w przeszłości zdarzały się epizodyczne "romanse" z Javą (Spring, GWT) oraz Pythonem (Tornado). Jednak w Yii 2.0 czujemy się zdecydowanie najpewniej i uważamy również, że najlepiej współgra z wymaganiami naszych klientów. Choć nie da się ukryć, że NestJS również jest kuszący, choćby do budowania mikroserwisów.

Frontend - Angular

Logo frameworka Angular (źródło: https://angular.io/)

Tak, tak, wiemy, że to React jest najpopularniejszym frameworkiem, zarówno w firmach, jak i u kandydatów, jednak my nasze serce już dawno oddaliśmy Angularowi. Głównie dlatego, że jest to bardzo uporządkowana technologia, nieco "usztywniająca", ale za to odpłacająca się łatwiejszym zachowaniem odpowiedniej struktury, także u młodszych członków zespołu. Zawiera ogrom bibliotek, rozszerzeń i swego czasu była bazową "podkładką" dla Ionica (stąd jego wejście do naszego zespołu), o którym zaraz opowiemy. O strukturę angularową oparty jest też wspomniany wcześniej NestJS.

Podczas przyglądania się projektom, które czasem przejmujemy po innych wykonawcach, mamy potwierdzenie, że Angular jest stosowany dość szeroko i niejeden raz odziedziczyliśmy oprogramowanie wykorzystujące właśnie tę technologię. Zmaganie się w niej z wyzwaniami technologicznymi jest samą przyjemnością, aczkolwiek pewnie powie to każdy entuzjasta danego frameworka.

Mieliśmy również kontakt z Reactem i Wy także - w tym napisany został FEF, a więc Feedybacky Embedded Form, wykorzystywany przez użytkowników FyBy, jak choćby firmę Aco. Ponadto pracowaliśmy z (i nadal utrzymujemy) frontendami budowanymi bezpośrednio w Yii 2.0, Laravelu, a także w Smarty - czasem widoki PHP-owe mają sens, np. z uwagi na ograniczenia technologiczne. Jednak nie ma co ukrywać - Angular z tego grona jest zdecydowanym liderem zarówno jeśli chodzi o nasze kompetencje, jak i użyteczność dla środowiska biznesowego.

Aplikacje mobilne - Ionic

Logo frameworka Ionic (źródło: https://ionicframework.com/)

W swojej ofercie mamy również aplikacje mobilne, do których używamy technologii Ionic. Niegdyś mocno związana z Angularem (obecnie już bardziej otwarta), pozwala budować programy na smartfony i tablety w hybrydowy sposób. Co to oznacza?

Wyobraź sobie, że chcesz stworzyć aplikację zarówno na Androida, jak i iOS-a. Standardowo oznacza to pisanie dwóch kawałków kodu (i prawdopodobnie zaangażowanie dwóch zespołów), a co za tym idzie - wyższy koszt. Natomiast istnieje ścieżka, która pozwala pisać jedną aplikację webową (np. w JavaScripcie) tak, aby możliwe było jej późniejsze zbudowanie na obie konkurencyjne platformy mobilne. Przykładem takiej ścieżki jest właśnie Ionic, który jest z nami od dawna. Stanowi odpowiednią technologię do 99% aplikacji mobilnych, które są przedmiotem zleceń, a w przypadkach granicznych istnieje opcja pisania natywnych bibliotek w językach odpowiednich dla danej platformy.

System zarządzania bazą danych - MySQL

Logo SZBD MySQL (źródło: https://www.mysql.com/)

W przypadku systemu do zarządzania bazami danych (SZBD - to nie to samo co same bazy danych czy schematy baz danych!) wybór jest często ograniczony do serwera, którym dysponuje klient. A bez tego i tak większość systemów w tym segmencie korzysta z bardzo popularnego MySQL-a lub jego przyrodniej siostry, MariaDB. Nie ma co ukrywać, że jego obecność w tzw. LAMP i narzędziach typu XAMPP wręcz kieruje większość programistów na tę drogę. Jednak nie zawsze.

O ile rzeczywiście największe doświadczenie mamy z MySQL, to utrzymujemy również systemy korzystające z >PostgreSQL. SQL-owe technologie bazodanowe mają to do siebie, że są bardzo podobne (przynajmniej w tych najszerzej wykorzystywanych obszarach) i znajomość jednej stanowi fundament do poruszania się w innej. Główne pytanie dotyczy możliwości serwerowych i kontekstu, w jakim obraca się system.

Jeśli chodzi o interfejs dostępowy, to w naszym zespole panuje dowolność - korzystamy zarówno z HeidiSQL, DBeavera, pgAdmina, jak i... po prostu z konsoli lub w ostateczności z phpMyAdmina. Pamiętajcie, młodsi programiści, że umiejętność obsługi bazy z poziomu terminala jest bardzo przydatna i czasem ratuje projekty. A nawet życie.

XAMPP i NVM for Windows

Logo XAMPP-a (źródło: https://www.apachefriends.org/pl/index.html)

Jeśli coś jest wystarczające, to po co to zmieniać? Tak naprawdę do tworzenia i rozwijania aplikacji PHP-owych kluczowe są dwa pakiety:

  • serwer HTTP (Apache 2 lub NGINX),
  • Node.js.

W pierwszym przypadku popularny XAMPP w pełni spełnia swoje zadanie, a jest przy tym bardzo wygodny w obsłudze. Do celów developerskich sprawuje się świetnie, choć nie zamykamy się na to rozwiązanie i dobrze wiemy, że niekiedy lepsze są inne drogi. Najważniejsze, to znać sytuację i umieć się do niej dostosować.

Natomiast w przypadku Node.js jakiś czas temu odeszliśmy od instalowania konkretnej wersji oficjalnej paczki z Node.js-em. Dużo lepsze w naszym przypadku okazało się narzędzie NVM for Windows (na Linuxie znane jako po prostu "n"), które pozwala posiadać wiele wersji na dysku i przełączać się między nimi w razie potrzeby. Jest to przydatne szczególnie dla osób, które utrzymują systemy oparte o różne wersje bibliotek, czasami tworzone od wielu, wielu lat.

Visual Studio Code

Logo Visual Studio Code (źródło: https://commons.wikimedia.org/wiki/File:Visual_Studio_Code_1.35_icon.svg)

Tak naprawdę IDE i edytory kodu takie jak Visual Studio Code nie są stricte składnikiem stosu technologicznego, gdyż korzystanie z jednego edytora nie jest u nas narzucone z góry. Tym niemniej, przez lata VS Code stał się niejako standardem, z którego korzystają wszyscy nasi programiści. To program, który obsługuje większość (o ile nie każdą) popularną technologię, zawiera masę rozszerzeń i możliwości personalizacyjne. W dodatku działa sprawnie oraz pozwala wygodnie zarządzać przestrzeniami roboczymi (czyli np. jednym kliknięciem przejść do konkretnego projektu, na który składa się kod umieszczony w kilku folderach). Zawiera także narzędzia dla Gita, debuggowania i innych modułów, z których programiści korzystają na co dzień.

Git i Gogs

Logo Gogsa (źródło: https://gogs.io/)

Samego Gita zapewne nikomu nie trzeba przedstawiać, gdyż jest to narzędzie powszechnie używane i wręcz wrosło w środowisko programistyczne i pozaprogramistyczne. Dużo więcej uwagi warto poświęcić Gogsowi, które jest samodzielnie "posiadanym" (ang. self-hosted) rozwiązaniem o funkcjonalności podobnej choćby do GitHuba. Po instalacji na swoim serwerze pozwala w wygodny, graficzny sposób zarządzać repozytoriami (również własnoręcznie hostowanymi) oraz użytkownikami uprawnionymi do korzystania z nich. Ma również wbudowany mechanizm pull requestów, zarządzania publicznymi kluczami SSH i parę innych funkcji, które pomogą w codziennym administrowaniu głównym produktem firmy software'owej, a więc kodem źródłowym.

Oczywiście, to nie oznacza, że nie korzystamy również z zewnętrznych rozwiązań, jak choćby BitBucketa, natomiast Gogs posiada wszystko, co jest potrzebne i jest "nasz" :)

Redmine i Feedybacky

Logo Feedybacky

Innym podstawowym narzędziem każdego zespołu (i to nie tylko programistycznego) jest system zarządzania zadaniami, projektami, wspólną wiedzą i szacunkami czasowymi. U nas tę formę spełnia Redmine, również samodzielnie hostowany na serwerze. Niech Was nie zwiedzie jego niepozorny wygląd - to potężne narzędzie, ale nie za potężne. Dostarcza dokładnie tego, co jest potrzebne - pozwala:

  • utrzymywać informacje o projektach,
  • zarządzać bazą wiedzy ogólną oraz na temat danego przedsięwzięcia (w formie wiki),
  • zarządzać zadaniami, przypisywać je i tworzyć hierarchię,
  • raportować czas poświęcony na prace i porównywać go ze wstępnymi szacunkami,
  • planować zadania w czasie.

Wraz z kolejnymi wtyczkami pozwala na coraz większą personalizację, nie tylko wyglądu, ale też funkcjonalności. Zawiera również bogaty panel administracyjny i system uprawnień. Może być również udostępniony klientom w zakresie, który sami ustawimy. Jednak jeśli chodzi o obsługę zgłoszeń serwisowych i zapytania zleceniodawców projektu o kolejne wymagania, to mamy lepsze narzędzie. Już dobrze wiecie jakie.

Feedybacky powstało właśnie w celu obsługi tzw. wsparcia, zgłoszeń serwisowych i gwarancji. Sprawdza się przy tym świetnie, pozytywnie zaskakując naszych klientów i obejmując wiele naszych projektów. Jest to projekt stworzony i rozwijany całkowicie przez nas, ale to nie znaczy, że tylko my możemy z niego korzystać - możesz sam pomóc sobie tym systemem.

Slack

Logo Slacka (źródło: https://brandfolder.com/slack/logos)

I na deser komunikator. Tutaj zaskoczenia nie ma, gdyż tak, jak w wielu firmach, także u nas podstawowym narzędziem do wymiany błyskawicznych wiadomości wewnątrz zespołu jest Slack, który ma swoje wady, ale jest po prostu najbardziej dogodny, szybki i sprawny. Korzystamy z niego również do komunikacji z klientami, jeśli wymaga tego sytuacja i jest wola z obu stron, aby np. zacieśnić wymianę informacji zespołów technicznych.

Podsumowanie

To podstawowy stos technologiczny i narzędzia, które wykorzystujemy w Wilda Software. Z pewnością moglibyśmy wymienić tutaj jeszcze więcej technologii i programów, ale tak, jak podałem na początku - stos to lista najczęściej używanych i rekomendowanych klientom elementów technologicznych. To oczywiste, że w przypadku konkretnych projektów do głosu dochodzą specyficzne technologie, pasujące do danej sytuacji (np. Redis do cache'owania czy Electron do aplikacji desktopowych). Na tym polega rola software house'u, aby nie tylko zrealizować projekt, ale też rozważyć różne opcje i doradzić, co będzie najlepsze dla danego zleceniodawcy, biorąc pod uwagę charakter przedsięwzięcia, ograniczenia biznesowo-techniczne oraz posiadane doświadczenie.

Pozdrawiam i dziękuję - Jakub Rojek.

We can do quite a bit and what is more, our skills and resources are at your disposal. Take a peek at what we can offer you.

About author

Jakub Rojek

Lead programmer and co-owner of Wilda Software, with many years of experience in software creation and development, but also in writing texts for various blogs. A trained analyst and IT systems architect. At the same time he is a graduate of Poznan University of Technology and teaches at this university. In his free time, he enjoys playing video games (mainly card games), reading books, watching american football and e-sport, discovering heavier music, and pointing out other people's language mistakes.

Jakub Rojek