Archiwum miesiąca: czerwiec 2017

Optymalizacja przy pomocy blackfire.io

Optymalizacja kodu to czasochłonny i trudny temat. Przede wszystkim musimy znaleźć miejsca w aplikacji, które „pochłaniają” większość czasu procesora lub zajmują dużo pamięci. Aby to zrobić potrzebujemy narzędzia, które przygotuje nam profil wywołań metod/funkcji naszej aplikacji. W tym celu przedstawione zostanie narzędzie blackfire.io

Blackfire.io dostępne jest do pobrania z oficjalnej strony: https://blackfire.io/ Jest to narzędzie płatne, jednak istnieje opcja darmowego użytkowania, mocno ograniczona ale pozwalająca na podstawowe optymalizacje naszego kodu.

Po zainstalowaniu i sprawdzeniu poprawnego działania (wg instrukcji na stronie producenta) możemy przystąpić do stworzenia pierwszego profilu naszej aplikacji. Załóżmy, że chcemy sprawdzić co obciąża naszą stronę główną. Wywołujemy polecenie:
blackfire curl –samples=10 „http://localhost/”
Gdzie parametr ‘samples’ mówi o tym ile razy chcemy wywołać dany adres.

Po zakończeniu profilowania w konsoli wyświetli nam się krótkie podsumowanie. Nie to jest jednak najważniejsze. Przechodzimy na dashboard znajdujący się na stronie blackfire.io i wybieramy profil który powinien tam się pojawić:
AT01

Po lewej widzimy listę wywołań metod wraz z ich czasami. Listę tą możemy posortować wg czasu wywołania wliczającego podwywołania (incl.) lub wg czasu własnego wywołania (excl.) co jest bardziej dla nas interesujące ponieważ pokazuje jak długo konkretna metoda działa. Po prawej widzimy drzewo wywołań, gdzie kolorem czerwonym podkreślone są wywołania/ścieżki zajmujące najwięcej czasu żądania.

AT02
W tym przypadku widzimy, że funkcja curl_exec zajmowała średnio 3s czasu z każdego z naszych 10 pomiarów. Widzimy również że znaczna większość tego czasu poświęcona została dla GeoLocalizationService. Nie wdając się w szczegóły i zasadność rozwiązania, spróbujmy „zoptymalizować” to miejsce (dla przykładu usuwając to wywołanie :D). Robimy to i profilujemy kod ponownie:
AT03

Widzimy znaczną poprawę, curl_exec zajmuje w tym momencie tylko 250 ms. Oczywiście sama optymalizacja jest nie do końca właściwa (nie powinniśmy optymalizować przez usunięcie funkcjonalności :D), natomiast pokazuje jako przykład poprawne wykorzystanie blackfire.
Dodatkowym atutem tego narzędzia jest możliwość czytelnego pokazania zmian pomiędzy dwoma profilami:
AT04

Osobiście zachęcam do spróbowania przynajmniej raz z blackfire w celu optymalizacji. Jeżeli nie chcemy bawić się w zakładanie kont/instalowanie zewnętrznych narzędzi, dobrą alternatywą może być wbudowany w xdebug profiler (xdebuga chyba każdy ma) + dodatkowo narzędzie qcachegrind do wyświetlania profili.
Dodam, że blackfire bardzo pomógł nam w optymalizacji sklepu w ramach projektu „Struś pędziwiatr”.

Autorem tekstu jest Adam Tront

Release i-systems core 4.6

Wymagania właścicieli systemów sprzeda online stale się zmieniają. Powstają coraz to nowe funkcjonalności, mające za zadanie zwiększyć sprzedaż oraz efektywność działań wewnętrznych i zewnętrznych przedsiębiorstwa. Z tego względu, i-systems prowadzi regularne aktualizacje bazowej wersji systemu. W odpowiedzi na zmieniające się trendy e-commerce powstał release 4.6.

Moduł Tłumaczeń

