Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: matipl, dodany: 08.10.2010 14:39, tagi: php

php-logoJakoś małym echem w blogosferze rozeszła sie informacja włączenia dodatku PHP-FPM (FastCGI Process Manager) do wersji 5.3.3 PHP.

A jest to duży skok na przód. PHP-FPM jest to patch zawarty w jądrze PHP, który pozwala zarządzać procesami FastCGI: uruchamiać, zatrzymywać, restartować. Jest to wspaniała wiadomość dla wszystkich osób korzystających z PHP poprzez FastCGI (np. nginx, lighttpd). Do tej pory trzeba było sie np. kłopotać z spawn-fcgi.

Większość osób, które dokonują standardowej instalacji Apache jako serwer WWW + PHP nawet nie zdają sobie sprawy jak to działa. Apache domyślnie obsługuje PHP poprzez własny moduł (mod_php) – w skrócie Apache ładuje całe środowisko w siebie. Dzięki wykorzystaniu FastCGI i FPM otrzymujemy:

  • mniejsze zużycie pamięci (dodatkowe workery nginx nie potrzebują środowiska PHP)
  • lepsze zarządzanie uprawnieniami PHP bez gimnastyki
  • gdy PHP padnie nginx nadal działa
  • inteligentne zarządzanie wspólnymi procesami PHP (obniża zużycie pamięci)

Jedyne co należy obecnie zrobić to podczas konfiguracji PHP (przed kompilacją) dodać –enable-fpm. Skompilowany zarządca będzie czekał w sapi/fpm jako php-fpm. W tym samym katalogu macie również plik konfiguracyjny (php-fpm.conf) oraz skrypt inicjacyjny init.d.php-fpm.

Ja na wszelkich maszynach dedykowanych pod serwery WWW + PHP korzystam właśnie z tej wybuchowej mieszanki.

Autor wpisu: batman, dodany: 08.10.2010 08:00, tagi: jquery, zend_framework

Czym jest serwis internetowy? Jest to zbiór formularzy oraz danych dodanych przy pomocy tych formularzy. Gdyby nie formularze, Internet taki jakim go znamy. Wyobrażacie sobie w jaki sposób dodawalibyście cokolwiek na ścianę facebooka bez formularzy?

W przypadku formularzy najczęstszym schematem jest ścieżka:

  • strona początkowa (informacje na temat formularza lub dane zebrane przy jego pomocy)
  • formularz (obsługa błędów, operacje na wprowadzonych danych)
  • strona końcowa (podziękowania za wysłanie formularza lub powrót do strony początkowej).

Prawda, że nudne? Okazuje się, że wyrwanie się z tego schematu wcale nie jest takie trudne. Wystarczy formularz wyświetlić na warstwie, a dane zapisać AJAXem w tle. Oczywiście nie można zapomnieć o sytuacji kryzysowej, w której z jakiegoś powodu (np. błąd w skrypcie) zostaliśmy pozbawieni możliwości korzystania z Javascript.

Wszystko to, co przed chwilą opisałem można zrealizować niewielkim nakładem prac przy pomocy komponentu Zend_Form, biblioteki jQuery oraz pluginu FancyBox. Najciekawsze w tym wszystkim jest to, iż nie musimy wcale pisać dodatkowego kodu. Wszystkim zajmą się mechanizmy wbudowane w Zend Frameworka oraz konwencja, której trzeba się trzymać podczas stosowania tego sposobu.

Zacznijmy od formularza. Będzie to prosty formularz zbierający dane o użytkownikach (w przykładzie wykorzystałem klasę Batman_Form opisaną we wpisie Uniwersalne dekorowanie Zend_Form).

class Application_Form_FancyboxExample extends Batman_Form
{
    protected function _renderForm()
    {
        $this->setName('form_fancybox_example');
        $this->setAction('/index/fancyboxform');

        $firstname = new Zend_Form_Element_Text('firstname');
        $firstname->setLabel('Imie')
                  ->setRequired(true)
                  ->addValidator(new Zend_Validate_NotEmpty(), true);

        $lastname = new Zend_Form_Element_Text('lastname');
        $lastname->setLabel('Nazwisko')
                 ->setRequired(true)
                 ->addValidator(new Zend_Validate_NotEmpty(), true);

        $submit = new Zend_Form_Element_Submit('btn_save');
        $submit->setLabel('Zapisz')
               ->setIgnore(true);

        $this->addElement($firstname);
        $this->addElement($lastname);
        $this->addElement($submit);
    }
}

Kluczowym tutaj elementem jest zastosowanie akcji, która jednoznacznie wskazuje na akcję, odpowiedzialną za przetworzenie formularza. Ten prosty zabieg umożliwi nam obsłużenie formularza w przypadku braku Javascript.

Następnie musimy stworzyć widok, który będzie zawierał link do formularza.

