Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: JoShiMa, dodany: 13.01.2019 21:16, tagi: framework, mvc

No i zdarzyło się, że dostałam propozycję, by popracować trochę pisząc aplikacje wykorzystujące zupełnie nowy dla mnie framework web2py. To bardzo ciekawy i zgrabny framework do szybkiego tworzenia aplikacji webowych. Zainicjowany w 2007 roku rozwija się prężnie i ciągle jest aktualizowany, choć jeszcze w oparciu o wersję 2.7 Pythona. W 2011 projekt zdobył nagrodę „Bossie ... Czytaj dalejWeb2py – czyli nowe przyszło szybciej niż się spodziewałam

Autor wpisu: matipl, dodany: 08.01.2019 13:20, tagi: php, oop

Od miesiąca możemy cieszyć się PHP w wersji 7.3, który jest kolejnym krokiem ewolucji jaka zachodzi w tym popularnym języku. Obecne zmiany to dopracowywanie prostszego sposobu tworzenia aplikacji, jak również dopracowywanie samego silnika.

WordPress 5.0 benchmark

Dzięki tym zmianom PHP wciąż przyspiesza. To prawda, że to głównie zasługa coraz lepszego opcache, ale jednak jest to część silnika. WordPress nie jest dobrym przykładem jak powinno się pisać kod, ale jest dobrym przykładem na wzrost wydajności PHP na przestrzeni lat:

  • PHP 5.6: 91.64 req/sec
  • PHP 7.0: 206.71 req/sec
  • PHP 7.1: 210.98 req/sec
  • PHP 7.2: 229.18 req/sec
  • PHP 7.3: 253.20 req/sec

PHP 7.3

PHP 7.3 przyniósł bardzo wiele przydatnych funkcji, które zostały przegłosowane przez społeczność w ramach zgłaszanych RFC. W nowej wersji możemy teraz zostawiać nie tylko przecinek po ostatnim elemencie w tablicy, ale również w wywołaniu metody:

$newArray = array_merge(
    $arrayOne,
    $arrayTwo,
    ['foo', 'bar'],
);

Kolejne wbudowane funkcje zostały wsparte o wyjątki. Tym razem wyjątki zostały wprowadzone do wywołań json_encode() i json_decode(). Oczywiście zgodność wsteczna jest ważna w PHP, dlatego aby został rzucony wyjątek należy dodać parametr JSON_THROW_ON_ERROR:

try {
    $decoded = json_decode("{ 'invalid' : 'json' }", false, 512, JSON_THROW_ON_ERROR);
} catch (\JsonException $e) {
    echo $e->getCode(); // 4
    echo $e->getMessage(); // Syntax error
}

Poza tym pojawiły się…. nowe fukncje. Na przykład is_countable(), która sprawdzi czy rzecz jest policzalna (count() od PHP 7.2 rzuca Warning, gdy jest wykonywane na czymś co jest niepoliczalne). Dodano również monotoniczny timer wysokiej rozdzielczości (hrtime()), który nie ma jeszcze dokumentacji na php.net, ale jest następcą polecenia microtime(), ale jest niezależny od zmiany czasu systemowego.

I na koniec, przypominam, że obecnie wspierane wersje PHP zaczynają się od wersji 7.1. Wersja 7.0 oraz 5.6 nie posiada już żadnego wsparcie, nawet łatek bezpieczeństwa.

PHP 7.4 – Typowanie 2.0

Jednym z większych przełomów jakie przyniósł PHP 7 (2015) jest możliwość deklaracji typów. Tego czego wciąż brakuje, to możliwość ustalenia typu właściwości klasy już na etapie jej opisywania, a nie tworzenia metod. PHP 7.4, który pojawi się pod koniec 2019 roku rozwiąże ten problem.

class User {
    public int $id;
    public string $name;
 
    public function __construct(int $id, string $name) {
        $this->id = $id;
        $this->name = $name;
    }
}

