Zend Framework 2.0 w wersji stabilnej – nowa jakość?


Zend Framework 2.0 w wersji stabilnej - nowa jakość?

Dzień nowych wersji frameworków! Informowałem już o wydaniu kolejnej stabilnej wersji frameworka Symfony 2.1.0, a także dzisiaj wydany został jego główny konkurent, a mianowicie Zend Framework 2.0.

Zenda miałem okazję poznać już 3 lata temu. Były to moje pierwsze kroki z obiektowym programowaniem w PHP. Jak to początki, były niezwykle trudne. Wszystko było nowe. OOP, MVC i wiele innych technik, metodologii oraz koncepcji musiałem zrozumieć i dobrze sobie przyswoić. Do czasu pojawienia się Symfony2 był to mój ulubiony, a w zasadzie jedyny framework, który miałem okazję używać w swoich projektach. Na bazie Zenda napisałem nawet swój własny mini framework, który także posłużył mi do kilku projektów, które z powodzeniem działają do dnia dzisiejszego.

Po blisko 2 latach pracy, a 5 latach od wydania pierwszej wersji Zend Framework światło dzienne ujrzała właśnie jego druga wersja. Framework zaprojektowany i zbudowany został zupełnie od nowa. Całość miała być bardziej spójna, lepiej udokumentowana, zwiększająca produktywność i szybkość uruchamiania i działania aplikacji. Jeżeli rzeczywiście się to udało i moje testy to potwierdzą, to Symfony2 w końcu zyska godnego konkurenta.

Nowa wersja to konieczność napisania naszych aplikacji od zera. Nie ma możliwości migracji lub aktualizacji z pierwszej wersji do obecnej. Całości niestety trzeba nauczyć się od nowa.

Zend Framework 2.0 został podzielony na moduły, które są niezależnymi bytami, które tak samo jak w Symfony2 mogą być używane w wielu aplikacjach. Same moduły mogą być pakowane do archiwum phar, przez co jest to podobne rozwiązanie do użycia Composera. Moduł to także niezależna przestrzeń nazw, własne biblioteki, pliki szablonów, CSS, JavaScript, grafika. Budowanie z klocków staje się coraz bardziej powszechne i popularne.

Nowy Zend, to także nowa obsługa żądań (request). Opiera się ona teraz na zasadzie obsługi eventów, do których możemy się podpinać na różnych poziomach obsługi żądania.

PHP DI (dependency injection), czyli to co kocham w Symfony2. Pozwala na wstrzykiwanie zależności, które zastąpiły twarde odwołania.

Sporo zmienia się także w widokach. Akcje zwracać będą teraz obiekt ViewModel, który odpowiadać będzie za odwołanie się do konkretnego pliku szablonu, jego ustawienia oraz przekazanie zmiennych. Mamy tutaj także możliwość znaną z Twiga, który jest domyślnym systemem szablonów w Symfony2, a mianowicie dziedziczenia szablonów, która pozwala na osadzanie jednego szablonu w innym.

Całość jest rzeczywiście niezwykle spójna i dobrze przemyślana.

Pobieżnie przebrnąłem przez nową dokumentację, która opisuje jak korzystać z różnych standardowych komponentow, takich jak: Zend_Form, Zend_cache itd. Stworzony został także podręcznik, który demonstruje cały cykl tworzenia aplikacji w ZF2. Mamy tutaj do dyspozycji także przypadki użycia poszczególnych metod i zależności między komponentami. Ujednolicone zostały inferfejsy w całym obszarze Zend Framework 2.0, a także ustandaryzowane mechanizmy konfiguracji, za które odpowiada oddzielny komponent.

Zend Framework 2.0 to także praktyczny brak singletonów, które nie pozwalały, a w najmniejszym stopniu komplikowały rozszerzanie lub zmianę funkcjonalności. Komponenty możemy konfigurować pod względem tego, czy pozwalają one na rozszerzalność i współprace z innymi modułami.

Deweloperzy projektu postawili sobie za cel poprawę wydajności rzędu 200 do 300%. Czy im się to udało? Z pewnością będę się mógł przekonać już niedługo.

Nie miałem na razie czasu by poznać ZF2 lepiej, ale myślę, że zmieni się to już niedługo. Mam jednak nadzieję, że twórcy dobrze wykonali swoją pracę i odpowiednio wykorzystali czas poświęcony na budowę nowej wersji. Jeżeli macie już jakieś doświadczenia z ZF2, to oczywiście dajcie znać w komentarzach.


[1], [2]

Ewolucji ciąg dalszy – Symfony 2.1.0 zostało wydane!

Ewolucji ciąg dalszy - Symfony 2.1.0 zostało wydane!

