środa, 18 stycznia 2017

[PHP][OOP] Abstrakcja, interfejsy i wzorzec Factory

TRUE
4704597062652094618
Aktualizacja: 20.01.2017 15:00. Większość początkujących w programowaniu obiektowym programistów ma problemy ze zrozumieniem w jaki sposób prawidłowo wykorzystywać mechanizmy takie jak dziedziczenie, abstrakcje i interfejsy. Różne tutoriale, czy poradniki dostępne w sieci nie ułatwiają tego, gdyż zwykle opisują one jedynie zasadę działania tych mechanizmów, bez pokazania praktycznego tego zastosowania - do takiej wiedzy trzeba już sięgnąć do książek, ale i te nierzadko traktują sprawę po macoszemu. O ile koncepcja tego wszystkiego jest prosta, to dużo ludzi ma na początku problemy z wyczuciem tego w jaki sposób prawidłowo wykorzystywać to w praktyce. Początkujący programiści jedynie wiedzą, że takie coś jest, ale nie bardzo są w stanie zrozumieć, do czego to wszystko tak naprawdę może posłużyć. W tym artykule przeanalizujemy sobie więc do czego tak naprawdę użyć tych wszystkich mechanizmów i sprawimy, że słowo abstrakcja nie będzie się już kojarzyć nikomu z żadną czarną magią, tudzież z czymś trudnym do zrozumienia. Dzisiaj zaprzyjaźnimy się z ową abstrakcją..

Czym tak naprawdę jest abstrakcja?

Na pewno wiecie, czym są klasy abstrakcyjne, a przynajmniej jak takie klasy definiujemy. Jak wiadomo klasy abstrakcyjne definiujemy za pomocą abstract class, następnie podajemy w definicji klasy metody abstrakcyjne, które będą musiały zostać pokryte we wszystkich (tym razem już nie-abstrakcyjnych) klasach dziedziczących po naszej nadrzędnej abstrakcyjnej klasie. Czym więc tutaj jest ta magiczna abstrakcja? Otóż wymusza ona niejako na wszystkich klasach potomnych utworzenie dokładnie takich metod, jakie w klasie bazowej (tej abstrakcyjnej) zostały określone. Klasa abstrakcyjna sama w sobie nie posiada definicji tychże metod, posiada jedynie ich deklaracje. Możemy więc powiedzieć, że do momentu utworzenia tych metod w klasach potomnych (dziedziczących) wszystkie te metody tak naprawdę nie istnieją, istnieją jedynie abstrakcyjnie. Niby są, a jednak jeszcze ich nie ma, gdyż istnieje dopiero póki co ich deklaracja, że takowe prawdopodobnie się gdzieś dalej w kodzie pojawią. Tym właśnie jest abstrakcja.

Przyjrzyjmy się najprostrzej klasie abstrakcyjnej:
[code]
<?php
abstract class AbstractHuman {

  // kod
}
[/code]

wtorek, 17 stycznia 2017

[API][Google] Rozgryzamy API Youtube'a i robimy własny odtwarzacz!

TRUE
2050492019291633876
Blog PHP Majster powraca na antenę po dłuższej przerwie w publikowaniu! Jak zapewne niestety zauważyliście, tydzień na publikację kolejnego wpisu przedłużył się... do prawie dwóch lat i przez ten czas blog nie był w ogóle aktualizowany. Przyczyna oczywiście była prozaiczna - najnormalniejszy w świecie brak wolnego czasu i dużo wszelakich projektów na głowie. Z nowym rokiem blog jednak powraca i tym razem będzie on sukcesywnie uzupełniany treścią, a jest tego w planach bardzo dużo.

Przede wszystkim za niedługo zajmiemy się dłuższą serią artykułów dotyczących frameworka Symfony, gdyż o ten temat prosiło na facebooku bardzo dużo osób. Będzie to jednakże długa seria, gdyż materiału do przyswojenia jest bardzo dużo - Symfony to bardzo obszerny temat, w dodatku wymuszający konieczność zahaczenia również o Doctrine i Twiga. Powoli jednak wszystko sobie tutaj opiszemy i tym razem wpisy będą pojawiać się nieco częściej, niż co dwa lata ;) Jak widać, strona graficzna bloga została też lekko odświeżona, mam nadzieję, że w takiej formie wszystko wygląda jaśniej i czytelniej, niż w wersji poprzedniej (wszelkie sugestie oczywiście mile widziane). Ale dobrze już, wystarczy tego przydługiego wstępu, czas zająć się ciekawym tematem, mianowicie w tym artykule zobaczymy jak w praktyczny sposób wykorzystać API udostępnione przez Google do youtubowego odtwarzacza.