Po wprowadzeniu Typed Properties 2.0, komentarze w PHP znów będą służyły do komentowania kodu, a nie uzupełniały braki języka poprzez @param, @return itp. Pozostaje czekać.

Artykuł PHP 7.3 na pokładzie, przed nami PHP 7.4 pochodzi z serwisu Mateusz matipl Kamiński.

Autor wpisu: matipl, dodany: 29.11.2018 10:37, tagi: php

Martin zebrał wtyczki do PhpStorm, które są godne uwagi z naciskiem na framework Symfony. Ale moim zdaniem każdy znajdzie coś dobrego dla siebie:

  • PHP Annotations
  • PHP Toolbox This plugin provides „Method References” and „Type Provider” extracted from the Symfony Plugin. You can configure the plugin with simple per project files .ide-toolbox.metadata.json to support for eg $f->(‚date_time’)->format, new Datetime(‚caret’). Also it improves some PhpStorm Core functionality.
  • Symfony Plugin
  • PHPUnit Enhancement PhpStorm plugin to provide smart autocomplete, code navigation and refactoring features for mocked class methods.
  • PHP composer.json support
  • Php Inspections (EA Extended) This plugin is a Static Code Analysis tool for PHP (aka inspections in JetBrains products)
  • Twig Support
  • .env files support
  • .ignore

Używacie innych wtyczek? Ja korzystam również z „Phalcon auto-complete” i „BashSupport”.

Artykuł PhpStorm – polecane wtyczki pochodzi z serwisu Mateusz matipl Kamiński.

Autor wpisu: matipl, dodany: 13.11.2018 16:08, tagi: php

Ale ten czas szybko płynie. Dopiero co opisywałem Wam przepis na kompilację PHP 5.4 (2013), a za rogiem czeka już PHP 7.3.

Mimo upływu 5 lat dużo się nie zmieniło w samej konfiguracji kodu źródłowego i kompilacji. Podstawa to posiadanie w Linuksie gcc/g++ oraz pakietów -dev (głównie pliki nagłówkowe .h), dla rozszerzeń z których będziemy korzystać. Poniżej lista pakietów dla Debiana, które są przydatne:

apt-get install make gcc g++ libxml2-dev zlib1g-dev bzip2 libbz2-dev libcurl4-gnutls-dev libjpeg8-dev libpng-dev libfreetype6-dev libmcrypt-dev libmysqlclient-dev lemon libtidy-dev libxslt1-dev libpcre++-dev libssl-dev automake autoconf libsystemd-dev pkgconf

Na pewno zapytacie po co to wszystko? W dawnych czasach nie wszystkie dodatki PHP były przygotowane w paczkach danej dystrybucji i po pewnym czasie trzeba było pobierać kod źródłowy, skonfigurować i skompilować i tak. Dlaczego nie zrobić tego od razu? W tamtych czasach również kompilacja pomagała odpowiednio sprofilować PHP pod daną konfigurację (czy ktoś jeszcze korzysta z Gentoo?). Obecnie główna przewaga takie podejścia, to posiadanie kilku różnych instanacji PHP w różnych wersjach na jednej maszynie (bo mamy różne projekty, różnych klientów etc). Jak również można sprofilować PHP pod konkretną jedną aplikację (prof-gen & prof-use).

Ja nadal zawsze kompilują PHP, wtedy w przypadku dysków HDD mamy ciut mniejsze obciążenia i większą swobodę działania. Jeśli już wykonałeś poprzedni krok wystarczy pobrać kod źródłowy wybranej przez nas wersji PHP (np. 7.2.12). Jeśli nie chcecie za każdym razie przeklikiwać się przez stronę https://php.net/downloads.php możecie użyć prostego skrypciku:

#!/bin/bash

