Autor wpisu: batman, dodany: 30.10.2010 08:00, tagi: php
Wczoraj (29.10) miała miejsce premiera najnowszej wersji projektu PHP for Android, którego celem jest umożliwienie programistom PHP tworzenia aplikacji na Androida. Wydanie to jest o tyle ciekawe, że wprowadza kilka wartych uwagi zmian.
Po pierwsze zaktualizowany został PHP do najnowszej wersji (5.3.3). Do PHP dodane zostało rozszerzenie openssl oraz usunięto zgłoszone wcześniej błędy. Najnowsza wersja PHP for Android działa na SL4A r3, a co za tym idzie, istnieje możliwość uruchamiania skryptów z “pulpitu” (nie wiem jak to się nazywa w Androidzie).
Najciekawszą z mojego punktu widzenia informacją, jest dołączenie do najnowszej wersji PFA mojego frameworka (PFAf) w wersji 0.1. Wydanie wersji 0.3 umożliwiło mi kontynuowanie prac nad PFAf, dzięki czemu wprowadziłem do niego kilka poprawek oraz usprawnień. Niedługo zacznę uzupełniać strony wiki oraz aktualizować polski opis na stronie projektu. Tym czasem będą musiały Wam wystarczyć plik źródłowe znajdujące się w repozytorium SVN. Katalog tags zawiera wszystkie stabilne wersje (poza najnowszą). W trunku znajdziecie aktualną stabilną wersję (wyjątkiem od tej reguły jest wersja 0.1, która znajduje się i w katalogu tags i w trunku), a w branches wszystkie wersje rozwojowe.
Ponieważ zbliża się nieco dłuższy weekend, na wszystkie pytania odpowiem dopiero w poniedziałek (ewentualnie we wtorek).
Autor wpisu: batman, dodany: 27.10.2010 08:00, tagi: zend_framework
Jedną z najgorszych czynności związanych z Zend_Form, jest pisanie w kółko tego samego fragmentu kodu – obsługi formularza. W większości przypadków obsługa ta sprowadza się do czterech kroków:
- Sprawdzenie, czy wysłano POSTa.
- Sprawdzenie, czy dane są poprawne.
- Przetworzenie danych.
- Przekierowanie na inną stronę.
Zgodnie z zasadą DRY, wypadałoby czynności te wydzielić do osobnego bloku (funkcji/metody/klasy), a następnie do tego bloku się odwoływać. Niestety na przeszkodzie stoi punkt 3, czyli operacje na danych, które nie zawsze muszą się powtarzać.
Z pomocą przychodzi tutaj PHP, a dokładniej anonimowe funkcje. Wprawdzie funkcjonalność ta jest dostępna dopiero od wersji 5.3 języka, jednak nie widzę powodu, aby nie iść z duchem czasu i trzymać się przestarzałych rozwiązań.
W przykładach będę korzystał z klasy Batman_Form, której opis znajdziecie we wpisie Uniwersalne dekorowanie Zend_Form.
Automatyczna obsługa formularzy Zend_Form sprowadza się do wykorzystania action helpera, który załaduje formularz, a następnie wykona po kolei opisane wyżej czynności. Funkcja anonimowa pozwoli na dodanie do action helpera kodu, który będzie można wykonać w ściśle określonym momencie. Na koniec tego teoretycznego wywodu napiszę jeszcze drobną uwagę. Obecna implementacja anonimowych funkcji opera się o klasę Closure i magiczną metodę __invoke. Manual enigmatycznie głosi, iż nie należy polegać na tej wiedzy, dlatego też może dojść do sytuacji, w której opisany przeze mnie sposób, przestanie działać. Rozwiązanie tego problemu jest banalnie proste i sprowadza się do usunięcia sprzed argumentu funkcji typu Closure.
A teraz do rzeczy. O pisaniu własnych helperów akcji przeczytacie w dokumentacji. W skrócie, helpery akcji są nieco okrojoną wersją pluginów i w przeciwieństwie do nich, wywoływane są na żądanie.
Kod helpera prezentuje się następująco
class Batman_Controller_Action_Helper_FormHandler extends Zend_Controller_Action_Helper_Abstract { protected $_form = null; protected $_callbacks = array(); public function postDispatch() { // czy wysłano POSTa if($this->getRequest()->isPost()) { $postData = $this->getRequest()->getPost(); // czy dane są poprawne if($this->_form->isValid($postData)) { // pobranie wszystkich funkcji zwrotnych przypisanych do formularza $callbacks = $this->_form->getCallbacks(); $formData = $this->_form->getValues(); foreach($callbacks as $callback) { // kolejne wywołanie zarejestrowanych funkcji zwrotnych $callback($formData); } } } } /** * @return Zend_Form */ public function getForm($name, $options = null) { $prefix = 'Application_'; if(isset($options['prefix'])) { $prefix = $options['prefix']; unset($options['prefix']); } $formClass = $prefix . 'Form_' . $name; $this->_form = new $formClass($options); return $this->_form; } /** * @return Zend_Form */ public function direct($name, $options = null) { return $this->getForm($name, $options); } }
Założyłem w helperze, iż domyślną przestrzenią nazw dla klas jest Application. W większości przypadków takie założenie jest prawidłowe, jednak dla spokoju ducha, można w tym miejscu pobrać tą wartość z pliku konfiguracyjnego. Drugim założeniem jest wykorzystanie domyślnej struktury katalogów.
W sumie powyższy kod nie jest specjalnie skomplikowany. W momencie wywołania tego helpera, utworzony zostanie obiekt formularza, a następnie zwrócony do kontrolera.
Wywołanie wyżej opisanego helpera w kontrolerze wygląda nastęująco
Autor wpisu: Zyx, dodany: 26.10.2010 21:49, tagi: php
Autor wpisu: batman, dodany: 26.10.2010 19:23, tagi: php
Jedną z zalet programowania na Linuksie (Uniksie) jest możliwość skorzystania z polecenia tail, które pozwala na śledzenie zmian w plikach na żywo. Okazuje się, że programiści pracujący na Windowsie również mają taką możliwość. Z pomocą przychodzi Windows PowerShell. Wystarczy uruchomić PowerShell (domyślnie instalowany w Windows Vista oraz Windows 7) i wpisać polecenie:
Get-Content sciezka\do\pliku\log.txt –Wait
Efektem działania tego polecenia będzie wyświetlenie zawartości pliku oraz wszelkich zmian w nim dokonywanych. Mała rzecz, a cieszy.
Autor wpisu: batman, dodany: 25.10.2010 08:00, tagi: php
W poprzedniej części “PHP w chmurze”, skupiłem się na narzędziach, z których można korzystać podczas tworzenia aplikacji PHP przeznaczonej do umieszczenia w chmurze Windows Azure. Dzisiaj wyjaśnię czym jest chmura oraz opiszę podstawowe pojęcia związane z Windows Azure. Bez ich wyjaśnienia ciężko będzie zrozumieć mechanizmy rządzące chmurą.
Czym jest chmura?
Według definicji mianem chmury określa się “styl obliczeń, w którym dynamicznie skalowalne (zwykle zwirtualizowane) zasoby są dostarczane jako usługa za pośrednictwem Internetu”. Ni mniej ni więcej oznacza to tyle, że jako programista muszę zajmować się jedynie aplikacją. Konfiguracja i utrzymanie serwerów, składowanie danych, bezpieczeństwo – to wszystko spoczywa na barkach firmy dostarczającej chmurę. Co więcej, w przypadku nagłego zapotrzebowania na większą moc obliczeniową, nie muszę martwić się, że firma hostingowa mnie wyrzuci lub będę zmuszony dokupić kolejne maszyny, które po okresie wzmożonego ruchu będą z gracją pokrywać się kurzem.
Co to jest Windows Azure?
Windows Azure jest platformą składającą się z trzech niezależnych od siebie usług. Są to:
- Windows Azure
- SQL Azure
- Windows Azure AppFabric
Usługa Windows Azure jest środowiskiem, w którym uruchamiane są aplikacje. Usługa ta oferuje m.in. przestrzeń dyskową do składowania zasobów (np. pliki wideo). SQL Azure jest serwerem relacyjnej bazy danych, a AppFabric odpowiada za kontrolę dostępu oraz szynę danych. O ile kontrola dostępu nie wymaga większego wyjaśnienia, tak szyna danych stanowi ciekawą usługę, która pozwala na komunikacją między aplikacjami umieszczonymi w chmurze. Aplikacje te nie muszą być napisane w tym samym języku. Najważniejsze, by korzystały z AppFabric.
Role
W ramach Windows Azure funkcjonuje pojęcie roli. Rola, w dużym uproszczeniu, jest aplikacją działającą w chmurze. Na chwilę obecną można wyróżnić dwie role:
- web role
- worker role
Pierwsza rola jest odpowiednikiem typowej aplikacji webowej, druga stanowi zaplecze obliczeniowe. Worker role może być aplikacją wykonującą obliczenia w tle i dostarczającą przetworzone dane do roli webowej.
Role mogą się ze sobą komunikować przy pomocy protokołu HTTP (web role i worker role) oraz TCP (worker role). Obie role mogą komunikować się z zewnętrznymi zasobami poprzez protokoły HTTP oraz HTTPS oraz mogą uzyskać dostęp do magazynu danych.
Autor wpisu: Vokiel, dodany: 24.10.2010 22:15, tagi: jquery, css, javascript
Ten wpis jest dostępny wyłącznie w języku: English.