Moduł tłumaczeń sklepu internetowego został przeniesiony do panelu administratora, skąd można edytować je pod odpowiedni język. Sposób dodawania nowych oraz edycji aktualnych tłumaczeń został znacznie poprawiony. Raz pobrane tłumaczenie jest przechowywane w pamięci podręcznej, co oszczędza czas i zasoby. Rozwiązanie pomaga także utrzymać kontrolę nad powtórzeniami i wyeliminować konflikty podczas aktualizacji sklepu.

Kalendarz

Moduł Kalendarza został poszerzony o nowe funkcjonalności. Teraz do kalendarzy można dodawać uprawnienia dostępu dla grup i użytkowników. Dodano również możliwość automatycznego tworzenia kalendarzy. Przypominając, Moduł kalendarza jest miejscem gromadzącym wszystkie daty związane z danym użytkownikiem. Mogą się tu znaleźć spotkania z klientami, terminy realizacji poszczególnych zadań, mijające terminy ustosunkowania się do reklamacji. Za pomocą tego modułu można również śledzić urlopy, chorobowe, pracę zdalną, rezerwacje sal konferencyjnych, samochodów służbowych czy sprzętu.

iqsi-screenshot

Inne rozwiązania w ramach release

Ponadto, do modułu polityki rabatowej, dodany został delegat, dzięki któremu naliczona zostanie zniżka za polecenie produktu na serwisie społecznościowym Facebook. Więcej o module polityki rabatowej można przeczytać pod tym linkiem.  

Powstało również nowe rozwiązanie, które umożliwia łączenie wszystkich zamówień klienta pod tym samym adresem e-mail, nawet bez rejestracji w bazie systemu. Zamówienia przypisywane są do jednego konta, a po rejestracji udostępniona jest cała historia zamówień, nawet tych składanych przed założeniem konta.

Release jest aktualizacją bazowej wersji na której opiera się system e-commerce, do której regularnie dodawane są nowe funkcjonalności. Dzięki aktualizacji można rozwijać system i dostosowywać go do zmian zachodzących na rynku. Istnieje również możliwość aktualizowania dedykowanych rozwiązań w ramach kolejnych releasów.



Dowiedz się więcej o aktualizacji systemu



#189 Ceny – jak je ustalać, aby zarabiać?

W każdym biznesie chodzi przecież o to, aby zarabiać. Odpowiednio dobrane ceny do sprzedawanych usług i produktów pomagają budować kapitał, a przede wszystkim tworzyć markę, która może kontynuować swoją działalność. Handlowcy i menadżerowie muszą więc dopasować sposób przedstawienia oferty do swoich klientów. Ich zadaniem jest stworzenie takiego komunikatu sprzedażowego, który przekona kupującego do dokonania transakcji. Jak to zrobić? Przede wszystkim w odpowiedni sposób ustalając cenę produktu oraz dobrze ją przedstawiając.

Partnerem lekcji jest: dddstudio.pl Czytaj dalej

Serwer logów – zastosowanie w e-commerce

Nazwa “serwer logów” zapewne dla wielu osób brzmi dość enigmatycznie. Aby zrozumieć, co oznacza to określenie, trzeba w pierwszej kolejności poznać znaczenie słowa „log”.

Każda z usług, części aplikacji tworzącej system e-commerce, takie jak np. aplikacja sklepu, poszczególne moduły, baza danych, serwer www, serwer pocztowy, czy integracje – generuje logi. Tworzone są one w sposób automatyczny, w kolejności chronologicznej i niezależnie od użytkownika. Zapisywane są w plikach tekstowych opisujących co się stało.

Poszczególne logi mogą mieć także różne stopnie szczegółowości. Pojedynczy wpis może zawierać: informacje o dacie i godzinie dokonania zdarzenia, jego rodzaju, nazwie oraz adresie IP użytkownika, danych o pobieranych plikach, oraz tekstowy opis zdarzenia.