Nad tematem tym pracowałem stosunkowo niedawno, tworząc dynamiczny, wysuwany "zza ekranu" odtwarzacz dla pewnego forum internetowego. Pierwotna wersja działała poprzez PHP i Javasript za pomocą zwykłego embeddowania oferowanego przez Youtube, jednakże w wersji kolejnej postanowiłem pójść o krok dalej, całkowicie zrezygnować z takiej formy i wykorzystać API od Google. Wybór takiego rozwiązania pozwolił stworzyć mi kilka bardzo ciekawych funkcjonalności, które postaram się w niniejszym artykule opisać. Omówimy sobie dokładnie zatem API odtwarzacza, zobaczymy w jaki sposób to wszystko działa i jak to w praktyce wykorzystać. Będzie dużo javascriptu i trochę PHP oraz połączenie jednego z drugim. Zapraszam do lektury...

wtorek, 11 sierpnia 2015

[PHP][Bezpieczeństwo] Posolić, czy spieprzyć?

TRUE
1971613062479556600
Hasła można dobrze posolić, albo totalnie sprawę spieprzyć. Prawidłowe posolenie hasła może być dla mało doświadczonej osoby dość niejasne. A czym jest w ogóle to posolenie? Otóż jest to dodanie do hasła jakiegoś ciągu znaków (soli), a następnie dopiero zahaszowanie takiego połączonego ciągu i dopiero zapisanie go w bazie. Co to daje? Otóż daje to to, że nawet po wycieku hashy z bazy nie da się z nimi zbytnio nic zrobić, o ile zostały dobrze posolone i potraktowane dobrym, silnym algorytmem. A dlaczego? Ano dlatego, że nie da rady ich porównać z tablicami, które zawierają listę hashy odpowiadającą wartościom niezahashowanym, tzw. tablicami tęczowymi. Nie znaczy to oczywiście, że nie da się takiego hasła złamać, dobre posolenie tworzy jednak jeden kolejny problem do pokonania, a więc zmniejsza prawdopodobnieństwo dla złamania hasła.

wtorek, 21 lipca 2015

[PHP][Bezpieczeństwo] Absolutne podstawy bezpieczeństwa w PHP cz.1

TRUE
3966379113538333976
PHP niesłusznie jest nazywany mało bezpiecznym językiem. Przeświadczenie takie pozostało po poprzednich wersjach języka, które szczerze mówiąc rzeczywiście pozostawiały wiele do życzenia w kwestiach bezpieczeństwa, szczególnie w rękach mało doświadczonych programistów. To się jednak zmieniło, a PHP wciąż ewoluuje. Prawda jest taka, że poprawnie skonfigurowany serwer, z poprawnie skonfigurowanym PHP i prawidłowo skonfigurowaną bazą danych, na których działa poprawnie napisana aplikacja to mieszanka, która może się okazać naprawdę bardzo bezpieczna.
Trzeba jedynie trzymać się pewnych reguł i zasad, mieć pojęcie o możliwych typach ataków i pisać kod "z głową". W cyklu artykułów tutaj postaramy się omówić sobie wszystkie najważniejsze zasady, których bezwzględnie powinniśmy się trzymać podczas pisania swoich aplikacji w PHP. Na spokojnie, w cyklu kilku artykułów omówimy sobie także zabezpieczenia po stronie serwera, silnika, bazy i zasady bezpiecznej ich konfiguracji.
Idąc na przekór wielu poradnikom, które opisuję jedynie techniczne aspekty dodam od siebie kilka spraw, które nie są zazwyczaj opisywane w poradnikach. Zaczynamy część pierwszą, która zarazem będzie jedynie wstępem i krótkim wprowadzeniem do cyklu artykułów.

Zasada numer zero, czyli po co "hackerom" moje dane.

Postanowiłem jako pierwsze (a właściwie zerowe) opisać pewne błędne założenie, które ja nazywam następująco: "Prowadzę stronę o chomikach, więc po co crackerom moja baza danych?".
Jest to bardzo często spotykane myślenie wśród osób zarządzających swoimi serwerami i oprogramowaniem. Jest to myślenie jak najbardziej niepoprawne. Należy bowiem pamiętać, że każda zdobyta informacja - nawet taka jak dostęp do bazy danych strony o chomikach jest na wagę złota.

Po pierwsze - daje to crackerowi wolny dostęp do danych na serwerze, po drugie - co łączy się z pierwszym - na serwerze tym może też wkrótce (lub już istnieje) pojawić się inny serwis, do którego z automatu będzie miało się dostęp. Po trzecie - może to też być hosting dzielony, co stworzy crackerowi jeszcze większe pola do popisu. Po czwarte - w bazie danych mogą znaleźć się i najprawdopodobniej się znajdują dane kluczowe dla użytkowników, jak ich loginy, hashe haseł (lub nawet czasami same hasła otwartym tekstem co woła o pomstę do nieba), ich emiale i inne dane osobowe. Dane takie są cenne, gdyż istnieje prawdopodobieństwo, że dany użytkownik używa podobnych danych do logowania np. na swoją skrzynkę pocztową. Stąd już krótka droga do kilku socjotechnicznych zabiegów i np. przejęcia konta w banku. Brzmi jak bajka? To nie jest bajka, lecz rzeczywistość i taki z pozoru nic cennego nie posiadający serwis o hodowaniu chomików może wywołać nieświadomie tzw. efekt motyla, przez który ucierpieć mogą nieświadomi użytkownicy.




