Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: Piotr Pasich, dodany: 19.10.2017 21:04, tagi: php

cryptoJust a couple months ago, I was asked to participate in a project that operates with the cryptocurrency networks. And I had a pretty basic knowledge about a blockchain that time, which was not enough. During the development we realized this is a common problem and finding a highly qualified programmer who used to work […]

Autor wpisu: Michał Janicki, dodany: 01.10.2017 12:51, tagi: php

W tym poście opiszę w jaki sposób można tworzyć własne reguły i zestawy reguł dla PHPMD. Jeśli chciałbyś się dowiedzieć czym jest PHPMD lub uzupełnić wiedzę na ten temat to zapraszam do lektury poprzedniego postu opisującego od podstaw PHPMD. Zachęcam także do zapoznania się z tym i z tym postem – oba poświęcone są narzędziom do statycznej analizy kodu.

I jeszcze jedna uwaga – przykłady znajdujących się w tym poście jest zaczerpniętych bezpośrednio z dokumentacji PHPMD.

A teraz o tworzeniu własnych reguł

W pierwszej kolejności należy utworzyć plik z klasą, która będzie implementować interface \PHPMD\Rule. Znacznie lepszym rozwiązaniem będzie jednak zamiast implementować ten interface rozszerzyć klasę \PHPMD\AbstractRule. Zawiera ona całą logikę niezbędną do utworzenia klasy z regułą.

Kolejnym krokiem będzie stworzenie wewnątrz klasy metody apply, która jako argument przyjmuje obiekt będący instancją \PHPMD\AbstractNode. Ten obiekt reprezentuje klasę, metodę, funkcję lub interface, który możemy poddać testom. Pytanie jednak skąd wiadomo, że ten obiekt zawiera klasę a nie np. metodę? Aby to określić należy implementować jeden z czterech specjalnych interfaceów (\PHPMD\Rule\ClassAware, \PHPMD\Rule\FunctionAware, \PHPMD\Rule\InterfaceAware, \PHPMD\Rule\MethodAware). Ich jedynym zadaniem jest oznaczenie jakiego typu element testowanego kodu (klasa, funkcja, metoda, interface) będzie przekazywany w parametrze do metody apply. Przykład klasy poniżej:

class Com_Example_Rule_NoFunctions extends \PHPMD\AbstractRule
  implements \PHPMD\Rule\FunctionAware
{
  public function apply(\PHPMD\AbstractNode $node)
  {
  }
}

Teraz pozostaje tylko wywołać metodę addViolation, która dodaje informacje o błędzie do raportu końcowego w odpowiednim miejscu.

A teraz o regułach bazujących na danych z PHP Depend

PHPMD może posłużyć także do analizy istniejących już danych zwróconych PHP Depend i na ich bazie określić czy z kodem jest coś nie tak. Zasada tworzenia takiej reguły jest bardzo podobna do tych analizujących kod.

Pierwsze z czym należy się zapoznać to z listą metryk jakie oferuje PHP_Depend. Znajdziemy tam tabelę, w której każdy wiersz opisuje jedną metrykę. Gdy wybierzemy już, która metryka nas najbardziej interesuje przechodzimy do metody apply w na parametrze $node wywołujemy metodę getMetric i jako parametr podajemy nazwę metryki PHP_Depend. Metoda getMetric zwróci nam wartość, którą następnie możemy poddać analizie w samej metodzie apply. Klasa analizująca metrykę powinna być podobna do klasy poniżej:

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: Michał Janicki, dodany: 21.08.2017 21:24, tagi: php

PHP Mess Detector jest kolejnym narzędziem po PHP_CodeSniffer i kilku innych wcześniej opisanych w tym i w tym poście narzędzi służących do statycznej analizy kodu jakie opiszę. Jeśli z jakiegoś powodu nie przeczytałeś tych wpisów to bardzo zachęcam do zapoznania się z nimi.

A teraz ogólnie o PHPMD

