Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: matipl, dodany: 29.09.2014 19:41, tagi: php

PHPers 3city

Za chwilę październik i przed nami 2 spotkania/konferencje w Trójmieście, na które moim zdaniem warto się wybrać.

Już 1 października odbędzie się powakacyjny tech.3camp w Gdyni. Uczestnictwo jak zwykle darmowe, ale wymagana jest wcześniejsza rejestracja. Przed nami 4 prelekcje. Prelegenci poruszą tematykę Big Data (Artur Senk, OKE Poland), testowania (Marcin Maj, Kainos) oraz komunikacji między developerami a managerami produktu (Bartek Gatz, Spartez). Będzie też o tym, jak programista może rozkręcić swój biznes (Piotr Macuk, Konfeo.com).

Miejsce: PPNT (Gdynia) Termin: 1.10.2014 18:00 Rejestracja: https://tech3camp1pazdziernika.konfeo.com

Natomiast 17 października zapraszam na kolejne spotkanie organizowane przez PHPers 3city. W planie są 3 prelekcje. Michał Łukaszewski opowie nam „Jak naprawić kod, żeby nie zepsuć aplikacji, czyli kilka słów o refactoringu” (mocno polecam). A Maciej Iwanowski pokaże „Współbieżność w ekosystemie PHP”. Trzeci temat to jeszcze zagadka.

Miejsce: GPNT (Gdańsk) Termin: 17.10.2014 18:00 Rejestracja/info: wydarzenie na FB

PS: A osobom mieszkającym w Warszawie polecamy Aulę Polskę, najbliższe spotkanie 9 października.

Autor wpisu: Piotr Śliwa, dodany: 27.09.2014 00:15, tagi: php

Poprzedni mój wpis objaśniał podstawy programowania funkcyjnego, tym razem zajmę się wzorcem projektowym, który wywodzi się z języków funkcyjnych i jest szeroko stosowany w Haskellu, Scali, czy F#. Mowa tutaj o type Option. Inne nazwy tego patternu to Optional (java8), czy Maybe (Haskell) - podaję jabyście chcieli coś na ten temat wygooglować.

Nadmiar ifów w kodzie nie jest dobry, jest wiele sposobów które pozwalają zredukować ich liczbę. Takimi sposobami są niektóre wzorce takie jak State, czy NullObject. Wzorzec Option Type w php ma ograniczone zastosowanie, ale mimo to w wielu przypadkach jest użyteczny.

Przykład

Może na początek przykład, który będzie nam towarzyszył do końca artykułu. Jest on z grubsza zaczerpnięty z kodu produkcyjnego, więc jest jak najbardziej praktyczny i nie modeluje zoo.

Na początek zarysuję trochę dziedzinę problemu oraz sam problem. Mamy kanały, które agregują wiadomości, a każdy kanał należy do grupy kanałów.

ChannelGroup 1----* Channel 1----* Message

Grupa kanałów m. in. określa, czy w kanałach które do niej należą jest aktywne "zaawansowane targetowanie wiadomości" (cokolwiek to znaczy - dla przykładu nie jest to ważne). Mamy tablicę danych, w których prawdopodobnie jest wartość pod kluczem "channelId", chcemy dodać coś do zapytania z Doctrine2 (np. join lub warunek where) z id grupy, gdy grupa podanego kanału ma włączone zaawansowane targetowanie.

W powyższym opisie występują słowa takie jak: "prawdopodobnie", "gdy", więc kilka ifów będzie niezbędnych.

Przykład kodu w stylu imperatywnym:

if(isset($data['channelId'])) {  
    $channel = $this->channelRepo->find(data['channelId']);

    if($channel !== null) {
        $group = $channel->getGroup();

        if($group->hasAdvancedMessageTargeting()) {
            $qb->...;//Dodanie jakiegoś warunku do zapytania
        }
    }
}

3 ify, w dodatku zagnieżdżone. Ten kod nie wygrałby konkursu piękności...

Ale działa.

Czy ten kod da się zapisać nie używając ani jednego wyrażenia warunkowego (ifa lub operatora trójkowego)? Tak, za pomocą typu Option.

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

Autor wpisu: Kamil Adryjanek, dodany: 18.09.2014 21:19, tagi: javascript

ExtJS5 Ostatnio szukałem tutoriala, który opisywałby w prawidłowy sposób nadpisywanie komponentów ExtJS5, niestety nie udało mi się znaleźć nic ciekawego – może z wyjątkiem dobrego artykułu na temat nadpisywania klas w ExtJS4, niestety zastosowane rozwiązanie nie działało w ExtJS5. Ponadto, nie znalazłem również właściwych informacji w oficjalnej dokumentacji ExtJS, dlatego w tym artykule w kilku zdaniach postanowiłem opisać jak to powinno wyglądać.

Post Rozszerzanie i nadpisywanie komponentów ExtJS5 pojawił się poraz pierwszy w Kamil Adryjanek.

