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

Autor wpisu: Tomasz Kowalczyk, dodany: 05.04.2011 23:33, tagi: php

Programiści, którzy "zasmakowali" pracy w językach wysokiego poziomu, takich jak m. in. PHP, bardzo często zapominają o możliwości wykorzystania bardzo niskich mechanizmów do osiągnięcia większej elastyczności kodu. Z reguły wykorzystujemy w kodzie różne wzorce projektowe i inne ułatwienia wprowadzone wraz z paradygmatem obiektowym programowania i myślimy za pomocą dużych komponentów, zamiast skorzystać z tego, co [...]

Autor wpisu: matipl, dodany: 05.04.2011 09:16, tagi: php

4Developers 2011Wczoraj byłem na konferencji 4developers, na którą Was zapraszałem w grudniu z powodu powiązania z PHP i wydajnością na wykładach. W trakcie jednej z przerw wczoraj spotkałem m.in. Tomka, któremu nie odpowiedziałem na pytanie: Co sądzisz o 4developers?

4developers – jak wypadła organizacja?

Konferencja to 4 równoległe „strumienie”. Ja wraz ze znajomymi głównie byliśmy nastawieni na Wydajność i skalowalność. Dlatego na pierwszy rzut poszedł o 10:00 przegląd projektu Sphinx prowadzony przez Vladimira Fedorkova. Niestety człowiek nie mógł zacząć punktualnie i wciąż mu przerywano (podziwiam, ja bym dawno wyszedł). Najpierw facet na drabinie zdemontował projektor, później inny przystawiał się do Vladimira od tyłu ;)  (ciągłe problemy z dźwiękiem).

W ten sposób straciliśmy 30 minut i to dosłownie. Mimo, że organizator zapewnił, że inne wykłady na nas czekają to się okazało, że skrócono czas dla Vladimira (mówił max. 40 minut) i następnej prezentacji (u nas Mariusza, który mówił o HipHop), gdzie trwała raptem 30 minut. Śmiech na sali.

Pod tym względem  PROIDEA nie popisała się. Wielka szkoda, bo na konferencji prowadzonej przez tą fundację nie byłem od… 4 lat i przekreślili swoje dobre wrażenie. Nie podobało mi się również wprowadzenie podczas pierwszego wykładu – nic ciekawego od organizatorów, o ankietach czekających w materiałach reklamowych (znalazły je dopiero dzieci w domu), a tylko o sponsorach…

Natomiast plus za Wi-Fi (może nie było super ciągłości, co zauważył ^ciachopl) ale szybkie, bez problemów dało się pracować. Dodatkowo bardzo podobały mi się stoliki do obiadu, na JDD jadłem na parapecie.

4developers – agenda, czyli jestem zrzędą

Na miejscu oraz w broszurce jest świetnie rozpisana agenda ze wszystkimi ścieżkami, natomiast na stronie trudno porównać co działo się równolegle – minus.

Bardzo źle odbieram puszczenie równolegle wykładów o tej samej tematyce, np. na PHP o 14:25 Cachowanie danych w nk.pl, a na ścieżce Wydajność i skalowalność temat Rozszerzając funkcjonalności memcached. Można to było spokojnie wymieszać z ostatnimi wykładami, czysto teoretycznymi.

Z tego powodu o 14:00 miałem dylemat, a na ostatnim wykładzie w ogóle nie byłem – minus.

Co jeszcze na minus? Podczas samych wykładów za dużo teorii z sufitu, za mało realnych przykładów, problemów, ale to już wina prelegentów.

Co może przybrać zielony kolor – plus? Nazwiska, osoby jakie zostały zaproszone (powiedźmy ;) ) do prowadzenia wykładów. Twórcy oprogramowania, ludzie z doświadczeniem praktycznym – czyli coś, co organizator mógł prześwietlić, natomiast sposób wykładu – to już broszka prowadzącego.

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

Autor wpisu: singles, dodany: 05.04.2011 09:03, tagi: php, zend_framework

Jest poniedziałek, 4 kwietnia, godzina 18:50. Siedzę w pociągu powrotnym do Poznania, a z racji że czekają mnie prawie 3h jazdy (a za plecami mam gniazdko elektryczne;), stwierdziłem, że poświęcę ten czas na przedstawienie Wam mojej krótkiej relacji z konferencji 4Developers.

Miejsce

