Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM    Subskrybuj kanał ATOM dla tagu php Kanał ATOM (tag: php)

Autor wpisu: Piotr Śliwa, dodany: 04.10.2010 19:11, tagi: php

Jakiś czas temu pracowałem nad projektem, którego funkcjonalności były oparte na wykorzystywaniu usług sieciowych o podobnej funkcjonalności. Pierwszym krokiem było ujednolicenie interfejsów tych usług. Na podstawie jednej z usług tworzyłem prosty interfejs, który później zaimplementowałem również dla pozostałych. Pierwszym krokiem było zastosowanie wzorca Facade, aby uprościć na potrzeby aplikacji interfejs pierwszej usługi sieciowej. Następnie pozostałe usługi sieciowe również zaadaptowałem do tego nowego interfejsu, wykorzystując wzorzec Adapter. Adapter od Facade różni się tym, że adapter przystosowuje zewnętrzny obiekt (zbiór obiektów) o podobnym interfejsie do już istniejącego, a fasada obudowuje złożony interfejs nowym, prostszym w użyciu. Ten wpis nie jest jednak o Adapterze (pisałem już o nim tutaj), ani o Facade, a o Service Stub.

Pewnego pięknego weekendu chciałem nadrobić zaległości budując kolejne funkcjonalności w serwisie wokół tych usług sieciowych. W tym projekcie w warstwie integracji z web services zastosowałem programowanie sterowane testami. Niestety w piątek po powrocie do domu, zastałem awarię internetu (która, jak się okazało, trwała do poniedziałku). Myślałem, że z moich planów nic nie wyniknie, ale postanowiłem skorzystać z wzorca Service Stub, czyli usługi zastępczej. Napisałem adapter usługi sieciowej, który przetrzymuje dane w pamięci i przechodzi wszystkie testy dla pierwszego z adapterów usług sieciowych. Dzięki temu mogłem pisać kolejne funkcjonalności serwisu, gdyż miałem adapter "zdalnej usługi", który działał zgodnie z założeniami.

Jaka jest istota Service Stub? Chodzi o zastąpienie zdalnej usługi sieciowej wywoływaniami lokalnymi, w celu przyspieszenia wykonywania testów jednostkowych. Jak widać na załączonym przykładzie, przyspieszenie wykonywania testów to nie jedyna korzyść z zastosowania tego wzorca.

Nie ma co się więcej rozpisywać o tym wzorcu, gdyż jest on bardzo prosty. Odsyłam do opisu Service Stub z katalogu Martina Fowlera oraz ciekawego artykułu Mocks Aren't Stubs, który pokazuje inne podejście do pisania testów, a mianowicie testowanie oparte na weryfikacji zachowania, a nie weryfikacji stanu.

Autor wpisu: nospor, dodany: 04.10.2010 10:33, tagi: php

Zainspirowany ostatnimi wypowiedziami początkujących (i nie tylko) programistów php, postanowiłem skrobnąć małe co nie co na temat błędów E_NOTICE. Niektórzy mogą mi zarzucić, że E_NOTICE to nie błąd, lecz ja słowo "błąd" użyłem celowo i z pełną świadomością. Zapewne bardziej fachowo należałoby napisać "komunikaty" E_NOTICE, aczkolwiek słowo komunikat to przecież komunikat więc można olać, a błąd to już coś poważniejszego, więc może by warto na niego zwrócić uwagę. Także by nie usypiać uwagi początkujących programistów (jak i niestestety tych już uważających się za niepoczątkujących) będę używał słowa "błąd".

Autor wpisu: sokzzuka, dodany: 03.10.2010 23:59, tagi: php

Zyx ma ciekawe przemyślenia, ja również je mam (tak mi się zdaje) więc tym razem moje RE, będzie dotyczyć jego artykułu pt. poeksperymentujmy z kontrolą uprawnień. Przedstawił on w swoim artykule sposób na weryfikacje czy dany kod ma dostęp do innego kodu na podstawie domen. Domena była obszarem gdzie obowiązywała dana polityka bezpieczeństwa, jeżeli zewnętrzny kod chciał na niej wykonać jakąś operacje, musiał wywołać metodę safeOperation z argumentami charakterystycznymi dla danej operacji i podać domenę z której pochodzi. Metoda safeOperation weryfikowała za pomocą policyManagera czy kod z innej domeny ma prawo wywołać daną operację i jeżeli ich nie posiadał to wyrzucany był wyjątek.

Rozwiązanie, które tu przedstawię jest w pewnym sensie generalizacją koncepcji Zyx-a. Na czym ono polega ?

Pierwsze założenie jest takie, że wszystkimi obiektami (a przynajmniej tymi które chcemy zabezpieczyć) zarządzą kontener IoC (inversion of control). Jest to maszynka, która tworzy nam i konfiguruje obiekty. Mój kontener IoC ma tą ciekawą właściwość, że pozwala zwracać zamiast żądanego obiektu jego proxy. Proxy jest obiektem przez którego przelatują wszystkie żądania do docelowego obiektu i posłuży on do kontroli uprawnień.

Cała idea leży w tym, że proxy przy próbie wywołania metody na obiekcie docelowym, sprawdzi w Acl, czy aktualny użytkownik (może być cokolwiek innego np wywołujący obiekt) ma uprawnienia do wywołania owej metody i jeżeli nie to rzuci wyjątkiem.