Autor wpisu: Kamil Adryjanek, dodany: 15.09.2014 15:13, tagi: javascript

ExtJS5Recently i was looking for tutorial about proper way of overriding ExtJS5 class methods but unfortunately i haven’t found anything interesting – maybe except one good tutorial about overriding in ExtJS 4 but for me that solution was not working in ExtJS 5. I have also not found sufficient information about proper way of overriding in ExtJS docs, so i decided write a few words of explanation.

Post Extending and Overriding ExtJS5 components pojawił się poraz pierwszy w Kamil Adryjanek.

Autor wpisu: Łukasz Socha, dodany: 11.09.2014 19:18, tagi: css

Kodując wszelkiego rodzaju formularze zapewne nie raz spotkałeś się z problemem o stylowania pól typu radio i checkbox. Nie da się ich stylować za pomocą CSS tak prosto jak pola tekstowe, ale wraz z powstaniem CSS 3 powstał pewien prosty sposób :)

Autor wpisu: Kamil Adryjanek, dodany: 08.09.2014 09:45, tagi: javascript

A couple of weeks ago Sencha has introduced new version of their flagship product: ExtJS 5. After “slow and heavy” ExtJS 4 this version is expected to be the best ExtJS release ever. In next few chapters i will try to explain you why.

Post Is ExtJS5 really so awesome? pojawił się poraz pierwszy w Kamil Adryjanek.

Autor wpisu: Piotr Śliwa, dodany: 07.09.2014 23:05, tagi: php

Obiekty* są fajne, dzięki nim można zrobić miłe w użyciu api. Obiekty są fajne, bo dają nam narzędzia do reużywalności kodu. Obiekty są fajne przede wszystkim dlatego, bo dają nam możliwość ukrywania implementacji i hermetyzacji danych.

PHP to przede wszystkim język dwuparadygmatowy, powstał jako język strukturalny. Następnie dodano do niego bardzo kulawe wsparcie do programowania obiektowego (PHP4), które naprostowano w PHP5. Kolejnym krokiem było dodanie trochę mniej kulawego wsparcia dla domknięć (Closure) w PHP 5.3, które częściowo zostało naprostowane w PHP 5.4.

Ale lepszy rydz niż nic. Ten rydz nie jest taki zły, dzięki niemu programowanie funkcyjne w PHP jest łatwiejsze i faktycznie ma sens.

A o co chodzi?

Nie chcę sypać tutaj definicjami, ale absolutne minimum musi być. W programowaniu funkcyjnym funkcja jest obywatelem pierwszej kategorii - to znaczy że można ją przypisać do zmiennej, wykonywać operacje na niej, przekazywać funkcje jako parametr do funkcji itp. Analogicznie do obiektu w OOP - można przypsać obiekt do zmiennej, wywołać jakąś metodę na nim i przekazać ten obiekt jako argument do jakieś metody / funkcji. W php przypisanie do zmiennej i przekazanie jako parametr można zrealizować tak:

//przypisanie do zmiennej
$removeDigits = function($s){
    return preg_replace('/\d/', '', $s);
};

//przekazanie jako argument
$words = array_map($removeDigits, ['śaJ123', '32i1', 'aisogłaM321']);

Jest to mały, prosty kawałek kodu zrealizowany w sposób funkcyjny: mamy dane na wejściu w postaci tablicy stringów, a następnie jest wywołana funkcja, która korzystając z innego parametru (funkcji $removeDigits), wywołuje operacje na danych wejściowych. Kod ten oczywiście można zrealizować w sposób strukturalny:

$words = array();
foreach(['śaJ123', '32i1', 'aisogłaM321'] as $word) {  
    $words[] = preg_replace('/\d/', '', $word);
}

Obiektowo również:

class Word {  
    private $word;
//... 50 lini później

$firstChars = $stringCleaner->clean([new Word('śaJ123'), new Word('32i1'), new Word('aisogłaM321')]);

Jak widać, obiekty nie wszędzie pasują... ;)

Operacje na funkcjach

W powyższym przykładzie nie pokazałem w jaki sposób można operować na funkcjach - trzeba nadrobić zaległości. Wyobraźmy sobie, że nie dość że chcemy usunąć cyfry, to jeszcze chcemy odwrócić każdy wyraz (za pomocą np. strrev).

$removeDigits = function($s){
    //dodane strrev
    return strrev(preg_replace('/\d/', '', $s));
};

$words = array_map($removeDigits, ['śaJ123', '32i1', 'aisogłaM321']);

Ok, nazwa $removeDigits już nie jest aktualna, nowa nazwa będzie wymagała zastosowanie operatora logicznego && - to jest zapach że funkcja ma więcej niż jedną odpowiedzialność.

Jak przyjrzymy się bliżej i jeśli uważaliśmy na analizie matematycznej, to zauważymy operację zwaną składaniem funkcji.

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

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