Spółka i-systems inwestuje w technologię blockchain

Milion złotych zainwestowała spółka i-systems w aplikację GamerHash. To niezwykle prosta w użytkowaniu aplikacja pozwalająca zamieniać niewykorzystywaną moc obliczeniową komputerów w produkty cyfrowe dla jej użytkowników lub wypłaty w Bitcoinach.

GamerHash to platforma na systemy Windows, która otwiera nowe możliwości przed użytkownikami domowych komputerów.

Kupując komputer, przeważnie za kilka tysięcy złotych, nie wykorzystuje się jego pełnego potencjału. Zwłaszcza, kiedy przegląda się strony internetowe, ogląda filmy czy słucha muzyki. Nasz PC przy takich zadaniach po prostu „się nudzi” – wyjaśnia Patryk Pusch, prezes zarządu GamerHash. – Chcieliśmy wykorzystać te zasoby, które użytkownicy już mają, czyli moc obliczeniową, i dać im możliwość wymiany jej na konkretne benefity. Przy aktualnych kursach Bitcoina mogą one mieć wartość nawet 300 złotych miesięcznie. Takimi benefitami są konta premium Netflix czy Spotify, bilety do kina, doładowania GSM, doładowania w platformach dla graczy, e-vouchery, wirtualne waluty w grach czy po prostu gry na PC – dodaje Pusch.

Uzyskana moc obliczeniowa poprzez GamerHash wykorzystywana jest do legalnego kopania kryptowalut, a w przyszłości będzie także wykorzystywana do renderingu CGI czy machine learningu. Oznacza to, że współdzielona moc obliczeniowa może posłużyć przy obróbce animacji i scen z wykorzystaniem efektów specjalnych czy mieć wpływ na szybsze nabywanie wiedzy przez samouczące się programy komputerowe.

Strona produktu sklepu internetowego GamerHash

Strona produktu sklepu internetowego GamerHash

Wsparcie na poziomie technologii

Poza bezpośrednią inwestycją, i-systems wesprze GamerHash technologicznie. Spółka wykorzysta swoje doświadczenie w obszarze systemów transakcyjnych i zajmie się rozbudową e-commercowej części GamerHash.

Jako i-systems zawsze chcemy być blisko najnowszych technologii. Inwestycja w GamerHash to dla nas naturalny krok w stronę rozwiązań blockchain. Wierzymy, że mają one dużo szersze zastosowanie niż tylko operacje finansowe, a rozproszone aplikacje znacząco wpłyną na sposób tworzenia nowoczesnych systemów IT – mówi Paweł Szewczyk, wiceprezes zarządu i-systems.

Wcześniej w GamerHash zainwestował także Tar Heel Capital Pathfinder. To część Tar Heel Capital, które kompleksowo wspiera innowacyjne i perspektywiczne przedsięwzięcia technologiczne będące na etapie seed i start-up.

Jak Polacy kupują w sieci?

Każdego roku w czerwcu, wszyscy zainteresowani sprzedażą w sieci oczekują nowego raportu “E-commerce w Polsce”, który publikowany jest przez międzynarodową firmę badawczo-technologiczną Gemius. Badanie daje dość solidny obraz krajowego e-handlu, jego potencjału oraz kierunków, w których marki powinny się rozwijać, aby sprostać oczekiwaniom rynku. Jaki jest e-konsument 2018 roku? Czy preferencje zakupowe rodaków mogły ewoluować w zaledwie 12 miesięcy? Jak szybko zmienia się polski e-commerce i na co zwrócić uwagę w sklepie internetowym, aby pozyskać nowych klientów?

Co i za ile kupujemy w internecie?

Według tegorocznego raportu, aż 56% wszystkich badanych deklaruje dokonywanie zakupów w sieci. Pozostałe 44% to natomiast osoby nie kupujące w internecie. Wydawać by się mogło, że odsetek osób obawiających się e-commerce jest dość spory, jednak liczba osób kupujących online rośnie z roku na rok. Wzrasta także kwota, wydawana na tego typu zamówienia. Porównując średnie wartości zakupów dokonywanych w internecie w 2017 i 2018 roku, specjaliści od e-commerce mogą być spokojni o przyszłość tego sektora. W tym roku najchętniej kupowanymi online, produktami są:
– ubrania;
– książki i filmy;
– bilety do kina lub teatru.

baner

Średnie miesięczne wydatki na zakupy w sieci

Średnia miesięczna wartość zakupu odzieży w ubiegłym roku wynosiła nieco ponad 80 zł, dzisiaj, to aż 224 zł. Na książki i filmy kilkanaście miesięcy temu wydawaliśmy średnio 37,30 zł, natomiast w tym roku, kwota ta wzrosła do 99 zł miesięcznie. Za bilety z kolei w 2017 roku, każdego miesiąca płaciliśmy około 35,50 zł, a obecnie to kwota aż 68 zł.

Obraz polskiego e-konsumenta

W Polskich sklepach internetowych najchętniej kupują osoby młode, do 35 roku życia, z wyższym wykształceniem, jednak niekoniecznie o bardzo wysokich dochodach. Raport Gemius pokazuje, że po zakupy w sieci coraz częściej sięgają także mniej zamożni Polacy. Współczynnik zakupów online rośnie bowiem już przy domowym budżecie w wysokości 2001 zł. Płeć oraz wielkość miejscowości nie stanowią różnicy w częstotliwości dokonywania zamówień w krajowych sklepach i portalach internetowych. Inaczej ma się sprawa przy zakupach zagranicznych, ale o tym później.

Zupełnie innych produktów w internecie poszukują kobiety i mężczyźni. Kobiety, znacznie częściej zamawiają odzież – co ciekawe, także tę sportową – kosmetyki i perfumy oraz artykuły dziecięce. Mężczyźni natomiast, chętniej kupują przez internet sprzęt RTV i AGD, podróże, sprzęt komputerowy, a także telefony.

Preferencje zakupowe Polaków

Szybko zmieniają się również czynniki motywujące do dokonywania zakupów, sposoby płatności oraz wysyłki. W tym roku, znacznie częściej niż w poprzednich latach, ankietowani zwracali uwagę na korzyści finansowe, które zmotywowałyby ich do częstszych zakupów w internecie. Aż 67% ankietowanych stwierdziło, że do zakupów online zachęciłyby ich niższe koszty dostawy (w ubiegłym roku tę opcję zaznaczyło 62% badanych). Ponadto, dodatkowa zniżka dla kupujących przez internet w 2018 roku jest uznawana za ciekawą alternatywę wśród 50% respondentów, podczas gdy w 2017 roku taki pogląd prezentowało jedynie 43% ankietowanych. Do efektywnych motywatorów należą również kody rabatowe, które w tym roku, na skali popularności uzyskały wzrost aż o 9 punktów procentowych, w porównaniu z rokiem ubiegłym. Obniżeniu natomiast uległa opcja szybkiej dostawy. Dwanaście miesięcy temu, aż 40% badanych zachęciłaby ona do częstszych zakupów w sieci, a obecnie, tę formę zaznaczyło niewiele ponad 30% wszystkich ankietowanych.

Jeśli przyjrzymy się bliżej formom płatności, które zainteresowałyby respondentów – tak jak w roku ubiegłym – najczęściej wybieranym sposobem finalizacji transakcji online jest szybki przelew poprzez serwis płatności (np. Blue Media, PayU, DotPay czy przelewy24). Co ciekawe, w porównaniu z 2017 rokiem, zarówno wśród kobiet jak i mężczyzn, wzrosła popularność płatności Blikiem, ponadto tendencję wzrostową zauważyć można także przy wykorzystaniu płatności kartą płatniczą podczas składania zamówienia. Tę formę jednak, znacznie chętniej wybierają mężczyźni.

Podobnie jak w poprzednim roku, najchętniej wybieraną formą wysyłki jest dostawa kurierem do domu, jednak zauważyć tu można tendencję spadkową. Rośnie natomiast liczba osób, które cenią tańszą dostawę oraz odbiór paczki w dogodnym dla siebie czasie. Raport wykazał, że coraz chętniej wybieramy darmową przesyłkę do domu lub odbiór w paczkomacie. W ubiegłym roku, paczkomat, jako najbardziej zachęcającą do zakupu formę dostawy, wybrało 50% osób. Obecnie, liczba ta wzrosła o 5 punktów procentowych.

Prowadząc sklep internetowy, warto pamiętać o preferencjach zakupowych polskich e-konsumentów, przykładowo wdrażając w systemie sprzedażowym nowe formy płatności czy wysyłki. Raport pokazał także, że coraz częściej Polacy zwracają uwagę na opinie innych użytkowników, a więc udostępnienie w systemie e-commerce, funkcji dodawania opinii lub zdjęć klientów z zakupionym produktem może okazać doskonałym narzędziem angażującym do zakupu. Dodatkowo, badanie wykazało, że do podjęcia decyzji zakupowej konsumenci korzystają z więcej niż jednego urządzenia, istotne jest więc zadbanie o rozwiązania sklepu online, które pozwolą na sprawne zakupy zarówno z poziomu komputera przenośnego, smartfona czy tabletu. Chcąc efektywnie sprzedawać w sieci należy także znać najnowsze trendy zakupowe. Jakie kierunki są coraz bardziej popularne?

Trendy e-commerce – global and mobile

