Autor wpisu: matipl, dodany: 05.04.2011 09:16, tagi: php
Wczoraj 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.
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 projektem – Stephan 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:
Autor wpisu: Tomasz Kowalczyk, dodany: 05.04.2011 06:06, tagi: zend_framework, symfony, php, framework
Autor wpisu: Wojciech Sznapka, dodany: 04.04.2011 10:39, tagi: php
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.