Ten blog nie jest już rozwijany. Wraz ze wszystkimi artykułami zostały przeniesiony pod adres wmroczkowski.pl

Czy chcesz przejść pod nowy adres?

sobota, 25 lipca 2009

Programowanie obiektowe (cz. 8) - ochrona dostępu do zmiennych składowych

W ostatnim poście przypisywaliśmy wartości właściwości. Łatwo można było zauważyć, że do zmiennej zadeklarowanej za pomocą public $name mogliśmy przypisać dowolną wartość (również taką, która kompletnie nie ma żadnego sensu). Taki sposób przypisywania wartości do właściwości uniemożliwia jakąkolwiek weryfikacje poprawności danych ani zaktualizowania jakichkolwiek innych wartości w chwili ustawiania wartości właściwości name.
Można w łatwy sposób obejść tą niedogodność. Wystarczy zawsze implementować właściwości jako funkcje (metody) o nazwach np. getNazwaWlasciwosci(wartosc) lub setNazwaWlasciwosci(wartosc). Tego rodzaju funkcje znane są jako metody dostępowe.
Żeby lepiej poznać ich działanie zróbmy mały przykład:

Tak jak w poprzednim przykładach tworzymy plik class.First.php i wprowadzamy poniższy kod:

<?php
class First {

private $_name;

public function sayWelcome() {
echo "Witaj {$this->getName()}!";
}

public function getName() {
return $this->_name;
}

public function setName($name) {
if (!is_string($name) || strlen($name) == 0) {
throw new Exception("Wartość zmiennej jest niepoprawna");
}
else {
$this->_name = $name;
}
}

}
?>


Następnie tak jak ostatnio w pliku testfirst.php umieszczamy następujący kod:

<?php

require_once('class.First.php');

$objFirst = new First();
$objFirst->setName('Wojtek');
$objFirst->sayWelcome();

//a teraz spróbujemy wygenerować błąd

$objFirst->setName(108);
?>

W tym przykładzie zmieniliśmy status zmiennej public na private, a do nazwy dodaliśmy podkreślenie. Oczywiście podkreślenie nie jest wymagane, jest jednak zalecaną konwencją nazewniczą zmiennych prywatnych i funkcji składowych. Za pomocą słowa kluczowego private blokujemy dostęp do tej zmiennej spoza klasy lub egzemplarza tej klasy (obiektu). Natomiast mają do niej dostęp metody dostępowe, które z kolei są dostępne z zewnątrz obiektu. Metody te są poprzedzone słowem kluczowym public. Chodzi o metody setName() oraz getName() za pomocą których klasa będzie mogła sprawdzić prawidłowość wartości, przed jej przypisaniem. Jeżeli przesłana wartość nie będzie stringiem lub będzie pusta zostanie wygenerowany wyjątek. Warto też podkreślić, że domyślny poziom dostępności dla każdej funkcji lub zmiennej składowej to poziom publiczny, więc niekonieczne było podawanie słowa kluczowego public przed funkcjami. Jest to jednak dobry nawyk.

Jeżeli chodzi o poziomy dostępności zmiennych składowych to mogą one mieć trzy różne poziomy dostępności: publiczny, prywatny i chroniony. Poznaliśmy już publiczne i prywatne. Wiemy, że zmienne składowe publiczne są dostępne z dowolnego miejsca poza obiektem oraz w obiekcie. Natomiast składowe prywatne są dostępne tylko z poziomu klasy lub egzemplarza klasy. Zmienne składowe chronione to elementy o zastosowaniu wewnętrznym, takie jak uchwyt połączenia z bazą danych lub dane konfiguracyjne. Są one dostępne dla własnej klasy oraz dla klas jej potomnych, czyli w tych które odziedziczyły ich właściwości i metody.

Stosowanie metod dostępowych powinno być w aplikacji standardem nawet w przypadku gdy nie planujemy weryfikować danych. Pamiętajmy aby stosować te metody używając funkcji get i set. Utrzymamy wtedy swoją aplikację w pewnych umownych standardach. Poza tym o ile to tylko możliwe powinno się weryfikować wszelkie wprowadzane dane. Zapobiega to włamaniom oraz próbom hackowania naszej aplikacji. Poza tym można o wiele łatwiej i szybciej dodać testowanie w klasie. Przeniesie się ono na wszystkie obiekty utworzone na podstawie tej klasy.