Corocznie wzrasta liczba zakupów dokonywanych w zagranicznych sklepach internetowych oraz portalach aukcyjnych. Chociaż nadal są to głównie młodzi Polacy, z wyższym wykształceniem, zamieszkujący duże miasta i posiadający domowy budżet na poziomie wyższym niż 5000 zł, to w ubiegłym roku do zagranicznych transakcji przyznało się 16% badanych, natomiast 12 miesięcy później już aż 23% ankietowanych. Rośnie także rozpoznawalność zagranicznych serwisów sprzedażowych. W pytaniu o nazwy serwisów związanych z zakupami w internecie, platforma Aliexpress zdobyła 10% wszystkich głosów, zdobywając tym samym 5 miejsce, ebay z kolei uzyskał 9% odpowiedzi ankietowanych. Na pytanie o znajomość trzech zagranicznych portali e-commercowych w ubiegłym roku aż 53% badanych nie potrafiło udzielić odpowiedzi, obecnie, to wynik o kilkanaście punktów procentowych niższy. Takie wyniki świadczą o tym, że coraz chętniej kupujemy poza granicami naszego kraju, mamy zaufanie do międzynarodowych serwisów i cenimy bardzo atrakcyjne warunki finansowe globalnych e-commercowych graczy.

baner+globus

Zagraniczne serwisy, w których ankietowani dokonali zakupu w ostatnich 6 miesiącach.

Drugim, stale rosnącym trendem są zakupy dokonywane z poziomu urządzeń mobilnych. Nadal najczęściej wybieranym narzędziem do zamawiania w sieci jest laptop, jednak smartfon uzyskał wynik 58%, co oznacza wzrost o 11%, w porównaniu z ubiegłym raportem. Osoby kupujące online poprzez urządzenia mobilne, częściej także niż osoby korzystające z komputerów przenośnych deklarowały, że ich wydatki na zakupy w internecie wzrosną. Dodatkowo, najczęściej spotykanymi problemami podczas zamawiania w sieci są: niedostosowanie strony do zakupów na urządzeniach mobilnych, a dla młodszych użytkowników także brak aplikacji mobilnej.

Opisane wyżej trendy zakupowe mogą być cenną uwagą dla wszystkich, którzy na co dzień oferują swoje produkty w sieci. Nowoczesna aplikacja mobilna, w pełni zintegrowana ze sklepem internetowym marki może być doskonałym narzędziem zarówno marketingowym, jak i efektywnie wspierającym sprzedaż. Rosnąca popularność zagranicznych serwisów z jednej strony oznacza większą konkurencję, a więc i potrzebę wdrożenia takich rozwiązań technologicznych, które pozwolą skutecznie budować lojalność klientów. Z drugiej natomiast, pokazuje, że należy uruchamiać nowe kanały dotarcia do klienta. Nowoczesne systemy sprzedażowe umożliwiają pełną integrację z polskimi i zagranicznymi marketplace’sami, a także aplikacją mobilną. Warto zatem aktywnie inwestować w rozwiązania, które poprzez spełnienie oczekiwań zakupowych naszych klientów, wpłyną na sukces sprzedaży.

Poznaj 7 kluczowych potrzeb B2B Jak działa usługa post-payment?

Podsumowanie Q2 2018 w i-systems

Nadchodzące wakacje wcale nie oznaczają wolnych obrotów w e-commerce. Wręcz przeciwnie – to najlepszy czas na przygotowanie i wdrożenie nowych rozwiązań przed szczytowym okresem dla większości e-commerce. Oto przegląd kolejnego kwartału w życiu i-systems.

Nowe projekty

Drugi kwartał roku przyniósł szereg nowych kontraktów. Poza stricte związanymi ze sprzedażą w sieci oraz przechodzeniem klientów na rozwiązanie continuous integrations, warto zwrócić uwagę na kolejne projekty analityczne. Były one wykonane dla firmy specjalizującej się w dostawach izolacji termicznych oraz dla firmy dostarczającej narzędzia i maszyny dla przemysłu i budownictwa. Umowy te pokazują, jak dużo jest potrzeb związanych z rozwiązaniami dla handlu i dystrybucji.

Trendy w rozwoju systemów

Wśród najciekawszych, zaobserwowanych trendów na rynku i w pracach przy poszczególnych systemach, można wyróżnić szeroko pojęte integracje. Ostatnie prace dotyczyły przykładowo programów magazynowo-księgowych grupy Asseco. Duża część dotyczy i będzie dotyczyć integracji z marketplace. Są to zewnętrzne systemy, które agregują oferty z różnych miejsc. Wśród wyzwań w integracjach z marketplace, można zaliczyć dwukierunkowe integracje stanów magazynowych czy automatyczne wystawianie i usuwanie ofert, według wcześniej przyjętej logiki sprzedażowej.

Strategiczny rozwój organizacji

W drugim kwartale roku, przedstawiciele i-systems wzięli udział w kilku wydarzeniach na styku biznesu i technologii. Były to m.in.: Retail Marketing Forum, XIV Targi eHandlu, E-commerce Innovations, E-commerce B2B czy E-commerce Universe. Podczas nich skupiliśmy się na edukowaniu rynku oraz przedstawianiu efektów prac działu research & development. Wśród nich najwięcej miejsca zostało poświęcone continuous integrations, czyli ciągłej integracji. Jest to odpowiedź na szybko zmieniające się oczekiwania rynkowe, a także na chęć posiadania stale rozbudowanego i aktualnego systemu e-commerce. Więcej na temat continuous integrations można przeczytać na stronie i-systems: https://www.i-systems.pl/continuous-integration

Rozmowy podczas Targów eHandlu

Rozmowy podczas Targów eHandlu

Wewnętrzne projekty podnoszące jakość

Wśród wewnętrznych projektów, opracowywanych w ostatnich trzech miesiącach, można wyróżnić Progressive Web App. To rozwiązanie zaprojektowane w celu zapewnienia klientowi jak najlepszych doświadczeń, niezależnie od tego z jakich urządzeń korzysta. Jej idea na pierwszy rzut oka ma dużo wspólnego z możliwościami Responsive Web Design. Zastosowanie rozwiązania ma jednak głębszy sens, niż tylko poprawne wyświetlanie się na każdym dostępnym urządzeniu. Jej podstawowym celem jest bowiem znaczna poprawa wydajności i szybkości działania systemów, poprzez zmianę organizacji zadań wykonywanych przez część frontendową i backendową systemów. Więcej o rozwiązaniu PWA można przeczytać na blogu: https://blog.i-systems.pl/progressive-web-app-ekosystemie-e-commerce/

Wybrane nagrody

Na początku kwietnia i-systems zostało wyróżnione w rankingu FT1000. Ranking powstaje we współpracy Financial Times – jednego z najbardziej opiniotwórczych światowych dzienników gospodarczych i finansowych oraz Instytutu Badawczego Statista – wiodącego dostawcy danych o rynkach i konsumentach. Miejsce firmy w rankingu zdeterminowane jest wzrostem przychodów, jakie dana firma odnotowała w latach 2013-2016. Więcej informacji dostępnych jest na blogu: https://blog.i-systems.pl/firma-systems-rankingu-ft1000/ Poza tym, warto również wspomnieć o pojawieniu się i-systems w rankingu 500 najlepszych dostawców rozwiązań dla B2B z Polski i Ukrainy, odpowiedzialnych za projektowanie oraz rozwój systemów IT. Ranking został przygotowany przez agencję Clutch.

Aby nie pominąć kolejnego podsumowania kluczowych działań w rozwoju i-systems, zapraszamy do zapisania się do newslettera. Kolejne podsumowanie kwartału pojawi się na blogu na początku października.

Zapisz się do newsletteraRelacje inwestorskie

#225 Dlaczego należy jak najszybciej zainstalować certyfikat SSL

Bezpieczeństwo danych w internecie jest bardzo ważne – nie tylko dla ich właścicieli, ale także dla osób, które dane te przetwarzają. Od pewnego czasu mówi się głośno o tym, że certyfikat SSL staje się obowiązkową częścią strony internetowej i faktycznie tak jest, szczególnie jeśli chodzi o e-commerce. Niejednokrotnie zdarzają się jednak e-sklepy, które tego certyfikatu nie posiadają. Co wtedy? Czy mają się one czego obawiać? Co ze stronami firmowymi i blogami? Okazuje się, że czas najwyższy przesiąść się na „zabezpieczone strony www”.

Z dzisiejszej lekcji dowiesz się:

      • czym jest certyfikat SSL;
      • dlaczego należy go zainstalować, jeśli go jeszcze nie pisiadasz.

Google zapowiedziało zmiany

Od lipca Google Chrome, czyli jedna z częściej używanych przeglądarek internetowych w Polsce, ale także Safari i FireFox oznaczać będą strony bez certyfikatu SSL, jako niebezpieczne. Co to oznacza? Przede wszystkim osoba, która odwiedzi nasz sklep, bloga czy portal otrzyma jeden z poniższych komunikatów.

unsecure1

lub

unsecure

Przełożyć się to może na spadek konwersji, bowiem informacja o niezabezpieczonym blogu nie musi wywrzeć negatywnych emocji u czytelnika, jednak ta sama informacja na stronie, która prowadzi do finalizacji zamówienia i płatności może spowodować, że klient zrezygnuje z zamówienia. Warto też dodać, że z przeglądarki Chrome w wersji na komputery korzysta około 50% wszystkich polskich internautów. Na tabletach robi to 60% osób, a na urządzeniach mobilnych około 70%.

Czym jest certyfikat SSL?