Biorąc więc pod uwagę powyższe (a opisałem tylko kilka aspektów) powinniśmy zawsze pamiętać, że nawet z pozoru nic nieznacząca aplikacja webowa może w rzeczywistości wywołać prawdziną lawinę, za którą odpowiedzialni będziemy właśnie my. W związku z tym - każda, nawet najmniejsza aplikacja działająca w sieci powinna być dokładnie przeanalizowana i przede wszystkim stworzona z uwzględnieniem wszystkich niezbędnych wymogów bezpieczeństwa. Wiadomo, że nikt nie jest wróżbitą, a żadna aplikacja nie jest idealna i w 100% bezpieczna, ale trzymając się kluczowych zasad możemy przynajmniej sprawić, że nie będzie ona dla crackera jak otwarta książka.

Złota zasada - każdego użytkownika traktujemy jako potencjalnego atakującego.
Bez wyjątków.

środa, 17 czerwca 2015

[PHP][RegEx] Podstawy wyrażeń regularnych cz.1

TRUE
1888640682065359108
Wyrażenia regularne (regular expressions) to obszerny temat, ale raz zrozumiany przydaje się ogromnie w każdym projekcie i w każdym języku programowania. W skrócie jest to wzorzec, który dopasowujemy do zadanego ciągu znaków. Od zwykłego porównywania dwóch ciągów tekstowych różni się tym, że w przypadku wyrażenia regularnego podajemy wzorzec (pattern), a nie drugi ciąg. Wzorzec taki następnie może być dopasowany do więcej niż jednego ciągu tekstowego. Za pomocą wyrażenia regularnego dopasowywać możemy litery, cyfry, znaki interpunkcyjne i specjalne, w tym te "niewidzialne", jak tabulacja, czy znak nowej linii. Mają zastosowanie wszędzie tam, gdzie występuje konieczność sprawdzenia, czy dany ciąg znaków pasuje do zadanego wzorca, np. czy jest on poprawnym adresem emial, bądź adresem URL. Stosowane są praktycznie na każdym kroku. W sieci jest cała masa testerów on-line, jeśli chodzi o poprawność wyrażeń. Polecam do zabawy, kilka z nich znajdziemy tutaj, w dziale QuickLinks.

1. Ograniczniki - /

Każde wyrażenie regularne powinno zostać objęte w ogranicznik na początku i końcu wyrażenia. Takim ogranicznikiem zazwyczaj jest slash ( / ), ale może to być również inny znak. Przyjęło się jednak, że jako ogranicznik stosujemy / i tego się trzymajmy. Proste wyrażenie regularne może mieć więc następującą postać:
[code]/kot/[/code]
gdzie kot to wzorzec dopasowania, a / na początku i końcu to ograniczniki. Wyrażenie takie pasować będzie do każdego ciągu tekstowego, w którym występować będzie słowo kot.
Pasować będzie do wszystkich trzech poniższych ciągów:
[code]Ala ma kota.[/code]
[code]Ala ma kota i Ola ma kota.[/code]
[code]kot ma na imię Mruczek[/code]
[code]Te koty mają po 4 lata.[/code]
Nie ma znaczenia, czy ciąg kot występuje tutaj na początku, na końcu, czy w środku badanego ciągu tekstowego oraz ile razy wystąpi, ma jednak znaczenie wielkość liter. Powyższe wyrażenie nie dopasuje się już więc do ciągu:
[code]Kot jest szary.[/code]
W powyższym zdaniu Kot != kot.
Zachowanie funkcji dopasowującej możemy zmienić za pomocą dodatkowych parametrów, tak aby ignorowała wielkość liter i dopasowała słowo kot zarówno do kot, Kot, jak i KoT, ale o tym w kolejnej części.

wtorek, 16 czerwca 2015

[API][FB] Wstęp do FB Graph API i PHP SDK

TRUE
1475662091400928209
Facebook to ogromnie rozbudowana struktura oferująca równie rozbudowane API do swoich usług. Niezależnie od tego, czy z Facebooka się korzysta, czy nie - każdy webdeveloper powinien poznać choćby podstawy korzystania z jego API. Dzięki temu API uzyskać możemy dostęp (oczywiście za zgodą użytkownika) do praktycznie każdej informacji jaką FB przechowuje, takiej jak tablica, znajomi, komentarze, zdjęcia i wiele wiele innych elementów. Za pomocą API Facebooka, które ma swoją nazwę - Graph tworzyć można zarówno głupie gierki, jak i praktyczne aplikacje operujące na zebranych przez FB danych. W cyklu artykułów tutaj zajmiemy się tym drugim zastosowaniem, gdyż żadnych symualatorów farm tworzyć tutaj nie będziemy. Nauczymy się za to metod na pozyskiwanie z FB odpowiednich danych i pracy z nimi. Zaczynamy od wstępu do API, czyli opisu jak mniej więcej wygląda praca z facebookowym API od strony technicznej.

Podstawowe pojęcia

