Autor wpisu: batman, dodany: 22.10.2010 08:00, tagi: php
Od dobrych kilku lat firma Microsoft usilnie stara się przekonać do siebie programistów innych niż .NET technologii. Ukłonem w stronę środowiska web developerów (głównie programistów PHP) ma być ASP.NET MVC. Wprawdzie w oficjalnych rozmowach zawsze usłyszałem, że ASP.NET MVC zostało stworzone z myślą o testowaniu aplikacji, jednak nie mogę oprzeć się wrażeniu, że z ASP.NET ma wspólną jedynie nazwę. Owszem, można korzystać ze stron wzorcowych, Entity Frameworka, a językiem backendu nadal jest C#, jednak nie jest to już sklejanie strony z kontrolek, jak w klasycznym ASP.NET. Dlatego też programiści PHP, którzy znają dowolny framework PHP odnajdą się w tej technologii bardzo szybko. Jedyną przeszkodą może być C#, jednak język ten nie jest taki straszny jak go malują.
Potrzebne narzędzia
Do pracy z ASP.NET MVC będzie potrzebne Visual Studio i przeglądarka internetowa (dowolna). Serwer IIS nie jest wymagany do testowania aplikacji, ponieważ Visual Studio posiada wbudowany “mini serwer”, na którym uruchamiane są aplikacje. Microsoft przygotował dla osób chcących poznać środowisko .NET przydatne narzędzie – Web Platform Installer, z poziomu którego można zainstalować wszystko co niezbędne do rozpoczęcia pracy z ASP.NET MVC.
Od razu uprzedzę marudy – Visual Studio jest instalowane w wersji Express, czyli darmowej, nieco okrojonej wersji i nie nazywa się Visual Studio, tylko Microsoft Visual Web Developer 2010 Express. Jeśli chcielibyście zainstalować serwer IIS, to on również jest darmowy, podobnie jak prawie wszystkie narzędzia ze stajni Microsoftu do tworzenia aplikacji webowych.
Hello World
Pierwszą aplikacją jaką się tworzy w nowym środowisku jest Hello World. Nie będę odbiegał od utartego schematu i na jej podstawie pokażę jak ASP.NET MVC wygląda od środka. Po uruchomieniu Visual Studio należy wybrać z menu File opcję New Project, a następnie ASP.NET MVC Web Application.
I już. Aplikacja Hello World jest gotowa. Można ją uruchomić korzystając ze skrótu klawiaturowego F5. W efekcie można zobaczyć coś takiego:
Autor wpisu: sokzzuka, dodany: 21.10.2010 10:28, tagi: php
Mój ostatni projekt wykorzystywał php 5.3. Jako, że serwer produkcyjny działa na debianie lenny, gdzie jedyną dostępną wersją php jest 5.2.6-1. Stanąłem przed koniecznością ręcznej instalacji wersji, którą potrzebowałem. Myślę, że ten mały tutorial przyda się wszystkim, którzy incydentalnie korzystają z linuksa, a potrzebują mieć świeża wersję php.Zaczynajmy więc.
- Dodajemy na końcu pliku
/etc/apt/sources.list
(można użyć np. edytora nano) następujące dwie linijki:deb http://php53.dotdeb.org stable all deb-src http://php53.dotdeb.org stable all
- Ściągamy klucze potrzebne do weryfikacji repozytorów:
gpg --keyserver keys.gnupg.net --recv-key 89DF5277 gpg -a --export 89DF5277 | sudo apt-key add -
- Uruchamiamy
apt-get update
- Instalujemy php
apt-get install php5-dev
- Teraz wystarczy tylko zrestartować apache
/etc/init.d/apache2 restart
Na koniec oprócz pozdrowienia Mamy, Taty i Psa Bazyla. Chciałem dodać, że jeżeli nie jesteśmy zalogowani na koncie z uprawnieniami admina to przed każdym wyżej wymienionym poleceniem należy dodać sudo
.
Autor wpisu: batman, dodany: 20.10.2010 08:00, tagi: zend_framework
Zend Framework oferuje wiele sposobów cache’owania danych. Jednym z najlepszych jest cache statyczny. Przy jego pomocy można zapisać wszystko to, co mamy na wyjściu (np. to co zostało wyświetlone w przeglądarce), do pliku HTML. W takim przypadku, każdy kolejny request będzie od razu otrzymywał w odpowiedzi wygenerowany plik HTML, bez użycia PHP. Brzmi nieprawdopodobnie? A jednak. Poza kilkoma niedociągnięciami, mechanizm ten spisuje się całkiem dobrze.
Mechanizmem, o którym przed chwilą pisałem, jest Zend_Cache_Backend_Static. Jego zastosowanie jest niezwykle proste, chociaż wymaga kilku niestandardowych modyfikacji.
Konfiguracja
Na samym początku musimy poinformować framework, że będziemy korzystać ze statycznego cache’u. Najszybciej zrobimy to korzystając z Zend_Cache_Manager. W tym celu w pliku application.ini musimy dodać następujący kod:
resources.cachemanager.page.backend.name = Static resources.cachemanager.page.backend.options.public_dir = APPLICATION_PATH "/../public/static" resources.cachemanager.pagetag.backend.options.cache_dir = APPLICATION_PATH "/../data/cache/static"
Informuje on naszą aplikację, że będziemy korzystać ze statycznego cache’u, który jest przechowywany w lokalizacji APPLICATION_PATH "/../public/static", a tagi opisujące cache znajdują się w katalogu APPLICATION_PATH "/../data/cache/static". Tagami na razie się nie przejmujcie. Opiszę je w dalszej części wpisu.
Powyższe opcje nie są jedynymi. Pełną ich listę znajdziecie w dokumentacji.
Skoro już przy pliku konfiguracyjnym jesteśmy, nie można zapomnieć o jednej bardzo ważnej modyfikacji. Musimy wyłączyć buforowanie wyjścia, które domyślnie jest włączone.
resources.frontController.params.disableOutputBuffering = true
Nie zapomnijcie o stworzeniu odpowiednich katalogów, ponieważ bez nich aplikacja przestanie działać.
.htaccess i punkt wejścia do aplikacji
Spore zmiany należy wprowadzić w pliku .htaccess. Powinien on wyglądać w następujący sposób (podziękowania dla Arka za pomoc z DirectoryIndex).
Autor wpisu: batman, dodany: 18.10.2010 08:00, tagi: php
Nieco ponad rok temu Microsoft ogłosił uruchomienie chmury – Windows Azure. Jako jeden z języków, w którym można tworzyć aplikacje w microsoftowej chmurze, wymieniany jest PHP. Co więcej, powstało nawet SDK dla tego języka oraz plugin do Eclipse, znacznie ułatwiający tworzenie aplikacji przeznaczonych do instalacji w Windows Azure. Ponieważ połączenie PHP oraz technologii Microsoftu wydaje się być wyjątkowo interesujące, postanowiłem zbadać temat PHP w chmurze. W przeciwieństwie do innych “dużych” tematów, ten będę opisywał na bieżąco, wraz ze wszystkimi moimi uwagami oraz przemyśleniami. Na koniec serii pokuszę się o instalację w chmurze aplikacji opartej o Zend Framework, co może być ciekawym (i kosztownym) doświadczeniem.
Wymagane narzędzia
Zanim będziemy mogli rozpocząć prace nad aplikacją Windows Azure, musimy zainstalować niezbędne narzędzia. Są to:
Instalację najlepiej rozpocząć od Windows Azure SDK. Jest to standardowy proces, w którym musimy przeklikać się przez krótkiego wizarda. Następnie rozpakowujemy Eclipse PDT i instalujemy w nim plugin. Dokładna instrukcja instalacji znajduje się na stronie projektu – http://www.windowsazure4e.org/download/, jeśli jednak nie chce się wam przedzierać przez dziesiątki zrzutów ekranu, wystarczy, że wykonacie poniższe kroki:
- Z menu Help, należy wybrać opcję Instal New Software
- W oknie, które się pojawi, klikamy na przycisk Add.
- W kolejnym oknie w polu Name wpisujemy Windows Azure Tools for Eclipse, a w polu Location – http://www.windowsazure4e.org/update
- Zatwierdzamy wprowadzone zmiany i czekamy chwilę na pojawienie się listy zawierającej spis narzędzi do instalacji.
- Na liście tej zaznaczamy PHP Development Tools for Windows Azure Platform i klikamy przycisk Next.
- Pozostałe kroki to już standardowy instalator Eclipse.
Testowanie środowiska
Jeśli wszystko zostało poprawnie zainstalowane, powinniśmy być w stanie stworzyć testowy projekt, na którym możemy przetestować poprawność instalacji.
W tym celu w Eclipse wybieramy z menu File opcję New, a następnie Other (lub używamy skrótu CTRL + N). Z katalogu PHP wybieramy Windows Azure PHP Project i klikamy Next. Pierwsza strona wizarda nie powinna sprawić żadnego problemu. Gorzej z drugą, ponieważ mamy tutaj do czynienia z określeniami związanymi bezpośrednio z Windows Azure – rolami oraz mechanizmami przechowywania danych.
Ponieważ w dzisiejszym wpisie chciałem się skupić jedynie na instalacji środowiska, nie będę zagłębiał się w te tematy. Na teraz wystarczy, że będziecie wiedzieć, iż są dwa rodzaje ról – Web Role oraz Worker Role. Pierwszą z nich można określić mianem aplikacji internetowej, drugą usługami działającymi w tle (np. dostęp do danych). Mechanizm przechowywania danych pozwala na zapisywanie w chmurze danych binarnych, tabelarycznych oraz kolejek.
Wracając do testowej aplikacji. W polu Role name wpiszcie WebRole oraz zaznaczcie checkbox Windows Azure Data Storage (Use Development Storage). Po kliknięciu Finish musimy odczekać kilka chwil, aż zostaną utworzone wszystkie niezbędne projekty.
W tym momencie mamy gotową aplikację, którą można umieścić w chmurze. Zanim jednak zaczniemy wpinać się się chmury, warto przetestować aplikację lokalnie.
Autor wpisu: sokzzuka, dodany: 16.10.2010 23:01, tagi: php
Jeżeli śledzicie dzone.com. Pewnie zauważyliście, że od pewnego czasu na blogach osób związanych z Java’ą przetaczają się dwa związane ze sobą tematy. Pierwszym z nich jest kwestia uczynienia Java’y wolną (udostępnienie jej na wolnej licencji, uniezależnienie od Oracle) a drugim z nich jest kwestia zmian w języku. Kilka osób poddało pomysł aby zrobić fork Java’y wydany na jednej z licencji open-source’owych. Co do zmian w języku to część osób rozczarowana tym jaki kształt ma w tej chwili język oraz powolnym wprowadzaniem nowości do niego doszła również do wniosku, że najlepiej było by stworzyć nową wersję Java’y niekompatybilną wstecznie (Backward Incompatibile) Java. Znalazło się jak to zwykle bywa sporo osób, które stwierdziły ze oba pomysły jak najbardziej idą ze sobą w parze i proponują stworzenie „wolnego” fork’a Javy i rozwijanie go w sposób niekompatybilny wstecznie. Mnie nasuwa się jedynie pytanie, czy taki fork dalej będzie (i będzie można go nazywać) Java’ą ?
Postanowiłem odnieść tą sytuację do własnego podwórka i zastanowić się co by było gdyby stworzyć fork interpretera PHP. Jakie zmiany ja przeprowadziłbym w języku i dlaczego oraz czy po tych zmianach ten fork można by nazwać jeszcze PHP. Zachęcam też wszystkich do zabawy i wpisywania własnych propozycji. Jedną z pierwszych rzeczy jaką był zmienił, to usunięcie przestarzałych rzeczy typu register globals, short open tag, magic quotes, safe mode, allow call time pass by reference.
Drugą rzeczą było by przejrzenie pliku php.ini i usunięcie wszystkich opcji, które w jakikolwiek sposób niejawnie wpływają na wykonywanie skryptów – banowanie klas, funkcji etc. Domyślam się, że po tej operacji, zostały by tylko opcje związane z włączaniem/wyłączaniem rozszerzeń oraz limit czasu i pamięci.
Trzecią rzeczą było by zastąpienie wszystkich error’ów wyjątkami (z wyjątkiem parse_error i compile_error z wiadomych względów).
Zmiany omówione jak narazie w zasadzie nie zmieniają samej istoty języka a tylko sposób działania interpretera. Dalsze rzeczy jednak już jak nabardziej.
Po czwarte usuną bym słowa kluczowe i mechanizmy: global i goto. Są to pozostałości po językach bardziej niskopoziomowych i zwykle po prostu zaciemniają kod. Co więcej, pisząc w sposób obiektowy, nie ma w ogóle potrzeby ich wykorzystywania.
Po piąte – biblioteka standardowa. Zamiast jednej globalnej przestrzeni nazw przesunął bym funkcje z różnorakich rozszerzeń do własnych namespace’ów.
Po szóste – typy proste. Typy proste zamieniłbym na obiekty, które dziedziczą z klasy ‘Value’. Obiekty których klasy dziedziczą z klasy ‘Value’ były by nie zmienialne (immutable) oraz przekazywane przez kopię. Obiekty użytkownika, które dziedziczyły by z abstrakcyjnej klasy Value mogły by też same obsługiwać rzutowanie (funkcja typu __cast).
Po siódme zmiana orientacji języka na bardziej funkcjonalno-obiektowy niż proceduralno-obiektowy. Usunięcie możliwości przekazywania przez referencje typów prostych – konsekwencja punktu szóstego.
Po ósme – anonimowe klasy i obiekty oraz obiekty typu singleton jak w Scala’i oraz usunięcie możliwości deklaracji statycznych metod i pól klasy.
Autor wpisu: batman, dodany: 16.10.2010 15:30, tagi: jquery, javascript
Kilka godzin temu napisałem o wydaniu pierwszej alfy jQuery Mobile, a tutaj programiści pracujący nad podstawową wersją biblioteki wydali jQuery 1.4.3. Obok usunięcia kilku błędów i wprowadzeniu ogólnych usprawnień, w bibliotece pojawiły się nowe interesujące funkcjonalności. Są to między innymi:
- przepisanie całego modułu odpowiedzialnego za CSS. Od wersji 1.4.3 można tworzyć własne pluginy, które mogą korzystać z funkcji css i/lub animate. Jako przykład można podać plugin jQuery Rotate.
$('#myDiv').css('rotate', 90); $('#myDiv').animate({rotate: 180});
- znaczna poprawa wydajności metod odpowiedzialnych za przeszukiwanie drzewa DOM.
- prosta, aczkolwiek bardzo potrzebna rozbudowa zdarzenia click, którego wynikiem powinno być zablokowanie domyślnej akcji
$("a").bind("click", false)
- jQuery.type – funkcja pozwalająca określić typ (wewnętrzną klasę Javascript) wskazanej wartości
- jQuery.fx.interval – właściwość pozwalająca na określenie ilości klatek na sekundę dla uruchamianej animacji. Dzięki temu przeglądarki, które korzystają z akceleracji sprzętowej, będą w stanie wyświetlać bardziej płynne animacje.
- jQuery.isWindow – prosta metoda pozwalająca na określenie, czy wskazany obiekt jest oknem (window).
- szereg usprawnień w module data, m.in. wsparcie dla atrybutów data- w HTML5.