Mówiąc prostym językiem to protokół, który odpowiada za bezpieczne, szyfrowane przesyłanie danych użytkowników odwiedzających naszą stronę internetową, czy też witrynę e-sklepu. Aby sprawdzić, czy nasza strona korzysta z certyfikatu wystarczy zweryfikować, czy działa ona pod adresem https://nazwastrony.domena.pl. Jeśli obok adresu jest ikona kłódki, a sam adres zaznaczony jest na zielono, to możemy mieć pewność, że strona jest bezpieczna. Warto zauważyć, że bezpieczna strona nadal wymaga silnych haseł i zachowania wszelkich zasad bezpieczeństwa w internecie.

Czy musisz mieć certyfikat SSL?

Tak naprawdę nikt nie musi mieć certyfikatu, jednakże zapowiedziane zmiany sprawią, że strony pozbawione tego zabezpieczenia będą niżej indeksowane w wyszukiwarkach i mogą generować dużo niższą, niż dotychczas, sprzedaż, a kampanie AdWords będą mniej skuteczne. To tylko kilka najważniejszych, negatywnych skutków.

secure

Instalacja certyfikatu przynosi wiele korzyści. Najważniejsze z nich to:

  • Pozytywny wpływ na pozycjonowanie strony – jak wspomnieliśmy, brak tego rozwiązania będzie miał odzwierciedlenie w niższych pozycjach strony podczas wyszukiwania jej w Google.
  • Dane przesyłane i pobierane przez stronę, w tym płatności internetowe, są bezpieczne i nie sprawią, że klient stanie się ofiarą fraudu.
  • Przeglądarki będą pokazywać naszą stronę jako bezpieczną – co za tym idzie, nasze serwisy będą wzbudzać zaufanie wśród osób je odwiedzających.
  • Instalacja certyfikatu utrudnia hakerom ominięcie systemów zabezpieczających i nie naraża Twoich klientów na niebezpieczeństwo wycieku ich danych.

Jak zdobyć certyfikat SSL?

Certyfikat udostępniany jest przez dostawcę usług hostingowych. Czasami jest on częścią zakupionego pakietu, np. domena + serwer, a w niektórych przypadkach po prostu można aktywować go za darmo. Zmiany, które nadchodzą, sprawiają, że wielu dostawców decyduje się na tę właśnie darmową opcję. Dodatkowo w internecie pojawiają się rozwiązania umożliwiające darmową instalację certyfikatu. Są to na przykład: Let’s Encrypt, czy też Cloudflare. Ich instalacja jest trochę trudniejsza i co najważniejsze – nie zawsze mają one gwarancję finansową w przypadku jego złamania. Sa one jednak wystarczające dla blogów lub stron, które nie przetwarzają danych pochodzących z płatności lub nie zbierają danych osobowych potrzebnych do realizacji zamówień.

Na co zwracać uwagę, kiedy instalujemy SSL?

Przy wdrażaniu HTTPS trzeba zwracać uwagę na kilka bardzo ważnych szczegółów, które – jeśli nie zostaną dopilnowane – doprowadzą do błędów. Najważniejsze z nich to:

  • Brak przekierowań pomiędzy wersjami http i https. Instalacja certyfikatu powoduje utworzenie dwóch wersji strony, jednej z przedrostkiem http://, a drugiej z https://. Do obu stron dostęp będzie miał każdy użytkownik, ale także roboty indeksujące Google, które potraktują je jako zduplikowany content, co jest bardzo złe dla pozycjonowania, a czasem może skończyć się nawet karami w Google. Warto skorzystać z przekierowań 301 na witrynie po wdrożeniu certyfikatu SSL. Sprawia to, że roboty Google odczytują treść widniejącą pod adresem bez certyfikatu jako dostępną tylko i wyłącznie na wersji strony z HTTPS.
  • Błędna indeksacja strony, co może doprowadzić do tego, że witryna lub jej podstrony nie będą pojawiały się w wyszukiwarce Google. W przypadku wdrożenia strony z certyfikatem bezpieczeństwa warto ręcznie zindeksować stronę główną, czy najważniejsze kategorie i produkty.
  • Brak monitorowania nowej witryny w Google Analytics oraz Google Search Console. Po instalacji certyfikatu należy we wspomnianych narzędziach uaktualnić adresy stron, bowiem http:// oraz https:// to oddzielne adresy. Jeśli nie uaktualnimy ich, nie będziemy mieć aktualnych danych analitycznych.

Na koniec warto sprawdzić, jakie jeszcze narzędzia są wykorzystywane na naszej stronie lub w sklepie. Wiele z nich wymaga podania aktualnego adresu strony, by działały one odpowiednio. Mogą być to rozwiązania PUSH, formularze zapisów do newsletterów, czy też do komentowania.

Jak widać certyfikat SSL wydaje się być rozwiązaniem obowiązkowym, szczególnie teraz, gdy Google wprowadziło takie zmiany. Przede wszystkim sklepy internetowe powinny jak najszybciej wprowadzić zmiany, bowiem dla nich koszt utraty klientów będzie największy.

Tagi: Dlaczego należy jak najszybciej zainstalować certyfikat SSL

JMeter – praktycznie zastosowanie

Część ogólna

Apache JMeter jest narzędziem do przeprowadzania testów obciążeniowych (wydajnościowych). Testy te są bardzo ważną częścią każdego serwisu – pozwalają oszacować jak duży ruch jest w stanie obsłużyć nasz serwer www, baza danych itp. Niżej wymieniony wpis będzie dotyczył wykorzystania JMetera do przeprowadzania testów obciążeniowych np. aplikacji www. Wersja programu – 3.1. Każda z niżej wymienionych opcji dostępna jest po kliknięciu prawym klawiszem myszy.

Na początku musimy zdefiniować grupę wątków. Znajdziemy go w Test plan → Add → Threads (Users) → Thread group

Grupa wątków służy do zarządzania ilością żądań, które będą wysyłane w ciągu jednej sekundy:

Number Of Threads – ilość wątków używanych do wysyłania żądań,
Ramp-Up Period – w ciągu ilu sekund mają zostać wysłane żądania,
Loop Count – ile razy dany test ma się powtórzyć,
Delay Thread creation until needed – bez oznaczonej tej opcji, JMeter przydziela od razu całą pamięć dla wszystkich wątków. Oznacza to, że nawet jeżeli użytkownik wykona swoją próbkę po np. 30 minutach to pamięć będzie dla niego zarezerwowana od razu po uruchomieniu skryptu
Scheduler – możemy ustawić w jaki dzień i o której godzinie chcemy uruchomić test.

Dla przykładu, jeżeli podamy number of thread na 100, ramp-up period na 10, wtedy na każdą sekundę będzie wysyłanych 10 użytkowników (żądań).

t1

Następnym krokiem będzie skonfigurowanie testu dla wcześniej utworzonej grupy wątków. Jako, że żądania JMetera są ubijane przez wiele serwisów (brak odpowiedniej identyfikacji), na początku należy skonfigurować nagłówek z User-Agent. Znajdziemy go w Thread Group → Add → Config Element → HTTP Header Manager.

t2

Kolejnym krokiem będzie zdefiniowanie domyślnego adresu url. Jest to o tyle ważne, że usprawnia proces zmiany głównej ścieżki. Może zmienić się nazwa domeny z np. teststrona.pl na testowy.pl. Jeżeli nie przygotowalibyśmy domyślnego adresu należałoby zmienić adres w każdym kroku testu gdzie wykonujemy żądania na sprecyzowany adres url np. test.pl/home. Znajdziemy go w Thread Group → Add → Config Element → HTTP Request Defaults.

t3

Jeżeli chcemy, aby każde żądanie pobierało nam dodatkowo zawartość dynamiczną strony (zdjęcia, js itp.), należy w HTTP Request Default lub w każdym HTTP Request z osobna, oznaczyć Retrieve All Embedded Resources. Parallel Downloads wskazuje ile ma być równolegle pobieranych zasobów, a URLs must match wskazujemy z jakiego adresu url chcemy pobierać zasoby.

t4

Dla przykładu wysłałem dwa żądania na ten sam adres url. Jeden pobiera zawartość dynamiczną a drugi statyczną:

t5

Następnie definiujemy Random Controller. Dodajemy go w celu zwiększenia losowości wykonywanego testu. Po jego użyciu wybierana jest tylko jedna akcja z kilku dostępnych w ramach danego wątku w określonym teście. Thread Group → Add → Logic Controller → Random Controller.

t6

Dla Random Controllera dodajemy HTTP Request. Służą one do wskazywania na jaki adres url mają być wysyłane żądania. W poprzednim kroku zdefiniowaliśmy HTTP Request Default, więc teraz pozostaje wskazać już tylko ścieżkę docelową. Thread Group → Add → Sampler → HTTP Request

t7

Dodatkowo w tym miejscu możemy definiować:

protocol – jaki to jest protokół tzn http/https,
method – jaką metodą ma być wysyłane żądanie dla zasobu (GET, POST itp.),
path – podajemy tutaj naszą docelową ścieżkę,
parameters/body data – możemy przekazać dodatkowe parametry/dane

Bardzo ważnym elementem są również słuchacze. Zbierają one różne dane o próbkach (żądaniach), w zależności od wybranego elementu. Oczywiście można wybrać każdy z nich: Thread Group → Add → Listener → View Results in Table

t8

Należy pamiętać, że dużym ograniczeniem dla JMeter-a są zasoby oraz łącze. Podczas działania testu zużywane są spore zasoby pamięci ram oraz łącza.

Uruchamianie JMeter-a poza GUI