Organizatorzy konferencji przygotowali 4 ścieżki tematyczne – PHP, Java, Zarządzanie projektami IT oraz Wydajność i skalowalność + 4 panele dyskusyjne – dokładniejsze informacje na temat agendy znajdziecie na stronie konferencji. Wybrana lokalizacja także się sprawdziła – bardzo blisko Dworca Wschodniego, pętli autobusowej oraz tramwajowej. Sale Wyższej Szkoły Menadżerskiej były wystarczająco duże (aczkolwiek z technicznymi problemami, ale o tym później), jednakże lobby jak dla mnie trochę za małe – momentami bywało naprawdę ciasno. W lobby kilka stanowisk zajmowali sponsorzy konferencji – w tym jeden z nich chwalił się na swoim stoisku niebieskimi maskotkami słoni z logiem PHP – niestety nie chcieli się podzielić ;P Można było także pograć na konsolach Xbox360 + Kinect oraz PS3 + PSMove. Obok konsol znajdowała się duża tablica, z którą związany był konkurs – a opiszę go, ponieważ uważam, że pomysł był bardzo udany.

Konkursy i gadżety

Otóż to, każdy z odwiedzających dostawał w ramach zestawu powitalnego mały kartonik z literą. Dodatkowe litery można było podchodząc do stanowisk sponsorów. Nagrodą dla osoby, która ułożyła największe słowo była konsola PSP. Jednak uwaga – układane słowa musiały być powiązane z programowaniem. Chciałbym jednak wytknąć organizatorom pewien błąd – otóż to w broszurze, którą otrzymaliśmy napisane było, że zwycięzca tego konkursu otrzyma PS3, a nie PSP. Za to obok tablicy było już PSP. Mała nieścisłość, aczkolwiek nie zmienia to faktu, że nagroda nadal bardzo fajna. A jakie hasła wymyślili uczestnicy? Patrzcie tutaj.

Dodatkowo, sporo gadżetów wszelkiej maści – koszulek (sam wiozę w plecaku 4 rożne – w tym najlepszą :D), kubków, smyczy, przypinek, notatników i tym podobnych. No i oczywiście nie można zapomnieć o uroczych hostessach :)

Organizacja

Samą organizację konferencji oceniam dobrze, aczkolwiek były dwie wpadki. Przy samym wejściu, kiedy podałem swoje dane osobowe, zostałem poproszony o okazanie dowodu wpłaty – nikt inny tego nie robił, z tego co zauważyłem. Możliwe, że to dlatego, że płaciłem PayPalem praktycznie na samym początku rejestracji. Kilka dni później dostałem informację o fakturze do zapłaty. Mocno się zdziwiłem, bo przecież zapłaciłem. Całe szczęście, sprawę udało się wyjaśnić mailowo i poinformowano mnie, że z mojej strony nie są potrzebne dodatkowe kroki. A na miejscu okazało się, że to nieprawda. Skończyło się na pokazywaniu uprzejmym Paniom w rejestracji wspomnianego wcześniejszego maila i tekstem: „Dobrze, wierzymy”. Pomyślałem tylko: „Cieszę się bardzo:)”.

Teraz sprawy techniczne. Otóż to, ekipa techniczna odpowiedzialna za obraz i dźwięk nie pokazała się z najlepszej strony – lekko mówiąc. Pierwsza prezentacja zaczęła się z 20 minutowym opóźnieniem, ponieważ był jakiś problem z rzutnikiem przymocowanym do sufitu. Skończyło się na tym, że prezentacje w jednej sali (PHP) wyświetlane były za pomocą rzutnika leżącego na krześle stojącym na schodach, w którym to rzutniku panowie technicy przez 3 minuty zastanawiali się jak przestawić obraz, który był odwrócony do góry nogami – w końcu rzutnik wisiał wcześniej na suficie. Nie wiem dokładnie, co działo się w innych salach, ale Pani hostessa poinformowała nas, że z racji tego opóźnienia wszystkie prezentacje zostaną przesunięte o te 20-30 minut. A finalnie i tak były przesunięte tylko o 10 minut, bo pierwszy prelegent szybko uwinął się ze swoją prezentacją, co pasowało także pozostałym wykładającym. Jeśli chodzi o techników, dochodziły także problemy z dźwiękiem – nie działające mikrofony, momentami okropne sprzężenia. Natomiast wielki plus należy się za WiFi na miejscu. To była pierwsza konferencja, na której byłem, gdzie WiFi po prostu działało! – nie odczułem żadnych niedogodności podczas korzystania.