Aby rozpocząć zabawę z Graphem musimy nauczyć się kilku podstawowych pojęć, które wprowadza framework Facebooka i z których będziemy tutaj korzystać. Te pojęcia to odpowiednio: Facebook Graph API, FBML, FQL, Facebook JavaScript, APP ID, APP Secret oraz Facebook Canvas.

czwartek, 11 czerwca 2015

[API][Google] Wstęp do Google API

TRUE
7696256736615433949
Google udostępnia API do większości swoich usług, takich jak jak wyszukiwarka, Dysk, wykresy, Google+, YouTube, Analytics, Google Maps i wiele, wiele innych. Praca z większością z nich opiera się na podobnych zasadach, zmieniają się jedynie nazwy żądań i rodzaj otrzymywanych danych. Warto więc poznać choćby jedną z usług jakie za pomocą API oferuje Google, aby szybko nauczyć się korzystania z pozostałych. W cyklu artykułów tutaj opiszemy sobie większość najczęściej używanych usług od Google i przeanalizujemy sobie pracę z nimi w PHP na przykładach.

W tym artykule, tytułem wstępu zrobimy sobie małe wprowadzenie i zobaczymy na czym polega dostęp do API Google i jakie kroki trzeba poczynić, aby taki dostęp uzyskać. Pierwszą i najważniejszą rzeczą jest uzyskanie od Google klucza API lub tokena Client ID. Publicznego klucza API używamy w aplikacjach, które nie będą operować na prywatnych danych użytkowników, tokena ClientID używamy, gdy taki dostęp będzie miał miejsce. Token taki jest następnie używany przez protokół OAuth 2.0 do uwierzytelniania. Zarówno klucz API, jak i token ClientID wygenerujemy sobie na pomocą konsoli deweloperskiej Google, na której to będziemy musieli zarejestrować każdą ze swoich aplikacji, która korzystać będzie z danego API.

Na początek poznajmy kilka kluczowych kwestii związanych z API Google.

Konsola deweloperska Google

Google Developer Console to w rzeczywistości strona znajdująca się pod adresem: https://console.developers.google.com



Na stronie tej włączymy lub wyłączymy dostęp do każdego z udostępnianych API, zarejestrujemy aplikację oraz zmienimy uprawnienia do korzystania z danego API. Do konsoli deweloperskiej dostęp ma każdy kto posiada konto w Google.
Znajdziemy w tym miejscu ponadto informacje o swoich aplikacjach korzystających z API, takie jak statystyki użycia i tym podobne, ciekawe informacje. Aby rozpocząc pracę z API Google'a będziemy musieli zarejestrować tutaj swoją aplikację, a robimy to tworząc nowy projekt w konsoli.

środa, 10 czerwca 2015

[HTML5] Podstawy pracy z Canvas

TRUE
5067432574550638982
Element Canvas pojawił się dopiero w HTML5. Służy on do rysowania grafiki w oknie przeglądarki bezpośrednio za pomocą Javascriptu. Sam z siebie jest w HTML5 jedynie pustym polem, w którym następnie za pomocą odpowiednich metod w Javascripcie rysować możemy dynamicznie dane elementy. Możliwości elementu Canvas jeśli chodzi o rysowane obiekty są praktycznie nieograniczone i zależą jedynie od programisty. Podobnie jak w przypadku biblioteki GD w języku PHP mamy tutaj zestaw kilku predefiniowanych metod slużących do generowania podstawowych kształtów, co za tym idzie - tworząc ich kombinacje jesteśmy w stanie wygenerować właściwie dowolny obiekt.

W artykule tym przyjrzymy się podstawom generowania takiej grafiki za pomocą Canvas i javascriptowych metod. Narysujemy sobie kilka podstawowych kształtów i omówimy jak to wszystko mniej więcej działa.

[PHP] Poprawna dokumentacja kodu i phpDocumentator

TRUE
3050546257291765393
phpDocumentator to pakiet służący do generowania dokumentacji API dla kodu PHP. Jest to powszechnie używany pakiet i jest on stosowany w wielu popularnych projektach, jak Zend, czy Propel Korzysta z niego większość programistów PHP na świecie, a dokumentowanie kodu za pomocą bloków DocBlock to już praktycznie standard. Warto więc zapoznać się z pakietem i dokumentować swój kod według ściśle określonych wytycznych. Pozwoli to nie tylko na bezproblemowe przygotowanie pełnej dokumentacji w formie przystępnej dla odbiorcy, ale przede wszystkim pomoże innym programistom, którzy pracować będą z naszym kodem.

Prawda jest taka, że kod bez dokumentacji to zazwyczaj katorga dla osoby z nim pracującej. W mniejszych projektach może nie stanowi to większego problemu, ale w przypadku, gdy mamy do czynienia z dużymi projektami składającymi się z dużej ilości rozbudowanych klas brak dobrej dokumentacji jest wręcz dla takiego kodu dyskwalifikacją. Dobra dokumentacja powinna składać się z kilku elementów - po pierwsze: musi ona być. Po drugie - musi ona trzymać się pewnych standardów, takich jak sposób opisu danej klasy, jej metod, czy własności. Z koleji przy dokumentacji metod i funkcji w dokumentacji powinień znaleźć się opis pobieranych i zwracanych parametrów, a także opis ich typów. Wszelkie tego typu kluczowe informacje powinny się w dokumentacji znaleźć i powinny zostać podane w pewien ustandaryzowany sposób.