PHPMD (bo tak w skrócie nazwa się to narzędzie) jest to „odprysk” powstały w wyniku tworzenia narzędzia zwanego PHPDepend. Podobnie jak PHP_CodeSniffer najlepiej sprawdza się gdy chcemy przekonać się które fragmenty naszego kodu potencjalnie mogą zawierać błędy, nieużywane parametry lub wskaże fragmenty, które są zbyt skomplikowane.

A teraz o instalacji PHPMD

Sposoby instalacji są raczej standardowe. Po pierwsze można pobrać plik phar za pomocą następującego polecenia:

$ wget -c http://static.phpmd.org/php/latest/phpmd.phar

lub dodać zależność do pliku composer.json:

{
    "require-dev": {
        "phpmd/phpmd" : "@stable"
        }
}

potem wpisujemy:

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: JoShiMa, dodany: 10.07.2017 11:34, tagi: css

Dziś bardzo prosty trick, który pozwoli Ci dodać kolorowy wielokropek z trzech (a jak będzie trzeba to i z większej ilości) kółek. Nie potrzebna jest do tego żadna grafika, i żaden element wpisany na stałe do kodu HTML strony. W ruch idą pseudo-elementy i ich style. Zacznijmy jednak od początku. Załóżmy, że mamy w kodzie […]

Autor wpisu: Kamil Adryjanek, dodany: 06.07.2017 06:20, tagi: php

W ramach krótkiego podsumowania ostatnich spotkań z cyklu „Women in Technology” postanowiłem zebrać w jednym miejscu większość wskazówek / wytycznych dotyczących rozpoczęcia nauki PHP, a przy okazji zaproponować pomoc z mojej strony. Jak argumentowałem w jednym z poprzednich wpisów, mimo ogromnego zamieszania obecnie wokółJavaScript, PHP jest językiem, który:

  • jest stosunkowo prosty dla początkujących i osób, które nigdy nie miały styczności z programowaniem – dobrze wprowadza w świat programowania aplikacji internetowych;
  • jego przyszłość jest bardzo stabilna (PHP w wersji 7.X wprowadza wiele udogodnień i ciekawych zmian);
  • na rynku jest duże zapotrzebowanie na developerów PHPduża ilość ofert pracy, a stawki coraz bardziej atrakcyjne.

Podstawy protokołu HTTP

Moim zdaniem naukę programowania aplikacji internetowych powinno rozpocząć się od poznania podstaw protokoołu HTTP, jako że to na tym protokole oparta jest komunikacja przeglądarka (klient) – nasza aplikacja (serwer). Niestety często spotykam się z sytuacją, gdzie Developerzey po kilku miesiącach pracy w dalszym ciągu nie są świadomi tego co tak naprawdę dzieje się w momencie, kiedy przeglądarka wysyła żądanie i odbiera odpowiedź z serwera.

Warto na tym etapie wiedzieć, że:

  • protokół HTTP jest protokołem bezstanowym – każde kolejne żądanie nie wie nic o żądaniach, które je poprzedzały;
  • komunikacja odbywa się przez odpowiednio przygotowane komunikaty tekstowe w których wyróżniamy 3 sekcje:
    • 1 sekcja to status odpowiedzi (ang. initial response line);
    • w 2 sekcji znajdują się nagłówki (ang. headers);
    • a trzecia zawiera treść odpowiedzi (ang. content body) i jest to część, którą widzimy bezpośrednio w przeglądarce najczęściej w postaci kodu HTML;
  • wpisując adres w przeglądarce wysyłamy żądanie HTTP (ang. Request) – komunikat tekstowy generowany przez przeglądarkę. Wraz z żądaniem przeglądarka wysyła dodatkowe informacje w postaci nagłówków, np: infomrację o przeglądarce z której korzystamy;
  • serwer generuje odpowiedż (ang. Response): wykonuje kod PHP, łączy się z bazą danych lub zewnętrznymi usługami, jeśli jest to niezbędne do wygenerowania odpowiedzi, np w postaci kodu HTML. Na tej podsatwie przeglądarka renderuje / wyświetla nam odpowiednią stronę;