Głównym zastosowaniem logów jest analiza sposobu pracy systemów informatycznych. Pozwalają one na sprawdzenie trybu działania serwera, wykrycie nieprawidłowości w systemie, a także na tworzenie statystyk oraz wykrywanie naruszeń bezpieczeństwa.

Nowoczesny system e-commerce składa się z wielu rozproszonych usług i komponentów znajdujących się fizycznie na różnych serwerach. Pozwala to na skalowanie systemu, jednak niesie za sobą konsekwencje – logi wykonywanych operacji również są rozproszone po wielu serwerach. Analiza jednego problemu jest przez to niezwykle czasochłonna. Serwer logów sprawia, że wszystkie zdarzenia mamy w jednym miejscu z pełnotekstową, zaawansowaną wyszukiwarką i narzędziami do analizy.

serwer

Dzięki takiemu rozwiązaniu, dla każdego systemu istnieje jedna maszyna, która transferuje logi ze wszystkich serwerów oraz udostępnia ujednolicony interfejs do ich przeglądania. Ułatwia to monitoring stanu oraz kondycji systemu. W sytuacji, gdy zachodzi konieczność sprawdzenia lub analizy trybu pracy systemu, zarówno wyszukiwanie informacji, porównywanie ich, jak i tworzenie wykresów zajmuje kilka sekund, ponieważ logi są indeksowane. W przypadku braku serwera logów działania te mogą trwać kilka godzin. Dlatego serwer logów jest częścią nowoczesnej infrastruktury serwerowej, działającej na potrzeby e-commerce.

Wzorzec projektowy – Adapter

Dzisiejszy wpis będzie poświęcony tematyce inżynierii oprogramowania – zostanie opisany wzorzec projektowy Adapter. Zostanie wytłumaczone na czym on polega oraz przedstawione będzie jego zastosowanie w kontekście integracji z systemami ERP.

Adapter – co to jest?

Wzorzec Adapter jest to strukturalny wzorzec projektowy, znany jest również pod nazwą Wrapper (z ang. Opakowanie). Adapter powinien być używany w przypadku, 
gdy wykorzystanie istniejącej klasy jest niemożliwe ze względu na jej niekompatybilny interfejs. Innymi słowy służy do „opakowania” klas bądź bibliotek w taki sposób, 
aby zagwarantować jak największą uniwersalność w całym tworzonym systemie.

Schemat UML wzorca Adapter

Schemat UML wzorca Adapter

Adapter – jak go wykorzystać?

Zwykle adapter jest wykorzystywany w przypadku gdy korzystamy z jakiejś zewnętrznej biblioteki, której użycie jest problematyczne, np. metody zwracają typy które nie są zgodne z modelem aplikacji. Adapter idealnie wtedy nadaje się do opakowania takich metod aby zwracały typy zgodne z modelem. W integracji z systemami ERP używanie wzorca Adapter jest wręcz konieczne. Sposób w jaki jest to realizowane został przedstawiony na Rysunku1. Zazwyczaj korzystamy z gotowych bibliotek firm zewnętrznych, które udostępniają je wraz 
ze swoim systemem ERP. Aby ustandaryzować używanie tych bibliotek konieczne 
jest zastosowanie Adaptera. Tworząc ogólny interfejs udostępniający wymagane do integracji funkcje, np. pobieranie listy produktów, implementujemy go z wykorzystaniem metod udostępnionych przez zewnętrzną bibliotekę. Metody te zwracają dane w swoich zdefiniowanych typach, należy więc użyć ich w taki sposób aby utworzyć obiekty klasy jakie chcemy otrzymać (zdefiniowane w interfejsie). Następnie już tylko wywołujemy metody które udostępnia interfejs. Dzięki takiemu podejściu zagwarantowana jest duża skalowalność – mamy jeden ogólny interfejs który może być implementowany na wiele różnych sposobów 
w zależności od biblioteki – jeśli pojawia się nowy system ERP do integracji, wystarczy zaimplementować interfejs i w odpowiedni sposób opakować funkcjonalności biblioteki.

