Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

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: Tomasz Kowalczyk, dodany: 03.04.2011 18:27, tagi: css

Tworzenie wstępów do kolejnych wpisów z serii Linkdump robi się coraz trudniejsze, bo w sumie o czym tu pisać? Jest konkretny temat, mam dla Was 10 fajnych linków, zapraszam do lektury! ;] Linkdump: CSS. 1. Glowform. Formularz z ciekawą animacją dookoła okna. 2. Absolutely Positioned Textareas. Trik pozwalający na lepsze ustawienie elementu <textarea> na stronie [...]

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.

Autor wpisu: Tomasz Kowalczyk, dodany: 01.04.2011 23:11, tagi: symfony, framework

Nowa wersja frameworka symfony - Symfony2 powinna już niedługo ukazać się w pierwszej oficjalnej, stabilnej wersji. W świat poszła wiadomość o planowanym wydaniu na koniec marca, czego niestety nie udało się osiągnąć, aczkolwiek zagraniczni blogerzy przewidują opóźnienie nie dłuższe niż 3 miesiące. Aktualną wersją, dostępną do pobrania ze strony symfony.com jest Preview Release 8 [PR8]. [...]
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.