Dobra książka

Tutaj spotkać się można z bardzo różnymi opiniami, osobiście uważam, że dobra książka na początku nauki to podstawa. Pozwala lepiej zrozumieć poszczególne zagadnienia i usystematyzować wiedzę. Tutriale dostępne w sieci często skupiają się na realizacji konkretnego zadania i pokazują najlepszą / najkrótszą drogą do jego realizacji. Niestety większość z nich jest już dość przestarzała i nieaktualna. Książka w tej sytuacji przekaże wam odpowiednią teorię, wprowadzi w problem i pomoże go zrozumieć. Osobiście polecam ksiązki angielskojęzyczne – język angielski jest w programowaniu niezbędny, większość dokumentacji jest w tym języku i im szybciej zaczniesz się nim posługiwać, tym lepiej. Jeśli jednak nie czujesz się na siłach i wolicz książki w języku Polskim to bez problemu można znależć aktualne i ciekawe pozycje (niestety najnowsze pozycję nie będą dostępne ze względu na czas potrzebny na ich przetłumaczenie). Kilka słów na temat książek, które polecam napisałem tutaj. Dla kompletnie początkujących polecam: Head First PHP & MySQL – która wprowadza w PHP w bardzo przystępny sposób.

Środowisko + IDE

By móc pisać proste skrypty w PHP do niedawna potrzebny był cały stack: LAMP, WAMP, XAMP lub tym podobny zestaw. W tym momencie na początku nauki programowania, nie ma potrzeby nic instalować – możecie wykorzystać gotowe rozwiązania online, które odrazu pozwolą Wam skupić się na zabawie z kodem i na nauce programowania. Osobiście często korzystam z c9.io, które posiada bardzo intuicyjny edytor, dostęp do shella i możliwość podglądu projektu w dedykowanej domenie.

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: zleek, dodany: 21.04.2017 10:31, tagi: javascript, php

As we tak a look on websites, we can easily see that most of them have contact form built in. But having this contact form could switch to huge amount of spam messages sent by using that form. Fortunatelly we

Autor wpisu: Piotr Śliwa, dodany: 29.03.2017 19:19, tagi: php

Ostatnio przygotowywałem pull requesta dla biblioteki typesafe/config - prosty ficzer. Okazało się, że po moich zmianach build na windowsach przestał przechodzić. Po czasochłonnej inwestygacji, debugowaniu i namierzaniu problemu, okazało się, że winowajcą jest tytułowy TimeZone.getDefault(). Gdy to odkryłem, uświadomiłem sobie dlaczego tak bardzo doceniłem niemodyfikowalne obiekty, brak side effectów i czyste funkcje.

W czym był problem? Pliki HOCON (format plików konfiguracyjnych wspierany przez tą bibliotekę) mogą includować inne pliki konfiguracyjne. Do odczytywania takich plików używana jest klasa URLConnection. W implementacji tej biblioteki wywoływana jest funkcja URLConnection.getContentType() aby sprawdzić jakiego typu plik jest wczytywany. Metoda ta pobiera nagłówki połączenia, w którym jest data ostatniej modyfikacji. Jeśli jest data, to trzeba ją sformatować. Klasa SimpleDateFormat używa domyślnej strefy czasowej, chyba że powiemy jej inaczej. TimeZone.getDefault(), wbrew sugestywnej nazwie i zasadzie najmniejszego zaskoczenia, ma side effect, a jak! Jak to, dlaczego? Bo może! Wywołuje bowiem System.setProperty("user.timezone", <strefa czasowa>) jeśli takie property nie jest jeszcze ustawione. Pech w tym, że typesafe/config wczytuje java propertisy robiąc w testach asercje na tychże wartościach. W zależności czy TimeZone.getDefault() było wcześniej wywołane i czy user.timezone było jawnie ustawione, testy mogły failować lub też nie (co też miało miejsce).

Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.