if [ $# -eq 0 ]; then
  echo "Syntax : $0 php_version"
  echo "Example: $0 7.0.2"
  exit 1
fi
VERSION=$1
SHORT=${VERSION%.*}
SHORT=${SHORT//./}
FILE="php-$VERSION.tar.gz"
URL="http://pl1.php.net/get/$FILE/from/this/mirror"

HTTP_CODE=`curl --silent --head --location --output /dev/null --write-out '%{http_code}' $URL`
if [ $HTTP_CODE == 404 ]
then
   echo "Cannot download php-$VERSION - not found."
   exit 1
fi

wget $URL -O $FILE

Wtedy gdy dostaniesz informację o nowej wersji wystarczy, że wydasz polecenie ./php_get 7.2.12. Jak już mamy paczkę .tar.gz na dysku musimy rozpakować źródła i w katalogu, który powstanie umieszczamy nasz przepis na kompilację. Jak taki przepis wygląda? Wszystko zależy, z czego Wasze aplikacje PHP korzystają, a może jest to serwer, gdzie serwujecie rózne aplikacje i wymagacie różnych bibliotek. Mój uniwersalny przepis, z którego korzystam to:

make distclean
./configure \
--enable-opcache \
--prefix /usr/local/php72 \
--enable-fpm \
--enable-cli \
--enable-inline-optimization \
--disable-rpath \
--disable-ipv6 \
--enable-mbstring \
--enable-mbregex \
--enable-zip \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-gettext \
--with-curl \
--with-zlib \
--with-zlib-dir=/usr \
--with-gd \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-freetype-dir \
--enable-exif \
--enable-shmop \
--with-xsl=shared \
--enable-soap=shared \
--enable-sockets \
--enable-pcntl=shared \
--with-bz2 \
--with-tidy \
--with-pcre-dir \
--with-openssl \
--with-imap-ssl \
--with-pear \
--enable-pcntl \
--with-fpm-systemd
make -j2
make install

Czasami różni się w zależności od potrzeb. W dużym skrócie – sprzątamy po poprzedniej kompilacji, konfiguruejmy nasz przepis oraz puszczamy machinę w ruch. Opcja -j2 oznacza, że kompilacja wykona się na 2 jobach. Potrwa to dobrych kilka minut. I ostatecznie wszystko zainstaluje się zgodnie z przepisem, tj. w /usr/local/php72 (dzięki takiemu podejściu łatwo później posprzątać po poprzedniej wersji, np. php70).

Konfiguracja dla środowiska PHP jest czytana z lokalizacji /usr/local/php72/lib/php.ini (ja mam i tak w /etc/php72.ini, a we właściwym miejscu link symboliczny, ułatwia to tworzenie kopii zapasowych konfiguracj):

cp php-7.2.12/php.ini-production /etc/php72.ini
ln -s /etc/php72.ini /usr/local/php72/etc/php.ini
ln -s /usr/local/php72/etc/php.ini /usr/local/php72/lib/php.ini

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

Autor wpisu: matipl, dodany: 08.11.2018 13:54, tagi: php

Ekipie ZaufanaTrzeciaStrona udało się wszystko dograć i już 1 grudnia odbędzie się pierwsza edycja konferencji What The H@ck. Jest to jednodniowa konferencja z kilkoma równoległymi ścieżkami. Łącznie odbędzie się 67 wykładów z przeróżnych tematów (od bezpieczeństwa aplikacji bankowych po bezpieczeństwo Internetu Rzeczy). Spotkacie tutaj takie postacie jak Piotr Konieczny, Michał Sajdak, Paula Januszkiewicz czy Łukasz „honey” Jachowicz.

Wydaje mi się, że nie muszę Ciebie zachęcać, jeśli tylko trochę związany(a) jesteś z branżą IT i rzucisz okiem na agendę:

What The H@ck 2018 - agenda

W takim razie do zobaczenia w sobotę, 1 grudnia!

Zapisy: What The H@ck Czas: 1 grudnia 2018, 9:00-18:00 Miejsce: Koszykowa 75, Warszawa (PW, Wydział MiNI) Bilety: obecnie 199 PLN brutto

Artykuł What The H@ck – nowa konferencja już w grudniu! pochodzi z serwisu Mateusz matipl Kamiński.

Autor wpisu: matipl, dodany: 18.10.2018 17:00, tagi: php

Chciałem już nie pisać o CodeSkill, to lokalne spotkanie i nie ma potrzeby, aby wciąż je promować. Ale o wczorajszym spotkaniu, szczególnie prelekcji Łukasza Sosnowskiego warto wspomnieć, ponieważ nawiązywała do PHP.

Łukasz przez prawie godzinę starał się pokazać, że każdy działający kod jest poprawny. Oczywiście kod może być „bardziej poprawny” lub mniej. I nie tylko chodzi o to, aby kod się uruchamiał i był zrozumiały. Bo powoli robi się to bardzo subiektywna opinia programisty.

A czy da się inaczej? Czy można skorzystać z jakiś metryk? Oczywiście, że tak. Łukasz wspomniał o złożoności cyklomatycznej (CC; liczba niezależnych ścieżek w programie) oraz mierze złożoności Halsteda (objętość, trudność napisania/zrozumienia kodu, utrzymanie kodu, szacunkowa ilość błędów). I nie są to subiektywne miary, ale miary z konkretnym uzasadnieniem matematycznym i merytorycznym (próba konstrukcji miar niezależnych od języka programowania).

Ogólna definicja mówi, że CC to liczba niezależnych ścieżek w grafie reprezentującym przepływ sterowania w metodzie. Istnieją dwa wzory określające tę wartość: pierwszy opiera się na liczbie wierzchołków i łuków w grafie, natomiast drugi – jedynie na liczbie węzłów decyzyjnych. (źródło)

Teorii było bardzo niewiele – słusznie, ponieważ można znaleźć ją w Internecie. Natomiast sporo było przykładów z życia. Były zaprezentowane 2-3 zadania z życia, i każde rozwiązane na kilka sposobów wraz z prezentacją ich metryk.

Jednym z nich było zadanie związane z napisaniem funkcji, która przyjmuje 3 parametry (ulica, miasto, kod) i na wyjściu powinien być string sformatowany w następujący sposób: Ulica, Miasto Kod . Pierwsze rozwiązanie (wariant) pojawił się bardzo szybko i wyglądał następująco:

function address(?string $street, ?string $city, ?string $zip): string
{
    $fullAddress = !empty($street) ? $street : '';
    if (empty($city) && empty($zip)) {
        return $fullAddress;
    }
    if (!empty($fullAddress)) {
        $fullAddress .= ', ';
    }
    if (!empty($zip)) {
        if (!empty($city)) {
            $fullAddress .= $city . ' ';
        }
        $fullAddress .= $zip;
    } else {
        $fullAddress .= $city;
    }
    return $fullAddress;
}

Ale w zespole, o którym mówił prowadzący nie wszystkim przypadła do gustu tak duża ilość warunków i ktoś szybko pokazał wariant drugi:

function address2(?string $street, ?string $city, ?string $zip): string
{
    $zipPart = implode(' ', array_filter([$city, $zip]));
    return implode(', ', array_filter([$street, $zipPart]));
}

Niestety. Mimo, że jest to ładniejsze rozwiązanie to okazało się mało wydajne (0,35μs vs 0,53μs). Po długim czasie, zupełnie przypadkiem powstało rozwiązanie piąte, które wyglądało następująco:

function address5(?string $street, ?string $city, ?string $zip): string
{
    return trim(
        $street . ", ". trim($city . " " . $zip),
        ", "
    );
}

Metryki dla wszystkich 5 rozwiązań: Poprawny kod - zad. 1, metryki

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

Autor wpisu: matipl, dodany: 11.10.2018 15:47, tagi: php

Brakuje mi starego, poczciwego PHPCon Poland, które było małym, integracyjnym spotkaniem miłośników PHP. Pamiętacie Góry Świetokrzyskie? 90 osób odciętych od świata, trzeba było iść na Święty Krzyż aby złapać GSM

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