Archiwum miesiąca: lipiec 2018

ANTLR

ANTLR – ANother Tool for Language Recognition

Na pewno spotkałeś się kiedyś z niestandardowymi strukturami danych, które ciężko przetworzyć w konwencjonalny sposób. W tym wpisie postaram się pokazać jak możesz poradzić sobie z takim problemem.

Czym jest ANTLR?

ANTLR – to generator parsera do czytania, wykonywania lub tłumaczenia binarnych oraz tekstowych struktur danych. Standardowy projekt procesowania danej struktury danych składa się z pliku Grammar zawierającego reguły dla Lexera oraz Parsera, które zaś używane są do tokenizacji oraz przetwarzania danych według wcześniej stworzonych reguł.

Ciekawostka

Zastanawiałeś się kiedyś jak działa analiza składni, dla przykładu w Netbeans? Jeśli tak, to pewnie nie zaskoczę Cię informacją, że używany jest tam między innymi ANTLR do analizy składni języka C++.

Ponad to, znany pewnie wszystkim Twitter, używa ANTLR do przetwarzania zapytań dla wyszukiwania. Są to ponad 2 miliardy zapytań na dzień. Ilość robi wrażenie? Na mnie tak.

Do czego możemy użyć ANTLR w praktyce?

Do wielu rzeczy, począwszy od przetwarzania niestandardowych strukturalnie plików konfiguracyjnych, przez konwertery tzw. ,,legacy code”, po różnego rodzaju parsery, renderowanie znaczników i tym podobne. Możliwości jest na prawdę sporo.

W jakich językach programowania można tego użyć?

W zasadzie we wszystkich najpopularniejszych językach: Java, C#, C++, Python, Swift, Go (po za PHP, chociaż swego czasu widziałem gdzieś, zrobiony port dla tego języka). Dla każdego z tych języków ,,kompilator” gramatyczny wygeneruje parser oraz lexer do przetwarzania zdefiniowanej przez nas struktury danych.

Przykład użycia

Na potrzeby tego wpisu, językiem programowania przy użyciu, którego będę prezentować możliwości ANLTR to C# (miłośnicy Javy muszą mi wybaczyć 🙂 ). Natomiast samo narzędzie ANLTR wykorzystam w jego najnowszej wersji, na dzień tworzenia tego wpisu czyli V4.

*Procesowanie przykładowej prostej struktury danych:

bq. # Comment
TypeId = 860
Name        = "Example Item"
Description = "Description of example item"
Attributes  = {Waypoint=0, Class=1}
Flags       = {Block, Pickable}

Struktura dosyć prosta, zapewne można by bez większego problemu przetworzyć takie dane przy użyciu choćby regexów. Jednak, chciałbym na tym dosyć trywialnym przykładzie pokazać jak działa ANTLR.

Plik grammar (.g4) wygląda w ten sposób:

grammar Objects;
 
root:
    items+
    ;
 
items:
    ('TypeId' '=' typeId) ('Name' '=' name) ('Description' '=' description)? ('Attributes' '=' attributes)? ('Flags' '=' flags)?
    ;
typeId:
     NUMBER
    ;
name:
    TEXT
    ;
description:
    TEXT
    ;
flags:
    ('{') flag+ ('}')
    ;
flag:
    STRING
    ;
attributes:
    ('{')  attribute+ ('}')
    ;
attribute:
    attributeName STRING?'=' attributeValue
    ;
attributeName:
    STRING;
attributeValue:
    NUMBER;
 
fragment DIGIT:
   ('-')? '0'..'9'
;
 
TEXT:
    '"' .*? '"'
;
 
STRING:
    ('a'..'z' | 'A'..'Z')+
;
 
NUMBER:
    DIGIT+
;
 
WHITESPACE:
    ' ' -> skip
;
 
COMMA_SEPARATOR :
    ',' -> skip
;
 
NEWLINE :
    ('\n' | '\r' | '\r\n') -> skip
;
 
COMMENT     :
    '#' ~( '\r' | '\n' )* -> skip
    ;