piątek, 24 lipca 2009

Programowanie obiektowe (cz. 7) - dodawanie właściwości

Dodawanie właściwości do klasy jest bardzo prostym procesem. Nie różni się zbytnio od tworzenia zmiennych w kodzie proceduralnym. W programowaniu obiektowym definiujemy właściwość poprzez utworzenie zmiennej na początku deklaracji klasy, w obrębie klamer zawierających ciało klasy. Należy pamiętać, że nazwa zmiennej jest nazwą właściwości, więc jeżeli utworzymy zmienną $speed to właściwość będzie nazywała się speed.
Wróćmy do kodu, który edytowaliśmy wcześniej. Otwórzmy plik class.First.php i wprowadźmy tam następujące zmiany:

<?php
class First {
public $name;

function sayWelcome() {
echo "Witaj $this->name!";
}
}
?>

Jak wynika z powyższego kody aby utworzyć właściwość klasy First o nazwie name wystarczy zadeklarować zmienną o nazwie właściwości. Aby odwołać się do tej właściwości należy należy użyć tego samego operatora, którym odwoływaliśmy się do metody, czyli ->.
W następnym przykładzie utworzymy obiekt, który będzie odwoływał się do naszej nowej właściwości.
Utwórzmy, więc nowy plik o nazwie testfirst.php o następującym kodzie:

<?php
require_once('class.First.php');

$objFirst = new First();
$objFirst -> name = 'Wojtek';

$objSecond = new First();
$objSecond -> name = 'Paweł';

$objFirst -> sayWelcome();
$objSecond -> sayWelcome();
?>

Spróbujmy wykonać powyższy kod. Jeżeli wszystko dobrze zrobiliśmy to w przeglądarce powinien pojawić się komunikat Witaj Wojtek!Witaj Paweł!. Ten przykład powinien dać już ogólne wyobrażenie o działaniu metod i właściwości.

Przy deklaracji właściwości użyliśmy słowa kluczowego public, które służy do określania zmiennych publicznych. Zmienne publiczne będą dostępne dla obiektów i klas spoza klasy, w której ta zmienna występuje. Oznacza to, że będziemy mogli ją wykorzystać w dowolnym momencie. Niektóre zmienne deklarowane w klasie istnieją tylko na potrzeby tej klasy i nie powinny być dostępne z poziomu zewnętrznego kodu. Powyższa przykład umożliwia ustawianie oraz pobieranie wartości właściwości name. Teraz metoda sayWelcome zamiast pobierać parametr, pobiera wartość name właściwości.

Użyliśmy również zmiennej $this, która informuje metodę obiektu, że ma pobrać wartość name dotyczącą bieżącego egzemplarza klasy. Jest to używane kiedy nie znamy zmiennej reprezentującej obiekt. Na podstawie tej klasy mogą być utworzone obiekty o różnych nazwach ale za pomocą zmiennej $this, wiemy, ze chodzi o właśnie przetwarzany obiekt. Widać to wyraźnie w poprzednim przykładzie, gdzie obiekt $objFirst i obiekt objSecond wyświetlają różne komunikaty, mimo że obydwa mają w sobie zawarty kod echo "Witaj $this->name!";. Jednak wcześniej miały przypisane różne wartości właściwości name.
Należy również pamiętać, że dostęp do właściwości wymaga tylko jednego $. Należy napisać $this->name, a nie $this->$name. Zmienna jest deklarowane na początku klasy jao public $name.
Możemy również deklarować zmienne wewnętrzne klasy służące do wykonywania wewnętrznych operacja w klasie. Obydwa rodzaje danych, a więc te publiczne, którym możemy przypisywać różne wartości oraz te do użytku wewnętrznego są nazywane wewnętrznymi zmiennymi składowymi klasy. Więcej na ich temat opowiem w kolejnym poście.

Programowanie obiektowe (cz. 6) - dodawanie metody

Nadszedł czas aby do naszej pierwszej klasy dodać jakieś metody. Niestety jej obecna forma nie jest zbyt użyteczna. Wspominałem wcześniej, że metoda klasy to po prostu funkcja. Zobaczmy więc jak będzie wyglądała pierwsza metoda naszej klasy.

<?php
class First {
function sayWelcome($name) {
echo "Witaj $name!";
}
}
?>