Komendą do uruchamiania JMeter-a poza GUI jest:

sh jmeter -n -t /home/dawid/testObciazeniowy.jmx

Aby uruchomić test tą komendą musimy znajdować się w katalogu gdzie zainstalowaliśmy Apache JMeter → bin

Bardzo ważne są domyślne ograniczenia Javy, które wynoszą raptem 1 GB pamięci ram. Z doświadczenia wiem, że jest to bardzo mało, jeżeli chcemy zasymulować duży ruch. W przypadku gdy chcemy ustawić większą ilość pamięci dla procesów Javy wykonujemy nasz skrypt z dodatkowymi parametrami:

JVM_ARGS="-Xms13000m -Xmx13000m -XX:NewSize=13000m -XX:MaxNewSize=13000m" && export JVM_ARGS && sh jmeter -n -t /home/dawid/testObciazeniowy.jmx

Dodatkowo nie uruchamiając testu poprzez GUI możemy otrzymać jego wynik w pliku. Należy do naszej komendy dodać jeszcze jeden parametr. Finalna komenda wygląda następująco:

JVM_ARGS="-Xms13000m -Xmx13000m -XX:NewSize=13000m -XX:MaxNewSize=13000m" && export JVM_ARGS && sh jmeter -n -t /home/dawid/testObciazeniowy.jmx -l /home/dawid/wynikTestu.csv

Uruchomienie skryptu – widok terminal:

t9

Wynik w postaci pliku csv:

t10

Wyniki testu

Poniżej przedstawię wyniki testu, który przeprowadzałem na jednym z naszych sklepów. Narzędzie wykorzystane do rejestrowania ruchu to relic. Jak widać na screenie ruch wyrażony jest w rpm czyli „requests per minute” (żądania na minutę):

t11

Podsumowanie testu w pliku prezentuje się w następujący sposób:

t12

Screen jest podglądowy, ogółem wszystkich wierszy jest dużo więcej.

Autorem tekstu jest Dawid Adamczyk.

Progressive Web App w ekosystemie e-commerce

Progressive Web App (PWA) to rozwiązanie, które dopiero zaczyna pojawiać się w kontekście e-commerce. Powszechnie kojarzy się tylko z nowoczesnymi platformami, jednak jej idea oraz główne założenia mają głębszy sens i coraz częściej znajdują zastosowanie w systemach sprzedażowych.

Cechy Progressive Web App

Progressive Web App zaprojektowane zostało w celu zapewnienia klientowi jak najlepszych doświadczeń, niezależnie od tego z jakich urządzeń korzysta. Takim urządzeniem może być desktop, smartfon, telewizor, a w przyszłości także inne nośniki z dostępem do internetu. Z punktu widzenia użytkownika, PWA działa jak aplikacja mobilna, jednak uruchamiana jest jak standardowa strona internetowa czy serwis transakcyjny. Aby rozwiązanie spełniało cechy PWA, musi być m.in.: w pełni responsywne, serwowane przez protokół https, w celu zapewnienia bezpieczeństwa, opisane przez plik manifest.json, umożliwiające wysyłanie notyfikacji użytkownikom oraz działające także w trybie offline.

Działanie Progressive Web App w trybie offline

Wśród czynników wyróżniających PWA na tle innych rozwiązań mobilnych podaje się właśnie możliwość jej działania w trybie offline. Dzieje się to dzięki procesom Service Workers, które ściągają część danych w tle, podczas korzystania użytkownika z aplikacji. W czasie tworzenia Progressive Web App, można precyzyjnie określić metodę działania Service Workers i tego, jak dużo działań ma być wykonywanych w tle. PWA bardzo dobrze radzi sobie również w momentach ograniczonego dostępu do internetu.

Różnica miedzy Progressive Web App (aplikacją webową), aplikacja mobilną i responsive web design

Pisząc o rozwiązaniach mobilnych, często spotykamy się z wieloma, podobnymi nazwami. Warto więc sprecyzować, czym dokładnie charakteryzują się poszczególne rozwiązania.

– Aplikacja mobilna, tworzona jest wyłącznie na urządzenia mobilne. Z punktu widzenia funkcjonalności, aplikacje mobilne są najbogatszym rozwiązaniem, z którego użytkownik może korzystać na smartfonie. Oferują one bowiem użytkownikom możliwości wysyłania push notyfikacji, wykorzystania skanera kodów kreskowych czy użycia beaconów (w celu ustalenia lokalizacji).

– PWA (aplikacja webowa) to rozwiązanie, które w swojej idei oddziela frontend od backendu, zwana także jako headless ecommerce Jest to aplikacja internetowa uruchamiana tak jak zwykła strona internetowa działająca po stronie przeglądarki użytkownika, ale kreująca wrażenie działania na zasadzie natywnej aplikacji mobilnej.

– Aplikacja systemu – w powszechnym znaczeniu są to wszystkie rozwiązania i komponenty składające się na działanie systemu. W kontekście e-commerce można odnieść to do całego core danego oprogramowania.

– Responsive Web Design to technika projektowania systemu, która umożliwia jak najlepszą jego prezentację wizualną, niezależnie od rodzaju urządzenia, na którym wyświetlane są treści. Dzięki jej zastosowaniu, wygląd systemu i układ wykorzystanych w nim treści są automatycznie dostosowywane do rozmiaru okna przeglądarki, z poziomu której system jest wyświetlany.

Główna idea PWA – hermetyzacja zadań

Skoro istnieją bogatsze w funkcje rozwiązania mobilne, pojawia się pytanie, dlaczego warto zwrócić uwagę na Progressive Web App? Na początku trzeba mieć świadomość, że słowo app, w kontekście PWA, nie do końca dotyczy rozwiązań mobilnych. Chodzi bardziej o aplikację i budowę całego systemu, który przy okazji będzie się dobrze wyświetlał na urządzeniach mobilnych.

Główną ideą Progressive Web App jest poprawa wydajności i szybkości działania systemów. Dzieje się to za pomocą hermetyzacji zadań, czyli budowania systemu w taki sposób, aby jedna jego część odpowiadała tylko za jedną wykonywaną czynność.

System transakcyjny sprowadza się do części backendowej, czyli serwerowej oraz frontendowej, którą nazwać można kliencką. Komunikację między tymi dwoma komponentami umożliwia REST API, wykorzystujące format JSON. Komunikacja odbywa się poprzez protokół HTTP, czyli o konkretne dane, wysyłane jest konkretne zapytanie. W takim modelu, serwer jest tylko wykonawcą zapytań, dzięki czemu jest on dużo szybszy.

Sama praca nad systemem też jest podzielona między frontendem a backendem. Odrębne zespoły pracują nad niezależnymi jednostkami bez wzajemnej ingerencji, przy czym system nadal działa jako całość. To sprawia, że proces wdrożenia i rozwoju jest bardziej poukładany i istnieje większa kontrola nad projektem.

Progressive Web App dla użytkownika końcowego

Stworzenie części frontendowej w rozwiązaniu PWA może wizualne dużo nie różnić się od standardowego rozwiązania. Dla klientów jednak, zauważalnych będzie kilka istotnych różnic:

– szybsze działanie strony poprzez lepszą logikę funkcjonowania poszczególnych części składowych – przyspieszenie nawet o 30%,

– poprawa UX, a co za tym idzie, lepsze doświadczenie zakupowe,

– możliwość odczuwania takich samych doświadczeń zakupowych, niezależnie od rodzaju wykorzystywanego przez użytkownika urządzenia.

Progressive Web App dopiero zaczyna pojawiać się w kontekście e-commerce. Pierwsze badania przeprowadzone przez 5 Miles czy Alibaba pokazują, że jest to rozwiązanie potrafiące podnieść konwersję (nawet o 76%), poprawić wydolność systemów (nawet o 88%), a także zmniejszyć ilość wykorzystywanych danych nawet o pięć razy. Wszystkie te czynniki oraz przeprowadzone w ramach działań Research & Development i-systems prace, zaowocowały powołaniem zespołu kontekstowego, odpowiedzialnego za Progressive Web App. O kolejnych działaniach tego zespołu oraz jego pierwszych wdrożeniach będziemy informować na blogu i-systems. Już teraz zachęcamy do lektury.

Zapisz się do newslettera

#224 Lean Management w e-commerce

Lean Management jest metodologią, której celem jest poprawa wyników biznesowych, poprzez dążenie do zmniejszenia ilości czynników generujących zbędne koszty w całym procesie. Mowa tutaj o wszystkim: o niepotrzebnym drukowaniu papierowych dokumentów o poprawie obiegu informacji, czy ulepszeniu procesów produkcji. Wywodzi się ona właśnie z sektora produkcyjnego, ale coraz częściej wykorzystuje się w sektorach usługowych, a także w e-commerce. Lean Management stawia klienta na pierwszym miejscu. Organizacja musi określić jakie są oczekiwania klienta, jakie są dla niego ważne wartości, a następnie dopasować się do nich i poczynić to w jak najlepszy, a jednocześnie jak najbardziej optymalny sposób. Największe marki nie ukrywają, że korzystają z niej w swojej codziennej działalności, warto sprawdzić dlaczego.

Z dzisiejszej lekcji dowiesz się:

    • czym jest Lean Menagement;
    • jak sprawdza się w e-commerce.

Dlaczego Lean management?

