Autor wpisu: zleek, dodany: 07.10.2015 14:09, tagi: css
Autor wpisu: matipl, dodany: 06.10.2015 18:35, tagi: php
5 dni temu Sebastian Bergmann opublikował nową wersję PHPUnit – 5.0.0.
Dlaczego Wam o tym piszę, a nie wspominałem o poprzednich wydaniach? Ponieważ wraz z wersją PHPUnit 5 zostaje całkowicie usunięte wsparcie dla PHP 5.3, PHP 5.4, i PHP 5.5. To naprawdę poważna zmiana, ponieważ dopiero co skończyło się oficjalne wsparcie bug fixów w PHP 5.4 (wrzesień 2015), a już poszczególne biblioteki/rozwiązania przestają wspierać tą wersję.
Zmianą w pełni pozytywną jest przestawienie się w modelu dystrybucji PHPUnit na archiwa PHAR (w 1 pliku mamy wszystko czego wymaga PHPUnit do poprawnego działania). To powinno ułatwić pracę z testami jednostkowymi, jak również w przyszłości pozwoli na równoległe testowanie na różnych wersjach PHPUnit. Wsparcie dla PHPUnit 5 (łatanie błędów) jest zapewnione do 4 sierpnia 2017 roku.
I to nie koniec poważnych zmian. Sebastian oświadczył także, że kolejna wersja PHPUnit 6, której wydanie planowane jest na 5 sierpnia 20152016 zupełnie zostanie pozbawiana wsparcia PHP w linii 5.* (czyli pół roku po wydaniu PHP 7).
Artykuł PHPUnit 5.0.0 pochodzi z serwisu Mateusz matipl Kamiński.
Autor wpisu: batman, dodany: 06.10.2015 12:00, tagi: php
Autor wpisu: matipl, dodany: 01.10.2015 12:52, tagi: php, framework, symfony
W tym roku udało mi się wybrać na konfernecję Symfony Live London 2015, która odbyła się 18 września (+ warsztaty dzień wcześniej) dzięki przychylności losu… Całe spotkanie odbywało się w Queen Elizabeth II Conference Centre, czyli w samym centrum Londynu. Pod nosem metro (Westminster), jak i moc atrakcji turystycznych (Big Ben, London Eye, pałac w Westminter itd.). Mocno na plus, szczególnie, że cena dla Anglików nie była wygórowana (£210.00).
Lasery i algorytmy
Prelekcją otwierającą była „Getting artistic with code”, którą zaprezentował Seb Lee-Delisle. Prezentacja była zupełnie inna niż wszystkie, do których się przyzwyczaiłem na konferencjach technicznych. Na początku zapowiadał się niesamowity gniot, po tym jak Seb pokazał kawałek JavaScript’u z OnMouseOver – od razu pomyślałem, sobie że to przecież kod sprzed 15 lat… Ale Seb chciał pokazać w jaki sposób można tworzyć sztukę, być Artystą używając do tego czystego języku (JavaScript) i zmyślnych algorytmów. Można tworzyć – bawiąc się. Ostateczny efekt był piorunujący i uważam, że każda konferencja powinna rozpoczynać się podobnym wystąpieniem – niby nie związany z tematem, a jednak… Seb Lee-Delisle specjalizuje się obecnie w pokazach laserowych. Poniżej jego algorytmy podczas Smashing Conference w 2014 roku – połączenie algorytmów i laserów:
Później już było konkretnie. Podczas prelekcji „Building a Pyramid: Symfony Testing Strategies” Ciaran McNulty za pomocą piramidy potrzeb Maslowa zaprezentował jak ważne są testy jednostkowe, a dopiero później znaczące są testy integracje i UI. Mam nadzieję, że niedługo pojawią się nagrania z konferencji.
Doctrine 2
Dużym zaskoczeniem były natomiast słowa Benjamina Eberlei podczas „Doctrine 2: To Use Or Not To Use”. Powiedział, że Doctrine jest tworzony zgodnie z zasadą Pareto (80/20), czyli dla 80% przypadków użycia. W ramach tych 80% przypadków Benjamin wymienił CRUD, Symphony Validator + Forms, natywny SQL i dla tych zastosowań Doctrine to wręcz idealne rozwiązanie. Niestety Doctrine nadal nie radzi sobie z dużą ilością zapisów, ma problemy z wydajnością i złożonymi zapytaniami (raporty itp.). Jak również powinniśmy unikać ORM dla batching processing.
Jak również przypomniał, że wywołanie flush() niszczy wiązania w entity / $query->iterate(), przez to powoduje spore obciążenia serwera gdy robimy flushowanie w pętlach etc. Dlatego pamiętajmy, aby wykonywać tą operację tylko po zakończeniu wszystkich operacji.
Pamiętajmy również, że kompleksowe zapytania DQL z duża ilością wiązań (JOINs) są bardzo wolne i należy ich unikać. W takich wypadkach lepiej zrobić dedykowany model View/Read, który operuje tylko na wybranych polach ze wszystkich JOINs.
Very Good: CRUD (& Symphony Validator + Forms) Good: DDD Lite with coupling to Doctrine/DB Okies: DDD (decoupling requires works) Bad: high write throughput
Summary 80%: CRUD, Lazy, Native SQL Risk: Performance Problems, Unsolvable Edge Class, High Coupling, Complexity
Symfony 3.0
Prelekcję końcową wygłosił Fabien Potencier. Po auto-reklamie produktów Blackfire.io, przedstawił małe podsumowanie prac nad Symfony 3.0 (praktycznie to 2.8, która zostanie podbita do 3.0). Fabien podkreślił, że coraz więcej projektów tworzonych jest na komponentach Symfony i to bardzo go cieszy. Niedługo zobaczymy oparte na Symfony:
- Drupal 8
- phpBB
- prestaShop
Wspomniał również, że obiecanie kompatybilności wstecznej w całej linii Symfony 2.x było wielką pomyłką jego i zespołu. Dużo prac ich to kosztowało przez co nie mogli iść do przodu z nowościami. W wersji 3.0 również było sporo takich problemów, dlatego teraz będzie fixowanie w x.y.(z+1), a nie jak wcześniej w x.y .
Autor wpisu: Śpiechu, dodany: 21.09.2015 22:45, tagi: symfony, php
It passed about half year since I scratched Symfony2 Framework surface. Basics are behind me, now it’s time for middle-level stuff. I’m excited to start a whole new Symfony related blog post series. I didn’t wanted to copy typical tutorial topics. It would be waste of your time and my work. I thought it would be nice to show some code related to Symfony Dependency Injection Container.
Tutorials usually show typical container services definition. Boring stuff. I’m going to show you dynamic collection of services passed into processor service. The idea is that collection doesn’t know its elements, so every bundle can define its own services to be added to collection. The secret is tags. To add some spice, tagged service can be defined with priority. And we can specify that this processor should be run at the beginning, and that at the end.
We’ll start with defining common processor interface and some basic implementations.
Now it’s time for a service that processes given argument with all the processors one by one.
We could define typical container definitions and pass processors right into processing service, but remember about requirement that external bundles can define their own processors. We’ll use tags.
Now the key part: compiler pass definition.
Usage:
At the first sight you may think that it’s a lot of logic to run to define stupid processor. What about performance? No worries. Remember, the compilation outcome is dumped into cache file on prod environment. All these foreach loops and priority queues are being run only once. Solution is pretty generic, you can easily adapt to your own needs. Of course code is on MIT license, so grab it and use in your own (even commercial) projects!
Happy PHP container compiling :-)