Mamy więc utworzoną pierwszą klasę, która coś robi. Zawiera metodę. Obiekt, który utworzymy na podstawie tej klasy może przywitać każdego kto wywoła metodę sayWelcome. Aby wywołać tą metodę na obiekcie $objFirst należy zastosować operator ->, który umożliwia dostęp do danej metody.

<?php
require_once('class.First.php');
$objFirst = new First();
$objFirst->sayWelcome('Wojtek');
>

Po wykonaniu powyższego kodu powinien się wyświetlić komunikat Witaj Wojtek!. Operator -> służy do dostępu do wszystkich metod i właściwości obiektu. Należy pamiętać, że mówimy tu o programowaniu obiektowym w PHP. W innych językach można było się spotkać z operatorem kropki (.) jednak w PHP nie występuje on w ogóle.

czwartek, 23 lipca 2009

Instalacja i konfiguracja SyntaxHighlighter na bloggerze (blogspot), czyli jak pokolorować swój kod

SyntaxHighlighter zyskał ostatnio ogromną popularność ze względu na przyjazny interfejs oraz łatwość konfiguracji. Jednak instalacja tego narzędzia na takich serwisach jak blogger ciągle przysparza użytkownikom sporo kłopotów. Postaram się w jasny sposób opisać sposób instalacji SyntaxHighlighter na bloggerze.

Poniżej kroki, które należy wykonać:
1. Logujemy się na nasze konto na blogger.com.
2. Wchodzimy w zakładkę Układ
a następnie Edytuj kod HTML.
3. W sekcji <head> umieszczamy następujący kod:

<link href='http://syntaxhighlighter.googlecode.com/svn/trunk/Styles/SyntaxHighlighter.css' rel='stylesheet' type='text/css'/>
<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shCore.js'/>

4. Następnie pod powyższym kodem dodajemy wpis odpowiedni za kolorowanie danego języka. Jeżeli chcesz możesz wpisać wszystkie wiersze poniżej. Będziesz miał wtedy do dyspozycji wszystkie składni. Jednak jeżeli będzie używał np. tylko PHP to wklej tylko wiersz odpowiedzialny za tą składnie:

<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushBash.js'/>

<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCSharp.js'/>

<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCpp.js'/>

<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCss.js'/>

<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushDelphi.js'/>

<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushGroovy.js'/>

<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushJScript.js'/>

<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushJava.js'/>

<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushPhp.js'/>

<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushPython.js'/>

<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushRuby.js'/>

<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushScala.js'/>

<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushSql.js'/>

<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushVb.js'/>

<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushXml.js'/>

5. Ostatni już wpis należy dodać na końcu ciała strony, czyli przed tagiem </body>:

<script language='javascript'>
dp.SyntaxHighlighter.BloggerMode();
dp.SyntaxHighlighter.HighlightAll('code');
</script>

6. Zapisujemy szablon strony i gotowe.

Teraz, za pomocą tagów pre lub textarea możesz dodawać swój kod. Poniżej przykład:

<pre name="code" class="php">Twój kod</pre>


Pamiętaj, że podczas pisania kodu należy zamienić znak < wpisem "&lt;" a znak > "&gt;"
W przeciwnym wypadku interpreter bloggera będzie próbował uruchomić Twój kod.

Jeżeli chcesz żeby to działało również na Firefoxie 3.0.5 który błędnie interpretuje ten kod, należy w szablonie strony na blogerze usunąć na samej górze tag DOCTYPE.

Programowanie obiektowe (cz. 5) - tworzenie klasy i obiektu

Teraz wprowadzimy już trochę praktyki. Zaczniemy od utworzenia pliku o nazwie class.First.php:

<?php
class First {
}
?>

W ten sposób została utworzona nowa klasa o nazwie First. Oczywiście nic wielkiego za jej pomocą nie zrobimy ale przynajmniej wiemy jak zacząć. Wystarczy użyć słowa kluczowego class i podać nazwę klasy. Przyjęło się, że nazwy klas rozpoczynamy wielką literą. Również dobrym nawykiem jest umieszczanie każdej klasy w osobnym pliku i nadawanie nazw w formacie class.Nazwaklasy.php.

Aby utworzyć obiekt należy napisać następujący kod:

<?php
require_once('class.First.php');
$objFirst = new First();
?>