Trzeba zacząć od tego, że klienci, którzy kupują online, robią to w sposób dla nich najwygodniejszy. Wybierają takie sklepy, które mogą zrealizować ich potrzebę w sposób szybki i bezproblemowy. Dla wielu cena gra rolę, ale nadal są tacy, którzy mogą zapłacić więcej, jeśli mają pewność, że zostaną oni odpowiednio obsłużeni. Należy pamiętać, że są oni świadomi cen, potrafią je sprawdzać, często je porównują i analizują u którego sprzedawcy zakup jest najbardziej opłacalny. Średnio przed podjęciem decyzji zakupowej e-konsumenci przeglądają trzy witryny internetowe. By sprzedawca mógł więc być konkurencyjny wobec innych handlowców, nie powinien walczyć tylko ceną, bowiem doprowadza to do sytuacji psujących rynek. Należy więc zwiększyć wartość dodaną do usługi, polepszyć jakość obsługi klienta i stworzyć procesy, które będą perfekcyjne, na przykład obniżenie czasu realizacji zamówień, czy zwiększenie poziomu zadowolenia klientów.

Marki dbają także o swój wizerunek. Oczywiście nadal pojawiają się brandy, które potrafią strzelić sobie samobója w komunikacji z klientem, ale tego typu działań powinno być coraz mniej. Niestety, w dobie powszechnego dostępu do internetu – kryzysy wypływają na szerokie wody sieci bardzo szybko. Wracając do marek: koncentrują się one na kliencie, ale pokazują też, że są sfokusowane na problemy społeczne czy ekologiczne. Przykładowo w 2012 56% konsumentów na świecie przykładało uwagę do problemów ekologicznych, w 2015 było to już 61%. W ubiegłym roku badanie przeprowadzone w UK pokazało, że 70% ankietowanych menadżerów wysokiego szczebla stwierdziło, że zrównoważony wizerunek marki jest siłą napędową wzrostu i innowacji w firmie. Koncepcja lean bardzo dobrze się do tego wpasowuje. Ograniczenie zbędnych kosztów, materiałów i innych elementów, może być jednym ze sposobów na uzyskanie przewagi konkurencyjnej.

Trzy etapy wdrożenia Lean w logistyce dla e-sklepów

Zarządzanie Lean w dystrybucji opiera się na trzech filarach: możliwości reagowania na pełny popyt, dostarczanie przesyłek w obiecanym terminie oraz utrzymanie zapasów magazynowych przy minimalnych kosztach. W e-handlu sprzedawcy muszą dostarczyć klientowi produkty bez uszkodzeń. W środowisku dystrybucyjnym istnieje zagrożenie, że coś może pójść nie tak, szczególnie, że wiele procesów wykonywanych jest ręcznie, a czynnik ludzki może zwodzić, tak samo, jak automatyczny. Lean Management w czasie rzeczywistym koncentruje się na natychmiastowym wykryciu nieprawidłowości w procesie. Jeśli odpowiednio wcześnie zauważymy na przykład, że towar jest uszkodzony lub uszkodzone jest pudełko, w którym go wysyłamy – unikniemy problemów na późniejszym etapie.

Lean Management może również pomóc w zapobieganiu buforowaniu towarów, na przykład poprzez dynamiczne pobieranie zamówień za pośrednictwem aplikacji, a także poprzez odpowiednie przeszkolenie pracowników, aby zamówienia były przetwarzane tak szybko, jak to możliwe. Jeśli tak się dzieje, to zapotrzebowanie na nadwyżki zapasów znika. Dodatkowo ważne w Lean jest wyeliminowanie niepotrzebnych procesów i zachowań w obsłudze klienta. Generowanie papierowych dokumentów warto zastąpić elektronicznymi, optymalizacja pracy BOK wpływa na minimalizację kosztów stałych, może przyczynić się do ogólne niższych kosztów i atrakcyjniejszej ceny detalicznej

Warto podejrzeć innych

Duzi handlowcy tacy, jak Amazon już od dawna skoncentrowani są na kliencie. Jeff Bezos od początku podkreślał, jak ważny jest dla niego klient, a na wiele jego decyzji mają wpływ zasady Lean. Konkretny przykład znajduje się w podsumowaniu metod transportu na stronie, który koncentruje się wokół obiecanej daty dostawy. Alternatywy transportowe pojawiają się na liście tylko wtedy, gdy mogą spełnić żądany czas dostawy.

Jak można przeczytać w jednym z artykułów „Biorąc pod uwagę ewolucję firmy Amazon z księgarni do sklepu z praktycznie wszystkim, musieliśmy na nowo wymyślić automatyzację, stosując zasadę – utrzymuj ludzi w celu uzyskania wysokiej jakości, złożonej pracy i używaj maszyn do wspierania tych zadań.

Amazon jest kopalnią pomysłów i wiele z nich jest do skopiowania na rodzimym rynku. Paczki przechodzą procesy weryfikacji, powtarzające się problemy z jakimś produktem sprawiają, że jest on blokowany na stronie do wyjaśnienia sytuacji. Bezos przykazuje, by każdy z menadżerów wyższego szczebla przynajmniej jeden dzień przepracował w dziale obsługi klienta i na własne oczy zobaczył, z jakimi problemami boryka się bok. Kaizen, czyli ciągłe doskonalenie się wiąże się z metodologią Lean. W fabrykach Toyoty szefowie także spędzają czas z pracownikami linii produkcyjnych. Czasem dzięki rozmowom i uwagom, można poprawić małe rzeczy, które dają duże oszczędności.

Lean dla każdego

Lean management może być wdrożony w każdym biznesie. To trochę zmiana metod myślenia i zarządzania. W każdym procesie możemy doskonalić się i eliminować z niego błędy. W ten sposób działa na przykład sieć parków Disneya, w których każdy etap zabawy jest pewnym procesem. Błąd w nim może mieć wpływ na pozostałe, dlatego Disney tak bardzo naciskał na testy, analizy, kontakt z klientem, by poprawić każdy z nich. Może warto więc wprowadzić Lean w Twoim sklepie i pozbyć się zbędnych obciążeń i kosztów?

Tagi: #224 Lean Management w e-commerce

Jak sprawnie łączyć dedykowaną ofertę z modelem SaaS?

Od początku działalności naszej firmy, główną, przyświecającą nam podczas realizacji wszystkich projektów ideą jest jakość. Zawsze jednak zastanawialiśmy się nad tym, jak powinna działać organizacja dostarczająca produkty stricte technologiczne, które kierowane są zarówno do dużych, jak i mniejszych klientów. Co zrobić, aby firma była zawsze gotowa na zachodzące na rynku zmiany? W ostatnim czasie, najważniejszym aspektem stało się dla nas znalezienie balansu pomiędzy obsługą dużych, oczekujących stabilizacji klientów a zachowaniem w naszej firmie elastyczności i sprawnej decyzyjności, które są niezbędne w funkcjonowaniu na rynku e-commerce.

W artykule opisujemy innowacyjne rozwiązania i metody, które stworzyliśmy w ciągu ostatnich kilkunastu miesięcy. Opowiadamy również o tym, w jaki sposób nowe możliwości zmobilizowały firmę do zmian organizacyjnych.

Zespół R&D, czyli focus na Continuous Integration

Celem zespołów R&D (Research and Development) jest baczna obserwacja światowych tendencji rynkowych oraz tworzenie takich rozwiązań technologicznych, które pozwolą marce na budowanie przewagi konkurencyjnej. R&D to jednak nie tylko ogromna szansa dla firm – to również swego rodzaju wyzwanie. W krótkim czasie zespoły te będą generować spore koszty, ponieważ rzadko kiedy mogą od razu dostarczyć rozwiązanie, dzięki któremu dana firma będzie na rynku postrzegana jako unikalna. Takie działania wymagają czasu, a co za tym idzie – sporych nakładów finansowych. Nie każda organizacja chce i może sobie na to pozwolić.

W naszym przypadku najważniejszym zadaniem powołanego zespołu R&D stało się wdrożenie metody Continuous Integration, dzięki której klienci otrzymują zupełnie nowy standard systemów sprzedaży. Dla wielu osób akronim CI może brzmieć dość enigmatycznie, jednak dla nas, to jeden z najważniejszych standardów e-commerce na najbliższe lata.

Continuous Integration, czyli ciągła integracja, to jedna z praktyk programowania. Polega ona na pracy całego zespołu programistów, którzy w sposób ciągły wprowadzają zmiany w kodzie. Wspólna praca nad kodem zapewnia najwyższą jakość dostarczanych rozwiązań, ponieważ wytworzony kod jest spójny, a praca systemu efektywna. CI to także nowe podejście do testów. Stałe wprowadzanie zmian do systemu wymaga bowiem przeprowadzania tysięcy automatycznych testów, po których wygenerowany zostaje specjalny raport umożliwiający znacznie szybsze odnajdywanie ewentualnych konfliktów i natychmiastowe ich rozwiązanie. W efekcie, do systemu regularnie wprowadzane są nowe, zawsze dobrze działające funkcjonalności. Dzięki zastosowaniu CI wyeliminowaliśmy również problem związany z aktualizacjami systemów, także tych dedykowanych. Marka posiada dostęp do jedynej, zawsze najnowszej wersji systemu, ponieważ system nie jest wersjonowany. Dodatkowo, jeśli klient chciałby dopasować konkretne rozwiązania do swoich potrzeb biznesowych, to nie stanowi to żadnego problemu – CI nie kłóci się z dedykowanymi rozwiązaniami.

Nowe możliwości motorem napędowym zmian