Dzisiaj na oficjalnym blogu społeczności Symfony2 – główny mentor i twórca frameworka – Fabien Potencier ogłosił wszystkim ważną nowinę. Światło dzienne ujrzała nowa wersja frameworka Symfony (PHP) do zastosowań specjalnych. Gałąź 2.1.x projektu została ostatecznie uznana za stabilną.

Jak napisał sam FabienSymfony 2.1.0 to ewolucja projektu, który istnieje już od ponad 2 lat. Przez ten czas zdążył się on zadomowić we wielu środowiskach produkcyjnych i obsługuje on już znaczną ilość stron i aplikacji.

Wersja 2.1.0 frameworka to:

  • około 1,100 “pull request”
  • ponad 3,500 “commitów”
  • 6000 testów jednostkowych
  • 3000 nowych linii w dokumentacji

W nowej wersji dużą uwagę położono na poprawę stabilności działania oraz rozwój obecnych funkcjonalności. Całość działać ma także teraz nieco szybciej, a nowe możliwości mają pozwolić na jeszcze sprawniejszą pracę.

Główną nowością jest dla mnie Composer.  Mówiąc krótko, jest to narzędzie do zarządzania zależnościami napisane w PHP. Composer pozwala na zdefiniowanie bibliotek których wymaga projekt i w łatwy sposób pozwala na ich instalację, zarządzanie i aktualizacje.

Sam mam przyjemność uczyć się i używać Symfony2 od ponad pół roku. Jestem własnie na etapie pisania swojego 5 większego projektu. Każdemu kto pracuje w PHP lub interesuje się całym środowiskiem bardzo polecam rozpoczęcie przygody z frameworkiem. Ci zaś, którzy mieli szansę obcować z wersją 2.0.x mogą dokonać migracji do wersji 2.1.0 za pomocą oficjalnego poradnika.

Obecnie nad Symfony2 pracuje około 550 deweloperów, ale ilość testujących oraz prezentujących swoje opinie jest znacznie większa. Muszę się także przyznać, że we wielu dyskusjach na Githubie uczestniczyłem i niejednokrotnie miałem okazję pracować nad nową wersją frameworka.

Jak tylko zakończę pracę nad moim obecnym projektem, to z pewnością zainteresuję się wersją 2.1.0. Na razie daję sobie jednak trochę czasu.

Roundup #9 – gridster, Avgrund Modal, Sequence, BigScreen, D3 Charts, Toast, SlabText

Roundup #9 - gridster, Avgrund Modal, Sequence, D3 Charts, Toast, SlabText

gridster

This is it, the mythical drag-and-drop multi-column grid has arrived. Gridster is a jQuery plugin that allows building intuitive draggable layouts from elements spanning multiple columns. You can even dynamically add and remove elements from the grid. It is on par with sliced bread, or possibly better.

gridster.js – a jQuery plugin for building intuitive draggable layouts


Avgrund Modal

Avgrund is a jQuery plugin for modal boxes and popups. It uses interesting concept showing depth between popup and page. It works in all modern browsers and gracefully degrade in those that do not support CSS transitions and transformations.

Avgrund Modal


Sequence

Sequence is the jQuery slider plugin with infinite style. It provides the complete functionality for a website slider without forcing you to use a set theme. In fact, Sequence has no in-built theme, leaving you complete creative control to build a unique slider using only CSS3 — no jQuery knowledge required!

Sequence.js – The jQuery slider plugin with infinite style


BigScreen

BigScreen makes it easy to use full screen on your site or in your app. It smoothes out browser inconsistencies and bugs, especially if the element you’re working with is inside of an <iframe>. It will also intelligently fall back to the older video full screen API if the element contains a <video> and the older API is available.

Full Screen Mode for Images & Videos in Web Apps


D3 Charts

In this tutorial we will introduce some basics of D3.js and create an infographic with multiple area charts along with a context tool to zoom and pan the data.

MULTIPLE AREA CHARTS WITH D3.JS


Toast

Toast is a CSS framework as simple as it can be, but no simpler. A twelve column responsive grid makes layouts a breeze, and with box-sizing you can add padding and borders to the grid, without breaking a single thing.

Toast – A simple responsive CSS framework


SlabText

SlabText is a jQuery plugin for producing big, bold and responsive headlines. Put simply, the script splits headlines into rows before resizing each row to fill the available horizontal space.

jQuery Plugin for Producing Bold Responsive Headlines


[1], [2], [3], [4]

Roundup #3 – WP-Flex, BrandColors, Derby MVC, trunk8, DbNinja

Roundup #3 - WP-Flex, BrandColors, Derby MVC, trunk8, DbNinja

WP-Flex