Przy tworzeniu nowego obiektu należy upewnić się, że został dołączony plik z klasą. Nowe obiekty tworzymy poprzez użycie operatora new po czym podajemy nazwę klasy oraz parę nawiasów (podobnie jak przy wykonywaniu funkcji). Wynik tej operacji, czyli egzemplarz klasy First zostanie przypisany do zmiennej $objFirst. Od tej chwili można wywoływać metody objektu $objFirst i odczytywać lub ustawiać jego właściwości. Oczywiście muszą one się znajdować w obiekcie.

Programowanie obiektowe (cz. 4) - obiekty

Już wiemy, że klasa jest wzorcem dla obiektu. Na jej podstawie konstruowany jest egzemplarz klasy, czyli obiekt. Działa to podobnie do projektu domu, za pomocą którego można wybudować wiele domów o podobnej budowie, ale różniących się np. wyposażeniem lub kolorem ścian. Obiekt to element konkretny, zbudowany na podstawie wzorca dostarczonego przez klasę. Wracając do naszego przykładu z domem to wiemy, że mając projekt możemy zbudować dom wedle własnych upodobań i wymagań. W programowaniu obiektowym, aby zbudować obiekt posługujemy się klasą. Ten proces nazywa się tworzeniem egzemplarza i wymaga dwóch rzeczy:

  • Miejsca w pamięci przeznaczonego dla obiektu. PHP przydziela je automatycznie.

  • Danych, które zostaną przypisane do właściwości obiektu.


Sama klasa nie może mieć przypisanych żadnych wartości do właściwości lub być w jakimś stanie. Proces przypisywania wartości do właściwości dotyczy tylko obiektów. Tutaj również możemy posłużyć się analogią domu. W projekcie nie jest zawarty kolor ścian, rodzaj posadzek, lub jakie panele będą położone. Jest tylko informacja, że istnieją. Podobnie jest z tworzeniem egzemplarza klasy, czyli obiektu. Najpierw musimy go utworzyć, następnie możemy operować na jego właściwościach lub wykonywać jego metody. Klasami manipulujemy podczas pisania programu, natomiast obiektami podczas wykonywania programu.

środa, 22 lipca 2009

Programowanie obiektowe (cz. 3) - klasy

Jeżeli przyjrzymy się otaczającej nas rzeczywistości okaże się, że występują w niej różnego rodzaju obiekty, takie jak drzewa, samochody, domy, łodzie, zwierzęta, itp. Na przykład samochód ma jakiś kolor, opony, wyposażenie, lub pojemność silnika. To jest jego charakterystyka lub, jak to byśmy określili w terminologii obiektowej, właściwości. Dany samochód potrafi różne rzeczy robić, np. hamować, przyspieszać, trąbić, sygnalizować kierunek, itp. To są jego zachowania, lub w terminologii obiektowej metody. Te cechy i zachowania są wspólne dla wszystkich samochodów. Oczywiście nie oznacza to, że wszystkie samochody są np. czerwone. Chodzi o to, że każdy samochód ma jakiś kolor, jakąś pojemność silnika, itd.

Wracając do programowania obiektowego, jeżeli mówimy o klasie mamy na myśli wspólny zbiór właściwości i metod jakiegoś obiektu, które będzie pasował do wszystkich typów danego obiektu, w tym przypadku samochodu. Właściwości danego obiektu mają nazwę i wartość. Niektóre wartości można zmieniać, a niektóre nie. Jeżeli np. utworzymy klasę Car a w niej takie właściwości jak color i weight to kolor danego samochodu może się zmienić, np. po lakierowaniu ale jego waga się nie zmieni.

Niektóre właściwości obiektu reprezentują jego stan. Stan odnosi się do tych właściwości obiektu, które ulegają zmianie pod wpływem pewnych zdarzeń (metod) a niekoniecznie można je modyfikować bezpośrednio. Np. właściwość maxspeed nie jest wartością stałą. Zależy od nawierzchni po której przemieszcza się samochód, jakości paliwa, pojemności silnika oraz rodzaju opon.

Jeżeli mówimy o metodach w programowaniu obiektowym a mamy za sobą doświadczenie związane z programowanie strukturalnym, to możemy powiedzieć, że metody są od odpowiednikiem funkcji. Podobnie jak funkcje, metody mogą pobierać dowolną ilość parametrów. Niektóre metody przetwarzają zewnętrzne dane, przesłane jako parametry, ale mogą również działać na właściwościach własnych obiektów. Możemy np. utworzyć metodę accelerate, która sprawdzi poziom paliwa naszego obiektu Car i ustali czy przyspieszenie w ogóle jest możliwe. Może również zmienić stan obiektów poprzez modyfikację ich właściwości, np. prędkości samochodu.