Wraz z wdrożeniem innowacyjnej metody pracy, mającej wpływ na rozwój obszaru e-commerce obsługiwanych przez nas marek, koniecznym stało się wypracowanie zupełnie nowego modelu biznesowego. Dokonaliśmy zmian technologicznych, za którymi poszły również transformacje organizacyjne – komentuje Jarosław Kubisiak, Dyrektor Zarządzający

Pierwszą z tych zmian była reorganizacja działów IT. Oprócz zespołów kontekstowych, składających się ze specjalistów danej dziedziny, powstały mikrozespoły – odpowiedzialne za konkretne projekty. Na każdy zespół składają się wszystkie kompetencje, niezbędne do realizacji danego celu. Takim celem może być wdrożenie lub utrzymanie danego systemu. Zespół charakteryzuje się sporą dynamiką, ponieważ zmienia on swoje zasoby w zależności od aktualnych potrzeb projektowych. Posiadamy też zespoły na stałe przypisane do danych klientów. Ten model organizacji pracy jest wydajny i bardzo efektywny z punktu widzenia specyfiki współczesnego IT.

Poza organizacją codziennej pracy nad rozwiązaniami, musieliśmy zmienić także kwestie związane z rozliczaniem naszych klientów. System wdrożony w CI od samego początku dostarcza klientom wszystkie funkcjonalności i rozwiązania, które jako firma wypracowaliśmy i rozwijamy od lat. Dodatkowo, żaden klient posiadający system oparty o CI nie ponosi kosztów licencji na poszczególne funkcjonalności. Powstało więc pytanie o to, w jaki sposób sprawiedliwie rozliczać klientów, którzy mają różne potrzeby i prowadzą biznesy o różnej skali. Na bazie lat doświadczeń stworzyliśmy dedykowany model rozliczeń, który pozwala nam zachować elastyczność współpracy.

Dedykowany SaaS, czyli efekt biznesowy wprowadzonych zmian

Stałe dostarczanie do systemu kolejnych elementów i funkcjonalności sprawiło, że oprócz wprowadzenia opisanych już wcześniej zmian, konieczne stało się stworzenie zupełnie nowego modelu biznesowego. Tak właśnie powstała koncepcja modelu o nazwie „Dedykowany SaaS”. Okazało się, że rozwiązania dedykowane i te oferowane w modelu SaaS doskonale ze sobą współgrają. Połączenie dwóch popularnych form e-commerce sprawia, że zostają w pełni wykorzystane ich zalety oraz wyeliminowane minusy.

W efekcie, klient otrzymuje innowacyjny system, który charakteryzuje się:
– niższym kosztem wdrożenia i rozwoju oprogramowania
– możliwością tworzenia dedykowanych rozwiązań
– dostępem do wszystkich funkcjonalności oferowanych przez dostawcę i jego oprogramowanie ecommerce

– szybkim Time to Market
– umożliwieniem wieloletniego rozwoju

Wszystkie zmiany, jakie zaszły w naszej organizacji w ostatnim czasie były dla nas przełomowe. Obok zmiany modelu biznesowego, najważniejszym efektem wszystkich wprowadzanych przez nas zmian jest rosnąca satysfakcja naszych klientów. To właśnie ona sprawia, że każdego dnia podejmujemy coraz to nowe wyzwania technologiczne i regularnie ulepszamy oferowane rozwiązania.

Krótko o SOLID

Podstawowych zasad programowania obiektowego jest wiele. W dzisiejszym wpisie rozważymy jedną z nich, zaproponowaną przez Roberta C. Martina – SOLID.

SOLID to mnemonik pięciu zasad:

S – SRP – Single responsibility principle,
O – OCP – Open/Closed principle,
L – LSP – Liskov substitution principle,
I – ISP – Interface segregation principle,
D – DIP – Dependency inversion principle.

W kilku zdaniach chciałbym przedstawić podstawowe założenia i przykłady dla każdej z tych reguł.

S – zasada jednej odpowiedzialności

Zgodnie z tą zasadą każda klasa powinna mieć tylko jedną odpowiedzialność (innymi słowy: powinien istnieć tylko jeden powód na modyfikację klasy).

Spróbujmy zatem przeanalizować przykładową klasę:

class Person {
    /** string */
    private $firstName;
    /** string */
    private $lastName;

    /** string */
    private $email;

    /** string */
    private $streetName;
    /** string */
    private $buildingNumber;
    /** string */
    private $apartmentNumber;
    /** string */
    private $postalCode;
    /** string */
    private $city;

    public function __construct(string $firstName, string $lastName, string
$email, string $streetName, string $buildingNumber, string $apartmentNumber, string $postalCode, string $city)
    {
        $this->firstName = $firstName;
        $this->lastName = $lastName;
        $this->email = $this->validateEmail($email);
        $this->streetName = $streetName;
        $this->buildingNumber = $buildingNumber;
        $this->apartmentNumber = $apartmentNumber;
        $this->postalCode = $postalCode;
        $this->city = $city;
}

    private function validateEmail(string $email) : string {
    if (false === strpos($email, '.') || false === strpos($email, '@'))
{

        throw new Exception('Invalid email');
    }
        return $email;
    }
}

Klasa Person łamie zasadę jednej odpowiedzialności w przynajmniej kilku miejscach. Po pierwsze – pola dotyczące adresu. Klasa nie powinna zawierać pól, które nie są z nią powiązane. Bez problemu można wydzielić je do osobnego obiektu co znacznie ułatwi przyszły refactoring tej klasy (np. dodanie adresu zameldowania, dostawy etc.).

Drugim błędem jest walidator adresu e-mail. Sprawdzenie poprawności adresu nie leży w obowiązku klasy Person. Do tego sama metoda rzuca wyjątek co również jest błędem.

Poprawny kod wygląda np. tak:

class Address {
    /** string */
    private $streetName;
    /** string */
    private $buildingNumber;
    /** string */
    private $apartmentNumber;
    /** string */
    private $postalCode;
    /** string */
    private $city;

    public function __construct(string $streetName, string $buildingNumber,
string $apartmentNumber, string $postalCode, string$city)
    {
        $this->streetName = $streetName;
        $this->buildingNumber = $buildingNumber;
        $this->apartmentNumber = $apartmentNumber;
        $this->postalCode = $postalCode;
        $this->city = $city;
   } 
}

class Person
{
    /** string */
    private $firstName;
    /** string */
    private $lastName;

    /** string */
    private $email;

    /** @var Address */
    private $address;

    public function __construct(string $firstName, string $lastName, string
$email, Address $address)
    {
        $this->firstName = $firstName;
        $this->lastName = $lastName;
        $this->email = $email;
        $this->address = $address;
    }

    public function getEmail() : string {
        return $this->email;
    } 
}

class EmailValidator
{
    public static function isValid(string $email): bool
    {
        $hasDot = false !== strpos($email, '.');
        $hasAt = false !== strpos($email, '@');

        return $hasDot && $hasAt;
    }
}

Poprzednia klasa została rozbita na trzy nowe. Każda z nich odpowiada tylko za jedną rzecz. Dodatkowo klasa metoda walidująca poprawność adresu e-mail nie zawiera logiki rzucania wyjątku. Dzięki temu można ją wykorzystać ponownie.

O – zasada otwarte-zamknięte

Zasada OCP oznacza, że klasa powinna być „otwarta na rozszerzenia a zamknięta na modyfikacje”. Uściślając – nie powinno dojść do sytuacji w której trzeba modyfikować kod. Jest to zabronione, gdyż zmiana deklaracji metody może spowodować błędne działanie w innych miejscach systemu.

Rozważmy taki fragment kodu:

class Square {
    /** @var float */
    public $a;


    public function __construct(float $a)
    {
         $this->a = $a;
    }
}

class Circle{
    /** @var float */
    public $r;

    public function __construct(float $r)
    {
        $this->r = $r;
    }
}

class AreaCalculator {

    public function calculate($shape) : float {
        if ($shape instanceof Square) {
            return $shape->a * $shape->a;
        }
        elseif ($shape instanceof Circle) {
            return M_PI * $shape->r * $shape->r;
        }

        return 0.0; 
    }
}

$square = new Square(3);
$circle = new Circle(5);
$calculator = new AreaCalculator;

echo $calculator->calculate($square) . PHP_EOL;
echo $calculator->calculate($circle);

Metoda calculate() z klasy Calculator jest błędna. Dodanie każdej nowej figury wymusza zmianę tej metody, co jest niezgodne z zasadą OCP.

Poprawna implementacja może wyglądać tak:

interface Shape {
    public function area() : float;
}

class Square implements Shape {
    /** @var float */
    public $a;

    public function __construct(float $a)
    {
        $this->a = $a;
    }

    public function area(): float
    {
         return $this->a * $this->a;
    }
}

class Circle implements Shape {
    /** @var float */
    public $r;
 
    public function __construct(float $r)
    {
        $this->r = $r;
    }

    public function area(): float
    {
        return M_PI * $this->r * $this->r;
    }
}

class AreaCalculator {
    public function calculate(Shape $shape) : float {
        return $shape->area();
    }
}

$square = new Square(3);
$circle = new Circle(5);
$calculator = new AreaCalculator;

echo $calculator->;calculate($square) . PHP_EOL;
echo $calculator->;calculate($circle);

Został dodany interfejs, który wymusza implementacje metody area(). Dzięki temu dodając np. trójkąt możemy przekazać go naszemu kalkulatorowi a ten poprawnie zwróci pole figury. Nie wymaga to żadnej zmiany w kalkulatorze.

L – zasada podstawienia Liskov