Podsumowanie

Na koniec kilka słów podsumowania. Adapter nadaje się wszędzie tam, gdzie wykorzystywane są zewnętrze biblioteki. Praktycznie zawsze w takiej sytuacji należy go użyć. Sama implementacja wzorca nie jest skomplikowana, po prostu tworzymy interfejs, który 
ma udostępniać funkcjonalność taką jaką my chcemy mieć. To w jaki sposób ją uzyskać 
z innych klas należy określić w implementacji tego interfejsu.

Autorem tekstu jest Mateusz Łysień.

file_exists » performance

Trywialny temat: porównanie czasu wykonania poszczególnych funkcji sprawdzających dostępność pliku.

Testy zostały przeprowadzone na wersji php:
1

W każdej iteracji funkcja sprawdzała jeden losowy plik spośród 20 tysięcy istniejących. Po każdym wykonaniu funkcji wywoływano funkcję clearstatcache celu opróżnienia cache. Wyniki prezentują się następująco:2

W zestawieniu znalazła się również funkcja stream_resolve_include_path ze względu na http://php.net/file_exists

Warning This function returns FALSE for files inaccessible due to safe mode restrictions. However these files still can be included if they are located in safe_mode_include_dir.

W sytuacji includowania to, że plik istnieje nie oznacza, że jest gotowy do odczytu. Poprawniejszym rozwiązaniem jest wykorzystanie: http://php.net/stream_resolve_include_path

Resolve filename against the include path according to the same rules as fopen()/ include.

Pozostałe wnioski pozostawiam czytelnikom 🙂

Autorem tekstu jest Marek Rode.

#188 Jak szybko i tanio wysłać paczkę?

Na efektywną wysyłkę paczki składa się wiele istotnych elementów. To, jak szybko zostanie ona dostarczona, zależy w dużym stopniu od nadawcy. Dlatego tak ważne jest, aby poprawnie przejść przez wszystkie wymagane etapy wysyłki, od przygotowania paczki, poprzez jej poprawne zaadresowanie, aż do przekazania kurierowi. Dzisiaj pokażemy Wam, na co należy zwrócić szczególną uwagę podczas przygotowywania paczki do wysyłki oraz w jaki sposób przyspieszyć jej drogę do adresata.

Partnerem lekcji jest: sendello.pl
Czytaj dalej

Newsweek i PWC wyróżnia i-systems

Firma i-systems została nagrodzona tytułem „Inicjatora Innowacji”. Gala III edycji konkursu odbyła się 6 czerwca 2017 roku w Centrum Nauki Kopernik w Warszawie. Organizatorem przedsięwzięcia jest tygodnik Newsweek Polska, a partnerem merytorycznym – globalna firma audytorska i doradcza PWC.

Celem wydarzenia było wyróżnienie przedsiębiorstw, dla których innowacyjność jest motorem działania. Konkurs składał się z dwóch etapów, podczas których jury oceniało zarówno osiągnięty sukces rynkowy, wewnętrzne zarządzanie innowacją, jak i wdrożone, innowacyjne rozwiązania.

Zawsze chcieliśmy, żeby zakupy poprzez internet były czymś naturalnym, ale i przyjemnym. Kilka lat temu zdecydowaliśmy, że wszystkie rozwiązania będziemy tworzyć sami. Dlatego Inicjator Innowacji to dla nas szczególne wyróżnienie, które pokazuje, że podążamy w dobrym kierunku – stwierdza Paweł Szewczyk, CMO i-systems.

Inicjator Innowacji

Zdjęcie podczas gali laureatów konkursu Inicjator Innowacji 2017

Kapituła konkursu doceniła w i-systems prężnie działający dział Badań i Rozwoju, który tworzy pionierskie rozwiązania e-commerce, mając tym samym realny wpływ na rozwój sprzedaży online – nie tylko w Polsce, ale również poza granicami kraju.