poniedziałek, 20 lipca 2009

Opera Unite, opis i instalacja

Opera Unite zamienia komputer zarówno w klienta jak i serwer, pozwalając na interakcję i dzielenie treści pomiędzy komputerami w Sieci, bez potrzeby udziału obcych serwerów.

Opera Unite sprawia, że udostępnianie danych staje się tak proste jak przeglądanie Internetu. Usługi dostępne dzięki Opera Unite dają użytkownikom lepszą kontrolę nad prywatnymi danymi i upraszczają dzielenie się plikami z jakimkolwiek urządzeniem zaopatrzonym w nowoczesną przeglądarkę internetową.

Twórców stron WWW i aplikacji internetowych zainteresuje fakt, że usługa Opera Unite bazuje na tych samych otwartych standardach internetowych, co dzisiejsze strony. W sposób rewolucyjny upraszcza to złożoność tworzenia nowoczesnych serwisów sieciowych. Z Opera Unite tworzenie pełnych serwisów internetowych jest dzisiaj tak proste jak tworzenie strony
internetowej.

Opera Unite jest dostępna w wersji przeglądarki Opera 10, którą można pobrać na stronie http://labs.opera.com/. Usługi Opera Unite działają bezpośrednio w przeglądarce.


Jak korzystać z Opera Unite:

1. Pobierz przeglądarkę zawierającą technologię Opera Unite ze strony http://labs.opera.com/.
2. By uruchomić usługę, kliknij logo Opera UInite w dolnym lewym rogu przeglądarki i zaloguj się używając istniejącego identyfikatora, którego używałeś do obsługi takich serwisów Opery jak My Opera i Opera Link. Opera Unite zaproponuje ci stworzenie identyfikatora, jeśli go jeszcze nie posiadasz.
3. Teraz już możesz korzystać z Opera Unite. Masz dostęp do usługi poprzez panel Opera Unite w przeglądarce. Nowe usługi mogą być instalowane ze strony http://unite.opera.com/.
4. W trakcie używania Opera Unite da ci bezpośredni internetowy adres do działających usług Opera Unite na konkretnym urządzeniu, np.: http://notebook.jondoe.operaunite.com/photo_sharing/, gdzie „notebook” to nazwa lokalnego urządzenia udostępniającego zawartość, "jondoe" to twoja nazwa użytkownika, a „photo sharing” to usługa, która została udostępniona. Ten link umożliwi także innym dostęp do tej samej usługi w twoim komputerze przy użyciu ich przeglądarki.
5. Możesz także zobaczyć, którzy znajomi używają usługi Opera Unite na twojej domowej stronie My Opera Unite.


Obecnie dostępne są następujące serwisy Opera Unite:

* Udostępnianie Dokumentów (File Sharing): dziel bezpiecznie pliki ze swojego komputera bez potrzeby umieszczania ich na serwerze. Najpierw wybierz katalog, z którego chciałbyś udostępnić pliki. Opera Unite wygeneruje wtedy bezpośredni adres URL do tego folderu. Dając znajomym ten link, będziesz mógł dzielić z nimi pliki bez potrzeby korzystania z obcych serwisów internetowych.
* Serwer internetowy (Web Server): Prowadź pełną stronę internetową ze swojego komputera używając serwisu Opera Unite Web Server. Po zaznaczeniu folderu zawierającego swoją stronę, możesz ją udostępnić innym używając otrzymanego adresu Opera Unite. Opera Unite automatycznie rozpozna indeks plików i stworzy stronę według twojego projektu.
* Odtwarzacz multimediów (Media Player): Gdziekolwiek jesteś, ciesz się swoją muzyką dzięki udostępnianiu plików MP3 i listy utworów z dowolnego urządzenia. Po wybraniu folderu zawierającego twoją listę utworów, użyj bezpośredniego linku Opera Unite, by odtworzyć swoją muzykę na jakimkolwiek urządzeniu zawierającym nowoczesną przeglądarkę.
* Udostępnianie Zdjęć (Photo Sharing): Dziel się swoimi zdjęciami bezpośrednio ze swojego komputera, bez potrzeby umieszczania ich w sieci. Kiedy wybierzesz folder ze zdjęciami, usługa wygeneruje galerię z miniaturami twoich fotografii. Po kliknięciu miniatury otworzy się zdjęcie w oryginalnej rozdzielczości.
* Strefa Relaksu (The Lounge): Strefa Relaksu to samodzielny czat działający w twoim komputerze. Twoi znajomi mogą mieć dostęp do tego czatu poprzez bezpośredni link, który nie będzie od nich wymagał zakładania konta na jakimkolwiek serwisie. W zależności od twoich ustawień prywatności, możesz wprowadzić do twojego serwisu wygenerowane hasło, by mieć kontrole nad tym, kto dołącza się do twojego kanału dyskusyjnego.
* Lodówka (The Fridge): Zostawiaj wiadomości na wirtualnej lodówce swoich przyjaciół. Dzieląc się bezpośrednim linkiem do swoich lodówek, ty, twoi znajomi i rodzina możecie bezpiecznie wymieniać prywatne wiadomości w czasie rzeczywistym.