Kompilator na podstawie gramatyki zawartej w pliku grammar utworzy w docelowym języku (w naszym przypadku C#) parser oraz lexer przy użyciu których możemy skorzystać z możliwości przetworzenia wskazanych danych.

t1

Powstałe drzewo wygląda dosyć prosto i przejrzyście. Oczywiście w przypadku większej ilości danych, drzewo rozszerzy się o kolejne elementy.

t2

Jak z wydajnością takiego rozwiązania? To zależy od skomplikowania danych, ale mogę z czystym sumieniem powiedzieć, że w większości przypadków, przy odpowiednio stworzonej gramatyce, wydajność jest na zadowalającym poziomie.

Przykładowa klasa Reader

using Antlr4.Runtime;
using Objects.Antlr;
using Antlr.Visitor;
using Objects.Domain;
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Objects
{
    class ObjectsReader
    {
        private readonly string objectsFilePath;
 
        public ObjectsReader(string objectsFilePath)
        {
            this.objectsFilePath = objectsFilePath;
        }
 
        public List Read()
        {
            var objectsFileContent = System.IO.File.ReadAllText(objectsFilePath);
 
            var inputStream = new AntlrInputStream(objectsFileContent);
            var objectsLexer = new ObjectsLexer(inputStream);
            var commonTokenStream = new CommonTokenStream(objectsLexer);
 
            var objectsParser = new ObjectsParser(commonTokenStream);
            var itemsContext = objectsParser.root().items();
 
            var visitor = new ItemVisitor();
 
            foreach(var itemContext in itemsContext)
            {
                visitor.Visit(itemContext);
            }
 
            // Do something with parsed item's
        }
    }
}

Klasa Visitor z implementacją interfejsu z biblioteki ANTLR. Visitor służy do procesowania określonej części powstałego drzewa, danej struktury danych.

using Antlr4.Runtime.Misc;
using Objects.Domain;
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Antlr.Visitor
{
    class ItemVisitor : ObjectsBaseVisitor
    {
        public override Item VisitItems([NotNull] ObjectsParser.ItemsContext context)
        {
            var typeId = context.typeId().GetText();
            var name = context.name().GetText();
            var flags = context.flags();
            var description = context.description();
            var attributes = context.attributes();
 
            // Container
            var Item = new Item {
                Id = Convert.ToInt32(typeId),
                Name = name
            };
 
            if (null != description)
            {
                var descriptionText = description.GetText();
                Item.Description = descriptionText;
            }
 
            if (null != flags)
            {
                var _flags = flags.flag();
 
                foreach (var _flag in _flags)
                {
                    var flagText = _flag.GetText();
 
                    try
                    {
                        ItemFlag itemFlag = (ItemFlag)Enum.Parse(typeof(ItemFlag), flagText);
                        Item.AddFlag(itemFlag);
                    }
                    catch(ArgumentException)
                    {
                        Console.WriteLine("Undefined flag: {0}", flagText);
                    }
                }
            }
 
            if (null != attributes)
            {
                var _attributes = attributes.attribute();
 
                foreach(var _attribute in _attributes)
                {
                    var attributeType = _attribute.attributeName().GetText();
                    var attributeValue = _attribute.attributeValue().GetText();
 
                    try
                    {
                        ItemAttributeType itemAttributeType = (ItemAttributeType)Enum.Parse(typeof(ItemAttributeType), attributeType);
                        Item.AddAttribute(new ItemAttribute(itemAttributeType, Convert.ToInt32(attributeValue)));
                    }
                    catch (ArgumentException)
                    {
                        Console.WriteLine("Undefined attribute: {0}", attributeType);
                    }
                }
            }
 
            // Do something with parsed data
 
            return base.VisitItems(context);
        }
    }
}

Kod w klasach jest jedynie przykładem użycia parsera niżeli działającą wersją.

Po więcej informacji zapraszam na stronę projektu: http://www.antlr.org/index.html

Autorem tekstu jest Miłosz Lenczewski.

#226 Projektowe zarządzanie sklepem internetowym

Zarządzenie projektami to sztuka doprowadzania ich od początku do samego końca. O zarządzaniu projektami powstało wiele publikacji, które opowiadają o metodologii, zarządzaniu zespołem, budżetem i innymi elementami całego procesu. Projekty są wszędzie i nawet przygotowanie pieczonej kaczki może być potraktowane projektowo. Dlaczego więc nie zarządzać sklepem internetowym w sposób projektowy?

Z dzisiejszej lekcji dowiesz się:

      • czym jest zarządzanie projektowe;
      • jak je wykorzystać w sklepie internetowym.

Zbiór połączonych ze sobą elementów

Disney udowodnił, że każdy proces może zostać poprawiony i uproszczony. Aby to się stało, należy podejść do niego w sposób projektowy. Może to właśnie dlatego parki rozrywki Disneya cieszą się 80% współczynnikiem powracających klientów?

Jeśli popatrzymy na nasz sklep internetowy przez pryzmat połączonych ze sobą komórek, to bardzo łatwo zauważyć, że niektóre z nich działają lepiej, a inne gorzej. Rozłóżmy na czynniki pierwsze prosty e-biznes. Mamy dział handlowy, czyli osobę lub osoby, które obsługują zamówienia telefoniczne i e-mailowe, które przekazują je do pakowania i budują relacje z klientami. Jest team magazynowy, który przygotowuje paczki. W dużych sklepach czasem jest to proces zautomatyzowany, ale skupiamy się teraz na mniejszych e-commersach. Oczywiście, w pracy bierze też udział księgowość, bo faktury i inne dokumenty się same nie przygotują, a także osoby odpowiedzialne za marketing itd. Każdy e-sklep jest inny, ale zasada ich działania jest dość podobna.

Jak rozpocząć projektowe zarządzanie w e-commerce?

Zasadniczo każdy projekt i zarządzanie nim składa się z kilku elementów/etapów. Najważniejsze z nich to:

  • Zakres projektu – w e-commerce głównym założeniem dla całego sklepu jest zwiększanie i optymalizacja sprzedaży. Każda komórka ma jednak swoje zadania, które składają się na wspólny cel: przesłanie paczki z towarem do klienta w określonym przez nas terminie. Aby mogło się to wydarzyć, każdy mały projekt (czyli praca działu) musi być określony i jasno przekazany pracownikom.
  • Określenie zasobów, jakimi dysponujemy. Zasobami są ludzie, technologie, sprzęt, czy też pieniądze. Zarządzanie tymi środkami w odpowiedni sposób pozwala na efektywne działanie sklepu. Prosta zasada: jeśli w czasie wzmożonej sprzedaży nie wydelegujemy dodatkowych osób do obsługi klienta i pakowania paczek, nie będziemy mogli w pełni zrealizować założeń sprzedażowych.
  • Określenie terminów – nic innego, jak podanie czasu, kiedy projekt ma się rozpocząć i kiedy zakończyć. W sklepie internetowym terminy są przeważnie stałe. Praca od 9 do 17 itd. Jednakże zdarzają się promocje czasowe, które wymagają wcześniejszych działań. W takim przypadku bardzo ważne jest określenie kiedy zaczynamy działać w danym temacie. Możliwe, że rozpoczęcie kampanii wymaga dodatkowych nakładów finansowych lub działań reklamowych, a dodatkowo będą one czasochłonne.
  • Stworzenie zespołu projektowego – czyli tak naprawdę zebranie pracowników, którzy są ekspertami w swojej dziedzinie. Należy słuchać podwładnych. Osoba, która przez 15 lat pracowała w magazynie, ma większą wiedzę na temat optymalizacji procesów pakowania i wysyłania, niż nie jedna osoba, która zna logistykę „zza biurka”. Zespoły projektowe to dział marketingu, który odpowiada za reklamę i promocję, księgowość, dział handlowy. Ważne jest odpowiednie przydzielenie im zadań, delegowanie obowiązków i kontrola. Może się okazać, że przy dużych zespołach potrzebne będzie wyodrębnienie ich liderów, którzy będą koordynować pracę poszczególnych komórek.
  • Małe i wielkie kroki – to swoista droga do osiągnięcia celu. Dla wielu sklepów internetowych to po prostu plan codziennego działania każdej komórki. Wiele procesów jest coraz to częściej zautomatyzowanych, co za tym idzie: ułatwiają one nasza pracę.
    Dostosuj projekt – może się okazać, że pracowników w danym dziale jest za dużo lub za mało, że założenia dotyczące wysyłki paczek i dostępnych kartonów były błędne itd. Dlatego warto dopasować wszystkie elementy na etapie pierwszych działań, aby potem nie doprowadzić do sytuacji kryzysowych.
  • Nadzór i kontrola – bardzo ważne szczególnie w pierwszym etapie wdrażania projektu. Jeśli wypracuje się już pewną metodologię pracy, to nie będzie to już tak bardzo potrzebne. Warto korzystać z narzędzi do koordynacji pracy. CRM-y różnego rodzaju pozwalają na analizę działań poszczególnych działów i ich pracowników.
  • Dokumentacja działań – warto pokusić się na tworzenie raportów i podsumowań, bowiem ich analiza pozwala na sprawdzenie, czy wszystkie założenia zostały spełnione.
    Bieżąca informacja – to jeden z podstawowych wymogów zarządzania projektowego, dzięki temu pracownicy mają wiedzę na temat wykonywanej pracy oraz tego, czy są spełnione, postawione wcześniej założenia.

Jak powyższe punkty wykorzystać w e-sklepie?

Wszystko wydawać się może dość trudne, ale takie nie jest.

Założenia projektu są zawsze dość proste, ponieważ mówimy o pewnych ustandaryzowanych procesach. Mowa o komunikacji, sposobie obiegu dokumentów, rozkładzie produktów w magazynach, optymalizacji pakowania itd. Ważne jest, by każdy etap pracy był jasno przedstawiony, nawet udokumentowany. Dzięki temu wykonujący pracę członek zespołu będzie wiedział czego od niego oczekujemy, a przy okazji jego doświadczenie pozwoli na wprowadzanie zmian i udoskonalenie procesu.

Przykładowo: może się okazać, że faktury nie muszą być drukowane, a wystarczy, że wyślemy je elektronicznie, co można znów zautomatyzować. Inny układ stołów do pakowania może wpłynąć pozytywnie na czas wysyłki towarów, a stworzenie procedur w kontaktach z klientami pozwoli na ich szybszą obsługę.

Każde z powyższych przykładowych optymalizacji jest możliwa, gdy zdecydujemy się na podejście projektowe. Analiza procesów i ich udoskonalanie pozwala zaoszczędzić czas, a co za tym idzie: także pieniądze. Każda oszczędność w sklepie internetowym, która pozwala na pracę na tym samy poziomie, ale przy niższych kosztach, zahacza o metodologię Lean, o której pisaliśmy ostatnio. Warto się jej przyjrzeć.

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.