Pakiet phpDocumentator wymusza na programiście pewien schemat dokumentowania kodu i radzę się tego schematu trzymać w każdym swoim projekcie, nawet jeśli nie mamy zamiaru przygotowywać do niego zewnętrznej dokumentacji za pomocą narzędzi takich jak phpDocumentator. Składnia taka po prostu jest powszechna wśród programistow i co za tym idzie - zostanie szybko zrozumiana przez innego programistę pracującego z naszym kodem. W artykule tym na początku omówimy sobie wszystkie aspekty tego jak poprawnie powinna taka dokumentacja wyglądać, a na sam koniec zobaczymy co z tak przygotowanej dokumentacji potrafi wygenerować nam phpDocumentator.
Strona oficjalna phpDocumentatora to: http://phpdoc.org/.

wtorek, 9 czerwca 2015

[API] Wstęp do protokołu OAuth

TRUE
7041180470584458698
OAuth jest protokołem open source, który pozwala na bardzo bezpieczną autoryzację do API danego usłogodawcy. Zasada działania polega na wymianie tokenów pomiędzy aplikacją serwerową (udostępniającą jakieś API), a klientem, który z tego API korzysta udostępniając tym samym jakieś funkcjonalności swoim użytkownikom. Protokół ten jest wykorzystywany do autoryzacji praktycznie przez wszystkich liczących się na rynku graczy, jak Google, Facebook, Twitter, czy MySpace.

Dzięki OAuth klient korzystający z danej usługi API (np. korzystający z googlowskiego Dysku za pomocą API Google) może operować na udostępnionym zestawie danych bez konieczności każdorazowego podawania hasła, czy loginu - tym zajmuje się OAuth. Działa to tak - iż aplikacja kliencka korzystająca z OAuth otrzymuje od serwera oferującego uwierzytelnianie OAuth specjalny token oraz secret, które klient umieszcza w swojej aplikacji.

Następnie przy pomocy tych danych użytkownik aplikacji klienckiej loguje się do swoich zasobów u danego dostawcy, określając tym samym do jakich jego danych znajdujących się na serwerze dostawcy dostęp zostanie przydzielony aplikacji klienckiej. Przy okazji rejestracji u dostawcy, klient podaje adres zwrotny, na który OAuth ma zwracać żądanie podczas udanej próby autoryzacji.

Większość dostawców API, jak Google, czy FB udostępnia własne biblioteki do API z wbudowaną implementacją OAuth.
Zasadę działania protokołu bardzo ładnie, choć skrótowo przedstawia ten znaleziony w sieci diagram:

źródło: Google Grafika

[SQL] Aliasy i złączenia wielu tabel za pomocą INNER JOIN, UNION, LEFT JOIN i RIGHT JOIN

TRUE
4076046594274692106
W SQL-u zazwyczaj pracuje się na wielu tabelach połączonych ze sobą relacjami. Bardzo często podczas pracy z bazą przychodzi nam więc odwoływać się w jednym zapytaniu do więcej niż jednej tabeli. Prawidłowe używanie mechanizmów operujących na kilku tabelach w jednym zapytaniu wymaga poznania kilku kluczowych rozwiązań jakie język SQL tutaj oferuje. W tym artykule opiszę dokładnie na czym polega tworzenie aliasów dla tabel i kolumn, które to aliasy następnie wykorzystamy podczas łączenia tabel w zapytaniach. Nauczymy się następnie jak działają i czym w ogóle są złączenia oraz przeanalizujemy na przykładach różne rodzaje złączeń, takie jak UNION, INNER JOIN oraz złączenia zewnętrzne, czyli LEFT JOIN i RIGHT JOIN. Do zobrazowania przykładów tutaj opisywanych wykorzystamy prostą bazę z relacjami, którą stworzyłem specjalnie na potrzeby tego i kolejnych artykułów.

Testowa baza danych

Jak wspomniałem wyżej, przygotowałem prostą bazę dla MySQL, która zostanie tutaj wykorzystana w przykładach. Baza składa się z 5 tabel i polecam je sobie zaimportować, tak aby wszystko można było testować na swoim serwerze. Kod SQL tworzący tabele i dodający przykładowe rekordy znajduje się kilka akapitów niżej. Struktura naszej bazy wygląda tak:


niedziela, 7 czerwca 2015

[AJAX] Praca z AJAX-em w jQuery

TRUE
172202579730833435
Biblioteka jQuery posiada pełen zestaw metod służących do kompletnej pracy z żądaniami ajaxowymi. Umożliwia wysyłanie i odbieranie żądań zarówno GET jak i POST, automatyzując przy tym bardzo wiele procesów. Korzystanie z AJAX-a w jQuery jest proste i przyjemne - całość sprowadza się do poznania wszystkich metod, jakie dla AJAX-a ten framework oferuje. Metod tych jest dość dużo i poznamy je tutaj za chwilę wraz z odpowiednimi przykładami ich zastosowania. Artykuł nie jest przeznaczony dla początkujących w jQuery, więc aby go w pełni zrozumieć wymagana jest znajomość choćby podstaw frameworka. Ogólny wstęp do mechanizmów AJAX-owych wraz z opisem obiektu XMLHttpRequest znajduje się w poprzednim artykule, który przeczytać można tutaj.