Te sześć usług to początek możliwości Opera Unite. Web developerzy mogą puścić wodze fantazji i zaprojektować unikalny serwis internetowy, dzięki czemu otworzą pełny potencjał Opery Unite.

Przypominamy, że przeglądarka Opera 10 to wciąż produkt w wersji beta, co oznacza, że nie jest ukończony i może wciąż zawierać błędy.

źródło: http://www.chip.pl/news/internet-i-sieci/sieci-p2p/2009/06/opera-unite-czyli-wspoldzielenie-plikow-w-przegladarce

Dodatkowo poniżej zamieszczam video przedstawiające instalacje i konfiguracje Opera Unite:

Eric Higgins, webmaster Google, radzi jak przyspieszyć skrypty PHP

Na YouTubie można znaleźć film autorstwa Eric Higginsa na temat przyspieszania skryptów PHP. Jest to krótki filmik i powiem szczerze, że po Google spodziewałem się czegoś konkretniejszego. Co o tym myślicie? Macie jakieś swoje sposoby na przyspieszenie skryptów PHP? Więcej informacji można znaleźć na: code.google.com/speed

Jak odblokować stronę zablokowaną przez administratora sieci?

Jeszcze łączysz się z internetem w miejscu pracy lub poprzez dużą lokalną sieć to często zdarza się, że niektóre strony mogą być zablokowane. Możesz jednak przechytrzyć administratora i wejść na Twoją "zakazaną" stronę przez specjalny portal przeznaczony do tego celu. Aby to zrobić wystarczy wejść na stronę www.2unblocksites.com i tam wpisać adres strony na którą chcesz się dostać i kliknąć "Unblock". Oczywiście zakładamy, że administrator Twojej sieci jest pół-amatorem i nie zablokował strony www.2unblocksites.com lub stringa z adresem Twojej strony na porcie 80. Jeżeli to czytasz i jesteś administratorem sieci to proponuję blokować również strony tego typu lub blokować stringi z adresami.

Programowanie obiektowe (cz. 2) - podstawowe pojęcia

W tym poście skupię się na ogólnym opisaniu podstawowych pojęć związanych z programowaniem obiektowym. W kolejnych postach zostaną one szczegółowo opisane.

Klasy - są wzorcami lub szablonami dla obiektów. W klasach znajduje się kod definiujący właściwości i metody.
Obiekty - są utworzone egzemplarze klasy, które przechowują wszelkie wewnętrzne dane i informacje o stanie potrzebne dla funkcjonowania aplikacji.
Dziedziczenie - polega na utworzeniu nowej klasy na bazie już istniejącej.
Polimorfizm - oznacza zdefiniowanie danej klasy jako członka jednej lub więcej kategorii klas. Przykładem może być samolot, który zakwalifikuje się do "urządzeń z silnikiem rakietowym" oraz "urządzeń latających".
Interfejsy - interfejsy są pewnym sposobem na określenie metod, jakie ma implementować dana klasa. Przydaje się one w sytuacjach, w których pracuje wiele ze sobą połączonych obiektów, które wywołują między sobą ściśle określone metody.
Hermetyzacja - jest to zastrzeżenie dostępu do wewnętrznych danych obiektu.