W ostatnim czasie pojawia się sporo tego typu szablonów do WordPressa. Mam tutaj na myśli możliwość dopasowywania się do aktualnego rozmiaru okna przeglądarki, poprzez wykorzystanie techniki “responsive design”. Jest to naprawdę bardzo przyjemna droga do prezentacji treści we właściwy sposób na urządzeniach mobilnych oraz desktopach.

WP-Flex – A blank and responsive boilerplate for WordPress


BrandColors

Jest to tak naprawdę katalog, który w swojej pracy docenią szczególnie osoby, które projektują grafikę. Kolekcja zawiera bowiem dokładne dane odnośnie kolorystyki używanej przez wiodące marki i serwisy na rynku.

BrandColors – A Gallery Of Major Brand Color Codes To Get Inspired


Derby MVC

Nie mylić z bazą danych o takiej samej nazwie! Derby MVC to lekki framework oparty o wzorzec MVC i Node.js, który pozwala na budowanie aplikacji działających w czasie rzeczywistym. Interakcja pomiędzy użytkownikami przebiega natychmiastowo, więc możliwe jest tworzenie na przykład narzędzi do pracy nad projektami bezpośrednio w przeglądarce. Myślę też, że tego typu frameworki to przyszłość jeśli chodzi o aplikacje w przeglądarce. Wszystko za sprawą mechanizmów push, które są w stanie wysyłać informacje od serwera do klienta i dynamiczne odświeżanie widoku.

Build Realtime & Collaborative Apps with Derby MVC


trunk8

Jest to rozszerzenie do biblioteki jQuery, a które pozwala – jak sama nazwa wskazuje – na manipulację długością wyświetlanego tekstu. Proste i wygodne w obsłudze narzędzie, które pozwoli zaoszczędzić nieco czasu podczas tworzenia podobnej funkcjonalności na naszej stronie.

trunk8 – A text truncation extension to jQuery


DbNinja

Jest to odpowiednik znanego pewnie wszystkim phpMyAdmin. DbNinja napisane zostało przy użyciu PHP i służy do administracji bazą danych MySQL bezpośrednio z okna przeglądarki. Całość prezentuje się bardzo dobrze i wygląda nieco na odświeżoną wersję wspomnianego phpMyAdmin. Przypomina trochę aplikację na PC, niżeli klienta webowego. Sam używam desktopowego narzędzia jakim jest HeidiSQL – polecam! Naprawdę bardzo ułatwia i przyspiesza pracę.

DbNinja – Web-Based MySQL Manager App With A Desktop-Like Interface


[1], [2], [3], [4], [5]

Jak to zbudowałem, czyli blog od podstaw

WordPress, Reverie, motyw, wtyczkaNo i tak. Tym razem także skorzystałem z najbardziej popularnego narzędzia do tworzenia blogów. Nie jest to mój pierwszy raz z WordPress’em, a w zasadzie jest to CMS, którego używam odkąd pamiętam. Posiada wszystko czego potrzebuję i daje się łatwo skonfigurować. Jest łatwo rozszerzalny o masę różnego rodzaju wtyczek. Posiada ogromną społeczność, która pracuje nad tym, by właśnie WordPress był jeszcze lepszy.

Szablon

To co możecie zobaczyć tutaj gołym okiem, a mam na myśli większość wyglądu bloga, to nic innego jak gotowy framework, którego użyłem, by nie robić tego samemu od nowa. Ponieważ po co tworzyć coś zupełnie od zera, jeśli ktoś daje nam to w prezencie. Prawda? :)

Motyw, który wykorzystałem to Reverie. Jest to nowoczesny, a zarazem bardzo “lekki” szablon, który wykorzystuje możliwości HTML5, CSS3 oraz technikę “responsive design”. Jego możliwości dopasowywania się do konkretnej rozdzielczości urządzenia, na którym wyświetlany jest blog, możecie zobaczyć poprzez zmianę wielkości okna przeglądarki. Framework jest także bardzo prosty i na tyle dobrze napisany, że zmiany wyglądu, a co za tym idzie – kodu – nie stanowią żadnego problemu. Nawet favicona pasuje do pierwszej litery mojego nazwiska :)

Wtyczki