Wczytanie danych do selektora - $.load()

Obsługa AJAX-a za pomocą jQuery jest o tyle łatwiejsza, że jQuery zamyka wszystko w pojedyńczych metodach, które wywołuje się szybciej, aniżeli podczas pisania dłuższego kodu dla obiektu XMLHttpRequest. JQuery ponadto bierze na siebie całą obsługę, w związku z czym programista nie musi się martwić o implementację w wiekowych wersjach przeglądarek. Przyjrzyjmy się małemu porównaniu. Chcąc wczytać AJAX-em za pomocą zwykłego Javascriptu plik ajax.txt do DIV-a o nazwie response, zrobimy to tak:
[code]
<div id="response"></div>
<script>
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function()
{
  if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
  {
     document.getElementById("response").innerHTML = xmlhttp.responseText;
  }
};
xmlhttp.open("GET", "ajax.txt", true);
xmlhttp.send();
</script>
[/code]
Za pomocą jQuery natomiast zamkniemy powyższe w jednej linijce kodu:
[code]<div id="response"></div>
<script>$("#response").load("ajax.txt");</script>[/code]

sobota, 6 czerwca 2015

[AJAX] Podstawy Ajax-a i obiekt XMLHttpRequest

TRUE
7129893189936219737
AJAX, czyli Asynchronous JavaScript and XML to metoda pozwalająca na asynchroniczne ładowanie elementów strony bez potrzeby jej odświeżania. Metodą tę spopularyzowała firma Google, dodając do swojej wyszukiwarki funkcjonalność opartą na podpowiadaniu zapytania. Obecnie AJAX wykorzystywany jest praktycznie wszędzie. Połączenie wykonywane przez AJAX polega na wysłaniu żądania z poziomu strony je implementującej, a następnie na odebraniu odpowiedzi na to żądanie od zewnętrznej strony/skryptu. Połączenie takie odbywa się w tle, za pomocą sporządzenia przez przeglądarkę obiektu o nazwie XMLHttpRequest i następnie za pomocą tego obiektu następuje komunikacja. W artykule tym nauczymy się tworzyć taki obiekt, a następnie za jego pomocą łączyć się z zewnętrznymi źródłami danych. AJAX-a można używać "na czysto" operując bezpośrednio na obiekcie XMLHttpRequest, można też skorzystać z gotowych frameworków, takich jak np. jQuery, które automatyzują kilka aspektów połączenia. Przesyłanie danych ajaxowych za pomocą metod dostępnych w jQuery opiszę jednak w innym artykule, tutaj zobaczymy jak obiekt XMLHttpRequest wygląda i działa "od środka", operując na nim bezpośrednio, bez użycia zewnętrznych frameworków.

Zasada działania AJAX-a

Na samym początku tworzony jest obiekt XMLHttpRequest. Podczas tworzenia takiego obiektu definiujemy dla niego funkcje zwrotną, która zostanie wywołana podczas procedury połączenia i która obsłuży odebrane przez AJAX dane. Następnie - żądanie (request) utworzone za pomocą obiektu XMLHttpRequest wysyłane jest do zewnętrznego pliku. Plik ten następnie reaguje na żądanie odsyłając odpowiedź (resposne), w której zwraca odpowiednie dane. Odpowiedź taka  przesyłana jest z powrotem do naszego obiektu, gdzie zostaje przetworzona przez funkcję, którą zdefiniowaliśmy podczas tworzenia obiektu XMLHttpRequest. Cała ta procedura odbywa się "w tle". Z otrzymanymi danymi następnie możemy już zrobić co tylko chcemy.

źródło obrazka: http://www.w3schools.com/ajax/ajax.gif

czwartek, 4 czerwca 2015

[JSON] Podstawy i struktura formatu JSON

TRUE
1538721816456079164
JSON to skrót od JavaScript Object Notation, w wolnym tłumaczeniu Notacja Obiektowa JavaScriptu. Jak sama nazwa wskazuje, format stanowi podzbiór języka JavaScript, w którym to służy on jako wewnętrzny język do opisywania obiektów. Nie ogranicza to bynajmniej pola, na którym można go stosować do samego tylko JavaScriptu, a wręcz przeciwnie - pomimo nazwy format ten jest używany powszechnie do wymiany danych we wszystkich praktycznie językach. Jest absolutnie niezależny od platformy, gdyż jego implementacja moze znaleźć się w praktycznie dowolnej aplikacji. Jest to zatem bardzo uniwersalny format, z powodzeniem wykorzystywany w celu wymiany danych pomiędzy aplikacjami.