Nie przejmuj się jeżeli któreś z tych pojęć jest dla Ciebie nie jasne. Wszystko zostanie opisane szczegółowo w kolejnych postach za pomocą przykładów.

Programowanie obiektowe (cz. 1) - wstęp

Tym postem rozpoczynam serie szkoleń związanych z programowaniem obiektowym w PHP. Tak naprawdę najlepszym sposobem nauczenia się programowania obiektowego jest rozłożenie na części pierwsze jakiejś porządnej aplikacji zbudowanej obiektowo. Jednak aby to móc w ogóle zrobić trzeba mieć już solidne podstawy związane z takim programowaniem. Postaram się jasno wyłożyć te podstawy, zaprezentować kilka ćwiczeń, podać parę przykładów a na końcu wskazać kilka aplikacji, które być wyjściowym przykładem do rozpoczęcia programowania własnych aplikacji. Gotowi? A więc zaczynamy ...

Czym jest programowanie obiektowe?
Niektórzy mówią, że programowanie obiektowe jest po prostu innym sposobem patrzenia na świat. Wszystko może przedstawić za pomocą metod, które dany obiekt wykonuje oraz właściwości, które posiada.
Jak już się domyślisz programowanie obiektowe składa się z obiektów, które posiadają pewne metody oraz właściwości. A skąd się biorą obiekty? Są to po prostu egzemplarze gotowych klas. Można powiedzieć, że klasa jest szablonem dla obiektu. Z jednej klasy można utworzyć dowolną ilość obiektu.
Jeśli chodzi o relacje zachodzące między obiektami to analogią może być przykład budowy domu. Hydraulicy są odpowiedzialni za instalacje wodną. Elektrycy kładą instalację elektryczną. Hydraulicy nie interesują się tym, czy obwód elektryczni w sypialni jest 10-amperowy czy 20-amperowy. Natomiast interesuje ich wszystko to co ma związek z instalacją wodną, więc jeżeli elektrycy wykonują pracę, która ma wpływ na instalację wodną to muszą o tym poinformować hydraulików. Generalny wykonawca domy nie wchodzi w szczegóły pracy każdej grupy pracowników, jednak musi dopilnować aby każdy podwykonawca zrobił to co do niego należy.
Programowanie obiektowe działa podobnie, ponieważ poszczególne obiekty ukrywają przed sobą szczegóły wykonywanych działań. Ważne aby zwracały potrzebne nam dane.

Jeżeli zrozumiesz jak dokładnie działają klasy, obiekty oraz metody, które one wykonują to najtrudniejsza część zrozumienia programowania obiektowego jest już za Tobą. Prawdopodobnie cała trudność zrozumienia tego polega na tym, że koncepcja programowania obiektowego jest sprzeczna z zasadami programowania proceduralnego, czyli programowania korzystającego z funkcji i globalnych struktur danych. Z czasem zauważysz, że programowanie obiektowe ma kilka ogromnych zalet w porównaniu z proceduralnym, a w dużych aplikacjach stało się już standardem.

niedziela, 19 lipca 2009

Wysyłanie powiadomień przez program CRON

Kontynuując poprzedni wątek chciałbym pokazać jak za pomocą programu CRON można pocztą wysyłać różnego rodzaju powiadomienia.

Poniżej znajduje się skrypt, który każdego dnia będzie do użytkownika wysyłał pocztą informację na temat aktualnego użycia dysku:

0 0 * * * echo -e "To jest :\n\n `df -h`" | mail -s 'Raport o dysku dla `hostname` z dnia `date`' user@mail.pl

Tutaj korzystamy z polecenia echo, które tworzy treść wiadomości. Raport jest tworzony za pomocą polecenia df, które wyświetla ilość wolnego miejsca na dysku. Następnie wiadomość jest przesyłania poleceniem mail w którym dodatkowo używamy pleceń date i hostname aby utworzyć temat wiadomości.

Oczywiście takie rozwiązanie jest jak najbardziej prawidłowe jednak ma pewną wadę. Przy wielu takich wpisach plik crontab stanie się bardzo nieczytelny. Lepszym rozwiązaniem jest utworzenie zewnętrznego skryptu, który za pomocą crontab będzie wykonywany.
Analogicznie dla powyższego przykładu nasz skrypt będzie miał następującą treść:

#!/bin/bash
echo -e "Podsumowanie wykorzystania dysków:\n\n `df -h`" | mail -s 'Raport o dysku dla `hostname` z dnia `date`' user@mail.pl