<a href="/index/fancyboxform" id="link">dodaj uzytkownika</a>

Na koniec pozostaje stworzenie akcji

public function fancyboxformAction()
{
    $form = new Application_Form_FancyboxExample();
    if($this->_request->isPost()) {
        $postData = $this->_request->getPost();
        if($form->isValid($postData)) {

            // zrob cos z danymi

            $this->_redirect('/index/fancyboxexample');
        }
    }
    $this->view->form = $form;
}

i widoku z formularzem.

<h1>Formularz</h1>
<?php echo $this->form; ?>

Jak dotąd nie zrobiliśmy nic ponad stworzenie standardowego, nudnego formularza wraz z jego obsługą. Pora na magię.

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

Autor wpisu: batman, dodany: 06.10.2010 08:00, tagi: jquery

Godzina 3.41, noc z soboty na niedzielę po niezłej zabawie. Wybudzony ze snu deweloper, zapytany o najlepszą bibliotekę Javascript bez chwili zastanowienia odpowie – jQuery. Wydawać by się mogło, że nic już się nie da dodać do tej biblioteki. A jednak. Na oficjalnym blogu jQuery, pojawiła się informacja o zaakceptowaniu trzech pluginów stworzonych przez Microsoft jako oficjalnych pluginów jQuery. Pluginy te to jQuery Templates, jQuery Data Link oraz jQuery Globalization. Dwa pierwsze będą utrzymywane w ramach podstawowej biblioteki, ostatni w ramach jQuery UI. Co więcej, jQuery Templates zostanie włączone do biblioteki od wersji 1.5.

O co tyle szumu? Okazuje się, że wspomniane pluginy znacznie usprawniają pracę z biblioteką. Dzięki pierwszemu z nich – jQuery Templates – programista zyskuje potężne narzędzie w postaci szablonów, które w bardzo prosty sposób może osadzić na stronie. Szablony te można wypełnić danymi pochodzącymi z tablicy lub zwróconymi z AJAXa.

<script type="text/javascript">
	var movies = [
		{ Name: "The Red Violin", ReleaseYear: "1998" },
		{ Name: "Eyes Wide Shut", ReleaseYear: "1999" },
		{ Name: "The Inheritance", ReleaseYear: "1976" }
	];

	var markup = "<li><b>${Name}</b> (${ReleaseYear})</li>";

	// Compile the markup as a named template
	$.template( "movieTemplate", markup );

	// Render the template with the movies data and insert
	// the rendered HTML under the "movieList" element
	$.tmpl( "movieTemplate", movies ).appendTo( "#movieList" );
</script>

<ul id="movieList"></ul>

Plugin jQuery Data Link znacznie upraszcza “bindowanie” właściwości jednego obiektu do właściwości innego obiektu. Jest to bardzo przydatna funkcjonalność w przypadku formularzy, gdzie wprowadzane dane można od razu powiązać z odpowiednim obiektem.

<!DOCTYPE html>
<html>
<head>
	<style>
	</style>
	<script src="http://github.com/nje/jquery-datalink/raw/e3e3be4312c9b224a8d9b25031f4ac876e4f70fd/jquery.js"></script>
	<script src="http://github.com/nje/jquery-datalink/raw/master/jQuery.datalink.js"></script>
</head>
<body>
	<form>
		<div>
			First Name:
			<input type="text" name="firstName" />
		</div>
		<div>
			Last Name:
			<input type="text" name="lastName" />
		</div>
	</form>
    Object.firstName: <span id="objFirst"></span><br/>
    Object.lastName <span id="objLast"></span>
	<script>
		var person = { };
		$("form").link(person);
		
		// Chain link the person object to these elements to show the results
		$("#objFirst").link(person, {
			firstName: {
				name: "objFirst",
				convertBack: function(value, source, target) {
					$(target).text(value);
				}
			}
		});

		$("#objLast").link(person, {
			lastName: {
				name: "objLast",
				convertBack: function(value, source, target) {
					$(target).text(value);
				}
			}
		});
	</script>
</body>
</html>

Ostatni plugin – jQuery Globalization – dostarcza API do bezproblemowego konwertowania zlokalizowanych danych. Dzięki niemu, programiści będą mogli bez problemu dokonywać konwersji dat oraz wartości liczbowych.

Pluginy można pobrać z następujących adresów:

Dokumentacja jest dostępna pod adresami:

Autor wpisu: Blame, dodany: 05.10.2010 15:36, tagi: javascript

Z racji tego, że powstało już baardzo wiele sposobów na zaokrąglone rogi pomyślałem, że nie będę pisał o niczym nowym. Ten wpis będzie zbiorem tych licznych rozwiązań wykorzystujących zarówno HTML, CSS jak i JavaScript. Na końcu każdej metody pozwoliłem sobie pokazać wady i zalety jej stosowania. Zapraszam do lektury :)