Ta zasada mówi o tym, że w miejscu klasy bazowej możemy użyć dowolnej klasy, która po niej dziedziczy. Oznacza to, że klasa pochodna musi zachować 100% interfejsu klasy bazowej (wszystkie metody muszą przyjmować te same argumenty i zwracać te same typy).

Spójrzmy na przykład:

class Rectangle {
    private $width;
    private $height;

    public function getWidth() {
        return $this->width;
}

    public function setWidth($width) {
        $this->width = $width;
}

    public function getHeight() {
        return $this->height;
}

    public function setHeight($height) {
        $this->height = $height;
}

    public function getArea() {
        return $this->width * $this->height;
    }
}

class Square extends Rectangle {
     public function setWidth($value) {
        $this->width = $value;
        $this->height = $value;
    }
    public function setHeight($value) {
        $this->width = $value;
        $this->height = $value;
    }
}

Zgodnie z zasadami matematyki wszystko jest w porządku. Każdy kwadrat jest przecież prostokątem. Ale czy w programowaniu rzeczywiście tak jest?

Przeanalizujmy przykładowe użycie:

class Client {
    public function areaVerifier(Rectangle $rectangle)
    {
        $rectangle->setWidth(5);
        $rectangle->setHeight(4);

        return $rectangle->getArea() == 20;
    }
}

class LspTest extends PHPUnit_Framework_TestCase {
    public function testRectangleArea()
    {
        $rectangle = new Rectangle;
        $client = new Client;

        $this->assertTrue($client->areaVerifier($rectangle));
    }

    public function testSquareArea()
    {
        $square = new Square;
        $client = new Client;
 
        $this->assertTrue($client->areaVerifier($square));
    }
}

Pierwszy test przejdzie prawidłowo. Drugi nie. Nasz kwadrat nie zachowuje się jak prostokąt. Łamie prawa geometrii. Ten przykład przy okazji pokazuje, że została złamana nie tylko zasada LSP. Widać tutaj, że programowanie zorientowane obiektowo nie polega na zobrazowaniu prawdziwego życia obiektów. Jeśli będziemy próbować odwzorować jeden do jednego rzeczywistość, prawie zawsze się zawiedziemy.

Zobaczmy jeszcze taki przykład:

class BlackCoffeMachine {
    public function brew() {
        echo 'Pour coffe to the cup' . PHP_EOL;
        echo 'Pour water to the cup' . PHP_EOL;
    }
}

class WhiteCoffeMachine extends BlackCoffeMachine {
    public function brew() {
        parent::brew();
        echo 'Pour milk to the cup' . PHP_EOL;
    }
}

$machines = [
    new BlackCoffeMachine,
    new WhiteCoffeMachine
];

foreach ($machines as $machine) {
    $machine->brew();
}

Zachowuje on zasadę podstawienia. Metoda brew() rozszerza metodę z klasy bazowej zachowując kontrakt, w związku z tym obie klasy mogą być używane wymiennie.

I – Segregacja interfejsów

Zasada mówi, że nie powinno się wymuszać implementacji interfejsów które nie są używane. Innymi słowy: klienci nie powinni zależeć od interfejsów, których nie używają. Oznacza to, że lepiej zdefiniować wiele mniejszych interfejsów niż jeden wielki.

 interface WorkerInterface {
    public function work();
    public function sleep();
}

class HumanWorker implements WorkerInterface {
    public function work() {
        return 'human working';
}

    public function sleep() {
        return 'human sleeping';
    }
}

class AndroidWorker implements WorkerInterface {
    public function work() {
        return 'android working';
    }
    public function sleep() {
        return null;
    }
}

class Capitan {
    public function manage(WorkerInterface $worker) {
        $worker->work();
        $worker->sleep();
    }
}

Robot nie potrzebuje snu, więc implementacja metody sleep() zwraca null. Można tu przy okazji zauważyć złamanie zasady LSP (różne typy zwracanych danych dla różnych implementacji).

Spróbujmy przeanalizować poprawiony kod:

interface WorkableInterface {
    public function work();
}

interface SleepableInterface {
    public function sleep();
}

class HumanWorker implements WorkableInterface, SleepableInterface {
    public function work() {
        return 'human working';
    }

    public function sleep() {
        return 'human sleeping';
    }
}

class AndroidWorker implements WorkableInterface {
    public function work() {
        return 'android working';
    }
}

Interfejsy zostały podzielone, każdy obiekt implementuje tylko to, czego rzeczywiście wymaga. Ale co z klasą kapitana? Czy może ona wyglądać tak:

class Capitan {
    public function manage($worker) {
        $worker->work();
        if ($worker instanceof SleepableInterface) {
            $worker->sleep();
        } 
    }
}

Oczywiście, że nie. Jest tu złamana zasada OCP. Przykładowa poprawna implementacja może wyglądać tak:

interface WorkableInterface {
    public function work();
}

interface SleepableInterface {
    public function sleep();
}

interface ManageableInterface {
    public function beManaged();
}

class HumanWorker implements WorkableInterface, SleepableInterface,
ManageableInterface {
    public function work() {
        return 'human working';
    }

    public function sleep() {
        return 'human sleeping';
    }

    public function beManaged() {
        $this->work();
        $this->sleep();
    }
}

class AndroidWorker implements WorkableInterface, ManageableInterface {
    public function work() {
        return 'android working';
    }

    public function beManaged() {
        $this->work();
    }
}

class Capitan {
    public function manage(ManageableInterface $worker) {
        $worker->beManaged();
    }
}

D – Dependency Inversion

Zasada Odwrócenia Zależności mówi o tym, że moduły wysokopoziomowe nie powinny zależeć od modułów niskopoziomowych. Wszystkie zależności powinny w jak największym stopniu zależeć od abstrakcji, a nie od konkretnego typu.

Spójrzmy na ten prosty przykład:

class MySQLConnection {
   public function connect()
   {
       //
   }
}

class PasswordReminder {
    private $dbConnection;

    public function __construct(MySQLConnection $connection)
    {
        $this->dbConnection = $connection;
    }
}

Nasza klasa do przypominania haseł wymaga połączenia do bazy danych. W tym przypadku wymagany jest obiekt klasy MySQLConnection. A co, gdybyśmy chcieli zmienić silnik bazy danych? Dla klasy PasswordReminder nie powinno mieć znaczenia, jaki jest typ bazy danych. Można to w łatwy sposób naprawić:

interface DbConnectionInterface {
    public function connect();
}

class MySQLConnection implements DbConnectionInterface {
    public function connect()
    {
        // 
    }
}

class InFileConnection implements DbConnectionInterface {
    public function connect()
    {
        // 
    }
}

class PostgresConnection implements DbConnectionInterface {
    public function connect()
    {
        //
    }
}

class PasswordReminder {
    private $dbConnection;

    public function __construct(DbConnectionInterface $connection)
    {
        $this->dbConnection = $connection;
    }
}

W ten prosty sposób uniezależniliśmy przypominanie haseł od jakiegokolwiek silnika. Teraz jego zależnością jest połączenie z bazą a nie konkretny silnik. Sprawiliśmy, że zależność wymaga abstrakcji a nie konkretnej implementacji.

Podsumowanie

Znajomość zasad SOLID na etapie projektowania aplikacji pozwala uniknąć wielu błędów. Stosując je znacząco ułatwimy sobie rozwój naszej aplikacji w przyszłości. Wyrobienie dobrych praktyk programistycznych z pewnością zapunktuje w przyszłym życiu zawodowym.

Tym wpisem chciałem tylko zasygnalizować, że jest coś takiego jak SOLID. Pokazałem kilka prostych przykładów, jednak temat jest dużo szerszy. Mam nadzieję, że zaciekawiłem Cię na tyle, że zaczniesz stosować je w swoim życiu.

Opracowano na podstawie https://laracasts.com/series/solid-principles-in-php/

Autorem tekstu jest Łukasz Wojtyczka.

#223 Dlaczego blogi i vlogi nadal są świetnym medium sprzedażowym i informacyjnym?

O tym, jak bardzo popularna stała się współpraca z wszelkiego rodzaju blogerami – tymi, którzy tworzą treści na Instagramie, autorami, którzy publikują na własnych platformach, a także z vlogerami zamieszczającymi filmy na Youtube – może świadczyć to, że pojawiają się kolejne firmy i platformy pomagające markom nawiązać kooperację z twórcami. Sieci afiliacyjne cieszą się zainteresowaniem obu stron, a odbiorcy treści reklamowych po prostu ufają blogerom. Dlaczego nadal warto inwestować w blogi i tworzyć treści, które sprzedają? Czytaj dalej

System B2B – jakie 7 kluczowych potrzeb powinien spełniać?

Dostęp do pełnej wiedzy o produkcie

Produkty sprzedawane w modelu B2B mogą być bardzo różne. Od śrubek, przez proste materiały biurowe, aż po rozbudowane urządzenia gastronomiczne oraz maszyny dla górnictwa czy rolnictwa. Sprzedaż niektórych produktów w ilości hurtowej nie stanowi problemu. Zdecydowana część z nich posiada jednak mnóstwo wariantów, wersji oraz innych indywidualnych cech, które są opisywane w rozbudowanych dokumentacjach. Niejednokrotnie produkty te posiadają także konkretne certyfikaty czy normy dopuszczające je do użytku. Liczba informacji produktowych jest całkiem spora, a dla usprawnienia pracy działu obsługi klienta, niezbędne jest zamieszczenie ich wszystkich w systemie sprzedaży. Wszystko to sprawia, że konieczna staje się integracja systemu B2B z zewnętrznymi systemami jak ERP czy PIM. Integracja z systemem ERP zapewnia przedsiębiorstwu przeniesienie procesów związanych z obsługą sprzedaży do elastycznego i szybko reagującego systemu sprzedaży. Pozwala to na zachowanie automatycznego obiegu danych takich jak: stany magazynowe, ceny czy dane księgowe. Integracja z systemem PIM pozwala z kolei na łatwe zarządzanie informacją produktową niezależnie od: kanału sprzedaży, zdefiniowanego języka, aliasu czy kontrahenta. Umożliwia ona zachowanie spójności danych w zakresie opisów, wariantów kolorystycznych, plików multimedialnych (zdjęć, infografik, filmów) oraz ustawień SEO.