A więc po kolei.

  • About Me 3000 Jest to widget, który prezentuje moją sylwetkę z prawej strony. Proste, a znacznie przyspiesza formatowanie.
  • Akismet – Jest to wtyczka, która pozwala zachować porządek w komentarzach i nie dopuszczać do pojawiania się tam spamu oraz niechcianych treści.
  • All in One SEO Pack – Bardzo rozbudowana wtyczka, a tak naprawdę “kombajn” pozwalający wspomagać pozycjonowanie bloga.
  • Contextual Related Posts – Wtyczka, która pozwala na “wyciągnięcie” – na podstawie analizy treści, tagów, kategorii – podobnych wpisów do czytanego oraz wyświetlenie ich w liście pod treścią posta.
  • Disqus Comment SystemJeżeli ktoś czyta inne blogi to Disqus’a nie trzeba takim osobom przedstawiać. Jest to system komentarzy pozwalający na dużo więcej niż standardowy formularz WordPress’a.
  • Excerpt Editor Prosty edytor treści, która pojawi się na stronie głównej zamiast całości kontentu posta.
  • Google Analytics for WordPress – Pozwala na podpięcie konta Google Analytics, z którego możemy wybrać kod śledzący dla naszej strony. Dołącza także automatycznie niezbędny kod do źródła bloga.
  • Google XML Sitemaps – Generator map strony w formacie XML. Taka wygenerowana mapa wspiera działanie botów indeksujących.
  • Image Zoom – Jak sama nazwa skazuje – jest to plugin pozwalający na dołączenie modalnego box’a, który wyświetla się po kliknięciu w obrazek, zamiast przenosić do adresu obrazka.
  • Jetpack by WordPress.com – Zbiór dodatkowych narzędzi, które pozwalają wspomóc nieco działanie WordPress’a oraz wykorzystać wtyczki zbudowane na jednym kodzie.
  • Newsletter – System do obsługi newslettera. Jest to ten sam widget z prawej strony, który pozwala Wam się zapisać do subskrypcji nowych postów. Polecam :)
  • Open Graph –  Plugin pozwalający automatycznie dodawać meta tagi powiązane z protokołem Facebook’a. Bardzo przydatne narzędzie dla osób, które promują swoje wpisy właśnie w tym serwisie.
  • Primary Feedburner – Wtyczka pozwalająca zintegrować system Feed RSS z serwisem firmy Google – Feedburner.
  • SEO Smart Links + – Narzędzie to samo przeszukuje treści wpisów w poszukiwaniu słów, które można by zamienić na odnośnik do kategorii, tagów oraz innych zdefiniowanych elementów, które powiązane mogą być z innymi treściami na blogu.
  • Simple Social Buttons – Są to po prostu przyciski serwisów społecznościowych (Facebook Like, Twitter Share, Google+ Button) i pozwalające na dzielenie się treścią wpisów z innymi. Dostępne pod każdym tytułem wpisu.
  • Smart Youtube PRO – Wtyczka pozwalająca w banalny sposób na dodawanie filmów z serwisu YouTube do naszych wpisów. Wystarczy zamienić we wklejanym do wpisu adresie do filmiku początek: http na httpv.
  • SyntaxHighlighter Evolved – Wtyczka, która pozwala kolorować składnię języków programowania w wyświetlanych wpisach. Jako, że pisałem, że będzie się tutaj pojawiać czasami nieco kodu, jest to dla mnie niezbędne narzędzie.
  • SyntaxHighlighter TinyMCE Button – Obsługa wspomnianej wyżej wtyczki w domyślnym edytorze wpisów dla WordPress’a – TinyMCE.
  • upPrev – Pozwala na wyświetlenie poprzedniego wpisu w prawym, dolnym rogu okna przeglądarki. Box pojawia się, gdy tylko przeskrolujemy stronę mniej więcej do połowy.
  • W3 Total Cache – Wtyczka do obsługi mechanizmu cache w przeglądarce. Jako, że korzystam z hostingu współdzielonego, a nie z serwera dedykowanego, gdzie sam mógłbym doinstalować sobie wszelkie potrzebne narzędzia – rola wtyczki jest nieco ograniczona, ale mimo to pozwala ona nieco przyspieszyć ładowanie się strony.
  • Wordpress Comment Bubble Plugin – Wizualna prezentacja liczby komentarzy na stronie głównej bloga.
  • WP-PageNavi – Wtyczka pozwalająca na zamianę domyślnego systemu paginacji na dużo ładniejszy i bardziej przystępny dla użytkownika. Jej działanie będziecie mogli zobaczyć jak tylko pojawi się tutaj nieco więcej wpisów.
  • WP Smush.it – Biblioteka do skalowania obrazków dodawanych na bloga. Pozwala znacznie zmniejszyć objętość, zachowując przy tym jakość prezentowanych obrazków.

Zdjęcia

Jako źródło wszelakich zdjęć, obrazków służy mi serwis PhotoPin. Posiada on prosty interfejs, a hasło głosi: free photos for bloggers. Czego chcieć więcej..

Podsumowanie

Nazbierało się tego trochę, a dochodzą do tego jeszcze tak zwane “własne pola”, których obsługę zdefiniowałem w kodzie motywu. Jeżeli uważacie, że czegoś mi tu jeszcze brakuje, coś wymaga poprawy albo powinienem coś zmienić, dajcie znać w komentarzach. Dzięki :)