JSON jest bardzo lekkim formatem - jego składnia ograniczona jest do minimum, jest to wręcz banalnie prosty, tekstowy format, w którym poza samymi danymi stosuje się raptem kilka innych ograniczników, takich jak przecinek, czy nawiasy. Przez taki minimalizm jest on niestety trochę mniej czytelny dla człowieka, niż np. XML, ale za to nadrabia małym rozmiarem, gdyż nie posiada w sobie żadnych elementów takich jak znaczniki w XML-u. Warto znać JSON-a, gdyż jest on bardzo przydatny w wymianie danych, szczególnie sieciowych. W artykule tym omówimy podstawowe rzeczy, takie jak składnia, a w następnych artykułach zobaczymy jak pracować na danych z JSON-a w językach PHP i Javascript.

środa, 3 czerwca 2015

[XML] Podstawy, składnia i przestrzenie nazw w XML

TRUE
4413385007819199716
XML, czyli EXtensible Markup Language jest uniwersalnym językiem służącym do opisu danych przy pomocy znaczników. Od lat jest niekwestionowanym standardem jeżeli chodzi o zapisywanie zbiorów danych. Nie ma praktycznie języka, który nie posiadałby lub nie mógł posiadać implementacji XML-a. Czyni to XML-a językiem niesamowicie uniwersalnym, całkowicie niezależnym od danej platformy, architektury, czy rodzaju oprogramowania.

Za pomocą XML-a komunikować się może praktycznie każdy z każdym i wszystko ze wszystkim, co jest zresztą powszechnie wykorzystywane - w końcu właśnie w tym celu ten język powstał. Kolejnym atutem XML-a jest jego prosta budowa oparta na znacznikach. Poza tym jest łatwiejszy w czytaniu dla człowieka niż np. JSON - nie stanowi żadnego problemu "przeczytanie" prostego dokumentu XML bez użycia żadnych parsujących narzędzi.

W artykule tym po krótce omówimy sobie strukturę dokumentów XML, a w następnych artykułach przeanalizujemy tworzenie, odczyt i przetwarzanie dokumentów XML za pomocą PHP oraz Javascriptu.

[PHP][Propel] Instalacja oraz wstęp do Propel ORM

TRUE
3045453951852043091
Propel do biblioteka służąca do mapowania obiektowo-relacyjnego, w skrócie ORM. Podobnie jak biblioteka Doctrine sprawia on, że praca na bazie danych odbywa się za pomocą zwykłych obiektów. Jest odrobinę łatwiejszy w użyciu, niż Doctrine, co jednak nie znaczy, że jest gorszy. Praca z obiema bibliotekami jest w zasadzie podobna, opiera się ona na przygotowaniu schematu bazy danych, wygenerowaniu odpowiednich metod dla modelu, a następnie na pracy na modelu jak na zwykłych obiektach. Propela, podobnie jak Doctrine możemy w prosty sposób połączyć z popularnymi frameworkami, jak Zend, czy Symfony - integracja taka zostanie tutaj opisana w którymś z artykułów.

W poniższym natomiast artykule pobierzemy i zainstalujemy sobie bibliotekę Propela, skonfigurujemy ją, uruchomimy, a następnie przygotujemy prosty, testowy model bazy i zobaczymy jak to mniej więcej działa. Artykuł przedstawia procedurę w systemach Windows, na Linuxach jednak wszystko (poza oczywiście innymi ścieżkami) wygląda podobnie.

wtorek, 2 czerwca 2015

[PHP][Zend2] Instalacja i podstawy frameworka Zend2

TRUE
1487821199145981101
Zend to jeden z najpopularniejszych i najprzyjemniejszych w użyciu frameworków do PHP. Jest bardzo rozbudowanym środowiskiem, a mimo tego jego nauka nie stwarza większych problemów (jak to czasem może mieć miejsce w przypadku Symfony). Posiada bardzo obszerną dokumentację oraz niesamowicie rozbudowaną społeczność swoich użytkowników, jest więc prawie pewne, że napotykając na dany problem zawsze znajdziemy jakieś rozwiązanie, czy wskazówkę.

Za pomocą Zenda stworzyć można praktycznie każdą aplikację webową, zawiera on w sobie bardzo domyślnych komponentów, zaczynając od absolutnie podstawowych, na bardziej wyspecjalizowanych skończywszy. Obecnie rozwijana jest wersja 2 frameworka, a za niedługo światło dzienne ujrzy wersja trzecia. Tutaj zajmiemy się właśnie tą drugą wersją i w cyklu artykułów nauczymy się krok po kroku pisania aplikacji za pomocą frameworka Zend.

Na samym początku, podobnie jak w większości artykułów tutaj - cykl tutoriali zaczynamy od opisu instalacji, wstępu i podstawowej konfiguracji środowiska. Zaczynamy więc.

[PHP][Symfony2] Instalacja i pierwsze uruchomienie Symfony2 krok po kroku