Sposób pierwszy – CSS3

Jak wiadomo, najnowsza wersja arkuszy stylów pozwala na uzyskanie krągłości na naszej stronie. Aby to zrobić wystarczy nadać danemu elementowi odpowiedni selektor, np. klasę a następnie dodać mu poniższe style:

-khtml-border-radius: 10px / 10px;

-webkit-border-radius: 10px / 10px;

-moz-border-radius: 10px / 10px;

border-radius: 10px / 10px;

Dla wyjaśnienia, pierwsza wartość to szerokość zaokrąglenia, z kolei wartość po slash’u „/” definiuje jego wysokość. W tym wypadku godna polecenia jest strona CSS Border Radius Generator dzięki której wpisując odpowiednie wartości w pola przy rogach możemy na bieżąco obserwować kształt boków a następnie skopiować cały kod CSS.

 

Zalety

  • Wymaga niewielkich zmian w kodzie,
  • Używa najnowszych rozwiązań.

Wady

  • Rozwiązanie obsługiwane tylko przez najnowsze przeglądarki.

 

 

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

Autor wpisu: batman, dodany: 05.10.2010 09:12, tagi: javascript, jquery

jQuery. Poradnik programisty jest jedną z pierwszych książek traktujących o jQuery w Polsce. Podchodząc do jej lektury miałem mieszane uczucia. Spis treści wskazywał raczej na tłumaczenie dokumentacji, a ilość stron (raptem 270) utwierdzała mnie w tym przekonaniu. Niemniej byłem ciekawy, czy książka ma coś do zaoferowania osobie, która na co dzień korzysta z tytułowej biblioteki. Bardzo mnie zastanawiała kwestia sposobu, w jaki jest ona zorganizowana. Czy autor poprzestał na przetłumaczeniu ogólnodostępnej dokumentacji, czy też odrobił pracę domową i stworzył solidny przewodnik? Wreszcie czy będzie to suchy tekst, o którym zapomnę dzień po zakończeniu lektury, czy też często będę do niej powracał, szukając rozwiązania jakiegoś problemu?

Książka została podzielona na trzy części: abecadło, interfejs API oraz wtyczki. Pierwsza część jest przeglądem możliwości jQuery, druga zawiera pełny opis biblioteki, a ostatnia w bardzo przystępny sposób prezentuje proces tworzenia wtyczek. Każda z części została dodatkowo podzielona na rozdziały, odzwierciedlające zagadnienia związane z jQuery, np. selektory, manipulacja drzewem DOM, czy AJAX. Co więcej, każdy z rozdziałów został tak przygotowany, by teoria stanowiła jak najmniejszą jego część. Po krótkim wstępie wyjaśniającym bieżące zagadnienie, autor na przykładach pokazuje praktyczne możliwości biblioteki. Przykłady te nie są oderwanymi od rzeczywistości zadaniami akademickimi (takie też się zdarzają), tylko pełnoprawnymi skryptami, które można później wykorzystać, np. wtyczka karuzela do przeglądania zdjęć.

Podczas objaśniania kilku przykładów, autor posłużył się rozszerzeniami przeglądarki Firefox i delikatnie sugerował, że każdy, kto na poważnie myśli o korzystaniu z jQuery, również powinien z nich korzystać. Mowa tutaj o rozszerzeniach Firebug, LiveHttpHeaders oraz Web Developer Toolbar.

Na początku tej recenzji podzieliłem się z wami moimi obawami w stosunku do tej książki. Czy się potwierdziły? Nie. Okazało się, że były one mocno przesadzone. Książkę mogę śmiało polecić wszystkim, którzy chcieliby zapoznać się z jQuery. Wbrew moim przewidywaniom nie jest to bezmyślnie przetłumaczona dokumentacja, tylko dobrze zaplanowana książka, płynnie przechodząca między zagadnieniami. Jeśli znacie jQuery na tyle dobrze, że nie musicie zaglądać do dokumentacji i macie na koncie kilka wtyczek, książka będzie raczej stanowiła suplement dokumentacji, niż źródło wiedzy. Nie da się nie odnieść wrażenia, że została przygotowana pod kątem osób stawiających pierwsze kroki w świecie jQuery.

Podsumowując. jQuery. Poradnik programisty jest solidną książką, która powinna znaleźć się w biblioteczce każdego, kto chciałby rozpocząć przygodę z tą biblioteką. Jeśli nadal zastanawiasz się nad wyborem biblioteki Javascript, z której będziesz korzystał, ta książka znacznie ułatwi Ci wybór.

 

Powyższa recenzja ukazała się również na łamach serwisu Software.com.pl, pod adresem http://software.com.pl/recenzja-jquery-poradnik-programisty/

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".
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.