11

Indywidualne zamówienia w ramach globalnych kontraktów

Platforma B2B jest narzędziem pracy skierowanym nie tylko do pracowników danej firmy, ale również do jej kontrahentów i osób zatrudnianych przez nich. W przypadku, gdy struktura firmy klienta jest bardzo rozbudowana i liczy kilkadziesiąt czy kilkaset placówek lub oddziałów, konieczne jest narzędzie pozwalające na samodzielne dokonywanie zamówień z możliwością walidacji i zarządzania wszystkimi zamówieniami. Skutecznym rozwiązaniem okazuje się w tym przypadku panel kontraktowy. Możliwość tworzenia dedykowanych paneli kontraktowych dla kontrahentów, to rozwiązanie niezwykle usprawniające codzienną pracę. Dzięki jego zastosowaniu, klienci danego przedsiębiorstwa mogą samodzielnie, w sposób łatwy i szybki dokonywać zamówień. Co istotne, pomimo wykorzystania jednego systemu sprzedaży, zastosowanie dedykowanych paneli kontraktowych sprawia, że klienci otrzymują dostęp do indywidualnych warunków handlowych, form wysyłki, umów czy różnych dokumentów. W tym miejscu dostępne są także dodatkowe informacje o produktach, takie jak: fotografie, instrukcje, materiały marketingowe czy regulaminy. Kontrahenci otrzymują więc swoistą bazę wiedzy, która usprawni ich codzienną pracę. Panel kontrahenta umożliwia także przypisanie placówek oraz nadawanie kilku poziomów dostępu, co przydaje się zwłaszcza wtedy, gdy zamówienia tworzą różne oddziały kontrahenta.

2

Transparentny model rozliczeń

Jednym z ważniejszych elementów długotrwałej i dobrej współpracy jest jasny dla obu stron model rozliczeń. Przedsiębiorstwa, działające w modelu B2B często zmagają się z problemem przeterminowanych należności oraz ich odzyskiwania. Duża liczba zamówień, transakcji oraz wysokie saldo kredytu kupieckiego mają negatywny wpływ na finanse firmy i znacznie utrudniają codzienne procesy organizacyjne, ponieważ w momencie gdy klienci zwlekają z płatnościami, firma notuje straty. Rozwiązaniem usprawniającym proces odzyskiwania należności jest system do windykacji, czyli Moduł ARMS. Głównym założeniem tego rozwiązania, jest wsparcie działu finansowo-księgowego w zautomatyzowaniu procesów związanych z zarządzaniem płatnościami. Moduł ARMS wspomaga procesy windykacyjne oraz ogranicza do minimum przeterminowane zobowiązania klientów wobec firmy, a także daje możliwość weryfikacji poprawności ustawień zarządzania płatnościami, zanim informacje te trafią do klienta. Umożliwia on także automatyczne blokowanie możliwości składania zamówień po upływie ustalonego czasu. Dzięki Modułowi ARMS, faktury są płacone szybciej, co skutkuje zaoszczędzeniem przez przedsiębiorstwo sporej ilości czasu.

Indywidualne warunki cenowe

Bardzo często, gdy klienci dokonują większego niż zazwyczaj zamówienia, mogą oczekiwać specjalnej oferty cenowej. Przedsiębiorstwa prowadzące działalność w modelu B2B często otwarte są na tego typu negocjacje handlowe. Niestety jednak, tworzenie dedykowanych ofert handlowych, będących efektem tego typu negocjacji zazwyczaj pochłania sporo czasu. System B2B umożliwiający tworzenie indywidualnych warunków cenowych, z perspektywy administratora oznacza znaczną automatyzację większości procesów związanych z tworzeniem, akceptacją czy klonowaniem wcześniej stworzonych ofert. Dzięki tej funkcjonalności powstaje jedno miejsce, zawierające historię wszystkich utworzonych ofert wraz z możliwością filtrowania ich według różnych parametrów. Dzięki wdrożeniu indywidualnych warunków cenowych, procesy negocjacji handlowych i tworzenia dedykowanych ofert stają się znacznie szybsze, co wpływa na sprzedaż B2B.

3

Synergia sprawdzonych kanałów z nowoczesnymi rozwiązaniami

Istotnym aspektem sprzedaży, zwłaszcza tej wieloletniej, jest bezpośredni kontakt ze sprzedawcą, zapewniający klientowi poczucie bezpieczeństwa i zindywidualizowanego traktowania. Dla firmy oznacza to natomiast budowanie lojalnego grona klientów. Jednym z rozwiązań pozwalających na połączenie sprawnej sprzedaży z bezpośrednim kontaktem jest integracja systemu B2B z telefonicznym centrum obsługi klienta. Tego typu integracja może skutecznie zwiększać sprzedaż poprzez tworzenie kampanii telemarketingowych, a także umożliwia zdefiniowanie listy zawierającej dane osób, do których pracownik firmy powinien zadzwonić. Kampanie telefoniczne prowadzone w ramach systemu B2B zintegrowanego z call center prowadzone są w sposób automatyczny, na bazie wprowadzonej listy. Jeżeli potencjalny klient nie odebrał połączenia, system pozwala na wprowadzenie przypomnienia, aby móc zadzwonić do danej osoby za pewien okres czasu. Rozwiązanie posiada również możliwość tworzenia diagramów przepływów, czyli scenariuszy rozmowy, które pozwalają na wprowadzenie jednolitego standardu obsługi klienta. Call center ułatwia także indywidualne podejściu do klienta – gdy dzwoni klient, telefon zawsze zostaje przekierowany do osoby przypisanej do danej relacji.

Sprawne zakupy dla wielu klientów jednocześnie

Klienci dokonujący zakupów w modelu B2B bardzo często pełnią wyłącznie rolę dystrybutorów w dalszej sprzedaży produktów. Liczba zamówień, jakich dokonują oni dla swoich klientów często jest bardzo wysoka, a terminy realizacji różne. Istotna w takich przypadkach staje się możliwość sprawnego dokonywania zakupu, najlepiej w formie jednego zamówienia, a w przypadku niedostępności któregoś z produktów – z podziałem na czas realizacji. Odpowiedzią na tę potrzebę jest multikoszyk, który umożliwia klientom biznesowym tworzenie kilku dedykowanych koszyków dla ich klientów docelowych. Ponadto, funkcjonalność ta umożliwia nadawanie koszykom tytułów, a także nadawanie produktom nazw własnych. Wdrożenie multikoszyków usprawnia proces dokonywania zamówień, przez co zwiększa satysfakcję kontrahentów z codziennego korzystania z systemu B2B.

Gwarancja stałego rozwoju systemu

Zmiana lub aktualizacja systemu sprzedaży internetowej zazwyczaj kojarzy się markom ze sporym wyzwaniem oraz koniecznością poświęcenia znacznej ilości czasu i pieniędzy. Nasza firma za cel postawiła sobie stworzenie systemu, który będzie zawsze aktualny. Odpowiedzią na to wyzwanie okazała się praktyka Continuous Integration, którą przyjęliśmy za jeden z ważniejszych standardów e-commerce na najbliższe lata. CI polega na wprowadzaniu zmian w kodzie w sposób ciągły i scalaniu ich nawet co kilka minut. Wspólna praca nad kodem zapewnia najwyższą jakość, wytworzony kod jest spójny, a praca systemu efektywna przez wiele lat.

Dla naszych klientów Continuous Integration oznacza:
– zawsze najnowszą wersję systemu e-commerce
– przewidywalny koszt rozwoju systemu
– nieograniczony dostęp do innowacyjnych funkcjonalności
– szybki Time to Market
– tysiące automatycznych testów wpływających na jakość rozwiązań
– wdrożenie dedykowanego systemu działającego w modelu SaaS

Realizacja 7 kluczowych potrzeb systemów B2B stała się standardem, który trzeba spełnić, aby sprawnie działać na współczesnym rynku sprzedaży hurtowej. To właśnie podjęcie 7 odpowiednich decyzji biznesowych sprawia, że marki odnoszą sukces na rynku B2B i wyprzedzają swoją konkurencję nie o jeden, lecz o kilka kroków.

#222 E-commerce na wsi – czy tym rynkiem powinni zainteresować się sprzedawcy?

Badanie zlecone przez Grupę AdRetail i operatora systemu BLIK pokazało, że obszary wiejskie są zaniedbane przez polski e-commerce. Wraz z wielkością aglomeracji wzrasta zainteresowanie e-handlem, a w małych miejscowościach zainteresowanie zakupami online jest dużo niższe. Z jakiegoś powodu sklepy internetowe nie skupiają się na tej grupie odbiorców i nie targetują ofert tak, aby były dopasowane do tych konsumentów. Czy jest to segment wart uwagi?

Czytaj dalej