TRUE
821936260844612134
Framework Symfony to jeden z najpotężniejszych frameworków napisanych dla PHP. Jest to też zarazem jeden z najpopularniejszych frameworków na świecie, warto byłoby zatem znać choćby jego podstawy. Nie jest to jednak framework łatwy w nauce, a na początku jego ogrom może nieco przytłaczać. Wszystko jednak można opanować i w cyklu artykułów tutaj postaramy się nauczyć pracy z Symfony krok po kroku. Będziemy używać wersji z gałęzi 2.x.x, gdyż wprowadza ona niesamowicie dużą ilość ilość zmian w stosunku do swoich starszych wersji, tj. wersji Legacy z gałęzi 1.x.x.

Zasadniczą różnicą powiędzy wersjami 1 i 2 jest wprowadzenie zupełnie innej architektury w tej drugiej, opartej na mechaniźmie tzw. komponentów, o których oczywiście nauczymy się tutaj. Zacznijmy zatem pracę z Symfony2 i na początek pobiermy, zainstalujmy, uruchomijmy i skonfigurujmy swoje pierwsze środowisko oparte na Symfony2. Opiszę procedurę dla systemów z rodziny Windows, zakładając, że mamy zainstalowany i działający serwer Apache. Pierwsze uruchomienie Symfony dla osób nieznających tego frameworka jest nieco problematyczne, więc opiszę wszystko dokładnie krok po kroku.

Przygodę rozpoczynamy od oficjalnej strony frameworka, która znajduje się pod adresem: http://www.symfony.com. Znajdziemy tutaj informacje o najnowszej wersji, przejrzymy bazę komponentów i uzyskamy dostęp do całej dokumentacji, a ta jest naprawdę obszerna. Istnieje również polska wersja dokumentacji, dostępna pod adresem: http://symfony-docs.pl/.

poniedziałek, 1 czerwca 2015

[PHP][Doctrine2] Instalacja i wstęp do Doctrine2 ORM

TRUE
1915472901869042583
Doctrine jest systemem ORM dla relacyjnych baz danych, napisanym w PHP. ORM (Object-relational Mapping), czyli po polsku Mapowanie Obiektowo-relacyjne jest to ogólnie rzecz biorąc technika zamiany danych opisanych za pomocą obiektów w ich relacyjne modele w bazie danych. W systemach ORM pracujemy nie na rekordach z bazy, lecz na obiektach, gdyż każdy rekord reprezentowany jest jako pełnoprawny obiekt. Doctrine jest właśnie jednym z najpopularniejszych rozwiązań, które oferują takie mapowanie dla PHP.

Korzystając z bibliotek Doctrine każda tabela w bazie danych prezentowana jest jako jedna wielka klasa, gdzie poszczególne rekordy (wiersze) są jej obiektami. Na obiektach takich pracujemy dokładnie tak samo jak na zwykłych obiektach, utworzonych w tradycyjny sposób. W artykule tym zainstalujemy sobie Doctrine na własnym serwerze i nauczymy się podstaw pracy z nim.

niedziela, 31 maja 2015

[PHP][Smarty] Instalacja i wstęp do Smarty

TRUE
4301483683097307750
Smarty to chyba najpopularniejszy system szablonów jaki istnieje do PHP. Rozwijany przez lata doczekał się już jakiś czas temu swojej 3 wersji. Smarty pozwala na całkowite rozdzielenie warstwy prezentacyjnej aplikacji od jej warstwy logiki. Rozbudowywany przez lata dorobił się naprawdę ogromu funkcji możliwości. W artykule tym zobaczymy w jaki sposób zainstalować silnik Smarty w swojej aplikacji oraz jak w podstawowy sposób z niego korzystać. Taka podstawowa wiedza pozwoli na zapoznanie się z systemem i umożliwi dalszą naukę tego co Smarty oferuje, a oferuje naprawdę bardzo wiele.

Dzięki Smarty całkowicie oddzielimy warstwę prezentacji naszej aplikacji i zgodnie ze wzorcem MVC w pełni odseparujemy ją od reszty aplikacji. Na początek może krótkie wprowadzenie do tego czym jest i jak powinien być rozumiany wzorzec MVC. Nazwa tego wzorca to skrót od Model-View-Controller, a więc Model-Prezentacja-Kontroler.

Jest to ogólnie przyjęty wzorzec projektowania aplikacji, który rozdziela ją na 3 niezależne, ale współpracujące ze sobą warstwy. Warstwa modelu odpowiada za wszystkie dane jakie przetwarza aplikacja, zarządza dostępem do bazy i zajmuje się przetwarzaniem wszystkich elementów z którymi pracuje aplikacja. Warstwa prezentacyjna odpowiada za wyświetlanie przetwarzanych przez warstwę modelu danych użytkownikowi i za interfejs komunikacji z nim. Warstwa kontrolera natomiast steruje tym wszystkim i zarządza aplikacją określając sposób w jaki przetwarzane w modelu dane przekazać użytkownikowi w warstwie prezentacji. Jest to wzorzec bardzo praktyczny, efektywny i traktowany już obecnie jako standard w projektowaniu aplikacji. Smarty pracować bedzie w drugiej z omówionych warstw - a więc prezentacyjnej.
webmaester.pl - profesjonalne projektowanie WWW i webaplikacji
webmaester.pl - profesjonalne projektowanie WWW i webaplikacji