Żeby nie być gołosłownym, przedstawię fragmenty kodu jak to działa, na końcu artykułu będzie też link do kompletnego przykładu razem z moim kontenerem IoC.

Po pierwsze konfiguracja IoC (pełną informacje o konfiguracji znajdziesz w artykule o kontenerze IoC):

<object-config>
    <application>
        <!-- For now empty, objects declared here will be cached by APC or something similiar -->
    </application>
    <session>

    </session>
    <request>   

        <object class="Foo1">
            <property name="param2">other_baz</property>
            <property name="param1">baz</property>
            <proxy class="AccessProxy" />
        </object>
        <object class="AccessProxy">
            <property name="acl" type="class">Acl</property>
        </object>
        <object class="Acl">
            <property name="user" type="class">User</property>
        </object>

    </request>
</object-config>

I klasy biorące udział w eksperymencie: klasa docelowa:

class Foo1 {

    private $param1;
    private $param2;

    function __construct($param1, $param2){
        $this->param1 = $param1;
        $this->param2 = $param2;
    }

    function doHello(){
        echo 'hello <br/>';
    }

    function doFoo(){
        echo 'foo <br/>';
    }

}

Klasa Acl:

class Acl {

    protected $_user;
    public function __construct(User $user){
        $this->_user = $user;
    }

    public function isCallable($class, $method){

        if($this->_user->id == 10 and $method == 'doHello'){
            return true;
        }
        if($this->_user->id == 15 and $method == 'doFoo'){
            return true;
        }
        return false;
    }
}

Minimalistyczna klasa użytkownika ;)

class User {
    public $id = 10;
}

oraz najważniejsze – klasa proxy:

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

Autor wpisu: sokzzuka, dodany: 30.09.2010 16:15, tagi: php

Z ostatniej chwili – Adam Harvey w swoim wpisie na grupie php.internals, zaproponował aby dodać do języka możliwość przeciążania operatorów porównania: >,

Autor wpisu: matipl, dodany: 28.09.2010 13:38, tagi: php, internet

OVH - logoOkoło tygodnia po starcie oferty firmy 1&1 na polskim rynku - darmowy hosting z PHP przyszła odpowiedź od konkurenta – OVH.

Francuska firma OVH oferuje swoje usługi w Polsce od kilku lat. Ich oferta od początku była konkurencyjna cenowo jak również dość innowacyjna (np. RPS czy Cloud).

Usługa OVH  nosi nazwę Serwer wirtualny Starter. I muszę powiedzieć, że w najważniejszych sprawach bije 1&1:

1&1 OVH
Darmowa domena Tak Tak
Przestrzeń 1 GB (do 10 GB) 20 GB
Transfer miesięczny 3 TB 4 TB
Konta e-mail 100 po 2 GB 100 po 2 GB
Bazy danych 10 10 po 25 MB
Wiele domen - -
Aliasy - nielimitowane
Subdomeny - 1000
Okres 24 m-c 24 m-c

Transfer miesięczny w OVH jest większy aż o 1 TB, a powierzchnia dyskowa aż 20x. 1&1 chwali się powierzchnią dyskową 10 GB, ale ludzie pisali że domyślnie jest 1 GB i trzeba specjalnie kontaktować się z BOK.

Na plus dla OVH jest również długa obecność na polskim rynku. Dzięki temu wiemy czego można się spodziewać po obsłudze klienta, dostępności usług etc. Niestety pierwsze dni 1&1 w Polsce były mocno spalone.

W takim wypadku osobom, które potrzebują miejsca w Sieci na wizytówkę firmy lub małe projekty polecam ofertę OVH.

A jeśli darmowe rozwiązanie nie odpowiada, polecam hosting u mnie.

Autor wpisu: Wojciech Sznapka, dodany: 27.09.2010 09:24, tagi: symfony, php

Na firmowym blogu XSolve xlab.pl umieściłem artykuł o uporządkowanym wysyłaniu e-maili w projektach symfony 1.4, wykorzystującym dobrodziejstwa programowania zorientowanego obiektowo. Krótki wstęp: Niemal każdy projekt, z jakim miałem do czynienia, zawierał fragmenty, w których były wysyłane e-maile. Najczęściej czynność ta jest wykonywana w kontrolerze aplikacji (klasa actions), a treścią wiadomości jest wyrenderowany partial. To rozwiązanie [...]

Autor wpisu: batman, dodany: 24.09.2010 18:00, tagi: php

Przeglądając dzisiaj zasoby sieci, natrafiłem na bardzo ciekawy projekt – konsola PHP w przeglądarce. Brzmi nieprawdopodobnie? Ale działa! Cały projekt składa się z jednego formularza, do którego można wprowadzić kod PHP, a następnie go wykonać.

php-console-in-browser

Po co komuś konsola PHP w przeglądarce? Każdy znajdzie inne zastosowanie. Dla mnie będzie to duże ułatwienie podczas testowania niewielkich fragmentów kodu. Zamiast tworzyć skrypt, a następnie odpalać go w wierszu poleceń, uruchomię tą aplikację, a w niej wykonam kod.

Instalacja jest banalnie prosta i sprowadza się do skopiowania zawartości projektu na lokalny serwer. Zainteresowani? Jeśli tak, to odsyłam Was na stronę autora lub na stronę projektu znajdującą się na githubie.

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