Nagroda Inicjator Innowacji 2017 przyznana była w trzech kategoriach: duże przedsiębiorstwa, małe i średnie przedsiębiorstwa oraz start – upy. Laureatem pierwszej kategorii został Alior Bank, natomiast w kategorii start-up kapituła konkursu przyznała dodatkowo trzy wyróżnienia. Wyróżnione firmy to: Smart Fluid, mReh oraz Hector24. Laureatem kategorii start-up została firma IDN InDaHash Media Limited. Ponadto, Business Insider, patron medialny wydarzenia, przyznał nagrodę specjalną firmie G2A.

Poznaj Case Studies e-commerce

Nabór na kurs „Wakacje z programowaniem” rozpoczęty

Na przełomie lipca i sierpnia, rozpocznie się wakacyjny kurs programowania. Przez dwa tygodnie uczestnicy zdobędą wiedzę i umiejętności praktyczne z wybranych przez siebie tematów. Kurs skierowany jest do osób z podstawową wiedzą z zakresu programowania. Prowadzącymi są programiści pracujący na co dzień w i-systems. Cykl spotkań zakończy się otrzymaniem certyfikatu, a na najlepszych czeka praca w naszej firmie!

Termin i lokalizacja:

24.07. – 06.08.2017 (pn.-czw., w godzinach: 9-13, odbędzie się 8 spotkań)
Gliwice, ul. Bojkowska 47,  siedziba i-systems

Prowadzący:

Adam – programista PHP, od 2 lat pracujący komercyjnie, specjalizuje się w optymalizacji aplikacji

Łukasz – programista z 7-letnim stażem, specjalista w dziedzinie wzorców projektowych oraz testowania oprogramowania

Korneliusz – programista PHP z 9-letnim stażem, specjalizuje się w algorytmach, optymalizacji oraz integracji sklepów

Konrad – szef działu IT w i-systems, od 2 lat zarządza zespołem i projektami w IT

Tomek – programista PHP oraz Team Leader, w zawodzie od 5 lat, specjalizuje się w analizie i penetracji kodu oraz integracji z systemami zewnętrznymi

Korzyści z udziału w kursie:

  • Możliwość pracy w i-systems dla najlepszych uczestników
  • Zdobycie praktycznych umiejętności w zakresie podstaw programowania
  • Uzyskanie certyfikatu ukończenia kursu
  • Poznanie specyfiki pracy w IT
  • Wymiana wiedzy z innymi uczestnikami kursu
  • Nauka w kameralnym gronie i przyjaznej atmosferze

Kryteria wyboru uczestników i proces rekrutacji:

Stawiamy na osoby chętne, zdeterminowane i zainteresowane zdobyciem praktycznych umiejętności. Zależy nam na uczestnikach, dla których programowanie to pasja. Co musisz zrobić?

1. Przeczytaj ogłoszenie o naborze na kurs: na stronie kariery i-systems
2. Wyślij do nas CV i list motywacyjny, w którym opiszesz / zakodujesz / narysujesz „dlaczego Ty powinieneś wziąć udział w kursie?”. Termin nadsyłania zgłoszeń: 26.06.2017 r.
3. Odbierz telefon z działu rekrutacji i umów się na spotkanie w sprawie kursu
4. Wybierz 8 interesujących Cię zagadnień z listy 14 proponowanych tematów
5. Przyjdź na kurs 24 lipca 2017 r.

Proponowana tematyka kursu*:

1. Optymalizacja, wyszukiwanie wąskich gardeł w kodzie PHP
2. MySQL
3. Wzorce projektowe
4. Testy jednostkowe
5. Zarządzanie wersjami / composer
6. Debuging
7. Webservice
8. SPL
9. Domain driven design
10. Programowanie obiektowe
11. SOLID
12. Hello world
13. IDE
14. SOLR

* osoby wybrane do wzięcia udziału w kursie wybiorą 8 tematów, które będa opracowywane na kursie