Jeśli chodzi o jedzenie – standard na konferencjach. Kawa, herbata, soki i ciastka dostępne cały czas oraz przerwa na godzinny ciepły obiad w specjalnie przygotowanej do tego celu sali – w której jak to zwykle bywa, i tak zabrakło miejsc. Jedzenie bardzo smaczne, aczkolwiek rogaliki były oszukane, bo bez nadzienia!

Skrót prezentacji

Opiszę teraz pokrótce prezentacje, których wysłuchałem.

Uprość zarządzanie zależnościami między aplikacjami trzecimi a swoim projektemStephan Hochdoerfer

Jak sama nazwa mówi, prezentacja tyczyła się sposobów zarządzania zewnętrznymi bibliotekami w naszym projekcie. Jak poradzić sobie z uaktualnianiem kodu, który jest używany przez kilka aplikacji, a przychodzi potrzeba poprawienia jakiegoś buga bądź dodania nowego feature’a? Na te pytania starał się odpowiedzieć prowadzący. Zaczęło się od svn:externals i krótkiego opisu jak tego używać. Stephan wymienił zalety i wady tego rozwiązania (m.in. możemy korzystać z kodu znajdującego się tylko w repozytorium SVN) oraz podzielił się „pro-tipem”, który może nie być taki oczywisty dla wszystkich. Otóż to, kiedy używacie svn:externals, linkujcie do tagów albo branchy, a nie do trunka, ponieważ w trunku czasami mogą pojawić się zmiany, które potrafią posypać Wasz kod. Następnie była mowa o systemie kontroli wersji Git (Git’cie?) i jego submodułach, które to działają w podobny sposób jak svn:externals. Kolejnymi przedstawionymi sposobami były: pakiety .deb, Phing oraz PEAR wraz z krótką instrukcją, jak tego używać. Jako ciekawostkę podam, że w przypadku PEAR’a padło hasło: Pearhub. Jest to serwis, który pozwala na łatwiejsze publikowanie oraz instalację pakietów – więcej informacji znajdziecie na stronie projektu Jednak cała prezentacja zmierzała do jednego uniwersalnego narzędzia – pozwolę sobie zacytować prowadzącego:

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

Autor wpisu: Tomasz Kowalczyk, dodany: 05.04.2011 06:06, tagi: zend_framework, symfony, php, framework

Konferencja 4Developers to ciekawa inicjatywa wśród spotkań dla ludzi z branży IT w Polsce. Jak możemy przeczytać na stronie głównej projektu: "4Developers to konferencja dla programistów, największe przedsięwzięcie tego typu w Polsce – 400 uczestników, 4 równoległe ścieżki i ponad 30 prelegentów". Ze względu na fakt, że miałem okazję wczoraj (04.04.2011) w tym przedsięwzięciu uczestniczyć, [...]

Autor wpisu: Wojciech Sznapka, dodany: 04.04.2011 10:39, tagi: php

W najnowszym Software Developer Journal ukazał się mój artykuł pod tytułem „Test-Driven Development oraz Continous Integration w projektach PHP 5.3″. Zapraszam do lektury i dzielenia się spostrzeżeniami w komentarzach. http://sdjournal.pl/magazine/1683-po-co-nam-interfejsy-tworzenie-elastycznego-kodu

Autor wpisu: batman, dodany: 03.04.2011 11:40, tagi: php

Spośród wielu brakujących funkcjonalności PHP, ostatnimi czasy najbardziej brakowało mi typu wyliczeniowego. Teoretycznie mamy do dyspozycji klasę SplEnum, jednak pozostawia ona wiele do życzenia. Powiada się, ż potrzeba matką wynalazku. Zakasałem więc rękawy i napisałem własną klasę enumeratora.

Klasa wygląda następująco.

namespace Batman;

abstract class Enum
{
	private static $_consts = null;

	final public function __construct()
	{
		throw new \ErrorException('Can\'t create object from enum');
	}

	final static private function getConstants()
	{
		if(self::$_consts === null) {
			$class = get_called_class();
			if($class == __CLASS__) {
				throw new \BadMethodCallException('You can\'t access constants from Enum class');
			}
			$reflection = new \ReflectionClass($class);
			self::$_consts = $reflection->getConstants();
		}
		return self::$_consts;
	}

	final static public function getNames()
	{
		return array_keys(self::getConstants());
	}

	final static public function getValues()
	{
		return array_values(self::getConstants());
	}
}