Wystarczy zapisać skrypt np. w /home/user/raport.sh i dodać następujący wpis do crontab:

0 0 * * * test -x /home/user/raport.sh || exit 0; /home/user/daport.sh

Polecenie test -x sprawdza czy plik istnieje i czy jest wykonywalny. Jeżeli by się okazało, że nie jest to nie zostanie podjęta próba jego uruchomienia przez system. Dzięki temu nie będą nas dręczyć niepotrzebne komunikaty o błędach.

Automatyzacja zadań w Linuksie, czyli jak korzystać z programu CRON

Na pewno większość z was uważa, że komputer powinien ułatwiać życie, automatyzować pracę. I to oczywiście jest prawdą. Jednak aby zautomatyzować sobie prace zupełnie należy się dowiedzieć trochę na temat programów, które pozwalają na taką automatyzację.
Jeżeli mówimy o Linuksie to najlepszym przykładem będzie program CRON.

Jest to jedno z podstawowych narzędzi w systemach unikosowych. Niektórzy porównują działanie tego programu do budzika. Po prostu ustawiamy godzinę i częstotliwość oraz wybieramy, który skrypt lub program ma się wykonywać w danym czasie.

Program cron korzysta ze specjalnego pliku o nazwie crontab. To właśnie w tym pliku zapisywane są informacje na temat tego co i kiedy ma zostać uruchomione. Aby zobaczyć i edytować zawartość tego pliku należy wydać komendę:

crontab -e

Jeżeli uruchamiasz ten plik po raz pierwszy to prawdopodobnie będzie pusty. Czasami jednak są tam umieszczone różne zadania, które system dodaje automatycznie.

Opiszę działanie poszczególnych wpisów w crontab na przykładzie:

45 4 1 * * /home/user/backup.sh

W tym przykładzie zostanie uruchomiony skrypt o nazwie backup.sh o godzinie 4:45 pierwszego dnia każdego miesiąca. To właśnie lewa część powyższego wpisu jest odpowiedzialna za czas uruchomienia, natomiast prawa strona jest odwołaniem do skryptu, który ma się wykonać.

Liczby i gwiazdki przedstawiają okresy czasowe zaczynając od minuty. Tak więc po kolei mamy minuty, godziny, dni miesiąca, numer miesiąca (1-12) i dzień tygodnia. Dzień tygodnia jest liczony od 0 i oznacza ono niedziele.

Gwiazdki postawione przy numerze miesiąca i dniu tygodnia oznaczają, że nie mają one wpływu na uruchamianie skryptu. Skrypt zostanie uruchomione zawsze pierwszego dnia miesiąca o godzinie 4:45.

Po edycji pliku należy go zapisać i zamknąć. Od teraz obowiązuje nowa tablica crontab. Jeżeli chcemy tylko wyświetlić naszą tablicę crontab, musimy wydać następujące polecenie:

crontab -l

Istnieje również możliwość usunięcia całej tablicy:

crontab -r

Oczywiście powyższy opis pomoże na pewno w sytuacjach, gdy chcemy uruchomiać nasz skrypt w określonych przedziałach czasu, ale co zrobić gdy musimy go wykonać w przedziałach czasu niekoniecznie równomiernych? Można utworzyć kilka zadać crontab ale to jest bardziej pracochłonne. Jest szybszy sposób. Można wykorzystać specjalne symbole do dokładniejszego określenia czasu. Mamy do dyspozycji 3 dodatkowe symbole:

1. Przecinek (,) - za jego pomocą można określić kilka wartości w jednej kolumnie. Poniższy przykład uruchomi skrypt każdego 1,4 i 26 dnia każdego miesiąca:

4 45 1,4,26 * * /home/user/backup.sh

2. Łącznik (-) - umożliwia on określanie zakresów kolumny. Poniższy wpis uruchamia skrypt codziennie przez pierwsze 15 dni każdego miesiąca:

4 45 1-15 * * /home/user/backup.sh

3. Ukośnik (/) - dzieli zakres kolumny na równe części. Poniższy zapis będzie uruchamiał dany skrypt co 15 minut:

*/15 * * * * /home/user/backup.sh

Mam nadzieję, że ten krótki opis ułatwi każdemu wprowadzanie automatyzacji we własnym systemie.