Ponieważ wyliczenie jest zbiorem nazw symbolizujących wartości numeryczne, nie powinniśmy być w stanie utworzyć obiektu wyliczenia. Za to odpowiedzialny jest konstruktor oznaczony jako finalny oraz rzucający wyjątek w momencie próby utworzenia obiektu.

Bazowa klasa wyliczeń została wyposażona w dwie metody – getNames oraz getValues. Pierwsza z nich zwraca tablicę zdefiniowanych nazw, którymi możemy się posłużyć w aplikacji, druga – tablicę wartości.

Użycie enumeratora jest banalnie proste i sprowadza się do utworzenia klasy po nim dziedziczącej.

class UserStatus extends \Batman\Enum
{
	const DELETED = -1;
	const BLOCKED = 0;
	const ACTIVE = 1;
}

Aktualną wersję klasy znajdziecie na githubie.

Autor wpisu: singles, dodany: 02.04.2011 21:16, tagi: php

W PHP słowo kluczowe static możemy wykorzystać w na trzy sposoby. Pierwszy z nich, najbardziej rozpowszechniony tyczy się definiowania metod i właściwości statycznych – czyli istniejących w kontekście klasy, a nie konkretnego obiektu – patrz Wikipedia. Drugi z nich, – znany pewnie zdecydowanej mniejszości – związny jest z wprowadzonym w ramach PHP 5.3 mechanizmem Late Static Binding – po więcej informacji zapraszam do manuala. Ostatnio natomiast zauważyłem, że mało osób wie, że z modyfikatora static możemy także skorzystać w ramach funkcji – i o tym będzie ten wpis.

Jak?

Otóż użycie static w ramach funkcji jest bardzo proste. Spójrzcie na poniższy kod:

function counter()
{
    static $i = 0;
    return $i++;
}
 
 
echo counter(); // 0
echo counter(); // 1
echo counter(); // 2
echo counter(); // 3
echo counter(); // 4 
...

Jak widać, użycie static przed definicją zmiennej tworzy nam zmienną lokalną w zasięgu funkcji, z tym, że jest ona inicjowana tylko przy pierwszym jej wywołaniu i nie traci swojej wartości po „wyjściu” z funkcji.

Zastosowanie?

Prosty przykład – czy zdarzyła Wam się kiedyś sytuacja, gdzie należało ponumerować wszystkie rekordy w w tabeli HTML – czyli stworzyć po prostu kolumnę Lp.? Pewnie tak. Otóż to, najprostsze rozwiązanie wygląda tak:

<table>
    <tr>
        <th>LP</th>
        <th>Imie</th>
        <th>Nazwisko</th>
    </tr>
    <?php foreach($people as $key => $person) ?>
    <tr>
        <td><?php echo $key + 1; ?></td>
        <td><?php echo $person->first_name; ?></td>
        <td><?php echo $person->last_name; ?></td>
    </tr>
    <?php endforeach; ?>
</table>

Z tym, że rozwiązanie to sprawdzi się w momencie, kiedy tablica posiada klucze od 0 do rozmiar-1. A co w przypadku, kiedy kluczami tablicy są identyfikatory osób w systemie? I są to np. wartości: 1, 3, 5, 6, 7, 12? Przedstawione wcześniej rozwiązanie się nie sprawdzi. Możemy oczywiście przepiesać powyższy kod do następującej postaci:

<?php foreach($people as $key => $person) ?>
    <?php $counter = 1; ?>
    <tr>
        <td><?php echo $counter++; ?></td>
        <!-- ... -->
    </tr>
<?php endforeach; ?>

Jednak, użycie funkcji counter() przedstawionej powyżej jeszcze bardziej uprości zadanie:

<?php foreach($people as $key => $person) ?>
    <tr>
        <td><?php echo counter(); ?></td>
        <!-- ... -->
    </tr>
<?php endforeach; ?>

Nic nie stoi na przeszkodzie, aby zrobić z funkcji counter() helper widoku swojego ulubionego frameworka, bądż też używać wspomnianej konstrukcji w ramach funkcji anonimowych.

Uwaga. Do zmiennych poprzedzonych słowem static nie można przypisać wartości wyrażenia. Znaczy to, poniższy kod zwróci błąd:

function bar()
{
    static $foo = 3 + 123;
}

Jeśli chodzi o inne zastosowania, możecie także poczytać na temat implementacji „odchudzonego” wzorca Singleton bądź też Registry na blogu Wojtka Soczyńskiego.

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