<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3842635440530228771</id><updated>2011-11-28T01:22:41.077+01:00</updated><category term='linux'/><category term='Pozycjonowanie stron'/><category term='PHP'/><category term='Programowanie obiektowe'/><category term='MySQL'/><category term='CSS'/><category term='HTML'/><category term='Networking'/><category term='Przeglądarki'/><category term='Vista.pl'/><category term='Wirtualizacja'/><category term='Cisco'/><category term='RegEx'/><category term='.htaccess'/><category term='Apache'/><category term='Windows'/><category term='Na wesoło'/><category term='JavaScript'/><category term='Blogspot'/><category term='Video'/><category term='AdWords'/><category term='Serwisy internetowe'/><category term='Google'/><category term='Polityka prywatności'/><title type='text'>Space of code...</title><subtitle type='html'>"Wszyscy wiedzą, że czegoś nie da się zrobić, aż znajduje się taki jeden, który nie wie, że się nie da, i on to robi."&lt;br&gt;
- Albert Einstein</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>81</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-4316097693153688391</id><published>2010-01-24T16:17:00.002+01:00</published><updated>2010-01-24T16:19:07.221+01:00</updated><title type='text'>Przeprowadzka na wordpressa</title><content type='html'>Zw względu na ograniczone możliwości bloggera przenoszę mój blog na wordpressa. Nowy adres to: &lt;a href="http://www.wmroczkowski.pl/"&gt;www.wmroczkowski.pl/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-4316097693153688391?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/4316097693153688391/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=4316097693153688391' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/4316097693153688391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/4316097693153688391'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2010/01/przeprowadzka-na-wordpressa.html' title='Przeprowadzka na wordpressa'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-6542853871670396031</id><published>2009-11-07T10:39:00.003+01:00</published><updated>2009-11-07T10:58:10.552+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='AdWords'/><title type='text'>Darmowe seminaria internetowe Google AdWords</title><content type='html'>Google uruchomiło darmowe seminaria internetowe AdWords. Wystarczy się zarejestrować i być online o określonej godzinie, żeby uczestniczyć. Możliwe jest również późniejsze odtworzenie seminarium. Aby uczestniczyć trzeba posiadać konto AdWords. Dostępne seminaria znajdują się pod adresem: &lt;a href="http://www.google.pl/intl/pl/adwords/webinars/#utm_source=awo&amp;utm_campaign=pl-pl-em-ecm_webinarsq409&amp;utm_medium=email"&gt;&lt;blockquote&gt;&lt;/blockquote&gt;Seminaria AdWords&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Poniżej zamieszczam wideo wprowadzające:&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/MRxW-oQTH2A&amp;hl=pl&amp;fs=1&amp;hd=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/MRxW-oQTH2A&amp;hl=pl&amp;fs=1&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-6542853871670396031?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/6542853871670396031/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=6542853871670396031' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6542853871670396031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6542853871670396031'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/11/darmowe-seminaria-internetowe-adwords.html' title='Darmowe seminaria internetowe Google AdWords'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-9221592277997710717</id><published>2009-11-07T09:10:00.005+01:00</published><updated>2009-11-14T15:21:00.056+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>[MySQL] Zapisywanie wyników zapytania bezpośrednio do pliku</title><content type='html'>Oprócz zapisywania wyników zapytać SQL do zmiennych i wyświetlania ich na ekranie możemy też zapisywać je bezpośrednio do pliku. Zakładając, że mamy prostą tabelę:&lt;br /&gt;&lt;pre name="code" class="sql"&gt;&lt;br /&gt;CREATE TABLE `user` (&lt;br /&gt;  `id` int(11) NOT NULL,&lt;br /&gt;  `name` varchar(45) character set latin2 NOT NULL,&lt;br /&gt;  `surname` varchar(70) character set latin2 NOT NULL&lt;br /&gt;) ENGINE=MyISAM DEFAULT CHARSET=utf8;&lt;br /&gt;&lt;br /&gt;INSERT INTO `user` VALUES (1, 'Name1', 'Surname1');&lt;br /&gt;INSERT INTO `user` VALUES (2, 'Name2', 'Surname2');&lt;br /&gt;INSERT INTO `user` VALUES (3, 'Name3', 'Surname3');&lt;br /&gt;INSERT INTO `user` VALUES (4, 'Name4', 'Surname4');&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Możemy użyć następującego zapytania aby zapisać wynik do pliku:&lt;br /&gt;&lt;pre name="code" class="sql"&gt;&lt;br /&gt;SELECT * INTO OUTFILE 'nazwa_pliku.txt' FIELDS TERMINATED BY '\t' ESCAPED BY '\\' LINES TERMINATED BY '\n' FROM user&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Takie zapytanie spowoduje zapisanie pliku 'nazwa_pliku.txt' do folderu bazy danych np. MySQL\Data\Nazwa_bazy. Aby zapisać plik w innym miejscu należy w nazwie podać pełną ścieżkę. Analogicznie działa funkcja LOAD DATA INFILE, która importuje z pliku tektowego rekordy do bazy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-9221592277997710717?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/9221592277997710717/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=9221592277997710717' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/9221592277997710717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/9221592277997710717'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/11/mysql-zpisywanie-wynikow-zapytania.html' title='[MySQL] Zapisywanie wyników zapytania bezpośrednio do pliku'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-6624187385582779892</id><published>2009-11-01T08:39:00.008+01:00</published><updated>2009-11-03T19:10:18.502+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>[PHP] Jednakowe formatowanie waluty dla każdej wartości</title><content type='html'>Jeżeli posiadasz stronę na której często umieszczasz w treści wartości podane w określonej walucie to na pewno chcesz żeby takie wpisy były zawsze w tym samym formacie. Przydaję się to zwłaszcza kiedy wyświetlasz wiele takich wartości np. z bazy danych. Warto zastanowić się wtedy nad napisaniem prostej funkcji, która załatwi tą sprawę za Ciebie. W poniższym przykładzie zostało zastosowane formatowanie z wykorzystaniem dwóch miejsc po przecinku oraz kropki. Również, jeżeli wartość jest na minusie to najpierw wyświetlamy znak minus, następnie walutę oraz wartość. Przykład jest prosty, więc nie wymaga większego tłumaczenia.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="php"&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;function formatCurrencyEuro($value, $symbol='€')&lt;br /&gt;{&lt;br /&gt;$value = trim($value); //usuwamy ewentualne puste miejsca&lt;br /&gt;if (is_numeric($value)){ //sprawdzamy czy wartość jest liczbą&lt;br /&gt;if ($value &gt;= 0){&lt;br /&gt;$output = $symbol . number_format($value,2);&lt;br /&gt;} else {&lt;br /&gt;$output = '-' . $symbol . number_format(abs($value), 2);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;return $output;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;echo "Do zapłaty jest ".formatCurrencyEuro(23);&lt;br /&gt;echo "Twoje saldo to ".formatCurrencyEuro(-56);&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-6624187385582779892?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/6624187385582779892/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=6624187385582779892' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6624187385582779892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6624187385582779892'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/11/php-jednakowe-formatowanie-waluty-dla.html' title='[PHP] Jednakowe formatowanie waluty dla każdej wartości'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-6250290749245391547</id><published>2009-10-14T19:53:00.003+02:00</published><updated>2009-10-14T20:02:58.254+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Networking'/><title type='text'>Błąd 0x000003eb w Vista podczas dodawania drukarki zainstalowanej w sieci na XP</title><content type='html'>Dzisiaj miałem pewien problem z dodaniem drukarki w domenie. Drukarka była podłączona lokalnie do hosta z systemem Windows XP. Natomiast ja chciałem ją również dodać jednostki z systemem Windows Vista. Każda próba dodania drukarki kończyła komunikatem o błędzie "Błąd 0x000003eb". Próbowałem dodać ją przez otoczenie sieciowe oraz przez kontrolkę drukarki. Nic nie działało. Okazało się jednak, że jest pewne "dziwne" rozwiązanie problemu.&lt;br /&gt;Poniżej w krokach przedstawiam co należy w takiej sytuacji zrobić:&lt;br /&gt;1. Wchodzimy do panelu sterowania.&lt;br /&gt;2. Klikamy w drukarki.&lt;br /&gt;3. Dodaj drukarkę.&lt;br /&gt;4. Wybieramy "Dodaj drukarkę lokalną".&lt;br /&gt;5. Następnie "Utwórz nowy port / Typ portu: Local port".&lt;br /&gt;6. I następnie w polu wprowadź nazwę portu podajemy adres drukarki, którą chcemy podłączyć, czyli \\adres_lub_nazwa_komputera\nazwa_drukarki.&lt;br /&gt;&lt;br /&gt;Nie udało mi się znaleźć w internecie informacji na temat przyczyn występowania ale powyższe czynności powinny pomóc. Panowie z Microsoftu powinni bardziej się postarać albo chociaż zamieścić w necie bardziej szczegółową informację dotyczącą występujących w ich systemach błędów.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-6250290749245391547?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/6250290749245391547/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=6250290749245391547' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6250290749245391547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6250290749245391547'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/10/bad-0x000003eb-w-vista-podczas.html' title='Błąd 0x000003eb w Vista podczas dodawania drukarki zainstalowanej w sieci na XP'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-1896168374886039791</id><published>2009-10-14T19:35:00.003+02:00</published><updated>2009-10-14T19:52:23.297+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Zaczynasz z Google Adwords?  Zacznij od 5 wskazówek adwords zapewniających sukces</title><content type='html'>Jeżeli chcesz rozpocząć nowe kampanie Google Adwords to proponuję zacząć od krótkiego filmu zrobionego przez Google na temat skutecznej reklamy w tym systemie. Wskazówki mogą się wydawać oczywiste ale są naprawdę istotne. &lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/KC_A1Lhe8Tk&amp;hl=pl&amp;fs=1&amp;hd=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/KC_A1Lhe8Tk&amp;hl=pl&amp;fs=1&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-1896168374886039791?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/1896168374886039791/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=1896168374886039791' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1896168374886039791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1896168374886039791'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/10/zaczynasz-z-google-adwords-zacznij-od-5.html' title='Zaczynasz z Google Adwords?  Zacznij od 5 wskazówek adwords zapewniających sukces'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-6179206163051696412</id><published>2009-09-23T16:58:00.003+02:00</published><updated>2009-09-23T17:05:14.362+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>[PHP] Jak zablokować wgrywanie na serwer plików przekraczających określony rozmiar</title><content type='html'>Jeżeli posiadamy portal na którym użytkownicy wgrywają na serwer różnego rodzaju pliku na pewno chcielibyśmy wprowadzić limit wielkości plików, które wgrywają. Zakładając, że w naszym formularzu znajduje się input, który wygląda mniej więcej tak:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="html"&gt;&lt;br /&gt;&lt;input type="file" name="plik" size="37"&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Możemy dołożyć następujący kod PHP:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="php"&gt;&lt;br /&gt;  $file_size = $_FILES['plik']['size'];&lt;br /&gt;   // podajemy wielkość w Bajtach, więc zakładając że blokujemy wszystko powyżej 500KB&lt;br /&gt;        if($file_size &lt; 512000) {&lt;br /&gt;/*&lt;br /&gt;Tutaj kod który zapisuje pliki na serwerze&lt;br /&gt;*/&lt;br /&gt;}&lt;br /&gt;else echo "Plik przekracza 500 KB";&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-6179206163051696412?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/6179206163051696412/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=6179206163051696412' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6179206163051696412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6179206163051696412'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/09/php-jak-zablokowac-wgrywanie-na-serwer.html' title='[PHP] Jak zablokować wgrywanie na serwer plików przekraczających określony rozmiar'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-3075777827184736366</id><published>2009-09-23T06:37:00.003+02:00</published><updated>2009-09-23T06:49:30.333+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>[PHP] Jak wygenerować losowy ciąg znaków - generowanie hasła</title><content type='html'>Jeżeli chcemy umieścić na naszej stronie skrypt generujący losowe hasła dla naszych użytkowników, możemy to zrobić na kilka sposobów. Poniżej znajduje się prosty i szybki sposób, który polega na zaszyfrowaniu daty i losowej liczby oraz obcięcie wyniku do wybranej długości. Poniżej przykład zastosowania. Zostanie wygenerowane hasło, które ma 9 znaków.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="php"&gt;&lt;br /&gt;  function haslo($limit)&lt;br /&gt;{&lt;br /&gt;  return substr(md5(date("d.m.Y.H.i.s").rand(1,1000000)) , 0 , $limit);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$new_pass = haslo(9);&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-3075777827184736366?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/3075777827184736366/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=3075777827184736366' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/3075777827184736366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/3075777827184736366'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/09/php-jak-wygenerowac-losowy-ciag-znakow.html' title='[PHP] Jak wygenerować losowy ciąg znaków - generowanie hasła'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-7164376191872052355</id><published>2009-09-07T20:23:00.002+02:00</published><updated>2009-09-07T20:28:13.403+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Dlaczego układ na tabelkach jest głupi?</title><content type='html'>Poniżej znajduje się bardzo interesująca prezentacja tłumacząca dlaczego układ na tabelkach jest głupi :) Zapraszam do lektury!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://osiolki.net/tabelki/"&gt;Dlaczego układ na tabelkach jest głupi?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-7164376191872052355?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/7164376191872052355/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=7164376191872052355' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/7164376191872052355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/7164376191872052355'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/09/dlaczego-ukad-na-tabelkach-jest-gupi.html' title='Dlaczego układ na tabelkach jest głupi?'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-2540027398781505188</id><published>2009-09-06T20:35:00.004+02:00</published><updated>2010-01-24T11:23:52.489+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programowanie obiektowe'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Programowanie obiektowe (cz. 9) - klasa sprawdzająca poprawność maski sieciowej - przykład</title><content type='html'>Wykorzystując poznane do tej pory wiadomości możemy napisać np. klasę, która będzie sprawdzała poprawność maski sieciowej. Przykład takiej klasy znajduje się poniżej. W komentarzach jest opis. Jeżeli coś jest nie jasne to proszę pytać w komentarzach.&lt;br /&gt;&lt;pre name="code" class="php"&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;class Netmask {&lt;br /&gt;&lt;br /&gt;private $_netmask;&lt;br /&gt;&lt;br /&gt;//funkcja zamieniająca numeryczny adres maski na binarny&lt;br /&gt;private function dqtobin($dqin) {&lt;br /&gt;        $dq = explode(".",$dqin);&lt;br /&gt;        for ($i=0; $i&lt;4 ; $i++) {&lt;br /&gt;//oktet nie może przekraczać 255. Maska to binarny rząd jedynek lub zer&lt;br /&gt;//Do ciągu binarnego pasuje również 256, więc trzeba je wykluczyć &lt;br /&gt;        if ($dq[$i] &lt;= 255) { &lt;br /&gt;           $bin[$i]=str_pad(decbin($dq[$i]), 8, "0", STR_PAD_LEFT);&lt;br /&gt;           }&lt;br /&gt;           else&lt;br /&gt;           {&lt;br /&gt;           throw new Exception ("Oktet numer $i wynosi $dq[$i], więc jest większy niż 255.");&lt;br /&gt;           }&lt;br /&gt;           &lt;br /&gt;        }&lt;br /&gt;        return implode("",$bin);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//sprawdzamy format zapisu adresu i przypisujemy wartość do właściwości _netmask&lt;br /&gt;public function setNetmask($netmask) {&lt;br /&gt;if (!ereg('^([0-9]{1,3}\.){3}[0-9]{1,3}$', $netmask)) {&lt;br /&gt;throw new Exception ("Format maski $netmask jest nieprawidłowy.");&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;$this-&gt;_netmask = $netmask;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//sprawdzamy binarnie czy maska jest prawidłowa. Maska sieciowa to zawsze binarny rząd jedynek&lt;br /&gt;public function checkNetmask(){&lt;br /&gt;$bin_nmask = $this-&gt;dqtobin($this-&gt;_netmask); //zamiana na adres binarny, wywołanie metody dqtobin&lt;br /&gt;$bin_nmask_valid=rtrim($bin_nmask, "0"); //usuwamy zera z końca adresu binarnego&lt;br /&gt;&lt;br /&gt;if (!ereg("0",$bin_nmask_valid) ){ //jeżeli nie ma już żadnych zer w adresie to maska jest ok&lt;br /&gt;echo "Maska $this-&gt;_netmask jest poprawna.";&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;throw new Exception ("Maska $this-&gt;_netmask jest nieprawidłowa.");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//objekt&lt;br /&gt;$objNetmask = new Netmask();&lt;br /&gt;&lt;br /&gt;$objNetmask-&gt; setNetmask('1.0.0.0');&lt;br /&gt;$objNetmask-&gt; checkNetmask();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-2540027398781505188?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/2540027398781505188/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=2540027398781505188' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2540027398781505188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2540027398781505188'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/09/programowanie-obiektowe-cz-9-klasa.html' title='Programowanie obiektowe (cz. 9) - klasa sprawdzająca poprawność maski sieciowej - przykład'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-1125742706260444734</id><published>2009-07-25T10:49:00.004+02:00</published><updated>2009-07-25T11:37:28.569+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programowanie obiektowe'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Programowanie obiektowe (cz. 8) - ochrona dostępu do zmiennych składowych</title><content type='html'>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ą &lt;span style="font-style:italic;"&gt;public $name&lt;/span&gt; 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 &lt;span style="font-style:italic;"&gt;name&lt;/span&gt;.&lt;br /&gt;Można w łatwy sposób obejść tą niedogodność. Wystarczy zawsze implementować właściwości jako funkcje (metody) o nazwach np. &lt;span style="font-style:italic;"&gt;getNazwaWlasciwosci(wartosc)&lt;/span&gt; lub &lt;span style="font-style:italic;"&gt;setNazwaWlasciwosci(wartosc)&lt;/span&gt;. Tego rodzaju funkcje znane są jako &lt;span style="font-weight:bold;"&gt;metody dostępowe&lt;/span&gt;.&lt;br /&gt;Żeby lepiej poznać ich działanie zróbmy mały przykład:&lt;br /&gt;&lt;br /&gt;Tak jak w poprzednim przykładach tworzymy plik &lt;span style="font-style:italic;"&gt;class.First.php&lt;/span&gt; i wprowadzamy poniższy kod:&lt;br /&gt;&lt;pre name="code" class="php"&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;class First {&lt;br /&gt;&lt;br /&gt;private $_name;&lt;br /&gt;&lt;br /&gt;public function sayWelcome() {&lt;br /&gt;echo "Witaj {$this-&gt;getName()}!";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public function getName() {&lt;br /&gt;return  $this-&gt;_name;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public function setName($name) {&lt;br /&gt;if (!is_string($name) || strlen($name) == 0) {&lt;br /&gt;throw new Exception("Wartość zmiennej jest niepoprawna");&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;$this-&gt;_name = $name;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Następnie tak jak ostatnio w pliku &lt;span style="font-style:italic;"&gt;testfirst.php&lt;/span&gt; umieszczamy następujący kod:&lt;br /&gt;&lt;pre name="code" class="php"&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;require_once('class.First.php');&lt;br /&gt;&lt;br /&gt;$objFirst = new First();&lt;br /&gt;$objFirst-&gt;setName('Wojtek');&lt;br /&gt;$objFirst-&gt;sayWelcome();&lt;br /&gt;&lt;br /&gt;//a teraz spróbujemy wygenerować błąd&lt;br /&gt;&lt;br /&gt;$objFirst-&gt;setName(108);&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;W tym przykładzie zmieniliśmy status zmiennej &lt;span style="font-style:italic;"&gt;public&lt;/span&gt; na &lt;span style="font-style:italic;"&gt;private&lt;/span&gt;, 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 &lt;span style="font-style:italic;"&gt;private&lt;/span&gt; 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 &lt;span style="font-style:italic;"&gt;public&lt;/span&gt;. Chodzi o metody &lt;span style="font-style:italic;"&gt;setName()&lt;/span&gt; oraz &lt;span style="font-style:italic;"&gt;getName()&lt;/span&gt; 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 &lt;span style="font-style:italic;"&gt;public&lt;/span&gt; przed funkcjami. Jest to jednak dobry nawyk.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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 &lt;span style="font-style:italic;"&gt;get&lt;/span&gt; i &lt;span style="font-style:italic;"&gt;set&lt;/span&gt;. 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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-1125742706260444734?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/1125742706260444734/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=1125742706260444734' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1125742706260444734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1125742706260444734'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/07/programowanie-obiektowe-cz-8-ochrona.html' title='Programowanie obiektowe (cz. 8) - ochrona dostępu do zmiennych składowych'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-3517307424859276739</id><published>2009-07-24T12:52:00.006+02:00</published><updated>2009-07-24T13:36:08.745+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programowanie obiektowe'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Programowanie obiektowe (cz. 7) - dodawanie właściwości</title><content type='html'>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ą &lt;span style="font-style:italic;"&gt;$speed&lt;/span&gt; to właściwość będzie nazywała się &lt;span style="font-style:italic;"&gt;speed&lt;/span&gt;. &lt;br /&gt;Wróćmy do kodu, który edytowaliśmy wcześniej. Otwórzmy plik &lt;span style="font-style:italic;"&gt;class.First.php&lt;/span&gt; i wprowadźmy tam następujące zmiany:&lt;br /&gt;&lt;pre name="code"  class="php"&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;class First {&lt;br /&gt;public $name;&lt;br /&gt;&lt;br /&gt;function sayWelcome() {&lt;br /&gt;echo "Witaj $this-&gt;name!";&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Jak wynika z powyższego kody aby utworzyć właściwość klasy &lt;span style="font-style:italic;"&gt;First&lt;/span&gt; o nazwie &lt;span style="font-style:italic;"&gt;name&lt;/span&gt; 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 &lt;span style="font-weight:bold;"&gt;-&gt;&lt;/span&gt;.&lt;br /&gt;W następnym przykładzie utworzymy obiekt, który będzie odwoływał się do naszej nowej właściwości.&lt;br /&gt;Utwórzmy, więc nowy plik o nazwie &lt;span style="font-style:italic;"&gt;testfirst.php&lt;/span&gt; o następującym kodzie:&lt;br /&gt;&lt;pre name="code" class="php"&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;require_once('class.First.php');&lt;br /&gt;&lt;br /&gt;$objFirst = new First();&lt;br /&gt;$objFirst -&gt; name = 'Wojtek';&lt;br /&gt;&lt;br /&gt;$objSecond = new First();&lt;br /&gt;$objSecond -&gt; name = 'Paweł';&lt;br /&gt;&lt;br /&gt;$objFirst -&gt; sayWelcome();&lt;br /&gt;$objSecond -&gt; sayWelcome();&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Spróbujmy wykonać powyższy kod. Jeżeli wszystko dobrze zrobiliśmy to w przeglądarce powinien pojawić się komunikat &lt;span style="font-style:italic;"&gt;Witaj Wojtek!Witaj Paweł!&lt;/span&gt;. Ten przykład powinien dać już ogólne wyobrażenie o działaniu metod i właściwości.&lt;br /&gt;&lt;br /&gt;Przy deklaracji właściwości użyliśmy słowa kluczowego &lt;span style="font-style:italic;"&gt;public&lt;/span&gt;, 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 &lt;span style="font-style:italic;"&gt;name&lt;/span&gt;.  Teraz metoda &lt;span style="font-style:italic;"&gt;sayWelcome&lt;/span&gt; zamiast pobierać parametr, pobiera wartość &lt;span style="font-style:italic;"&gt;name&lt;/span&gt; właściwości.&lt;br /&gt;&lt;br /&gt;Użyliśmy również zmiennej &lt;span style="font-style:italic;"&gt;$this&lt;/span&gt;, która informuje metodę obiektu, że ma pobrać wartość &lt;span style="font-style:italic;"&gt;name&lt;/span&gt; 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 &lt;span style="font-style:italic;"&gt;$this&lt;/span&gt;, wiemy, ze chodzi o właśnie przetwarzany obiekt. Widać to wyraźnie w poprzednim przykładzie, gdzie obiekt &lt;span style="font-style:italic;"&gt;$objFirst&lt;/span&gt; i obiekt &lt;span style="font-style:italic;"&gt;objSecond&lt;/span&gt; wyświetlają różne komunikaty, mimo że obydwa mają w sobie zawarty kod &lt;span style="font-style:italic;"&gt;echo "Witaj $this-&gt;name!";&lt;/span&gt;. Jednak wcześniej miały przypisane różne wartości właściwości &lt;span style="font-style:italic;"&gt;name&lt;/span&gt;.&lt;br /&gt;Należy również pamiętać, że dostęp do właściwości wymaga tylko jednego $. Należy napisać &lt;span style="font-style:italic;"&gt;$this-&gt;name&lt;/span&gt;, a nie &lt;span style="font-style:italic;"&gt;$this-&gt;$name&lt;/span&gt;. Zmienna jest deklarowane na początku klasy jao &lt;span style="font-style:italic;"&gt;public $name&lt;/span&gt;.&lt;br /&gt;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 &lt;span style="font-weight:bold;"&gt;wewnętrznymi zmiennymi składowymi&lt;/span&gt; klasy. Więcej na ich temat opowiem w kolejnym poście.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-3517307424859276739?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/3517307424859276739/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=3517307424859276739' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/3517307424859276739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/3517307424859276739'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/07/programowanie-obiektowe-cz-7-dodawanie.html' title='Programowanie obiektowe (cz. 7) - dodawanie właściwości'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-3120767358339888669</id><published>2009-07-24T11:29:00.002+02:00</published><updated>2009-07-24T12:48:59.210+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programowanie obiektowe'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Programowanie obiektowe (cz. 6) - dodawanie  metody</title><content type='html'>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.&lt;br /&gt;&lt;pre name="code" class="php"&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;class First {&lt;br /&gt;function sayWelcome($name) {&lt;br /&gt;echo "Witaj $name!";&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;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 &lt;span style="font-style:italic;"&gt;$objFirst&lt;/span&gt; należy zastosować operator &lt;span style="font-style:italic;"&gt;-&gt;&lt;/span&gt;, który umożliwia dostęp do danej metody.&lt;br /&gt;&lt;pre name="code" class="php"&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;require_once('class.First.php');&lt;br /&gt;$objFirst = new First();&lt;br /&gt;$objFirst-&gt;sayWelcome('Wojtek');&lt;br /&gt;&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Po wykonaniu powyższego kodu powinien się wyświetlić komunikat &lt;span style="font-style:italic;"&gt;Witaj Wojtek!&lt;/span&gt;. Operator &lt;span style="font-weight:bold;"&gt;-&gt;&lt;/span&gt; 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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-3120767358339888669?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/3120767358339888669/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=3120767358339888669' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/3120767358339888669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/3120767358339888669'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/07/programowanie-obiektowe-cz-6-dodawanie.html' title='Programowanie obiektowe (cz. 6) - dodawanie  metody'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-4703215518839814100</id><published>2009-07-23T15:41:00.013+02:00</published><updated>2009-07-23T16:08:00.483+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogspot'/><title type='text'>Instalacja i konfiguracja SyntaxHighlighter na bloggerze (blogspot), czyli jak pokolorować swój kod</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;Poniżej kroki, które należy wykonać:&lt;br /&gt;1. Logujemy się na nasze&lt;span style="font-style:italic;"&gt; konto na blogger.com.&lt;br /&gt;2. Wchodzimy w zakładkę Układ&lt;/span&gt; a następnie &lt;span style="font-style:italic;"&gt;Edytuj kod HTML&lt;/span&gt;.&lt;br /&gt;3. W sekcji &amp;lt;head&amp;gt; umieszczamy następujący kod:&lt;br /&gt;&lt;pre name="code" class="html"&gt;&lt;br /&gt;&amp;lt;link href='http://syntaxhighlighter.googlecode.com/svn/trunk/Styles/SyntaxHighlighter.css' rel='stylesheet' type='text/css'/&gt;&lt;br /&gt;&amp;lt;script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shCore.js'/&gt; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;pre name="code" class="html"&gt;&lt;br /&gt;&amp;lt;script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushBash.js'/&gt;  &lt;br /&gt;&lt;br /&gt;&amp;lt;script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCSharp.js'/&gt;  &lt;br /&gt;&lt;br /&gt;&amp;lt;script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCpp.js'/&gt;  &lt;br /&gt;&lt;br /&gt;&amp;lt;script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCss.js'/&gt;  &lt;br /&gt;&lt;br /&gt;&amp;lt;script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushDelphi.js'/&gt;  &lt;br /&gt;&lt;br /&gt;&amp;lt;script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushGroovy.js'/&gt;  &lt;br /&gt;&lt;br /&gt;&amp;lt;script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushJScript.js'/&gt;  &lt;br /&gt;&lt;br /&gt;&amp;lt;script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushJava.js'/&gt;  &lt;br /&gt;&lt;br /&gt;&amp;lt;script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushPhp.js'/&gt;  &lt;br /&gt;&lt;br /&gt;&amp;lt;script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushPython.js'/&gt;  &lt;br /&gt;&lt;br /&gt;&amp;lt;script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushRuby.js'/&gt;  &lt;br /&gt;&lt;br /&gt;&amp;lt;script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushScala.js'/&gt;  &lt;br /&gt;&lt;br /&gt;&amp;lt;script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushSql.js'/&gt;  &lt;br /&gt;&lt;br /&gt;&amp;lt;script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushVb.js'/&gt;  &lt;br /&gt;&lt;br /&gt;&amp;lt;script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushXml.js'/&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;5. Ostatni już wpis należy dodać na końcu ciała strony, czyli przed tagiem &amp;lt;/body&gt;:&lt;br /&gt;&lt;pre name="code" class="html"&gt;&lt;br /&gt; &amp;lt;script language='javascript'&gt;&lt;br /&gt;    dp.SyntaxHighlighter.BloggerMode();  &lt;br /&gt;    dp.SyntaxHighlighter.HighlightAll('code');  &lt;br /&gt;  &amp;lt;/script&gt;  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;6. Zapisujemy szablon strony i gotowe.&lt;br /&gt;&lt;br /&gt;Teraz, za pomocą tagów &lt;span style="font-style:italic;"&gt;pre&lt;/span&gt; lub &lt;span style="font-style:italic;"&gt;textarea&lt;/span&gt; możesz dodawać swój kod. Poniżej przykład:&lt;br /&gt;&lt;pre name="code" class="html"&gt;&lt;br /&gt;  &amp;lt;pre name="code" class="php"&gt;Twój kod&amp;lt;/pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Pamiętaj, że podczas pisania kodu należy zamienić znak &lt; wpisem "&amp;amp;lt;" a znak &gt; "&amp;amp;gt;"&lt;br /&gt;W przeciwnym wypadku interpreter bloggera będzie próbował uruchomić Twój kod.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;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.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-4703215518839814100?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/4703215518839814100/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=4703215518839814100' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/4703215518839814100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/4703215518839814100'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/07/instalacja-i-konfiguracja.html' title='Instalacja i konfiguracja SyntaxHighlighter na bloggerze (blogspot), czyli jak pokolorować swój kod'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-2086734386595851352</id><published>2009-07-23T12:44:00.018+02:00</published><updated>2009-07-23T15:39:03.010+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programowanie obiektowe'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Programowanie obiektowe (cz. 5) - tworzenie klasy i obiektu</title><content type='html'>Teraz wprowadzimy już trochę praktyki. Zaczniemy od utworzenia pliku o nazwie &lt;span style="font-style:italic;"&gt;class.First.php&lt;/span&gt;:&lt;br /&gt;&lt;pre name="code" class="php"&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;class First {&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;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 &lt;span style="font-style:italic;"&gt;class&lt;/span&gt; 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 &lt;span style="font-style:italic;"&gt;class.Nazwaklasy.php&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Aby utworzyć obiekt należy napisać następujący kod:&lt;br /&gt;&lt;pre name="code" class="php"&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;require_once('class.First.php');&lt;br /&gt;$objFirst = new First();&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Przy tworzeniu nowego obiektu należy upewnić się, że został dołączony plik z klasą. Nowe obiekty tworzymy poprzez użycie operatora &lt;span style="font-style:italic;"&gt;new&lt;/span&gt; po czym podajemy nazwę klasy oraz parę nawiasów (podobnie jak przy wykonywaniu funkcji). Wynik tej operacji, czyli egzemplarz klasy &lt;span style="font-style:italic;"&gt;First&lt;/span&gt; zostanie przypisany do zmiennej &lt;span style="font-style:italic;"&gt;$objFirst&lt;/span&gt;. Od tej chwili można wywoływać metody objektu &lt;span style="font-style:italic;"&gt;$objFirst&lt;/span&gt; i odczytywać lub ustawiać jego właściwości. Oczywiście muszą one się znajdować w obiekcie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-2086734386595851352?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/2086734386595851352/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=2086734386595851352' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2086734386595851352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2086734386595851352'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/07/programowanie-obiektowe-cz-5-tworzenie.html' title='Programowanie obiektowe (cz. 5) - tworzenie klasy i obiektu'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-6095256355860967005</id><published>2009-07-23T12:21:00.003+02:00</published><updated>2009-07-23T12:44:00.507+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programowanie obiektowe'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Programowanie obiektowe (cz. 4) - obiekty</title><content type='html'>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ę &lt;span style="font-weight:bold;"&gt;tworzeniem egzemplarza&lt;/span&gt; i wymaga dwóch rzeczy:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Miejsca w pamięci przeznaczonego dla obiektu. PHP przydziela je automatycznie.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Danych, które zostaną przypisane do właściwości obiektu.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-6095256355860967005?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/6095256355860967005/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=6095256355860967005' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6095256355860967005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6095256355860967005'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/07/programowanie-obiektowe-cz-4-obiekty.html' title='Programowanie obiektowe (cz. 4) - obiekty'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-2332521638767366042</id><published>2009-07-22T16:50:00.002+02:00</published><updated>2009-07-22T17:11:51.398+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programowanie obiektowe'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Programowanie obiektowe (cz. 3) - klasy</title><content type='html'>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, &lt;span style="font-weight:bold;"&gt;właściwości&lt;/span&gt;. Dany samochód potrafi różne rzeczy robić, np. hamować, przyspieszać, trąbić, sygnalizować kierunek, itp. To są jego zachowania, lub w terminologii obiektowej &lt;span style="font-weight:bold;"&gt;metody&lt;/span&gt;. 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.&lt;br /&gt;&lt;br /&gt;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ę &lt;span style="font-style:italic;"&gt;Car&lt;/span&gt; a w niej takie właściwości jak &lt;span style="font-style:italic;"&gt;color&lt;/span&gt; i &lt;span style="font-style:italic;"&gt;weight&lt;/span&gt; to kolor danego samochodu może się zmienić, np. po lakierowaniu ale jego waga się nie zmieni.&lt;br /&gt;&lt;br /&gt;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ść &lt;span style="font-style:italic;"&gt;maxspeed&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;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ę &lt;span style="font-style:italic;"&gt;accelerate&lt;/span&gt;, która sprawdzi poziom paliwa naszego obiektu &lt;span style="font-style:italic;"&gt;Car&lt;/span&gt; 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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-2332521638767366042?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/2332521638767366042/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=2332521638767366042' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2332521638767366042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2332521638767366042'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/07/programowanie-obiektowe-cz-3-klasy.html' title='Programowanie obiektowe (cz. 3) - klasy'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-6577663869997113110</id><published>2009-07-20T16:42:00.002+02:00</published><updated>2009-07-20T16:45:59.377+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='Przeglądarki'/><title type='text'>Opera Unite, opis i instalacja</title><content type='html'>&lt;span style="font-weight:bold;"&gt;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.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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ą.&lt;br /&gt;&lt;br /&gt;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&lt;br /&gt;internetowej.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Jak korzystać z Opera Unite:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   1. Pobierz przeglądarkę zawierającą technologię Opera Unite ze strony http://labs.opera.com/.&lt;br /&gt;   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.&lt;br /&gt;   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/.&lt;br /&gt;   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.&lt;br /&gt;   5. Możesz także zobaczyć, którzy znajomi używają usługi Opera Unite na twojej domowej stronie My Opera Unite.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Obecnie dostępne są następujące serwisy Opera Unite:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;    * 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.&lt;br /&gt;    * 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.&lt;br /&gt;    * 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ę.&lt;br /&gt;    * 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.&lt;br /&gt;    * 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.&lt;br /&gt;    * 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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;źródło: http://www.chip.pl/news/internet-i-sieci/sieci-p2p/2009/06/opera-unite-czyli-wspoldzielenie-plikow-w-przegladarce&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dodatkowo poniżej zamieszczam video przedstawiające instalacje i konfiguracje Opera Unite:&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/y0WPSSRgoGY&amp;hl=pl&amp;fs=1&amp;hd=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/y0WPSSRgoGY&amp;hl=pl&amp;fs=1&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-6577663869997113110?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/6577663869997113110/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=6577663869997113110' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6577663869997113110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6577663869997113110'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/07/opera-unite-opis-i-instalacja.html' title='Opera Unite, opis i instalacja'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-2446862626042936541</id><published>2009-07-20T16:25:00.003+02:00</published><updated>2009-07-20T16:33:20.520+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Eric Higgins, webmaster Google, radzi jak przyspieszyć skrypty PHP</title><content type='html'>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: &lt;a href="http://code.google.com/intl/pl/speed/"&gt;code.google.com/speed&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Sibg0T3wKs4&amp;hl=pl&amp;fs=1&amp;hd=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Sibg0T3wKs4&amp;hl=pl&amp;fs=1&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-2446862626042936541?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/2446862626042936541/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=2446862626042936541' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2446862626042936541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2446862626042936541'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/07/eric-higgins-webmaster-google-radzi-jak.html' title='Eric Higgins, webmaster Google, radzi jak przyspieszyć skrypty PHP'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-4632074228926946600</id><published>2009-07-20T16:13:00.003+02:00</published><updated>2009-07-20T16:46:12.393+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Serwisy internetowe'/><category scheme='http://www.blogger.com/atom/ns#' term='Networking'/><title type='text'>Jak odblokować stronę zablokowaną przez administratora sieci?</title><content type='html'>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ę &lt;a href="http://www.2unblocksites.com/"&gt;www.2unblocksites.com&lt;/a&gt; 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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-4632074228926946600?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/4632074228926946600/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=4632074228926946600' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/4632074228926946600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/4632074228926946600'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/07/jak-odblokowac-strone-zablokowana-przez.html' title='Jak odblokować stronę zablokowaną przez administratora sieci?'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-2848204607427297953</id><published>2009-07-20T13:00:00.003+02:00</published><updated>2009-07-20T14:46:42.194+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programowanie obiektowe'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Programowanie obiektowe (cz. 2) - podstawowe pojęcia</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Klasy&lt;/span&gt; - są wzorcami lub szablonami dla obiektów. W klasach znajduje się kod definiujący właściwości i metody.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Obiekty&lt;/span&gt; - są utworzone egzemplarze klasy, które przechowują wszelkie wewnętrzne dane i informacje o stanie potrzebne dla funkcjonowania aplikacji.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Dziedziczenie&lt;/span&gt; - polega na utworzeniu nowej klasy na bazie już istniejącej.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Polimorfizm&lt;/span&gt; - 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".&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Interfejsy&lt;/span&gt; - 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.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Hermetyzacja&lt;/span&gt; - jest to zastrzeżenie dostępu do wewnętrznych danych obiektu.&lt;br /&gt;&lt;br /&gt;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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-2848204607427297953?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/2848204607427297953/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=2848204607427297953' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2848204607427297953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2848204607427297953'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/07/programowanie-obiektowe-cz-2-podstawowe.html' title='Programowanie obiektowe (cz. 2) - podstawowe pojęcia'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-2523607026319563111</id><published>2009-07-20T12:41:00.003+02:00</published><updated>2009-07-20T13:05:25.429+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programowanie obiektowe'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Programowanie obiektowe (cz. 1) - wstęp</title><content type='html'>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 ...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Czym jest programowanie obiektowe?&lt;/span&gt;&lt;br /&gt;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.&lt;br /&gt;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.&lt;br /&gt;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.&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-2523607026319563111?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/2523607026319563111/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=2523607026319563111' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2523607026319563111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2523607026319563111'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/07/programowanie-obiektowe-wstep-cz-1.html' title='Programowanie obiektowe (cz. 1) - wstęp'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-6521098527571876722</id><published>2009-07-19T13:43:00.002+02:00</published><updated>2009-07-19T13:55:58.881+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Wysyłanie powiadomień przez program CRON</title><content type='html'>Kontynuując poprzedni wątek chciałbym pokazać jak za pomocą programu CRON można pocztą wysyłać różnego rodzaju powiadomienia.&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;0 0 * * * echo -e "To jest     :\n\n `df -h`" | mail -s 'Raport o dysku dla `hostname` z dnia `date`' user@mail.pl&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;Analogicznie dla powyższego przykładu nasz skrypt będzie miał następującą treść:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;#!/bin/bash&lt;br /&gt;echo -e "Podsumowanie wykorzystania dysków:\n\n `df -h`" | mail -s 'Raport o dysku dla `hostname` z dnia `date`' user@mail.pl&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Wystarczy zapisać skrypt np. w /home/user/raport.sh i dodać następujący wpis do crontab:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;0 0 * * * test -x /home/user/raport.sh || exit 0; /home/user/daport.sh&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Polecenie &lt;span style="font-style:italic;"&gt;test -x&lt;/span&gt; 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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-6521098527571876722?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/6521098527571876722/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=6521098527571876722' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6521098527571876722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6521098527571876722'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/07/wysyanie-powiadomien-przez-program-cron.html' title='Wysyłanie powiadomień przez program CRON'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-2408508996730344394</id><published>2009-07-19T13:13:00.002+02:00</published><updated>2009-07-19T13:41:28.282+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Automatyzacja zadań w Linuksie, czyli jak korzystać z programu CRON</title><content type='html'>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ę.&lt;br /&gt;Jeżeli mówimy o Linuksie to najlepszym przykładem będzie program CRON. &lt;br /&gt;&lt;br /&gt;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. &lt;br /&gt;&lt;br /&gt;Program cron korzysta ze specjalnego pliku o nazwie &lt;span style="font-style:italic;"&gt;crontab&lt;/span&gt;. 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ę:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;crontab -e&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Opiszę działanie poszczególnych wpisów w crontab na przykładzie:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;45 4 1 * * /home/user/backup.sh&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;W tym przykładzie zostanie uruchomiony skrypt o nazwie &lt;span style="font-style:italic;"&gt;backup.sh&lt;/span&gt; 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ć. &lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;crontab -l&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Istnieje również możliwość usunięcia całej tablicy:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;crontab -r&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;4 45 1,4,26 * * /home/user/backup.sh&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;2. Łącznik (-) - umożliwia on określanie zakresów kolumny. Poniższy wpis uruchamia skrypt codziennie przez pierwsze 15 dni każdego miesiąca:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;4 45 1-15 * * /home/user/backup.sh&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;3. Ukośnik (/) - dzieli zakres kolumny na równe części. Poniższy zapis będzie uruchamiał dany skrypt co 15 minut:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;*/15 * * * * /home/user/backup.sh&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Mam nadzieję, że ten krótki opis ułatwi każdemu wprowadzanie automatyzacji we własnym systemie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-2408508996730344394?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/2408508996730344394/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=2408508996730344394' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2408508996730344394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2408508996730344394'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/07/automatyzacja-zadan-w-linuksie-czyli.html' title='Automatyzacja zadań w Linuksie, czyli jak korzystać z programu CRON'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-1399001147944293904</id><published>2009-06-20T07:58:00.006+02:00</published><updated>2009-06-20T08:18:36.456+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Szablon strony HTML z podziałem na nagłówek, treść, prawe menu i stopkę zbudowany za pomocą CSS</title><content type='html'>Dzisiaj pokażę jak zrobić prosty i przejrzysty szablon strony zbudowany za pomocą CSS. Szablon będzie wyglądał mniej więcej tak:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_zmRa1FbVcEc/Sjx7DRg3yqI/AAAAAAAAAGI/p5p7BbrjPKg/s1600-h/szablon_css.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 239px;" src="http://3.bp.blogspot.com/_zmRa1FbVcEc/Sjx7DRg3yqI/AAAAAAAAAGI/p5p7BbrjPKg/s400/szablon_css.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5349285753580407458" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aby go zrobić zaczniemy od utworzenie struktury strony, a więc od utworzenia pliku index.html. Kod wygląda następująco:&lt;br /&gt;&lt;br /&gt;&lt;div class="html4strict" style="white-space: nowrap;border: 1px dotted #a0a0a0; font-family: 'Courier New', Courier, monospace; font-size: 110%; background-color: #f0f0f0; margin: 0; line-height: 110%; padding: 0;color: #0000bb;"&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc0"&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc0"&gt; &amp;nbsp; &amp;nbsp;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/html.html"&gt;&lt;span class="kw2"&gt;html&lt;/span&gt;&lt;/a&gt; xmlns&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt; &lt;span class="kw3"&gt;lang&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;pl&amp;quot;&lt;/span&gt; xml:&lt;span class="kw3"&gt;lang&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;pl&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/head.html"&gt;&lt;span class="kw2"&gt;head&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/title.html"&gt;&lt;span class="kw2"&gt;title&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;Szablon strony w CSS&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/title.html"&gt;&lt;span class="kw2"&gt;title&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/meta.html"&gt;&lt;span class="kw2"&gt;meta&lt;/span&gt;&lt;/a&gt; &lt;span class="kw3"&gt;http-equiv&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Content-Type&amp;quot;&lt;/span&gt; &lt;span class="kw3"&gt;content&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;text/html; charset=UTF-8&amp;quot;&lt;/span&gt; &lt;span class="sy0"&gt;/&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/meta.html"&gt;&lt;span class="kw2"&gt;meta&lt;/span&gt;&lt;/a&gt; &lt;span class="kw3"&gt;http-equiv&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;Content-Language&amp;quot;&lt;/span&gt; &lt;span class="kw3"&gt;content&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;pl&amp;quot;&lt;/span&gt; &lt;span class="sy0"&gt;/&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/link.html"&gt;&lt;span class="kw2"&gt;link&lt;/span&gt;&lt;/a&gt; &lt;span class="kw3"&gt;rel&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt; &lt;span class="kw3"&gt;type&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt; &lt;span class="kw3"&gt;href&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;style.css&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/head.html"&gt;&lt;span class="kw2"&gt;head&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/body.html"&gt;&lt;span class="kw2"&gt;body&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/div.html"&gt;&lt;span class="kw2"&gt;div&lt;/span&gt;&lt;/a&gt; &lt;span class="kw3"&gt;id&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;naglowek&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/h1.html"&gt;&lt;span class="kw2"&gt;h1&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;Nagłówek strony&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/h1.html"&gt;&lt;span class="kw2"&gt;h1&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/div.html"&gt;&lt;span class="kw2"&gt;div&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/div.html"&gt;&lt;span class="kw2"&gt;div&lt;/span&gt;&lt;/a&gt; &lt;span class="kw3"&gt;id&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;menu&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/h2.html"&gt;&lt;span class="kw2"&gt;h2&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;Menu:&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/h2.html"&gt;&lt;span class="kw2"&gt;h2&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/ul.html"&gt;&lt;span class="kw2"&gt;ul&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/li.html"&gt;&lt;span class="kw2"&gt;li&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;Link 1&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/li.html"&gt;&lt;span class="kw2"&gt;li&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/li.html"&gt;&lt;span class="kw2"&gt;li&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;Link 2&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/li.html"&gt;&lt;span class="kw2"&gt;li&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/li.html"&gt;&lt;span class="kw2"&gt;li&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;Link 3&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/li.html"&gt;&lt;span class="kw2"&gt;li&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/li.html"&gt;&lt;span class="kw2"&gt;li&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;Link 4&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/li.html"&gt;&lt;span class="kw2"&gt;li&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/li.html"&gt;&lt;span class="kw2"&gt;li&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;Link 5&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/li.html"&gt;&lt;span class="kw2"&gt;li&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/li.html"&gt;&lt;span class="kw2"&gt;li&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;Link 6&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/li.html"&gt;&lt;span class="kw2"&gt;li&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/li.html"&gt;&lt;span class="kw2"&gt;li&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;Link 7&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/li.html"&gt;&lt;span class="kw2"&gt;li&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/ul.html"&gt;&lt;span class="kw2"&gt;ul&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/div.html"&gt;&lt;span class="kw2"&gt;div&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/div.html"&gt;&lt;span class="kw2"&gt;div&lt;/span&gt;&lt;/a&gt; &lt;span class="kw3"&gt;id&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;tresc&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/p.html"&gt;&lt;span class="kw2"&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt; Tutaj umieszczamy główną treść strony, a więc wszystko co ma znaleźć się &lt;br /&gt; w środkowej części naszej strony.&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/p.html"&gt;&lt;span class="kw2"&gt;p&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/div.html"&gt;&lt;span class="kw2"&gt;div&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/div.html"&gt;&lt;span class="kw2"&gt;div&lt;/span&gt;&lt;/a&gt; &lt;span class="kw3"&gt;id&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;stopka&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="sc1"&gt;&amp;amp;copy;&lt;/span&gt; 2009 &lt;span class="sc2"&gt;&amp;lt;&lt;a href="http://december.com/html/4/element/a.html"&gt;&lt;span class="kw2"&gt;a&lt;/span&gt;&lt;/a&gt; &lt;span class="kw3"&gt;href&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;http://spaceofcode.blogspot.com&amp;quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;spaceofcode.blogspot.com&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/a.html"&gt;&lt;span class="kw2"&gt;a&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/div.html"&gt;&lt;span class="kw2"&gt;div&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/body.html"&gt;&lt;span class="kw2"&gt;body&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&amp;lt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;a href="http://december.com/html/4/element/html.html"&gt;&lt;span class="kw2"&gt;html&lt;/span&gt;&lt;/a&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;A teraz przechodzimy do określenia prezentacji strony, a więc tworzymy plik style.css i umieszczamy w nim następujący kod:&lt;br /&gt;&lt;br /&gt;&lt;div class="css" style="white-space: nowrap;border: 1px dotted #a0a0a0; font-family: 'Courier New', Courier, monospace; font-size: 110%; background-color: #f0f0f0; margin: 0; line-height: 110%; padding: 0;color: #0000bb;"&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;body&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;background-color&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re0"&gt;#b5a789&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;font-family&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; Georgia&lt;span class="sy0"&gt;,&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;Times New Roman&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt; Times&lt;span class="sy0"&gt;,&lt;/span&gt; &lt;span class="kw2"&gt;serif&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="kw1"&gt;font-size&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; small&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;margin&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;0px&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="re0"&gt;#naglowek&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;background-color&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re0"&gt;#675c47&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;margin&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;10px&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;height&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;70px&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;text-align&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt;&lt;span class="kw2"&gt;center&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="kw1"&gt;padding&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;20px&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="re0"&gt;#tresc&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="kw1"&gt;background-color&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re0"&gt;#efe5d0&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;font-size&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;&lt;span class="nu0"&gt;105&lt;/span&gt;%&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;padding&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;15px&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;margin&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;0px&lt;/span&gt; &lt;span class="re3"&gt;250px&lt;/span&gt; &lt;span class="re3"&gt;10px&lt;/span&gt; &lt;span class="re3"&gt;10px&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;line-height&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;&lt;span class="nu0"&gt;150&lt;/span&gt;%&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="re0"&gt;#menu&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;background-color&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re0"&gt;#efe5d0&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="kw1"&gt;font-size&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;&lt;span class="nu0"&gt;105&lt;/span&gt;%&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;padding&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;15px&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;margin&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;0px&lt;/span&gt; &lt;span class="re3"&gt;10px&lt;/span&gt; &lt;span class="re3"&gt;10px&lt;/span&gt; &lt;span class="re3"&gt;10px&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;width&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;200px&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;float&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="kw1"&gt;right&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;a&lt;span class="re2"&gt;:link&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;color&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt;&lt;span class="re0"&gt;#b76666&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;a&lt;span class="re2"&gt;:visted&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;color&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re0"&gt;#675c47&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="re0"&gt;#stopka&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;background-color&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re0"&gt;#675c47&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;color&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re0"&gt;#efe5d0&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="kw1"&gt;text-align&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="kw2"&gt;center&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;padding&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;15px&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;margin&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;10px&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;font-size&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re3"&gt;&lt;span class="nu0"&gt;90&lt;/span&gt;%&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;clear&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="kw1"&gt;right&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="re0"&gt;#stopka&lt;/span&gt; a&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;color&lt;/span&gt;&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="re0"&gt;#efe5d0&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Standarodowo, nic skomplikowanego. Jeżeli są jakieś pytania to proszę pytać.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-1399001147944293904?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/1399001147944293904/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=1399001147944293904' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1399001147944293904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1399001147944293904'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/06/szablon-strony-html-z-podziaem-na.html' title='Szablon strony HTML z podziałem na nagłówek, treść, prawe menu i stopkę zbudowany za pomocą CSS'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zmRa1FbVcEc/Sjx7DRg3yqI/AAAAAAAAAGI/p5p7BbrjPKg/s72-c/szablon_css.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-5670237643941499703</id><published>2009-06-19T17:06:00.005+02:00</published><updated>2009-06-19T17:20:52.873+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>[CSS] Jak zrobić w CSS poziome menu zbudowane z zakładek</title><content type='html'>Dzisiaj odrobina wizualizacji ;) Jeżeli potrzebujesz poziomego menu, które ma wygląd zakładek (jak w teczkach) to być może to będzie coś w sam raz dla Ciebie. Menu o którym mowa wygląda tak:&lt;br /&gt;&lt;iframe src="http://wojtek.mroczkowski.googlepages.com/css_menu_1.html" class="source_code" style="width: 100%; height: 10em;"&gt;&lt;/iframe&gt;&lt;br /&gt;Całość składa się tylko z listy wypunktowanej i odrobiny kodu CSS. Wydaję mi się, że nie ma tam nic trudnego, ale jakbyście mieli jakieś pytanie odnośnie do kodu to piszcie w komentarzach. Na wszystkie pytania chętnie odpowiem.&lt;br /&gt;&lt;div class="php" style="white-space: nowrap;border: 1px dotted #a0a0a0; font-family: 'Courier New', Courier, monospace; font-size: 110%; background-color: #f0f0f0; margin: 0; line-height: 110%; padding: 0;color: #0000bb;"&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;style&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;ul&lt;span class="sy0"&gt;,&lt;/span&gt; ul li &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; display&lt;span class="sy0"&gt;:&lt;/span&gt; block&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; list&lt;span class="sy0"&gt;-&lt;/span&gt;style&lt;span class="sy0"&gt;:&lt;/span&gt; none&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; margin&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; padding&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;ul &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; border&lt;span class="sy0"&gt;-&lt;/span&gt;bottom&lt;span class="sy0"&gt;:&lt;/span&gt; 1px solid &lt;span class="co2"&gt;#888;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float&lt;span class="sy0"&gt;:&lt;/span&gt; left&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; width&lt;span class="sy0"&gt;:&lt;/span&gt; 100&lt;span class="sy0"&gt;%;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; padding&lt;span class="sy0"&gt;-&lt;/span&gt;left&lt;span class="sy0"&gt;:&lt;/span&gt; 20px&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;ul li &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float&lt;span class="sy0"&gt;:&lt;/span&gt; left&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; margin&lt;span class="sy0"&gt;-&lt;/span&gt;right&lt;span class="sy0"&gt;:&lt;/span&gt; 10px&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;ul a&lt;span class="sy0"&gt;:&lt;/span&gt;&lt;a href="http://www.php.net/link"&gt;&lt;span class="kw3"&gt;link&lt;/span&gt;&lt;/a&gt;&lt;span class="sy0"&gt;,&lt;/span&gt; ul a&lt;span class="sy0"&gt;:&lt;/span&gt;visited &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; width&lt;span class="sy0"&gt;:&lt;/span&gt; 100px&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; text&lt;span class="sy0"&gt;-&lt;/span&gt;decoration&lt;span class="sy0"&gt;:&lt;/span&gt; none&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; display&lt;span class="sy0"&gt;:&lt;/span&gt; block&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; background&lt;span class="sy0"&gt;-&lt;/span&gt;color&lt;span class="sy0"&gt;:&lt;/span&gt; navy&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color&lt;span class="sy0"&gt;:&lt;/span&gt; white&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; padding&lt;span class="sy0"&gt;:&lt;/span&gt; 5px 10px&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; border&lt;span class="sy0"&gt;:&lt;/span&gt; 1px solid &lt;span class="co2"&gt;#888;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; position&lt;span class="sy0"&gt;:&lt;/span&gt; relative&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; top&lt;span class="sy0"&gt;:&lt;/span&gt; 1px&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; font&lt;span class="sy0"&gt;-&lt;/span&gt;weight&lt;span class="sy0"&gt;:&lt;/span&gt; bold&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;span class="co2"&gt;#current a {&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; background&lt;span class="sy0"&gt;-&lt;/span&gt;color&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="co2"&gt;#fff;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; border&lt;span class="sy0"&gt;-&lt;/span&gt;bottom&lt;span class="sy0"&gt;-&lt;/span&gt;color&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="co2"&gt;#fff;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color&lt;span class="sy0"&gt;:&lt;/span&gt; black&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;ul a&lt;span class="sy0"&gt;:&lt;/span&gt;hover &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; background&lt;span class="sy0"&gt;-&lt;/span&gt;color&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="co2"&gt;#fff;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; border&lt;span class="sy0"&gt;-&lt;/span&gt;bottom&lt;span class="sy0"&gt;-&lt;/span&gt;color&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="co2"&gt;#fff;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; color&lt;span class="sy0"&gt;:&lt;/span&gt; black&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; border&lt;span class="sy0"&gt;-&lt;/span&gt;bottom&lt;span class="sy0"&gt;:&lt;/span&gt; 1px solid &lt;span class="co2"&gt;#888;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;/&lt;/span&gt;style&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;ul&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;li&lt;span class="sy0"&gt;&amp;gt;&amp;lt;&lt;/span&gt;a href&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;#&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;Zapasy&lt;span class="sy0"&gt;&amp;lt;/&lt;/span&gt;a&lt;span class="sy0"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;li&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;li id&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;current&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;&amp;gt;&amp;lt;&lt;/span&gt;a href&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;#&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;Zakupy&lt;span class="sy0"&gt;&amp;lt;/&lt;/span&gt;a&lt;span class="sy0"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;li&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;li&lt;span class="sy0"&gt;&amp;gt;&amp;lt;&lt;/span&gt;a href&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;#&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;Sprzedaż&lt;span class="sy0"&gt;&amp;lt;/&lt;/span&gt;a&lt;span class="sy0"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;li&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;li&lt;span class="sy0"&gt;&amp;gt;&amp;lt;&lt;/span&gt;a href&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;#&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;Logistyka&lt;span class="sy0"&gt;&amp;lt;/&lt;/span&gt;a&lt;span class="sy0"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;li&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;/&lt;/span&gt;ul&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-5670237643941499703?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/5670237643941499703/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=5670237643941499703' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/5670237643941499703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/5670237643941499703'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/06/jak-zrobic-w-css-poziome-menu-zbudowane.html' title='[CSS] Jak zrobić w CSS poziome menu zbudowane z zakładek'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-5596129580443590218</id><published>2009-06-18T18:02:00.003+02:00</published><updated>2009-06-18T18:12:24.009+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><title type='text'>[JS] Jak zrobić podwójny formularz wyboru w którym drugie pole zmienia się w zależności od wyboru w pierwszym</title><content type='html'>Ostatnio potrzebowałem formularza z dwoma polami wybory w których drugie pole zmienia się w zależności od wybranej wartości w pierwszym polu. W moim przypadku chodziło o to, żeby mieć możliwość wyboru domyślnej klasy maski sieci w pierwszej polu, tak żeby w drugim polu wyświetlały się dostępny. Rozwiązałem to w następujący sposób:&lt;br /&gt;&lt;br /&gt;&lt;div class="php" style="white-space: nowrap;border: 1px dotted #a0a0a0; font-family: 'Courier New', Courier, monospace; font-size: 110%; background-color: #f0f0f0; margin: 0; line-height: 110%; padding: 0;color: #0000bb;"&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;form name&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;form&amp;quot;&lt;/span&gt; action&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;index.php&amp;quot;&lt;/span&gt; method&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;get&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;select name&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;classes&amp;quot;&lt;/span&gt; onChange&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;switch_m(this.options.selectedIndex)&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;option&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;Klasa A&lt;span class="sy0"&gt;&amp;lt;/&lt;/span&gt;option&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;option&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;Klasa B&lt;span class="sy0"&gt;&amp;lt;/&lt;/span&gt;option&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;option&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;Klasa C&lt;span class="sy0"&gt;&amp;lt;/&lt;/span&gt;option&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;/&lt;/span&gt;select&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;select name&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;mask&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;select&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;input type&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;submit&amp;quot;&lt;/span&gt; value&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;wyślij&amp;quot;&lt;/span&gt; &lt;span class="sy0"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;/&lt;/span&gt;form&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;&amp;lt;script language&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;javascript&amp;quot;&lt;/span&gt; type&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;!--&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;function&lt;/span&gt; switch_m&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;wybor&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; l2&lt;span class="sy0"&gt;=&lt;/span&gt;document&lt;span class="sy0"&gt;.&lt;/span&gt;form&lt;span class="sy0"&gt;.&lt;/span&gt;mask&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;i&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;i&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;l2&lt;span class="sy0"&gt;.&lt;/span&gt;options&lt;span class="sy0"&gt;.&lt;/span&gt;length&lt;span class="sy0"&gt;;&lt;/span&gt;i&lt;span class="sy0"&gt;++&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; l2&lt;span class="sy0"&gt;.&lt;/span&gt;options&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;i&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw4"&gt;null&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;i&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;i&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;wybor&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;length&lt;span class="sy0"&gt;;&lt;/span&gt;i&lt;span class="sy0"&gt;++&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; l2&lt;span class="sy0"&gt;.&lt;/span&gt;options&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;i&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;wybor&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;i&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;value&lt;span class="sy0"&gt;,&lt;/span&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;wybor&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;i&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;text&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;ile_lista1&lt;span class="sy0"&gt;=&lt;/span&gt;document&lt;span class="sy0"&gt;.&lt;/span&gt;form&lt;span class="sy0"&gt;.&lt;/span&gt;classes&lt;span class="sy0"&gt;.&lt;/span&gt;options&lt;span class="sy0"&gt;.&lt;/span&gt;length&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; &lt;a href="http://www.php.net/array"&gt;&lt;span class="kw3"&gt;Array&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;ile_lista1&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;i&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;i&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;ile_lista1&lt;span class="sy0"&gt;;&lt;/span&gt;i&lt;span class="sy0"&gt;++&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;i&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; &lt;a href="http://www.php.net/array"&gt;&lt;span class="kw3"&gt;Array&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;0&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;0&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;8&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.0.0.0&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;0&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;1&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;9&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.128.0.0&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;0&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;2&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;10&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.192.0.0&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;0&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;3&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;11&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.224.0.0&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;0&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;4&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;12&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.240.0.0&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;0&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;5&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;13&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.248.0.0&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;0&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;6&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;14&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.252.0.0&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;0&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;7&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;15&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.254.0.0&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;1&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;0&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;16&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.255.0.0&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;1&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;1&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;17&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.255.128.0&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;1&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;2&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;18&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.255.192.0&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;1&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;3&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;19&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.255.224.0&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;1&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;4&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;20&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.255.240.0&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;1&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;5&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;21&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.255.248.0&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;1&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;6&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;22&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.255.252.0&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;1&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;7&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;23&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.255.254.0&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;2&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;0&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;24&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.255.255.0&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;2&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;1&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;25&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.255.255.128&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;2&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;2&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;26&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.255.255.192&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;2&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;3&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;27&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.255.255.224&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;2&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;4&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;28&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.255.255.240&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;2&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;5&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;29&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.255.255.248&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;2&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;6&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;30&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.255.255.252&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;opcje&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;2&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;7&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="kw2"&gt;new&lt;/span&gt; Option&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;31&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;255.255.255.254&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;switch_m&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;0&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="co1"&gt;// --&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="kw2"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-5596129580443590218?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/5596129580443590218/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=5596129580443590218' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/5596129580443590218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/5596129580443590218'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/06/js-jak-zrobic-podwojny-formularz-wyboru.html' title='[JS] Jak zrobić podwójny formularz wyboru w którym drugie pole zmienia się w zależności od wyboru w pierwszym'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-7303525893242003416</id><published>2009-05-28T21:51:00.003+02:00</published><updated>2009-05-28T21:59:17.849+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>[HTML] Jak ustawić przkierowanie na naszej stronie dla użytkowników Internet Explorer</title><content type='html'>Jeżeli masz problem na swojej stronie związany np. ze źle interpretowanym kodem CSS w przeglądarce Internet Explorer i za cholerę nie możesz tego poprawić tak aby to działało w IE to może lepszym sposobem będzie przekierowanie użytkowników IE na stronę z komunikatem o tym, że Twoja strona nie obsługuję tej przeglądarki i prośbą o uruchomienie Twojej strony w innej przeglądarce. To może zapobiec uciekaniu z krzykiem wszystkich tych, którzy używają IE.&lt;br /&gt;Aby to zrobić wystarczy wpisać w nagłówku strony następujący kod:&lt;br /&gt;&lt;div class="php" style="white-space: nowrap;border: 1px dotted #a0a0a0; font-family: 'Courier New', Courier, monospace; font-size: 110%; background-color: #f0f0f0; margin: 0; line-height: 110%; padding: 0;color: #0000bb;"&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;!--&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw1"&gt;if&lt;/span&gt; IE&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;meta http&lt;span class="sy0"&gt;-&lt;/span&gt;equiv&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;refresh&amp;quot;&lt;/span&gt; content&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;0;url=ifie.php&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="br0"&gt;&amp;#91;&lt;/span&gt;&lt;span class="kw1"&gt;endif&lt;/span&gt;&lt;span class="br0"&gt;&amp;#93;&lt;/span&gt;&lt;span class="sy0"&gt;--&amp;gt;&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-7303525893242003416?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/7303525893242003416/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=7303525893242003416' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/7303525893242003416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/7303525893242003416'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/05/html-jak-ustawic-przkierowanie-na.html' title='[HTML] Jak ustawić przkierowanie na naszej stronie dla użytkowników Internet Explorer'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-7316936590223912663</id><published>2009-05-27T17:57:00.006+02:00</published><updated>2009-05-27T18:13:06.425+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><title type='text'>[JS] Jak utworzyć przycisk, który będzie ukrywał/wyświetlał wpisane hasło w polu input</title><content type='html'>Często, jeżeli gdzie wpisujemy długie i skomplikowane hasła zdarza się, że zapomni co już wpisaliśmy i aby być pewnym, że podane przez nas hasło będzie poprawnym usuwamy cały wpis i przystępujemy do ponownego wpisywania hasła. Możemy pomóc naszym użytkownikom poprzez dodanie przycisku, który za pomocą prostej funkcji wyświetli podgląd wpisanego do tej pory hasła. Standardowo pole w którym wpisujemy hasła wygląda tak:&lt;br /&gt;&lt;form&gt;&lt;p&gt;&lt;input type="password" id="passwd"&gt;&lt;input id="button" type="button" value="Zobacz" onclick="change_pass('passwd')"&gt;&lt;/p&gt;&lt;/form&gt;&lt;br /&gt;Aby uruchomić przycisk "Zobacz" należy napisać nasz formularz oraz skrypt JS w następującej formie. Analizę skryptu zostawiam waszej wyobraźni.&lt;br /&gt;&lt;br /&gt;&lt;div class="php" style="border: 1px dotted rgb(160, 160, 160); margin: 0pt; padding: 0pt; white-space: nowrap; font-family: 'Courier New',Courier,monospace; font-size: 110%; background-color: rgb(240, 240, 240); line-height: 110%; color: rgb(0, 0, 187);"&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;script type&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"text/javascript"&lt;/span&gt;&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;function&lt;/span&gt; change_pass&lt;span class="br0"&gt;(&lt;/span&gt;id&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="br0"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;var&lt;/span&gt; old &lt;span class="sy0"&gt;=&lt;/span&gt; document&lt;span class="sy0"&gt;.&lt;/span&gt;getElementById&lt;span class="br0"&gt;(&lt;/span&gt;id&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;var&lt;/span&gt; new_value &lt;span class="sy0"&gt;=&lt;/span&gt; old&lt;span class="sy0"&gt;.&lt;/span&gt;value&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;var&lt;/span&gt; new_pass &lt;span class="sy0"&gt;=&lt;/span&gt; document&lt;span class="sy0"&gt;.&lt;/span&gt;createElement&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st_h"&gt;'input'&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw2"&gt;var&lt;/span&gt; button &lt;span class="sy0"&gt;=&lt;/span&gt; document&lt;span class="sy0"&gt;.&lt;/span&gt;getElementById&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st_h"&gt;'button'&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; new_pass&lt;span class="sy0"&gt;.&lt;/span&gt;type &lt;span class="sy0"&gt;=&lt;/span&gt; old&lt;span class="sy0"&gt;.&lt;/span&gt;type&lt;span class="sy0"&gt;.&lt;/span&gt;toLowerCase&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt; &lt;span class="sy0"&gt;==&lt;/span&gt; &lt;span class="st_h"&gt;'password'&lt;/span&gt; ? &lt;span class="st_h"&gt;'text'&lt;/span&gt; &lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="st_h"&gt;'password'&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; new_pass&lt;span class="sy0"&gt;.&lt;/span&gt;name &lt;span class="sy0"&gt;=&lt;/span&gt; old&lt;span class="sy0"&gt;.&lt;/span&gt;name&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; new_pass&lt;span class="sy0"&gt;.&lt;/span&gt;id &lt;span class="sy0"&gt;=&lt;/span&gt; old&lt;span class="sy0"&gt;.&lt;/span&gt;id&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; new_pass&lt;span class="sy0"&gt;.&lt;/span&gt;value &lt;span class="sy0"&gt;=&lt;/span&gt; new_value&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; old&lt;span class="sy0"&gt;.&lt;/span&gt;parentNode&lt;span class="sy0"&gt;.&lt;/span&gt;replaceChild&lt;span class="br0"&gt;(&lt;/span&gt;new_pass&lt;span class="sy0"&gt;,&lt;/span&gt; old&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; button&lt;span class="sy0"&gt;.&lt;/span&gt;value &lt;span class="sy0"&gt;=&lt;/span&gt; old&lt;span class="sy0"&gt;.&lt;/span&gt;type&lt;span class="sy0"&gt;.&lt;/span&gt;toLowerCase&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt; &lt;span class="sy0"&gt;==&lt;/span&gt; &lt;span class="st_h"&gt;'password'&lt;/span&gt; ? &lt;span class="st_h"&gt;'Ukryj'&lt;/span&gt; &lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="st_h"&gt;'Zobacz'&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="br0"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;form&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;input type&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"password"&lt;/span&gt; id&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"passwd"&lt;/span&gt;&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;input id&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"button"&lt;/span&gt; type&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"button"&lt;/span&gt; value&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"Zobacz"&lt;/span&gt; onclick&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"change_pass('passwd')"&lt;/span&gt;&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy0"&gt;&amp;lt;/&lt;/span&gt;form&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-7316936590223912663?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/7316936590223912663/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=7316936590223912663' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/7316936590223912663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/7316936590223912663'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/05/js-jak-utworzyc-przycisk-ktory-bedzie.html' title='[JS] Jak utworzyć przycisk, który będzie ukrywał/wyświetlał wpisane hasło w polu input'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-2201822570470985874</id><published>2009-05-20T17:53:00.006+02:00</published><updated>2009-05-20T18:37:00.878+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><title type='text'>[JS] Jak utworzyć prosty kalkulator w JavaScript, który będzie wymnażał np. ilość z ceną</title><content type='html'>Czasem konieczne jest dodanie w naszych aplikacjach funkcji wymnażania np. ilość z ceną. Jest to przydatne przy budowie różnego rodzaju sklepów internetowych lub aplikacji zarządzania firmą. Możemy w bardzo łatwy sposób napisać funkcję w JavaScripcie, który wymnoży nam dwie liczby, następnie zaokrągli je do dwóch miejsc po przecinku oraz wstawi w wybrane przez miejsce. Myślę, że sam kod nie wymaga zbędnego tłumaczenia i sam mówi przez siebie:&lt;br /&gt;&lt;div class="php" style="border: 1px dotted rgb(160, 160, 160); margin: 0pt; padding: 0pt; white-space: nowrap; font-family: 'Courier New',Courier,monospace; font-size: 110%; background-color: rgb(240, 240, 240); line-height: 110%; color: rgb(0, 0, 187);"&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;&amp;lt;script language&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"JavaScript"&lt;/span&gt;&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;function&lt;/span&gt; pomnoz&lt;span class="br0"&gt;(&lt;/span&gt;mnozna&lt;span class="sy0"&gt;,&lt;/span&gt; mnoznik&lt;span class="sy0"&gt;,&lt;/span&gt; input&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;var&lt;/span&gt; mnozna &lt;span class="sy0"&gt;=&lt;/span&gt; document&lt;span class="sy0"&gt;.&lt;/span&gt;getElementById&lt;span class="br0"&gt;(&lt;/span&gt;mnozna&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;value&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="kw2"&gt;var&lt;/span&gt; mnoznik &lt;span class="sy0"&gt;=&lt;/span&gt; &amp;nbsp;document&lt;span class="sy0"&gt;.&lt;/span&gt;getElementById&lt;span class="br0"&gt;(&lt;/span&gt;mnoznik&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;value&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;var&lt;/span&gt; wynik &lt;span class="sy0"&gt;=&lt;/span&gt; mnozna &lt;span class="sy0"&gt;*&lt;/span&gt; mnoznik&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;wynik &lt;span class="sy0"&gt;=&lt;/span&gt; wynik &lt;span class="sy0"&gt;*&lt;/span&gt; &lt;span class="nu0"&gt;100&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;wynik &lt;span class="sy0"&gt;=&lt;/span&gt; Math&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;a href="http://www.php.net/round"&gt;&lt;span class="kw3"&gt;round&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;(&lt;/span&gt;wynik&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;/&lt;/span&gt;&lt;span class="nu0"&gt;100&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;document&lt;span class="sy0"&gt;.&lt;/span&gt;getElementById&lt;span class="br0"&gt;(&lt;/span&gt;input&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;value&lt;span class="sy0"&gt;=&lt;/span&gt;wynik&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="br0"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;Ilość&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;input type&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"text"&lt;/span&gt; size&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"10"&lt;/span&gt; id&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"ilosc"&lt;/span&gt;&lt;br /&gt; onchange&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"pomnoz('ilosc', 'cena', 'wartosc')"&lt;/span&gt; name&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"ilosc"&lt;/span&gt;&lt;span class="sy0"&gt;&amp;gt;&amp;lt;&lt;/span&gt;br&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;Cena&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;input type&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"text"&lt;/span&gt; size&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"10"&lt;/span&gt; id&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"cena"&lt;/span&gt; &lt;br /&gt;onchange&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"pomnoz('ilosc', 'cena', 'wartosc')"&lt;/span&gt; name&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"cena"&lt;/span&gt;&lt;span class="sy0"&gt;&amp;gt;&amp;lt;&lt;/span&gt;br&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;Wartość&lt;span class="sy0"&gt;:&lt;/span&gt; &lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt;input type&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"text"&lt;/span&gt; size&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"10"&lt;/span&gt; id&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"wartosc"&lt;/span&gt; &lt;br /&gt;readonly&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"readonly"&lt;/span&gt; name&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="st0"&gt;"wartosc"&lt;/span&gt;&lt;span class="sy0"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-2201822570470985874?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/2201822570470985874/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=2201822570470985874' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2201822570470985874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2201822570470985874'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/05/js-jak-utworzyc-prosty-kalkulator-w.html' title='[JS] Jak utworzyć prosty kalkulator w JavaScript, który będzie wymnażał np. ilość z ceną'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-1222946717408681710</id><published>2009-05-10T09:44:00.009+02:00</published><updated>2009-05-10T11:14:17.796+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><title type='text'>[JS] Jak dodać do linku pytanie o potwierdzenie wejścia na stronę?</title><content type='html'>Podczas pisania aplikacji należy pamiętać, że użytkownicy często nie do końca świadomie klikają w pewne linki. Np. często kiedy użytkownik widzi ikonkę, która usuwa dane, np. klienta z naszej bazy, po prostu klika w nią będąc przekonanym, że pojawi się jeszcze przynajmniej jeden komunikat o potwierdzenie tej operacji. My jako programista musi dopilnować żeby tak rzeczywiście było.&lt;br /&gt;&lt;br /&gt;Najłatwiejszym i najszybszym rozwiązaniem jest po prostu dodanie kawałka kodu JavaScript. Może to wyglądać mniej więcej tak:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&amp;lt;a href='index.php?go=client_del&amp;id=3' onclick="return confirm('Czy na pewno usunąć klienta?')"&gt;Usuń&amp;lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;W ten sposób przed przejściem do strony client_del pojawi się komunikat z pytaniem czy na pewno chcesz to zrobić.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-1222946717408681710?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/1222946717408681710/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=1222946717408681710' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1222946717408681710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1222946717408681710'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/05/js-jak-dodac-do-linku-potwierdzenie.html' title='[JS] Jak dodać do linku pytanie o potwierdzenie wejścia na stronę?'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-5574186423798823924</id><published>2009-05-09T22:06:00.004+02:00</published><updated>2009-05-09T22:12:33.001+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>[PHP] Funkcja PHP zamieniająca adres maski na prefiks, np. 255.255.255.0 na 24</title><content type='html'>Dzisiaj kolejna dawka operacja na adresach sieciowych. Poniżej funkcja zamieniająca adres maski sieciowej na prefiks. Myślę, że komentarz w kodzie wystarczy za wszelkie wyjaśnienia.&lt;br /&gt;&lt;div class="php" style="border: 1px dotted rgb(160, 160, 160); margin: 0pt; padding: 0pt; white-space: nowrap; font-family: 'Courier New',Courier,monospace; font-size: 110%; background-color: rgb(240, 240, 240); line-height: 110%; color: rgb(0, 0, 187);"&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;&amp;lt;?php&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;function&lt;/span&gt; mask_to_prefix&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="re0"&gt;$mask&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="re0"&gt;$mask_array&lt;/span&gt; &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;a href="http://www.php.net/split"&gt;&lt;span class="kw3"&gt;split&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st_h"&gt;'[.]'&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt; &lt;span class="re0"&gt;$mask&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="co1"&gt;//dzielimy oktety i umieszczamy w tablicy&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="sy0"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="nu0"&gt;3&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="sy0"&gt;++&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="br0"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$wynik&lt;/span&gt; &lt;span class="sy0"&gt;.=&lt;/span&gt; &lt;a href="http://www.php.net/str_pad"&gt;&lt;span class="kw3"&gt;str_pad&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;a href="http://www.php.net/decbin"&gt;&lt;span class="kw3"&gt;decbin&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="re0"&gt;$mask_array&lt;/span&gt;&lt;span class="br0"&gt;[&lt;/span&gt;&lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="br0"&gt;]&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;STR_PAD_LEFT&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="co1"&gt;// zamieniamy oktety na liczby binarne&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="br0"&gt;}&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="re0"&gt;$mask_bin&lt;/span&gt; &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;a href="http://www.php.net/str_replace"&gt;&lt;span class="kw3"&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;"0"&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt; &lt;span class="st0"&gt;""&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt; &lt;span class="re0"&gt;$wynik&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="co1"&gt;//usuwamy niepotrzebne zera&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &lt;span class="re0"&gt;$mask_prefix&lt;/span&gt; &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;a href="http://www.php.net/strlen"&gt;&lt;span class="kw3"&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="re0"&gt;$mask_bin&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="co1"&gt;//liczymy ilość jedynek&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="kw1"&gt;return&lt;/span&gt; &lt;span class="re0"&gt;$mask_prefix&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;echo&lt;/span&gt; mask_to_prefix&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;"255.255.255.128"&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="sy1"&gt;?&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-5574186423798823924?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/5574186423798823924/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=5574186423798823924' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/5574186423798823924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/5574186423798823924'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/05/php-funkcja-php-zamieniajaca-adres.html' title='[PHP] Funkcja PHP zamieniająca adres maski na prefiks, np. 255.255.255.0 na 24'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-7300306543513295952</id><published>2009-05-08T18:03:00.003+02:00</published><updated>2009-05-08T18:12:25.526+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>[PHP] Fukcja PHP zamieniająca adresy IP na ich binarny odpowiednik</title><content type='html'>Witam po krótkiej przerwie! Pomimo, że nic nie pisałem to nie próżnowałem. Pracy było wiele i na pewno część z niej tutaj przedstawię. Zacznę od krótkiego skryptu napisanego w PHP, który zamienia adresy IP na format binarny.&lt;br /&gt;&lt;br /&gt;&lt;div class="php" style="border: 1px dotted rgb(160, 160, 160); margin: 0pt; padding: 0pt; white-space: nowrap; font-family: 'Courier New',Courier,monospace; font-size: 110%; background-color: rgb(240, 240, 240); line-height: 110%; color: rgb(0, 0, 187);"&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;&amp;lt;?php&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;function&lt;/span&gt; ip_to_binary&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="re0"&gt;$ip&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt; &lt;span class="br0"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="re0"&gt;$ip_array&lt;/span&gt; &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;a href="http://www.php.net/split"&gt;&lt;span class="kw3"&gt;split&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st_h"&gt;'[.]'&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt; &lt;span class="re0"&gt;$ip&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="sy0"&gt;=&lt;/span&gt;&lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="sy0"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="nu0"&gt;3&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="sy0"&gt;++&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="br0"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$result&lt;/span&gt; &lt;span class="sy0"&gt;.=&lt;/span&gt; &lt;a href="http://www.php.net/str_pad"&gt;&lt;span class="kw3"&gt;str_pad&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;a href="http://www.php.net/decbin"&gt;&lt;span class="kw3"&gt;decbin&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="re0"&gt;$ip_array&lt;/span&gt;&lt;span class="br0"&gt;[&lt;/span&gt;&lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="br0"&gt;]&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="nu0"&gt;8&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;&lt;span class="st0"&gt;"0"&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt;STR_PAD_LEFT&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;.&lt;/span&gt;&lt;span class="st0"&gt;"."&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="br0"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="re0"&gt;$result&lt;/span&gt; &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;a href="http://www.php.net/substr"&gt;&lt;span class="kw3"&gt;substr&lt;/span&gt;&lt;/a&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="re0"&gt;$result&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt; &lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt; &lt;span class="sy0"&gt;-&lt;/span&gt;&lt;span class="nu0"&gt;1&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &lt;span class="kw1"&gt;return&lt;/span&gt; &lt;span class="re0"&gt;$result&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="br0"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;echo&lt;/span&gt; ip_to_binary&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;"255.255.255.0"&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy1"&gt;?&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;We wierszu 3 wrzucamy poszczególne oktety do tablicy. Następnie we wierszu 6 zamieniamy liczby całkowite na binarne oddzielając je kropką. Każdy oktet po 8 bitów. We wierszu 8 usuwamy ostatnią, niepotrzebną kropkę w nowym adresie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-7300306543513295952?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/7300306543513295952/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=7300306543513295952' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/7300306543513295952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/7300306543513295952'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/05/tes.html' title='[PHP] Fukcja PHP zamieniająca adresy IP na ich binarny odpowiednik'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-7125849478942495961</id><published>2009-03-18T19:26:00.015+01:00</published><updated>2009-06-12T14:21:26.811+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Vista.pl'/><title type='text'>Zarabiaj na pisaniu artykułów i porad informatycznych</title><content type='html'>Ostatnio zwolniłem trochę pisanie postów na blogu bo pochłonęło mnie nowe zajęcie. Mianowicie postanowiłem dorobić trochę do skromnej pensji administratora i napisać kilka artykułów i porad w serwisie na którym za to płacą. Mianowicie chodzi o &lt;a href="http://www.vista.pl/artykuly/12736_pozycjonowanie_stron_korzystajac_z_narzedzia_keyword_tool.html"&gt;vista.pl&lt;/a&gt;.&lt;br /&gt;Na stronę trafiłem zupełnie przez przypadek i zauważyłem, że bardzo szybko zyskuje ona na popularności. Co prawda płacą za 1000 wyświetleń 2-3 zł ale po 3 tygodniach wcale nie żmudnej pracy i umieszczeniu około 20 artykułów wskoczyłem na 5 miejsce rankingu najbardziej aktywnych (?). W serwisie zarejestrowanych jest blisko 6000 użytkowników ale wygląda na to, że nie wszyscy piszą porady i artykuły.&lt;br /&gt;Na początku próbowałem wrzucać porady z własnego bloga, jakby nie było głównie w tematyce linux. Okazało się, że nie cieszą się one zbytnią popularnością. Tu domena robi swoje (vista.pl). Umieszczając artykuły i porady z zakresu środowiska okienkowego znacznie podniosłem swój rating. Jeżeli ktoś ma chwilę wolnego czasu i wiedzy którą może się podzielić to gorąco polecam. Można dodatkowo zarobić parę groszy.&lt;br /&gt;Postaram się również na blogu zamieszczać odnośniki do zamieszczonych na vista.pl artykułów i porad. Zaczynam tym postem!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://vista.pl/webmaster/161_kto_obchodzi_dzis_imieniny_prosty_skrypt_w_php_.html"&gt;Kto obchodzi dziś imieniny? - Prosty skrypt w PHP&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vista.pl/porady/723_tajniki_pliku_htaccess_budowa_od_podstaw.html"&gt;Tajniki pliku .htaccess - budowa od podstaw&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vista.pl/artykuly/12771_jak_przerobic_plik_pdf_na_doc_lub_rtf_bez_uzywania_oprogramowania_.html"&gt;Jak przerobić plik pdf na doc lub rtf bez używania oprogramowania?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/artykuly/12767_linux_na_playstation_3.html"&gt;Linux na PlayStation 3&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/artykuly/12743_denyhosts_czyli_jeszcze_bezpieczniejsze_ssh.html"&gt;DenyHosts, czyli jeszcze bezpieczniejsze SSH&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/artykuly/12736_pozycjonowanie_stron_korzystajac_z_narzedzia_keyword_tool.html"&gt;Pozycjonowanie stron korzystając z narzędzia keyword tool&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/porady/651_wyswietlanie_rozszerzen_plikow_w_windows_vista.html"&gt;Wyświetlanie rozszerzeń plików w Windows Vista&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/porady/645_uzywanie_netstat_do_wyswietlania_programow_ktore_lacza_sie_z_internetem.html"&gt;Używanie netstat do wyświetlania programów które łączą się z Internetem&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/porady/666_ustawianie_czestotliwosci_tworzenia_punktow_ochrony_systemu.html"&gt;Ustawianie częstotliwości tworzenia punktów ochrony systemu&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/porady/667_reczne_tworzenie_punktu_przywracania_systemu.html"&gt;Ręczne tworzenie punktu przywracania systemu&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/porady/644_resetowanie_zapomnianego_hasla_w_mysql.html"&gt;Resetowanie zapomnianego hasła w MySQL&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/porady/699_przywracanie_grub_a_po_reinstalacji_systemu_windows.html"&gt;Przywracanie GRUB'a po reinstalacji systemu Windows&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/porady/658_jak_wylaczyc_zapytanie_visty_o_kontynuowanie_uruchamiania_programu_kontrola_konta_uzytkownikow.html"&gt;Jak wyłączyć zapytanie Visty o kontynuowanie uruchamiania programu? - kontrola konta użytkowników&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/porady/647_jak_wylaczyc_pokazywanie_grafik_w_ikonie_folderu_.html"&gt;Jak wyłączyć pokazywanie grafik w ikonie folderu?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/porady/684_jak_wylaczyc_monit_logowania_do_systemu_windows_vista_.html"&gt;Jak wyłączyć monit logowania do systemu Windows Vista?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/porady/641_jak_wylaczyc_irytujacy_dzwiek_beep_w_vmware.html"&gt;Jak wyłączyć irytujący dzwięk "beep" w VMware&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/porady/691_jak_ustawic_wlasne_zdjecia_jako_wygaszacz_ekranu_w_windows_vista.html"&gt;Jak ustawić własne zdjęcia jako wygaszacz ekranu w Windows Vista&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/porady/672_jak_ustawic_przycisk_zasilania_aby_wylaczal_komputer_zamiast_zatrzymywac_system_.html"&gt;Jak ustawić przycisk zasilania, aby wyłączał komputer zamiast zatrzymywać system?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/porady/650_jak_ustawic_aby_dana_aplikacja_zawsze_uruchamiala_sie_w_trybie_administratora_.html"&gt;Jak ustawić aby dana aplikacja zawsze uruchamiała się w trybie Administratora?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/porady/638_jak_sciagnac_cala_strone_www_za_pomoca_wget.html"&gt;Jak ściągnąć całą stronę www za pomocą wget&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/porady/685_jak_dodac_polecenie_uruchom_do_menu_start_systemu_windows_vista_.html"&gt;Jak dodać polecenie "Uruchom" do menu Start systemu Windows Vista?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/porady/705_instalacja_napedu_dyskietek_na_ubuntu_8_10.html"&gt;Instalacja napędu dyskietek na Ubuntu 8.10&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/porady/639_blad_check_your_system_clock_podczas_instalowania_pakietow_na_linuxie.html"&gt;Błąd "Check your system clock" podczas instalowania pakietów na Linuxie&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vista.pl/porady/840_konfiguracja_zdalnego_pulpitu_w_windowsie.html"&gt;Konfiguracja zdalnego pulpitu w Windowsie&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vista.pl/porady/842_jak_zmienic_system_plikow_z_fat_na_ntfs_bez_formatowania_dysku.html"&gt;Jak zmienić system plików z FAT na NTFS bez formatowania dysku&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vista.pl/porady/843_jak_ukryc_wybrane_elementy_panelu_sterowania_aby_nie_byly_widoczne_dla_zadnego_uzytkownika.html"&gt;Jak ukryć wybrane elementy panelu sterowania, aby nie były widoczne dla żadnego użytkownika&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vista.pl/porady/844_jak_zmienic_litere_z_nazwa_partycji_.html"&gt;Jak zmienić literę z nazwą partycji?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vista.pl/porady/849_jak_wylaczyc_grafike_wyswietlajaca_pasek_wczytywania_systemu_podczas_uruchamiania_windows_vista.html"&gt;Jak wyłączyć grafikę wyświetlającą pasek wczytywania systemu podczas uruchamiania Windows Vista&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vista.pl/porady/848_jak_odzyskac_pliki_ktore_zostaly_usuniete_z_danego_katalogu.html"&gt;Jak odzyskać pliki, które zostały usunięte z danego katalogu&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-7125849478942495961?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/7125849478942495961/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=7125849478942495961' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/7125849478942495961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/7125849478942495961'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/03/zarabiaj-na-pisaniu-artykuow-i-porad.html' title='Zarabiaj na pisaniu artykułów i porad informatycznych'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-481658664242609673</id><published>2009-03-01T18:38:00.003+01:00</published><updated>2009-03-01T18:49:30.043+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Używanie netstat do wyświetlania programów które łączą się z internetem</title><content type='html'>Za pomocą programu netstat możemy wyświetlić programy, które w obecnej chwili łączą się z internetem. Wystarczy wydać bardzo proste polecenie:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;$ netstat - tpe&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Gdzie następujące parametry oznaczają:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;t&lt;/span&gt; - ogranicza wyniki do wyświetlania tylko połączeń TCP.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;p&lt;/span&gt; - wyświetla PID oraz nazwę programu, który łączy się z internetem.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;e&lt;/span&gt; - dodaje dodatkowe informacje jak np. nazwę użytkownika, który ma uruchomiona daną aplikację.&lt;br /&gt;&lt;br /&gt;Jest to bardzo przydatne przy nagłym zwolnieniu połączenia. Możemy w ten sposób łatwo odnaleźć proces, który spowalnia połączenie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-481658664242609673?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/481658664242609673/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=481658664242609673' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/481658664242609673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/481658664242609673'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/03/wyswietlanie-poaczen-internetowych-za.html' title='Używanie netstat do wyświetlania programów które łączą się z internetem'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-1206890785259875122</id><published>2009-02-25T22:03:00.003+01:00</published><updated>2009-02-27T06:08:58.920+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Ustawianie Notepad2 jako domyślnego edytora tekstu w Windows Vista</title><content type='html'>Na pewno wielu z was miało kontakt z następcą klasycznego notatnika o nazwie Notepad2. Jest to świetne narzędzie dla programistów ale nie tylko. W 100% przenośny, darmowy program do edycji tekstu, z kolorowaniem składni oraz wieloma innymi funkcjami ma jednak pewną wadę (o ile można to nazwać wadą). Mianowicie nie ma wersji instalacyjnej. To co możemy ściągnąć &lt;a href="http://www.instalki.pl/programy/download/edytory_tekstow/get.php?file=notepaddwa"&gt;tutaj&lt;/a&gt; jest plikiem wykonywalnym, który wystarczy ściągnąć i Viola! Jednak czasem nie mamy czasu aby za każdym razem przez przypadek otwierać pliki w domyślnym notatniku, uruchamiać nasz ulubiony edytor, wczytywać do niego pliki i dopiero pracować. Na pewno lepiej mieć ustawiony ten edytor jako systemowo domyślny. Jednak jak tego dokonać w Viście, która chroni swoje pliki systemowe? Wystarczy zajrzeć do uprawnień.&lt;br /&gt;Dla Visty pliki systemowe należą do wirtualnego użytkownika o nazwie TrustedInstaller. Zwyczajny administrator wbrew pozorom nie ma do nich praw. Nie może ich edytować ani usuwać. Jednak to my decydujemy co się będzie działo w naszym systemie i piekielnie chcemy podmienić Windowsowski notatnik naszym Notepadem2! Więc do dzieła:&lt;br /&gt;&lt;br /&gt;1. Uruchamiamy Panel sterowania a w nim Konta użytkowników.Klikamy odnośnik Włącz lub wyłącz funkcję Kontrola konta użytkownika. Usuwamy zaznaczenie pola wyboru Użyj funkcji Kontrola konta użytkownika, aby pomóc w ochronie komputera. Ten punkt jest opcjonalnym ale robimy to z wygody. Dzięki temu nie będziemy musieli w następnych punktach za każdym razem klikać Kontynuuj.&lt;br /&gt;&lt;br /&gt;2. Teraz otwieramy sobie dwa katalogi. \Windows oraz folder \Windows\System32. Wszystkie pozostałe etapy będziemy musieli wykonać w obydwóch katalogach.&lt;br /&gt;&lt;br /&gt;3. Klikamy prawym przyciskiem myszy plik Notepad.exe i wybieramy Właściwości. Następnie klikamy w kartę Zabezpieczenia, klikamy Zaawansowane i przechodzimy do karty Właściciel. Teraz przycisk Edytuj. Zaznaczamy wiersz Administratorzy i OK.&lt;br /&gt;&lt;br /&gt;4. Następnie klikamy ponownie prawym przyciskiem myszy plik Notepad.exe, a potem polecenie Właściwości i kartę Zabezpieczenia. Teraz klikamy Edytuj.&lt;br /&gt;&lt;br /&gt;5. Zaznaczamy wiersz Administratorzy na liście Nazwy grupy lub użytkownika. Teraz zaznaczamy pole wyboru Zezwalaj w wierszu Pełna kontrola i OK.&lt;br /&gt;&lt;br /&gt;6. Zamieniamy nazwę oryginalnego pliku Notepad.exe na Notepadx.exe. Kopiujemy plik Notepad2.exe do tego folderu i zamieniamy nazwę tego pliku na Notepad.exe.&lt;br /&gt;&lt;br /&gt;Aby powrócić do poprzednich ustawień analogicznie wykonujemy ponownie krok 1.&lt;br /&gt;&lt;br /&gt;Łatwe, szybkie i przyjemne. A ile radości daje możliwość domyślnego otwierania naszych plików  w Notepad2 ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-1206890785259875122?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/1206890785259875122/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=1206890785259875122' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1206890785259875122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1206890785259875122'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/02/ustawianie-notepad2-jako-domyslnego.html' title='Ustawianie Notepad2 jako domyślnego edytora tekstu w Windows Vista'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-318225998372756846</id><published>2009-02-14T16:37:00.004+01:00</published><updated>2009-02-14T16:45:39.226+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Podstawowe komendy edytora VI</title><content type='html'>Każdy kto od czasu do czasu posługuje się edytorem VI powinien znać kilka podstawowych komend, które wystarczą aby wykonać najważniejsze zadania. Oczywiście jeżeli, ktoś  działa na nim bardziej "profesjonalnie" to powinien korzystać z manuala. W tym poście chcę przypomnieć użytkownikom tylko główne komendy.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Pisanie:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;a&lt;/span&gt; /append/ pisanie znaków z prawej strony za kursorem&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;i&lt;/span&gt; /insert/ pisanie, począwszy od miejsca ustawienia kursora  &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Kasowanie:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;x&lt;/span&gt; kasowanie znaku w miejscu ustawienia kursora&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;X&lt;/span&gt; kasowanie takie jak backspace (z lewej strony kursora)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;dd&lt;/span&gt; usunięcie całej linii&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;D&lt;/span&gt; skasowanie tekstu od kursora do końca wiersza&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;dG&lt;/span&gt; usuń linie do samego końca zbioru  &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Zapisywanie:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ZZ&lt;/span&gt; zapisanie zbioru i wyjście z edytora&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:wq &lt;/span&gt;zapisanie zbioru i wyjście z edytora&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;:q!&lt;/span&gt; Wyjście z vi bez zapisywania zbioru  &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Poruszanie się po zbiorze:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;j&lt;/span&gt; przejście do następnej linii na dół&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;k&lt;/span&gt; przejście do następnej linii w górę&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;l&lt;/span&gt; przejście do następnego znaku w prawo&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;h&lt;/span&gt; przejście do poprzedniego znaku w lewo&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1G&lt;/span&gt; skok na początek dokumentu&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;G&lt;/span&gt; skok na koniec dokumentu&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-318225998372756846?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/318225998372756846/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=318225998372756846' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/318225998372756846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/318225998372756846'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/02/podstawowe-komendy-edytora-vi.html' title='Podstawowe komendy edytora VI'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-5810522684751502404</id><published>2009-02-09T21:12:00.006+01:00</published><updated>2009-02-09T21:23:15.660+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>[PHP] Skrypt który wyświetla na stronie kto obchodzi dziś imieniny</title><content type='html'>Witam wszystkich po małej przerwie.&lt;br /&gt;&lt;br /&gt;Dzisiaj zaczniemy od krótkiego i prostego skryptu który będzie ze strony www.calendar.sk/nameday-plplhor.php pobierał kto obchodzi dziś imieniny i wyświetlał na naszej stronie. Ponieważ dane pobierają się z innej strony, skrypt jest całkowicie bezobsługowy. Jedyny wymóg to serwer PHP na linuxie z zainstalowaną przeglądarką lynx która posłuży nam do odebrania kodu źródłowego strony. Następnie za pomocą prostego wyrażenia regularnego odnajdziemy imiona. &lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://wojtek.mroczkowski.googlepages.com/imieniny.html" class="source_code" style="width: 100%; height: 14em;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-5810522684751502404?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/5810522684751502404/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=5810522684751502404' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/5810522684751502404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/5810522684751502404'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/02/re.html' title='[PHP] Skrypt który wyświetla na stronie kto obchodzi dziś imieniny'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-4408215336210346466</id><published>2009-01-25T16:21:00.004+01:00</published><updated>2009-01-25T16:41:13.304+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Serwisy internetowe'/><title type='text'>Screentoaster.com - czyli screencasty wysokiej jakości on-line!</title><content type='html'>Ostatnio zamieściłem w poście interesujący film na temat nagrywania screencastów poprzez programy obsługiwane przez Linuxa. Okazuje się jednak, że jeżeli chcemy szybko i łatwo nagrać screencast to wcale nie musimy instalować i konfigurować programu po linuxem, ani nie musimy kupować drogiego, specjalistycznego oprogramowania pod Windowsa. Możemy zamiast tego, szybko, łatwo i co jest bardzo ważne, za darmo nagrać screencast on-line poprzez stronę http://www.screentoaster.com. &lt;br /&gt;Byłem bardzo mile zaskoczony gdy obejrzałem mój screencast w tak wysokiej jakości, że zawierał w bardzo czytelnej formie mój pulpit. Serwis dopiero niedawno wystartował ale już przyciągnął ogromne rzesze sympatyków. Jeszcze 3 tygodnie temu nie było możliwości nagrywania obrazu i dźwięku w tym samym czasie, dzisiaj jest już to możliwe. Dodatkowo pojawiła się eksperymentalna funkcja zapisywania na dysk w formacie avi. Pojawiła się również informacja, że wkrótce możliwe będzie nagrywanie obrazu bezpośrednio z serwera VNC. Istnieje również możliwość nagrywania z włączoną kamerą internetową co daje w efekcie screencast z dodatkowym małym okienkiem w którym pojawia się postać, która prowadzi dane nagranie.&lt;br /&gt;Po nagraniu screencasta mamy możliwość dodania napisów i dźwięku oraz upload w wysokiej jakości na serwer screentoastera lub do youtuba.&lt;br /&gt;Jeżeli chcecie się zarejestrować to zapraszam na stronę: &lt;a href="http://www.screentoaster.com/register"&gt;screentoaster.com/register&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-4408215336210346466?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/4408215336210346466/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=4408215336210346466' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/4408215336210346466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/4408215336210346466'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/01/screentoastercom-czyli-screencasty.html' title='Screentoaster.com - czyli screencasty wysokiej jakości on-line!'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-2144772588194616209</id><published>2009-01-02T22:59:00.002+01:00</published><updated>2009-01-02T23:05:13.269+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Jak zrobić swój screencast w Linuxie</title><content type='html'>Znalazłem bardzo ciekawe wideo na temat robienia screencastów w Linuxie. Zapraszam do oglądania.&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="505"&gt;&lt;param name="movie" value="http://www.youtube.com/v/8o-swehxoyI&amp;hl=pl&amp;fs=1&amp;color1=0x3a3a3a&amp;color2=0x999999"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/8o-swehxoyI&amp;hl=pl&amp;fs=1&amp;color1=0x3a3a3a&amp;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-2144772588194616209?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/2144772588194616209/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=2144772588194616209' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2144772588194616209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2144772588194616209'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2009/01/jak-zrobi-swj-screencast-w-linuxie.html' title='Jak zrobić swój screencast w Linuxie'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-3056268680186601412</id><published>2008-12-29T22:41:00.003+01:00</published><updated>2008-12-29T22:51:24.876+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Przywracanie GRUB'a po reinstalacji Windows'a</title><content type='html'>W przypadku gdy macie na dysku zainstalowane dwa systemy i jest to Linux oraz Windows może zdarzyć się, że któryś z nich trzeba przeinstalować. Nie ma problemu gdy jest to Linux, ale jeżeli musisz przeinstalować Windowsa to wtedy musisz się liczyć z tym, że stracisz dostęp do swojego linuxowego bootloadera, ponieważ Windows załaduje swój program bootujący.&lt;br /&gt;&lt;br /&gt;Jeżeli chcesz odzyskać swojego Gruba musisz wykonać następujące czynności:&lt;br /&gt;&lt;br /&gt;1. Odpalasz swoją ulubioną dystrybucję LiveCD.&lt;br /&gt;2. Wchodzisz do terminala i jako root uruchamiasz program konfiguracyjny Grub:&lt;br /&gt;&lt;i&gt;sudo grub&lt;/i&gt;&lt;br /&gt;3. W programie odnajdujesz dyski na których ustawione jest bootowanie:&lt;br /&gt;&lt;i&gt;find /boot/grub/stage1&lt;/i&gt;&lt;br /&gt;4. Wynikiem będzie np. coś takiego: &lt;i&gt;(hd0,6)&lt;/i&gt;. Wydajesz następujące komendy:&lt;br /&gt;&lt;i&gt;root (hd0,6)&lt;br /&gt;setup (hd0)&lt;br /&gt;quit&lt;/i&gt;&lt;br /&gt;5. Restartujesz komputer i cieszysz się z możliwości wyboru swojego ulubionego systemu.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-3056268680186601412?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/3056268680186601412/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=3056268680186601412' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/3056268680186601412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/3056268680186601412'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/12/przywracanie-gruba-po-reinstalacji.html' title='Przywracanie GRUB&apos;a po reinstalacji Windows&apos;a'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-9106711046938164468</id><published>2008-12-27T00:02:00.004+01:00</published><updated>2009-02-26T22:09:05.299+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Błąd "Check your system clock" podczas instalowania pakietów na Linuxie</title><content type='html'>Czasami może zdarzyć się, że podczas instalowania nowego programu na ze źródeł wyświetli Ci się następujący błąd: "Check your system clock". Oznacza to, że masz nieustawiony zegar systemowy i być może również sprzętowy. Należy je ustawić. Wydajemy następujące komendy:&lt;br /&gt;&lt;br /&gt;1. Ustawiamy zegar czasowy (aby zrobić to dokładnie należy wpisać czas z lekkim wyprzedzeniem, poczekać aż taki czas nadejdzie i wcisnąć enter):&lt;br /&gt;&lt;i&gt;date -s "30/12/2009 13:36:30"&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;2.Ustawiamy czas sprzętowy. Logujemy się jako root:&lt;br /&gt;&lt;i&gt;/sbin/hwclock -r&lt;br /&gt;/sbin/hwclock --adjust&lt;br /&gt;/sbin/hwclock --systohc&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;3. Restartujemy komputer i ponownie próbujemy zainstalować nie działające wcześniej pakiety.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-9106711046938164468?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/9106711046938164468/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=9106711046938164468' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/9106711046938164468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/9106711046938164468'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/12/check-your-system-clock-linux.html' title='Błąd &quot;Check your system clock&quot; podczas instalowania pakietów na Linuxie'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-5190266379349456705</id><published>2008-12-21T18:13:00.007+01:00</published><updated>2008-12-23T18:22:44.711+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pozycjonowanie stron'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Pozycjonowanie stron za pomocą wyboru najbardziej popularnych słów kluczowych poprzez keyword tool</title><content type='html'>Dzisiaj trochę o pozycjonowaniu stron, a właściwie o jednej ciekawej metodzie pozycjonowania, mianowicie o doborze odpowiednich słów kluczowych dla Twojej strony. Wielu z was na pewno uważa, że w pozycjonowaniu najważniejszy jest jak najwyższy ranking pagerank, lub duża ilość linków prowadzących do Twojej strony. To oczywiście jest prawdą ale nie do końca. Nawet jeżeli Twoja strona ma wysoki pagerank to co to zmieni jeżeli słowa kluczowe Twojej strony, które są tak wartościowe w wyszukiwarkach, są wpisywane przez internautów 200-300 razy w miesiącu? Nawet jeżeli każda tak wpisana fraza zaprowadzi internautów do Twojej strony to masz 300 unikalnych wejść w miesiącu, co nie jest dużo. Oczywiście może się zdarzyć, że prowadzisz stronę o jakimś unikalnym temacie, o czymś do czego ludzie jeszcze nie dojrzeli i nie wiedzą o co Ci chodzi. Wtedy 300 wejść to bardzo dobry wynik. Jednak przeważnie jest tak, że zmieniając odrobinę słowa kluczowe naszej strony możemy znacznie zwiększyć jej popularność. Za chwilę to udowodnię.&lt;br /&gt;&lt;br /&gt;W tej chwili powinny Cię już nękać pewne pytania natury egzystencjonalnej: skąd mam wiedzieć które frazy są częściej szukane niż inne, jak on udowodni że to faktycznie działa, po co on o tym pisze...&lt;br /&gt;Zacznę od końca.. Po co o tym piszę? Ponieważ chcę podnieść popularność mojej strony! Skąd masz wiedzieć które frazy są częściej wpisywane niż inne? Zajrzyj &lt;a href="https://adwords.google.com/select/KeywordToolExternal"&gt;tutaj&lt;/a&gt;. Tak, nie mylisz się, to znowu Google. Dokładnie jest to dodatek do Google AdWoords o nazwie KeywordTool. To narzędzie wyświetla nam ile razy wpisana przez nas fraza była wpisywana przez internautów w ubiegłym miesiącu oraz pokazuje przewidywalną średnią liczbę jej wyszukiwań w tym miesiącu. Dodatkowo podpowiada frazy podobne lub zbliżone, które mają wysoką liczbę wyszukiwań. Czy widzisz już jak można to wykorzystać? Przed chwilą napisałem, że piszę ten post aby moja strona wzrosła na popularności. Napisałem tak, ponieważ fraza "pozycjonowanie" w listopadzie 2008 była wyszukiwana 673 000 razy! Spójrz na poniższy zrzut:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_zmRa1FbVcEc/SVEalC-aXpI/AAAAAAAAAFo/I1i6SRUTqZQ/s1600-h/strony.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 216px;" src="http://2.bp.blogspot.com/_zmRa1FbVcEc/SVEalC-aXpI/AAAAAAAAAFo/I1i6SRUTqZQ/s400/strony.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5283033061638430354" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Może się wydawać, że przy tylu stronach w internecie to i tak nic nie zmienia, ale zmienia. Spróbuj na próbę wpisać kilka fraz powiązanych z Twoją stroną i zobacz ile dla nich jest wyszukiwań w ciągu miesiąca. Pomyśl na jakie, bardziej korzystne frazy mógłbyś je zamienić. Jak widzisz w temacie postu mam "Pozycjonowanie stron". Początkowo chciałem tam umieścić "Pozycjonowanie strony" ale spójrz na powyższe wyniki. Gdybym wpisał "Pozycjonowanie strony" to miałbym dla tej frazy tylko jakieś 22 200 wyszukań, wpisując "Pozycjonowanie stron" zwiększyłem znacznie swoją szansę na odwiedziny, ponieważ ta fraza była wyszukiwana 165 000 razy. Gdybym nie zmienił tej jednej literki pomyśl jak bardzo zostałbym w tyle. Jak to można wykorzystać? Ja np. jeżeli mam kilka pomysłów na posty a czasu tylko na napisanie jednego to sprawdzam jaki temat jest najbardziej pożądany przez internautów. To narzędzie daje wiele możliwości, wystarczy tylko pomyśleć.&lt;br /&gt;&lt;br /&gt;Co ciekawsze Google KeywordTool można wykorzystywać nie tylko do pozycjonowania stron lub badania aktywności słów danych kluczowych. Zobacz do czego wykorzystuje je Piotr Majewski, znany biznesmen e-marketingowy:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/M-cGsEvdFv4&amp;hl=pl&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/M-cGsEvdFv4&amp;hl=pl&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-5190266379349456705?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/5190266379349456705/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=5190266379349456705' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/5190266379349456705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/5190266379349456705'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/12/pozycjonowanie-stron-za-pomoc-wyboru.html' title='Pozycjonowanie stron za pomocą wyboru najbardziej popularnych słów kluczowych poprzez keyword tool'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_zmRa1FbVcEc/SVEalC-aXpI/AAAAAAAAAFo/I1i6SRUTqZQ/s72-c/strony.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-4608085700046668074</id><published>2008-12-21T17:53:00.003+01:00</published><updated>2008-12-21T18:10:51.992+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.htaccess'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>Htaccess redirect, czyli skutecznie i proste przekierowania</title><content type='html'>Czasami potrzebujemy przekierować link pod daną stronę aby wskazywał inną, jednak chcemy to zrobić bez ingerowania w nasze pliki html lub php. Możemy to zrobić bardzo łatwo za pomocą pliku .htaccess, który umieszczamy w głównym katalogu naszego serwera. Oczywiście serwer musi mieć włączoną obsługę tych plików.&lt;br /&gt;&lt;br /&gt;Poniższy przykład przedstawia dwa przekierowania. Chcemy przekierować adres wskazujący na stary post tak aby otwierała się strona z nowym postem. W drugim przykładzie chcemy przekierować odnośniki ze starego tematu na nowy. Nic prostszego. Wystarczy następujący wpis umieścić w naszym pliku .htaccess:&lt;br /&gt;&lt;br /&gt;&lt;div class=code&gt;Redirect permanent /posts/old_post.php /posts/new_post.php&lt;br /&gt;Redirect permanent /subjects/old_sub.php /subjects/new_sub.php&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-4608085700046668074?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/4608085700046668074/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=4608085700046668074' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/4608085700046668074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/4608085700046668074'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/12/htaccess-redirect-czyli-skutecznie-i.html' title='Htaccess redirect, czyli skutecznie i proste przekierowania'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-1302187741102612266</id><published>2008-12-21T15:53:00.003+01:00</published><updated>2008-12-21T16:18:44.548+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Tworzenie własnego ekranu powitalnego w GRUB</title><content type='html'>W poprzednim poście pisałem jak wstawić tło w GRUBie. Pisałem również, że dosyć trudno znaleźć przygotowane tła po ten program. Tym razem napiszę jak można samemu zrobić takiego tło.&lt;br /&gt;&lt;br /&gt;Grub narzuca wyświetlanym grafikom wiele ograniczeń jeśli chodzi o rozdzielczość i ilość kolorów. Nie możliwe jest również przesuwanie menu, które znajduję się w prostokącie w górnej części ekranu. Pod spodem znajdują się instrukcje. Podczas przygotowywania tła należy górną część obrazka zostawić dosyć prostą i mało kolorową, np. niebo a skupić się na ozdabianiu dolnej części. Chodzi tu o to, że tekst jest wyświetlanym w górnej części, więc skomplikowane kształty tła mogłyby sprawić, że tekst stanie się nieczytelny.&lt;br /&gt;&lt;br /&gt;Wymagania obrazów tła:&lt;br /&gt;- rozdzielczość 640x480;&lt;br /&gt;- format .xpm (może być spakowany gzipem);&lt;br /&gt;- nie więcej niż 14 kolorów;&lt;br /&gt;&lt;br /&gt;Może 14 kolorów wydaję się mało ale można z tyloma kolorami zrobić wiele zaskakujących rzeczy.&lt;br /&gt;&lt;br /&gt;OK, mamy dwie możliwość; albo tworzymy jakiś obrazek ręcznie w GIMPie lub innym edytorze, albo odnajdujemy interesujący obrazek w necie i go obrabiamy. W pierwszym przypadku sugeruję aby od razu utworzyć nowy plik o rozdzielczości 640x480 i używać jak najmniej kolorów. Nie musi to być oczywiście 14, później je i tak zredukujemy.&lt;br /&gt;&lt;br /&gt;Jeżeli mamy już nasz obrazek wstępnie przygotowany (nazwijmy go tlo.png) to teraz musimy sprawdzamy czy mamy pakiet narzędzi o nazwie &lt;i&gt;ImageMagick&lt;/i&gt;. W większości dystrybucji jest on domyślnie zainstalowany. Pozostałe polecenia wydajemy jako root.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;apt-get install imagemagick&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Gdy już mamy imagemagick wydajemy polecenie:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;convert tlo.png -colors 14 -resize 640x480 tlo.xpm&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Polecenie &lt;i&gt;convert&lt;/i&gt; po rozszerzeniu rozpoznaje format obrabianego pliku. Format &lt;i&gt;xpm&lt;/i&gt; też jest mu znany. Jeżeli nasz obrazek już miał rozdzielczość 640x480 to już nie musimy wydawać komendy &lt;i&gt;-resize 640x480&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Następnie możemy spakować nasz nowy plik i skopiować go do &lt;i&gt;/boot/grub&lt;/i&gt;. Pakowanie obrazka nie jest konieczne ale dzięki temu oszczędzamy miejsce, więc nie zaszkodzi. Szczególnie przydatne jeżeli nasz program rozruchowy znajduje się na dyskietce. Więc wykonujemy następujące polecenia:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;gzip tlo.xpm&lt;/b&gt;&lt;br /&gt;&lt;b&gt;cp tlo.xpm.gz /boot/grub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Teraz do pliku &lt;i&gt;grub.conf&lt;/i&gt; dopisujemy lub edytujemy następujący wiersz:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;splahimage=(hd0,0) /boot/grub/tlo.xpm.gz&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Teraz sprawdzamy czy wszystko działa ponownie uruchamiając komputer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-1302187741102612266?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/1302187741102612266/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=1302187741102612266' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1302187741102612266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1302187741102612266'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/12/tworzenie-wasnego-ekranu-powitalnego-w.html' title='Tworzenie własnego ekranu powitalnego w GRUB'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-8249812725028854068</id><published>2008-12-21T10:07:00.002+01:00</published><updated>2008-12-21T10:18:28.992+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Wyświetlanie tła w bootloaderze GRUB</title><content type='html'>Jeżeli nam się nie podoba domyślny wygląd naszego GRUBA to możemy go bardzo łatwo zmienić. Co prawda trudno jest znaleźć odpowiednio przygotowane tła dla tego programu, ale dla chcącego nic trudnego. Przykładowe miniaturki takich obrazów można np. zobaczyć na stronie &lt;a href="http://ruslug.rutgers.edu/~mcgrof/grub-images/images/"&gt;ruslug.rutgers.edu/~mcgrof/grub-images/images/&lt;/a&gt; a pobrać je można ze strony &lt;a href="http://ruslug.rutgers.edu/~mcgrof/grub-images/images/working-splashimages/"&gt;ruslug.rutgers.edu/~mcgrof/grub-images/images/working-splashimages/&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Dla tego przykładu posłużymy się plikiem DigitalAnGeL.xpm.gz.&lt;br /&gt;&lt;br /&gt;Logujemy się na roota i kopiujemy ten plik do katalogu &lt;i&gt;/boot/grub&lt;/i&gt;:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;cp DigitalAnGeL.xpm.gz /boot/grub&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Następnie edytujemy plik &lt;i&gt;/boot/grub/grub.conf&lt;/i&gt; i dodajemy tam lub edytujemy następujący wpis:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;splashimage=(hd0,0) /boot/grub/DigitalAnGeL.xpm.gz&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Oczywiście w zależności od dystrybucji katalog boot może znajdować się gdzieś indziej, edytujemy wtedy odpowiednio powyższe wpisy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-8249812725028854068?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/8249812725028854068/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=8249812725028854068' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/8249812725028854068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/8249812725028854068'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/12/wywietlanie-ta-w-bootloaderze-grub.html' title='Wyświetlanie tła w bootloaderze GRUB'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-7310940842978024810</id><published>2008-12-21T09:56:00.003+01:00</published><updated>2008-12-21T10:01:51.509+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Google SketchUp, czyli łatwe modelowanie projektów 3D</title><content type='html'>Pojawiła się nowa aplikacja firmy z Mountain View. Teraz za pomocą Google SketchUp możemy tworzyć proste lub zaawansowane projekty 3D i wszystko za darmo.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/5PLSlHbQ-bc&amp;hl=pl&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/5PLSlHbQ-bc&amp;hl=pl&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A tutaj już bardziej zaawansowany przykład. Projektujemy traktor:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/P0Daz4N-WLA&amp;hl=pl&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/P0Daz4N-WLA&amp;hl=pl&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-7310940842978024810?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/7310940842978024810/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=7310940842978024810' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/7310940842978024810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/7310940842978024810'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/12/google-sketchup-czyli-atwe-modelowanie.html' title='Google SketchUp, czyli łatwe modelowanie projektów 3D'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-6094994574720283171</id><published>2008-12-19T20:56:00.002+01:00</published><updated>2008-12-19T21:00:59.996+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Networking'/><title type='text'>Jak sprawdzić nazwę i numer danego portu na Linuxie</title><content type='html'>W nawiązaniu do poprzedniego postu postanowiłem umieścić dużo łatwiejszy sposób sprawdzania nazwy lub numeru danego portu. Wszystko co nam do tego potrzebne to Linux.&lt;br /&gt;&lt;br /&gt;Linux w pliku /etc/services trzyma najczęściej używane przez niego portu wraz z nazwami, więc jeżeli wyleciał nam numer lub nazwa danego portu wystarczy otworzyć konsolę i w zależności czy interesuje nas nazwa czy numer, wpisać:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;grep ssh /etc/services&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;i analogicznie jeżeli znamy numer a nie wiemy co to za port:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;grep 22 /etc/services&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-6094994574720283171?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/6094994574720283171/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=6094994574720283171' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6094994574720283171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6094994574720283171'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/12/jak-sprawdzi-nazw-i-numer-danego-portu.html' title='Jak sprawdzić nazwę i numer danego portu na Linuxie'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-5872022221500998217</id><published>2008-12-19T20:24:00.001+01:00</published><updated>2008-12-19T20:28:44.366+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Networking'/><title type='text'>Lista powszechnie używanych portów</title><content type='html'>Jeżeli nam wyleciał numer jakiegoś portu to na pewno go znajdziecie na tej stronie:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.iana.org/assignments/port-numbers"&gt;www.iana.org/assignments/port-numbers&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Początkowo chciałem przekopiować tą listę na mojego bloga ale to by go bardzo obciążyło. Przekonajcie się sami.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-5872022221500998217?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/5872022221500998217/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=5872022221500998217' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/5872022221500998217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/5872022221500998217'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/12/lista-powszechnie-uywanych-portw.html' title='Lista powszechnie używanych portów'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-870786156214683442</id><published>2008-12-19T19:18:00.004+01:00</published><updated>2008-12-19T19:38:12.458+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wirtualizacja'/><title type='text'>VirtualBox 2.1 czyli bezpłatny konkurent VWware'a</title><content type='html'>Doczekaliśmy się kolejnego wydania popularnego programu do wirtualizacji VirtualBox, tym razem wersji 2.1. Coraz większa popularność tego oprogramowania jest spowodowana przede wszystkim tym, że jest on darmowy. Mimo pozorów ta zaleta staję się coraz mniej zauważalna, ponieważ pod względem funkcjonalności VirtualBox zaczyna doganiać swojego komercyjnego kolegę, czyli VMware Workstation 6.5. Programiści z Sun Microsystem odwalili kawał dobrej roboty.&lt;br /&gt;&lt;br /&gt;To co w nowej wersji uległo znaczniej poprawie to obsługa sprzętowa dla procesorów Intela oraz AMD. Również rozrosła się lista systemów gościnnych, z której to listy, możemy uruchamiać systemy z obsługą grafiki 3D OpenGL (funkcja obecnie w fazie beta). Dla systemów z listy gości możemy nawet instalować 64-bitowe systemy na 32-bitowych systemach bazowych, jednak ta funkcja jest do tej pory również w fazie beta. Kolejną zaletą jest poprawiona obsługa interfejsów sieciowych.&lt;br /&gt;&lt;br /&gt;Dla ludzi których przekonały zalety VirtualBox'a mam jeszcze jedną dobrą nowinę - nowy VirtualBox obsługuje maszyny wirtualne stworzone na innym oprogramowaniu, czyli np. VHD Microsoftu, czy VMDK VMware'a, więc nikt nie będzie musiał tworzyć na nowo obrazów tworzonych do tej pory w innych programach.&lt;br /&gt;&lt;br /&gt;Na stronie &lt;a href="http://www.virtualbox.org/wiki/Guest_OSes"&gt;www.virtualbox.org/wiki/Guest_OSes&lt;/a&gt; znajduję się lista wszystkich obsługiwanych systemów. Jak widzicie jest ona całkiem pokaźna.&lt;br /&gt;&lt;br /&gt;Natomiast oprogramowanie można ściągnąć ze strony: &lt;a href="http://www.virtualbox.org/wiki/Downloads"&gt;www.virtualbox.org/wiki/Downloads&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-870786156214683442?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/870786156214683442/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=870786156214683442' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/870786156214683442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/870786156214683442'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/12/virtualbox-21-czyli-bezpatna.html' title='VirtualBox 2.1 czyli bezpłatny konkurent VWware&apos;a'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-4200948832257116709</id><published>2008-12-18T21:14:00.000+01:00</published><updated>2008-12-19T21:15:03.027+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Jak dodać własną mapę w Google Maps</title><content type='html'>Szybko i konkretnie. Polecam!&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/TftFnot5uXw&amp;hl=pl&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/TftFnot5uXw&amp;hl=pl&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-4200948832257116709?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/4200948832257116709/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=4200948832257116709' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/4200948832257116709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/4200948832257116709'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/12/jak-doda-wasn-map-w-google-maps.html' title='Jak dodać własną mapę w Google Maps'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-2421217267796710780</id><published>2008-12-16T20:28:00.001+01:00</published><updated>2008-12-16T20:29:35.466+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Polski programista pomaga w łataniu Google Chrom</title><content type='html'>Google twierdzi, że przeglądarka Chrome jest otwartym i wolnym projektem. Jednak do tej pory pracowali nad nią tylko inżynierowie Google'a. Niezależni programiści mogli co najwyżej dostarczać łatki, które przed włączeniem do repozytorium kodu były rozpatrywane przez kierowników projektu z Mountain View. Teraz jednak to się zmieniło – do grona osób mających prawo do bezpośredniego wprowadzania zmian do Chrome'a dołączyła pierwsza osoba z zewnątrz – Paweł Hajdan (junior), student informatyki Uniwersytetu Warszawskiego.&lt;br /&gt;&lt;br /&gt;Paweł otrzymał ten przywilej dzięki swojej niezwykłej aktywności w ramach projektu. Evan Martin, jeden z głównych twórców Chrome'a napisał na łamach firmowego bloga: „w swoim wolnym czasie [Paweł Hajdan – przyp. red.] dostarczył on mnóstwo kodu wysokiej jakości, dzięki któremu będzie można uruchomić Chromium na innych niż Windows platformach”. Uzyskanie takiego przywileju nie jest łatwe – zainteresowany musi dowieść, że naprawdę zależy mu na Chromium i osiągnięciu celów projektu.&lt;br /&gt;&lt;br /&gt;„Przywilej ten nadajemy w oczekiwaniu pewnej odpowiedzialności. Dostępu nie uzyska po prostu ten, kto potrafi wprowadzać zmiany do repozytorium. Musi on być w stanie współpracować z zespołem, umieć znaleźć najlepszych ludzi do zrecenzowania kodu, sam dostarczać kod najwyższej jakości i wreszcie do końca rozwiązywać pojawiające się problemy” – dodał Martin.&lt;br /&gt;&lt;br /&gt;Zgodnie z wytycznymi Google, osoba która ubiega się o prawo do bezpośredniego dostępu do kodu musi „dostarczyć od 10 do 20 nietrywialnych poprawek, które zostaną ocenione przez przynajmniej trzy różne osoby”.&lt;br /&gt;&lt;br /&gt;Pawłowi serdecznie gratulujemy tego sukcesu i mamy nadzieję, że dzięki jego pracy Chrome już wkrótce zadebiutuje na Linuksie i Mac OS X.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Źródło:&lt;/i&gt; &lt;a href="http://www.webhosting.pl/Polski.programista.pierwszym.czlowiekiem.z.zewnatrz.dopuszczonym.do.pracy.nad.Chrome"&gt;Webhosting.pl&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-2421217267796710780?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/2421217267796710780/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=2421217267796710780' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2421217267796710780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2421217267796710780'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/12/polski-programista-pomaga-w-ataniu.html' title='Polski programista pomaga w łataniu Google Chrom'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-2120450492276927122</id><published>2008-12-16T20:20:00.001+01:00</published><updated>2008-12-16T20:22:24.870+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cisco'/><title type='text'>Cisco twierdzi, że 90% maili to spam</title><content type='html'>90% maili generujących ruch w Internecie to spam. Pochodzą one głównie z zarażonych komputerów-zombie. Takie wyniki dał raport, przedstawiony przez firmę Cisco. W badaniu wzięto pod uwagę ponad 200 miliardów wiadomości e-mail, z których 90% okazało się być spamem.&lt;br /&gt;Patrick Petersom, odpowiedzialny w Cisco za kwestie dotyczące bezpieczeństwa, powiedział, że z każdym rokiem można zauważyć coraz większą przebiegłość hakerów. Stosują oni coraz to nowsze sposoby wykorzystania exploitów, których ofiarą padają internauci, sieci, a także Internet, jako ogół.&lt;br /&gt;&lt;br /&gt;Większość spamu pochodziło z terenu Stanów Zjednoczonych, których mieszkańcy należą do większości ofiar takich działań. Ma to również związek z tym, że najwięcej zarażonych komputerów znajduje się właśnie tam. Na drugim miejscu jeśli chodzi o liczbę wysyłanego spamu znalazła się Tajlandia (17,2%), na trzecim Turcja (9,2%), a na czwartym Rosja (8%). Dwa ostatnie miejsca są wynikiem tego, że spamerzy często używają serwerów, które znajdują się właśnie w tych krajach.&lt;br /&gt;&lt;br /&gt;Głównym celem hakerów padają słabo zabezpieczone konta pocztowe, które po złamaniu ich hasła są wykorzystywane do rozsyłania spamu. Według Cisco hakerzy wybrali głównie w ten sposób działania, gdyż użytkownicy posiadają coraz większą wiedzę odnośnie sieci i bardzo ostrożnie podchodzą do odnośników czy wiadomości pochodzących z podejrzanego źródła.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Źródło:&lt;/i&gt; &lt;a href="http://www.idg.pl/news/329656/Cisco.90.maili.to.spam.html"&gt;IDG.pl&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-2120450492276927122?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/2120450492276927122/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=2120450492276927122' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2120450492276927122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2120450492276927122'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/12/cisco-twierdzi-e-90-maili-to-spam.html' title='Cisco twierdzi, że 90% maili to spam'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-5173599258981859218</id><published>2008-12-11T20:35:00.000+01:00</published><updated>2008-12-14T20:36:21.697+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Google Chrome 1.0 - finalna wersja już u nas</title><content type='html'>Przypomnijmy, że przeglądarka Google Chrome w wersji Beta ujrzała światło dzienne po raz pierwszy na początku września tego roku. Jest to darmowe rozwiązanie, które ma być alternatywą dla takich produktów jak Internet Explorer, Firefox czy Opera. Niestety po początkowych sukcesach i olbrzymim zainteresowaniu ze strony użytkowników aplikacja straciła w ostatnim czasie na popularności, między innymi ze względu na sporą ilość błędów.&lt;br /&gt;&lt;br /&gt;Dzisiaj informowaliśmy (11 grudnia 2008) - opierając się na informacjach podawanych przez Marissę Mayer, wiceprezes firmy Google - że Google Chrome wkrótce wychodzi z fazy Beta. Finalnej wersji można było spodziewać się na początku przyszłego roku, prawdopodobnie w styczniu. Słowa te okazały się jedynie zasłoną dymną dla prawdziwej daty premiery. Przeglądarka Google Chrome 1.0 jest dostępna już dzisiaj!&lt;br /&gt;&lt;br /&gt;Firma Google zdecydowała się zdjąć etykietę Beta po ponad 100 dniach ciężkiej pracy nad poprawieniem stabilności i wydajności przeglądarki.&lt;br /&gt;&lt;br /&gt;Google Chrome jest przeglądarką zaprojektowaną dla nowej formuły Internetu, który od kilku lat rozwija się znacznie bardziej dynamicznie. Dawniej strony internetowe były połączeniem tekstu i prostej grafiki. Dzisiaj stają się potężnymi platformami multimedialnymi, zawierającymi między innymi wideo i gry oraz narzędzia do współpracy online. Google pracując nad przeglądarką Chrome skupiał się głównie na tym, aby umożliwiała ona użytkownikom surfowanie po sieci szybciej, łatwiej i stabilniej" - czytamy w komunikacie wydanym z okazji premiery wersji 1.0.&lt;br /&gt;&lt;br /&gt;Owe 100 dni pracy doprowadziły - według przedstawicieli Google'a - do znacznego ulepszenia przeglądarki. Finalna wersja o numerze 1.0.154.36 doczekała się usprawnień w kilku kluczowych obszarach:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Stabilność i wydajność&lt;/b&gt;&lt;br /&gt;Programiści skupili się na poprawieniu wydajności, przywiązując także uwagę do stabilności aplikacji podczas przeglądania materiałów audio i wideo.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Większa szybkość&lt;/b&gt;&lt;br /&gt;Przeglądarka - w porównaniu do wersji Beta - uruchamia się i ładuje strony znacznie szybciej. Efekt taki udało się uzyskać dzięki ulepszeniom wprowadzonym do silnika V8 JavaScript.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Menedżer zakładek i kontrola prywatności&lt;/b&gt;&lt;br /&gt;Zakładki przeglądarki oferują większe możliwości, łatwiej jest również nimi zarządzać. Zagadnienia dotyczące prywatności zostały pogrupowane i znajdują się w jednym miejscu wraz ze szczegółowymi wyjaśnieniami.&lt;br /&gt;&lt;br /&gt;Przedstawiciele Google uzasadniając rezygnację z etykiety Beta podkreślają, że było to możliwe dzięki osiągnięciu założonych celów w zakresie zwiększenia wydajności i stabilności. Programistów czeka jednak ciężka praca związana z wprowadzaniem nowych funkcji (na przykład automatyczne wypełnianie formularzy i obsługa RSS), usprawnieniami aplikacji oraz przygotowaniem wersji dla systemów Mac i Linux.&lt;br /&gt;&lt;br /&gt;Wersję finalną można pobrać &lt;a href="http://www.googlechrom.com.pl/"&gt;tutaj&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Źródło:&lt;/i&gt; &lt;a href="http://www.idg.pl/news/329002/Google.Chrome.1.0.finalna.wersja.juz.u.nas.html"&gt;IDG.pl&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-5173599258981859218?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/5173599258981859218/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=5173599258981859218' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/5173599258981859218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/5173599258981859218'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/12/google-chrome-10-finalna-wersja-ju-u.html' title='Google Chrome 1.0 - finalna wersja już u nas'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-1847300757288359752</id><published>2008-11-29T08:48:00.005+01:00</published><updated>2008-12-02T05:46:48.703+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Skróty klawiaturowe systemu Windows</title><content type='html'>Były skróty stosowane w Linuxie, więc aby nie zostawiać Windowsa bez komentarza podaję skróty klawiaturowe do tego drugiego:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Skróty klawiaturowe łatwego dostępu:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Prawy klawisz SHIFT przez osiem sekund&lt;br /&gt; Włączyć lub wyłączyć funkcję Klawisze filtru&lt;br /&gt; &lt;br /&gt;Klawisze lewy ALT+lewy SHIFT+PRINT SCREEN (lub PRTSCRN)&lt;br /&gt; Włączyć lub wyłączyć funkcję Duży kontrast&lt;br /&gt; &lt;br /&gt;Klawisze lewy ALT+lewy SHIFT+NUM LOCK&lt;br /&gt; Włączyć lub wyłączyć funkcję Klawisze myszy&lt;br /&gt; &lt;br /&gt;Klawisz SHIFT pięć razy&lt;br /&gt; Włączyć lub wyłączyć funkcję Klawisze trwałe&lt;br /&gt; &lt;br /&gt;Klawisz NUM LOCK przez pięć sekund&lt;br /&gt; Włączyć lub wyłączyć funkcję Klawisze przełączające&lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  +U&lt;br /&gt; Otworzyć Centrum ułatwień dostępu&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ogólne skróty klawiaturowe:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;F1&lt;br /&gt; Wyświetlić Pomoc&lt;br /&gt; &lt;br /&gt;CTRL+C&lt;br /&gt; Skopiować zaznaczony element&lt;br /&gt; &lt;br /&gt;CTRL+X&lt;br /&gt; Wyciąć zaznaczony element&lt;br /&gt; &lt;br /&gt;CTRL+V&lt;br /&gt; Wkleić zaznaczony element&lt;br /&gt; &lt;br /&gt;CTRL+Z&lt;br /&gt; Cofnąć akcję&lt;br /&gt; &lt;br /&gt;CTRL+Y&lt;br /&gt; Wykonać ponownie akcję&lt;br /&gt; &lt;br /&gt;DELETE&lt;br /&gt; Usunąć zaznaczony element i przenieść go do Kosza&lt;br /&gt; &lt;br /&gt;SHIFT+DELETE&lt;br /&gt; Usunąć zaznaczony element bez przenoszenia go najpierw do Kosza&lt;br /&gt; &lt;br /&gt;F2&lt;br /&gt; Zmienić nazwę wybranego elementu&lt;br /&gt; &lt;br /&gt;CTRL+STRZAŁKA W PRAWO&lt;br /&gt; Przenieść kursor na początek następnego wyrazu&lt;br /&gt; &lt;br /&gt;CTRL+STRZAŁKA W LEWO&lt;br /&gt; Przenieść kursor na początek poprzedniego wyrazu&lt;br /&gt; &lt;br /&gt;CTRL+STRZAŁKA W DÓŁ&lt;br /&gt; Przenieść kursor na początek następnego akapitu&lt;br /&gt; &lt;br /&gt;CTRL+STRZAŁKA W GÓRĘ&lt;br /&gt; Przenieść kursor na początek poprzedniego akapitu&lt;br /&gt; &lt;br /&gt;CTRL+SHIFT z klawiszem strzałki&lt;br /&gt; Zaznaczyć blok tekstu&lt;br /&gt; &lt;br /&gt;SHIFT z dowolnym klawiszem strzałki&lt;br /&gt; Zaznaczyć kilka elementów w oknie lub na pulpicie albo zaznaczyć tekst w dokumencie&lt;br /&gt; &lt;br /&gt;CTRL z dowolnym klawiszem strzałki + SPACJA&lt;br /&gt; Zaznaczyć kilka pojedynczych elementów w oknie lub na pulpicie&lt;br /&gt; &lt;br /&gt;CTRL+A&lt;br /&gt; Zaznaczyć wszystkie elementy w dokumencie lub oknie &lt;br /&gt; &lt;br /&gt;F3&lt;br /&gt; Wyszukać plik lub folder&lt;br /&gt; &lt;br /&gt;ALT+ENTER&lt;br /&gt; Wyświetlić właściwości wybranego elementu&lt;br /&gt; &lt;br /&gt;ALT+F4&lt;br /&gt; Zamknąć aktywny element lub zakończyć pracę z aktywnym programem&lt;br /&gt; &lt;br /&gt;ALT+SPACJA&lt;br /&gt; Otworzyć menu skrótów aktywnego okna&lt;br /&gt; &lt;br /&gt;CTRL+F4&lt;br /&gt; Zamknąć aktywny dokument (w programach, w których może być jednocześnie otwartych wielu dokumentów)&lt;br /&gt; &lt;br /&gt;ALT+TAB&lt;br /&gt; Przełączyć między otwartymi elementami&lt;br /&gt; &lt;br /&gt;CTRL+ALT+TAB&lt;br /&gt; Korzystając z klawiszy strzałek, przełączyć się między otwartymi elementami&lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  +TAB&lt;br /&gt; Przechodzić między kolejnymi programami na pasku zadań przy użyciu funkcji Flip 3-D systemu Windows &lt;br /&gt; &lt;br /&gt;CTRL+klawisz logo Windows  +TAB&lt;br /&gt; Korzystając z klawiszy strzałek, przechodzić między kolejnymi programami na pasku zadań za pomocą funkcji Flip 3-D systemu Windows &lt;br /&gt; &lt;br /&gt;ALT+ESC&lt;br /&gt; Przechodzić między elementami w kolejności, w jakiej zostały otwarte&lt;br /&gt; &lt;br /&gt;F6&lt;br /&gt; Przechodzić między kolejnymi elementami okna lub pulpitu&lt;br /&gt; &lt;br /&gt;F4&lt;br /&gt; Wyświetlić listę paska adresu w Eksploratorze Windows &lt;br /&gt; &lt;br /&gt;SHIFT+F10&lt;br /&gt; Wyświetlić menu skrótów wybranego elementu&lt;br /&gt; &lt;br /&gt;CTRL+ESC&lt;br /&gt; Otworzyć menu Start&lt;br /&gt; &lt;br /&gt;ALT+podkreślona litera&lt;br /&gt; Wyświetlić odpowiednie menu&lt;br /&gt; &lt;br /&gt;ALT+podkreślona litera&lt;br /&gt; Wykonać polecenie menu (lub inne podkreślone polecenie)&lt;br /&gt; &lt;br /&gt;F10&lt;br /&gt; Uaktywnić pasek menu w aktywnym programie&lt;br /&gt; &lt;br /&gt;STRZAŁKA W PRAWO&lt;br /&gt; Otworzyć następne menu z prawej strony lub otworzyć podmenu&lt;br /&gt; &lt;br /&gt;STRZAŁKA W LEWO&lt;br /&gt; Otworzyć następne menu z lewej strony lub zamknąć podmenu&lt;br /&gt; &lt;br /&gt;F5&lt;br /&gt; Odświeżyć aktywne okno&lt;br /&gt; &lt;br /&gt;ALT+STRZAŁKA W GÓRĘ&lt;br /&gt; Wyświetlić folder znajdujący się o jeden poziom wyżej w Eksploratorze Windows &lt;br /&gt; &lt;br /&gt;ESC&lt;br /&gt; Anulować bieżące zadanie&lt;br /&gt; &lt;br /&gt;CTRL+SHIFT+ESC&lt;br /&gt; Otworzyć Menedżera zadań&lt;br /&gt; &lt;br /&gt;SHIFT podczas wkładania dysku CD&lt;br /&gt; Zapobiec automatycznemu odtwarzaniu dysku CD&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Skróty klawiaturowe w oknach dialogowych:&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;CTRL+TAB&lt;br /&gt; Przejść do następnej karty&lt;br /&gt; &lt;br /&gt;CTRL+SHIFT+TAB&lt;br /&gt; Przejść do poprzedniej karty&lt;br /&gt; &lt;br /&gt;TAB&lt;br /&gt; Przejść do następnej opcji&lt;br /&gt; &lt;br /&gt;SHIFT+TAB&lt;br /&gt; Przejść do poprzedniej opcji&lt;br /&gt; &lt;br /&gt;ALT+podkreślona litera&lt;br /&gt; Wykonać polecenie lub wybrać opcję skojarzoną z tą literą&lt;br /&gt; &lt;br /&gt;ENTER&lt;br /&gt; Zastępuje kliknięcie myszy w przypadku wielu wybranych poleceń.&lt;br /&gt; &lt;br /&gt;SPACJA&lt;br /&gt; Zaznaczyć lub wyczyścić pole wyboru, jeśli aktywna opcja jest polem wyboru&lt;br /&gt; &lt;br /&gt;Klawisze strzałek&lt;br /&gt; Zaznaczyć przycisk, jeśli aktywna opcja jest grupą przycisków opcji&lt;br /&gt; &lt;br /&gt;F1&lt;br /&gt; Wyświetlanie pomocy&lt;br /&gt; &lt;br /&gt;F4&lt;br /&gt; Wyświetlić elementy na aktywnej liście&lt;br /&gt; &lt;br /&gt;BACKSPACE&lt;br /&gt; Otworzyć folder znajdujący się o jeden poziom wyżej, jeśli w oknie dialogowym Zapisz jako lub Otwórz jest zaznaczony folder&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Skróty klawiaturowe używane z klawiaturami firmy Microsoft:&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  &lt;br /&gt; Otworzyć lub zamknąć menu Start&lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  +PAUSE&lt;br /&gt; Wyświetlić okno dialogowe Właściwości systemu&lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  +D&lt;br /&gt; Wyświetlić pulpit&lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  +M&lt;br /&gt; Zminimalizować wszystkie okna&lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  +SHIFT+M&lt;br /&gt; Przywrócić zminimalizowane okna na pulpit&lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  +E&lt;br /&gt; Otworzyć folder Komputer&lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  +F&lt;br /&gt; Wyszukać plik lub folder&lt;br /&gt; &lt;br /&gt;CTRL+klawisz logo Windows  +F&lt;br /&gt; Wyszukać komputery (jeśli użytkownik pracuje w sieci)&lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  +L&lt;br /&gt; Zablokować komputer lub przełączyć użytkowników&lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  +R&lt;br /&gt; Otworzyć okno dialogowe Uruchamianie&lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  +T&lt;br /&gt; Przechodzić między programami na pasku zadań&lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  +TAB&lt;br /&gt; Przechodzić między kolejnymi programami na pasku zadań przy użyciu funkcji Flip 3-D systemu Windows &lt;br /&gt; &lt;br /&gt;CTRL+klawisz logo Windows  +TAB&lt;br /&gt; Korzystając z klawiszy strzałek, przechodzić między kolejnymi programami na pasku zadań za pomocą funkcji Flip 3-D systemu Windows &lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  +SPACJA&lt;br /&gt; Wyświetlić wszystkie gadżety na pierwszym planie i wybrać pasek boczny systemu Windows &lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  +G&lt;br /&gt; Przechodzić między kolejnymi gadżetami na pasku bocznym&lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  +U&lt;br /&gt; Otworzyć Centrum ułatwień dostępu&lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  +X&lt;br /&gt; Otworzyć Centrum mobilności w systemie Windows &lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  z dowolnym klawiszem numerycznym&lt;br /&gt; Otworzyć skrót menu Szybkie uruchamianie, który znajduje się na pozycji odpowiadającej klawiszowi numerycznemu. Na przykład klawisz logo Windows  +1, aby uruchomić pierwszy skrót w menu Szybkie uruchamianie.&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Skróty klawiaturowe Eksploratora Windows:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;CTRL+N&lt;br /&gt; Otworzyć nowe okno&lt;br /&gt; &lt;br /&gt;END&lt;br /&gt; Wyświetlić dolną część aktywnego okna&lt;br /&gt; &lt;br /&gt;HOME&lt;br /&gt; Wyświetlić górną część aktywnego okna&lt;br /&gt; &lt;br /&gt;F11&lt;br /&gt; Zmaksymalizować lub zminimalizować aktywne okno&lt;br /&gt; &lt;br /&gt;NUM LOCK+GWIAZDKA (*) na klawiaturze numerycznej&lt;br /&gt; Wyświetlić wszystkie podfoldery w wybranym folderze&lt;br /&gt; &lt;br /&gt;NUM LOCK+ZNAK PLUS (+) na klawiaturze numerycznej&lt;br /&gt; Wyświetlić zawartość wybranego folderu&lt;br /&gt; &lt;br /&gt;NUM LOCK+ZNAK MINUS (-) na klawiaturze numerycznej&lt;br /&gt; Zwinąć wybrany folder&lt;br /&gt; &lt;br /&gt;STRZAŁKA W LEWO&lt;br /&gt; Zwinąć bieżące zaznaczenie (jeśli jest rozwinięte) lub wybrać folder nadrzędny&lt;br /&gt; &lt;br /&gt;ALT+STRZAŁKA W LEWO&lt;br /&gt; Wyświetlić poprzedni folder&lt;br /&gt; &lt;br /&gt;STRZAŁKA W PRAWO&lt;br /&gt; Wyświetlić bieżące zaznaczenie (jeśli jest zwinięte) lub wybrać pierwszy podfolder&lt;br /&gt; &lt;br /&gt;ALT+STRZAŁKA W PRAWO&lt;br /&gt; Wyświetlić następny folder&lt;br /&gt; &lt;br /&gt;ALT+D&lt;br /&gt; Wybrać pasek adresu&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Skróty klawiaturowe paska bocznego systemu Windows:&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  +SPACJA&lt;br /&gt; Wyświetlić wszystkie gadżety na pierwszym planie i wybrać pasek boczny&lt;br /&gt; &lt;br /&gt;Windows Klawisz logo  +G&lt;br /&gt; Przechodzić między kolejnymi gadżetami na pasku bocznym&lt;br /&gt; &lt;br /&gt;TAB&lt;br /&gt; Przechodzić między kolejnymi formantami paska bocznego&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Skróty klawiaturowe Galerii fotografii systemu Windows:&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;CTRL+F&lt;br /&gt; Otworzyć okienko Napraw&lt;br /&gt; &lt;br /&gt;CTRL+P&lt;br /&gt; Wydrukować wybrany obraz&lt;br /&gt; &lt;br /&gt;ENTER&lt;br /&gt; Wyświetlić wybrany obraz w większej skali&lt;br /&gt; &lt;br /&gt;CTRL+I&lt;br /&gt; Otworzyć lub zamknąć okienko szczegółów&lt;br /&gt; &lt;br /&gt;CTRL+KROPKA (.)&lt;br /&gt; Obrócić obraz zgodnie z ruchem wskazówek zegara&lt;br /&gt; &lt;br /&gt;CTRL+PRZECINEK (,)&lt;br /&gt; Obrócić obraz zgodnie przeciwnie do ruchu wskazówek zegara&lt;br /&gt; &lt;br /&gt;F2&lt;br /&gt; Zmienić nazwę wybranego elementu&lt;br /&gt; &lt;br /&gt;CTRL+E&lt;br /&gt; Wyszukać element&lt;br /&gt; &lt;br /&gt;ALT+STRZAŁKA W LEWO&lt;br /&gt; Przejść wstecz&lt;br /&gt; &lt;br /&gt;ALT+STRZAŁKA W PRAWO&lt;br /&gt; Przejść do przodu&lt;br /&gt; &lt;br /&gt;ZNAK PLUS (+)&lt;br /&gt; Powiększyć lub zmienić rozmiar miniatury obrazu&lt;br /&gt; &lt;br /&gt;ZNAK MINUS (-)&lt;br /&gt; Pomniejszyć lub zmienić rozmiar miniatury obrazu&lt;br /&gt; &lt;br /&gt;CTRL+B&lt;br /&gt; Optymalnie dopasować&lt;br /&gt; &lt;br /&gt;STRZAŁKA W LEWO&lt;br /&gt; Wybrać poprzedni element&lt;br /&gt; &lt;br /&gt;STRZAŁKA W DÓŁ&lt;br /&gt; Wybrać następny element lub wiersz&lt;br /&gt; &lt;br /&gt;STRZAŁKA W GÓRĘ&lt;br /&gt; Poprzedni element (Sztaluga) lub wiersz (Miniatura)&lt;br /&gt; &lt;br /&gt;PAGE UP&lt;br /&gt; Poprzedni ekran&lt;br /&gt; &lt;br /&gt;PAGE DOWN&lt;br /&gt; Następny ekran&lt;br /&gt; &lt;br /&gt;HOME&lt;br /&gt; Wybrać pierwszy element&lt;br /&gt; &lt;br /&gt;END&lt;br /&gt; Wybrać ostatni element&lt;br /&gt; &lt;br /&gt;DELETE&lt;br /&gt; Przenieść wybrany element do Kosza&lt;br /&gt; &lt;br /&gt;SHIFT+DELETE&lt;br /&gt; Trwale usunąć wybrany element&lt;br /&gt; &lt;br /&gt;STRZAŁKA W LEWO&lt;br /&gt; Zwinąć węzeł&lt;br /&gt; &lt;br /&gt;STRZAŁKA W PRAWO&lt;br /&gt; Rozwinąć węzeł&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Skróty klawiaturowe do pracy z filmami wideo:&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;J&lt;br /&gt; Przejść do poprzedniej klatki&lt;br /&gt; &lt;br /&gt;K&lt;br /&gt; Wstrzymać odtwarzanie&lt;br /&gt; &lt;br /&gt;L&lt;br /&gt; Przejść do następnej klatki&lt;br /&gt; &lt;br /&gt;I&lt;br /&gt; Ustawić punkt początkowy przycięcia&lt;br /&gt; &lt;br /&gt;O&lt;br /&gt; Ustawić punkt końcowy przycięcia&lt;br /&gt; &lt;br /&gt;M&lt;br /&gt; Podzielić klip&lt;br /&gt; &lt;br /&gt;HOME&lt;br /&gt; Zatrzymać i przewinąć do tyłu aż do punktu początkowego przycięcia&lt;br /&gt; &lt;br /&gt;ALT+STRZAŁKA W PRAWO&lt;br /&gt; Przejść do następnej klatki&lt;br /&gt; &lt;br /&gt;ALT+STRZAŁKA W LEWO&lt;br /&gt; Przejść do poprzedniej klatki&lt;br /&gt; &lt;br /&gt;CTRL+K&lt;br /&gt; Zatrzymać odtwarzanie i przewinąć do tyłu&lt;br /&gt; &lt;br /&gt;CTRL+P&lt;br /&gt; Odtworzyć od bieżącego miejsca&lt;br /&gt; &lt;br /&gt;HOME&lt;br /&gt; Przejść do punktu początkowego przycięcia &lt;br /&gt; &lt;br /&gt;END&lt;br /&gt; Przejść do punktu końcowego przycięcia&lt;br /&gt; &lt;br /&gt;PAGE UP&lt;br /&gt; Przejść do najbliższego punktu podziału przed bieżącą lokalizacją&lt;br /&gt; &lt;br /&gt;PAGE DOWN&lt;br /&gt; Przejść do najbliższego punktu podziału za bieżącą lokalizacją&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Skróty klawiaturowe Podglądu pomocy systemu Windows:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;ALT+C&lt;br /&gt; Wyświetlić spis treści&lt;br /&gt; &lt;br /&gt;ALT+N&lt;br /&gt; Wyświetlić menu Ustawienia połączenia&lt;br /&gt; &lt;br /&gt;F10&lt;br /&gt; Wyświetlić menu Opcje&lt;br /&gt; &lt;br /&gt;ALT+STRZAŁKA W LEWO&lt;br /&gt; Przejść wstecz do poprzedniego (przeglądanego już) tematu&lt;br /&gt; &lt;br /&gt;ALT+STRZAŁKA W PRAWO&lt;br /&gt; Przejść do przodu do następnego (przeglądanego już) tematu&lt;br /&gt; &lt;br /&gt;ALT+A&lt;br /&gt; Wyświetlić stronę pomocy technicznej&lt;br /&gt; &lt;br /&gt;ALT+HOME&lt;br /&gt; Wyświetlić stronę główną Pomocy i obsługi technicznej&lt;br /&gt; &lt;br /&gt;HOME&lt;br /&gt; Przejść do początku tematu&lt;br /&gt; &lt;br /&gt;END&lt;br /&gt; Przejść do końca tematu&lt;br /&gt; &lt;br /&gt;CTRL+F&lt;br /&gt; Wyszukać bieżący temat&lt;br /&gt; &lt;br /&gt;CTRL+P&lt;br /&gt; Wydrukować temat&lt;br /&gt; &lt;br /&gt;F3&lt;br /&gt; Przejść do pola wyszukiwania&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-1847300757288359752?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/1847300757288359752/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=1847300757288359752' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1847300757288359752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1847300757288359752'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/11/skrty-klawiaturowe-systemu-windows.html' title='Skróty klawiaturowe systemu Windows'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-2238532825551340498</id><published>2008-11-26T17:21:00.003+01:00</published><updated>2008-11-26T17:28:24.384+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>[PHP] Jak sprawdzić z jakiej przeglądarki i z jakiego systemu korzysta gość naszej strony</title><content type='html'>Możemy bardzo łatwo sprawdzić z jakiej przeglądarki i jakiego systemu korzysta osoba, która odwiedza naszą stronę. Aby to sprawdzić odczytamy zawartość zmiennej globalnej $_SERVER['HTTP_USER_AGENT']w której znajdują się interesujące nas informacje.&lt;br /&gt;Najpierw za pomocą komendy strtolower() zamienimy wszystkie litery na małe aby łatwiej nam się wyszukiwało informacji o przeglądarce i systemie. Następnie za pomocą strpos() sprawdzamy czy interesujące nas wyrażenie znajdują się w $_SERVER['HTTP_USER_AGENT']. Możemy to zrobić np. tak:&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://wojtek.mroczkowski.googlepages.com/which_browser_system.html" class="source_code" style="width: 100%; height: 20em;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-2238532825551340498?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/2238532825551340498/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=2238532825551340498' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2238532825551340498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2238532825551340498'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/11/php-jak-sprawdzi-z-jakiej-przegldarki-i.html' title='[PHP] Jak sprawdzić z jakiej przeglądarki i z jakiego systemu korzysta gość naszej strony'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-3087486923121639938</id><published>2008-11-25T09:07:00.005+01:00</published><updated>2008-11-25T10:00:26.992+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>[BASH] Skróty klawiszowe w Bashu</title><content type='html'>Skróty klawiszowe to coś co bardzo przyspiesza naszą pracę w konsoli i nie tylko. W Linuxie skróty klawiszowe są dobrze przystosowane po to aby ułatwić nam pracę jednak wiele osób o nich zapomina. Postaram się przypomnieć te najważniejsze:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Skróty z Ctrl:&lt;/b&gt;&lt;br /&gt;Ctrl + a - Przejdź na początek linii. Przydatne w przypadku wpisania długiej linii i potrzeby edycji początku komendy.&lt;br /&gt;Ctrl + b - Przesunięcie o jeden znak w lewo. Działa jak lewy kursor.&lt;br /&gt;Ctrl + c - Przerwanie wykonywania obecnej komendy.&lt;br /&gt;Ctrl + d - Usunięcie znaku na kursorze. Działa jak Delete.&lt;br /&gt;Ctrl + e - Przejście na koniec linii.&lt;br /&gt;Ctrl + f - Przesunięcie o jeden znak w prawo. Działa jak prawy kursor.&lt;br /&gt;Ctrl + k - Usunięcie wszystkiego od kursora do końca linii.&lt;br /&gt;Ctrl + l - Czyszczenie ekranu.Działa jak Clear.&lt;br /&gt;Ctrl + r - Przeszukiwania historii wstecz po wpisanych znakach.&lt;br /&gt;Ctrl + R - Przeszukiwania historii wstecz po wielu zdarzeniach.&lt;br /&gt;Ctrl + u - Usunięcie wszystkiego od kursora do początku linii.&lt;br /&gt;Ctrl + xx - Poruszanie się pomiędzy końcem linii a daną pozycją kursora.&lt;br /&gt;Ctrl + z - Zawieś / zatrzymaj wykonywaną komendę.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Skróty z Alt:&lt;/b&gt;&lt;br /&gt;Alt + &lt; - Przesuń się do pierwszej linii w historii.&lt;br /&gt;Alt + &gt; - Przesuń się do ostatniej linii w historii.&lt;br /&gt;Alt + ? - Wyświetl listę komend, listę plików. Działa jak 2xTab.&lt;br /&gt;Alt + * - Wstawia do komendy wszystkie możliwe dopasowania.&lt;br /&gt;Alt + / - Próbuje uzupełnić nazwę pliku lub komendy.&lt;br /&gt;Alt + . - Wstawia ostatni argument poprzedniej komendy.&lt;br /&gt;Alt + b - Cofnij się o jedno wyrażenie.&lt;br /&gt;Alt + c - Zamień mała literę na dużą przy wybranym wyrazie.&lt;br /&gt;Alt + d - Usuń cały wyraz.&lt;br /&gt;Alt + f - Przejdź do przodu o jedno wyrażenie.&lt;br /&gt;Alt + l - Zamień dużą literę na małą przy wybranym wyrazie.&lt;br /&gt;Alt + n - Przeszukaj historię do przodu.&lt;br /&gt;Alt + p - Przeszukaj historię do tyłu.&lt;br /&gt;Alt + r - Odwołaj komendę.&lt;br /&gt;Alt + t - Zamień kolejność wyrazów.&lt;br /&gt;Alt + u - Zamień małe litery na duże.&lt;br /&gt;Alt + back-space - Usuwaj do tyłu całymi wyrazami.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Skróty z Tabulatorem (2T oznacza wciśnięcie Tab 2 razy):&lt;/b&gt;&lt;br /&gt;2T - Wszystkie dostępne komendy.&lt;br /&gt;(wyrażenie)2T - Wszystkie dostępne komendy rozpoczynające się od (wyrażenie)&lt;br /&gt;/2T - Wyświetlenie struktury systemu łącznie z plikami ukrytymi.&lt;br /&gt;*2T - Wyświetlenie plików wybranego katalogu bez plików ukrytych.&lt;br /&gt;~2T - Wyświetlenie wszystkich użytkowników z "/etc/passwd"&lt;br /&gt;$2T - Wyświetlenie wszystkich zmiennych systemowych.&lt;br /&gt;@2T - Wpisy z "/etc/hosts"&lt;br /&gt;=2T - Zawartość katalogu. Działa jak ls lub dir.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-3087486923121639938?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/3087486923121639938/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=3087486923121639938' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/3087486923121639938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/3087486923121639938'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/11/bash-skrty-klawiszowe-w-bashu.html' title='[BASH] Skróty klawiszowe w Bashu'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-6923330084808531896</id><published>2008-11-19T17:21:00.011+01:00</published><updated>2008-11-25T09:07:40.517+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>[PHP] Jak zablokować powtórne przetwarzanie formularzy przy odświeżaniu strony?</title><content type='html'>Bardzo częstym problemem na który natrafiają początkujący programiści PHP jest problem ponownego wysłania danych po odświeżaniu strony do której zostały przesłane dane z formularza HTML. Jeżeli nasz skrypt dodaje dane z formularza do bazy danych to po odświeżeniu strony zwyczajnie je doda jeszcze raz. Możemy ten problem bardzo łatwo rozwiązać za pomocą sesji oraz bardzo prostej funkcji PHP:&lt;br /&gt;&lt;iframe src="http://wojtek.mroczkowski.googlepages.com/generateHash.html" class="source_code" style="width: 100%; height: 11em;"&gt;&lt;/iframe&gt;&lt;br /&gt;W powyższej funkcji generujemy 32-znakowy unikalny hash przemnażając czas razy losową liczbę uzyskując w ten sposób unikalny identyfikator, który przypiszemy do naszego wysłanego formularza.&lt;br /&gt;&lt;br /&gt;Następnie w formularzu dodajemy następującą ukrytą linię:&lt;br /&gt;&lt;iframe src="http://wojtek.mroczkowski.googlepages.com/inputHash.html" class="source_code" style="width: 100%; height: 5em;"&gt;&lt;/iframe&gt;&lt;br /&gt;Wywołuje ona naszą funkcję wysyłając w zmiennej &lt;i&gt;hash&lt;/i&gt; nasz unikalny klucz.&lt;br /&gt;&lt;br /&gt;A tak wygląda plik, który odbiera dane z formularza:&lt;br /&gt;&lt;iframe src="http://wojtek.mroczkowski.googlepages.com/hashTaker.html" class="source_code" style="width: 100%; height: 18em;"&gt;&lt;/iframe&gt;&lt;br /&gt;Jeżeli zmienna sesyjna adduser nie istnieje lub jest różna od przesłanej zmiennej &lt;i&gt;hash&lt;/i&gt; z formularza to skrypt tworzy taką zmienną sesyjną i wykonuje wszystkie czynności jakie powinien zrobić po prawidłowym wysłaniu formularza. Jeżeli natomiast taka zmienna istnieje i jest równa zmienna &lt;i&gt;hash&lt;/i&gt; z formularza tzn. że ten formularz był już wysłany.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-6923330084808531896?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/6923330084808531896/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=6923330084808531896' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6923330084808531896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6923330084808531896'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/11/jak-zablokowa-powtrne-przetwarzanie.html' title='[PHP] Jak zablokować powtórne przetwarzanie formularzy przy odświeżaniu strony?'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-4970789646787809241</id><published>2008-11-18T22:43:00.002+01:00</published><updated>2008-11-18T22:59:24.781+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Jak skopiować cały system pomiędzy dwoma komputerami?</title><content type='html'>Czasami zdarza się, że musimy zrobić klona naszego systemu na drugim komputerze. Możemy to zrobić w bardzo prosty sposób bez zapisywania danych na CD lub na innych urządzeniach przenośnych, po prostu przez sieć.&lt;br /&gt;&lt;br /&gt;Oto co musisz zrobić po kolei:&lt;br /&gt;1) Uruchamiasz na komputerze źródłowym oraz na komputerze docelowym jakąś dystrybucję LiveCD Linux, np. Ubuntu.&lt;br /&gt;&lt;br /&gt;2) Na komputerze źródłowym montujesz partycje, która zawiera system, który chcesz skopiować, a następnie pakujesz i wysyłasz go następującymi poleceniami:&lt;br /&gt;&lt;div class=code&gt;cd /mnt/sda1&lt;br /&gt;tar -czpsf - . | pv -b | nc -l 3333&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;3) Na komputerze docelowym montujesz partycje na którą chcesz skopiować pliki i zaczynasz ją kopiować i rozpakowywać:&lt;br /&gt;&lt;div class=code&gt;cd /mnt/sda1&lt;br /&gt;nc 192.168.10.101 3333 | pv -b | tar -xzpsf -&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;nc&lt;/b&gt; (netcat) - komenda która jest używana do połączeń TCP pomiędzy dwoma hostami.&lt;br /&gt;&lt;b&gt;pv&lt;/b&gt; (progress viewer) - komenda która jest używana do wyświetlania progresu transferu.&lt;br /&gt;&lt;b&gt;tar&lt;/b&gt; - jest używany do archiwizacji plików.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-4970789646787809241?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/4970789646787809241/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=4970789646787809241' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/4970789646787809241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/4970789646787809241'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/11/jak-skopiowa-cay-system-pomidzy-dwoma.html' title='Jak skopiować cały system pomiędzy dwoma komputerami?'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-8542647714366441490</id><published>2008-11-09T12:38:00.003+01:00</published><updated>2008-11-09T12:52:18.715+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Jak ściągnąć całą stronę www za pomocą wget</title><content type='html'>Dzisiaj trochę o małym wielkim programie do ściągania plików o nazwie wget, a właściwie o jego umiejętności ściągania całych stron internetowych bez mrugnięcia okiem.&lt;br /&gt;&lt;br /&gt;Aby ściągnąć daną stronę www musimy wydać następującą komendę:&lt;br /&gt;&lt;div class=code&gt;$ wget --recursive --no-clobber --page-requisites --html-extension --convert-links --restrict-file-names=windows --domains kursyonline.pl --no-parent www.kursyonline.pl/kursy/php&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Dobrze, a teraz przeanalizujmy poszczególne wpisy:&lt;br /&gt;&lt;b&gt;--recursive&lt;/b&gt; - ściągaj całą stronę z podstronami.&lt;br /&gt;&lt;b&gt;--no-clobber&lt;/b&gt; - nie nadpisuj plików, które już istnieją (przydatne jeszcze wcześniej nie ściągnęliśmy całej strona a teraz chcemy kontynuować ściąganie).&lt;br /&gt;&lt;b&gt;--page-requisites&lt;/b&gt; - ściągaj wszystkie pliki związane ze stroną, czyli css, js, etc.&lt;br /&gt;&lt;b&gt;--html-extension&lt;/b&gt; - zapisuj pliki używając rozszerzenia html.&lt;br /&gt;&lt;b&gt;--convert-links&lt;/b&gt; - skonwertuj linki tak aby działały lokalnie, czyli off-line.&lt;br /&gt;&lt;b&gt;--restrict-file-names=windows&lt;/b&gt; - zmodyfikuj nazwy linków tak by działały również na windowsie.&lt;br /&gt;&lt;b&gt;--domains kursyonline.pl&lt;/b&gt; - ściągaj strony tylko z domeny kursyonline.pl. Nie podążaj za linkami zewnętrznymi.&lt;br /&gt;&lt;b&gt;--no-parent&lt;/b&gt; - nie podążaj za linkami z poza katalogu /kursy/php/.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-8542647714366441490?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/8542647714366441490/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=8542647714366441490' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/8542647714366441490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/8542647714366441490'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/11/jak-cign-ca-stron-www-za-pomoc-wget.html' title='Jak ściągnąć całą stronę www za pomocą wget'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-9063984935460225901</id><published>2008-11-06T23:00:00.003+01:00</published><updated>2008-11-06T23:11:19.714+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Video tutorial IPTABLES - linux firewall</title><content type='html'>Bardzo interesujący tutorial o budowie firewalla za pomocą IPTABLES. Zapraszam do oglądania!&lt;br /&gt;&lt;br /&gt;Część 1&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ldB8kDEtTZA&amp;hl=pl&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/ldB8kDEtTZA&amp;hl=pl&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Część 2&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/aDaEXxRHeXY&amp;hl=pl&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/aDaEXxRHeXY&amp;hl=pl&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Część 3&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/JojqHKcSxpo&amp;hl=pl&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/JojqHKcSxpo&amp;hl=pl&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;A poniżej gotowy firewall:&lt;br /&gt;&lt;br /&gt;&lt;div class=code&gt;   1. #!/bin/sh  &lt;br /&gt;   2.   &lt;br /&gt;   3. IPT=/sbin/iptables  &lt;br /&gt;   4.   &lt;br /&gt;   5. $IPT -F  &lt;br /&gt;   6.   &lt;br /&gt;   7. #policies  &lt;br /&gt;   8.   &lt;br /&gt;   9. $IPT -P OUTPUT ACCEPT  &lt;br /&gt;  10. $IPT -P INPUT DROP  &lt;br /&gt;  11. $IPT -P FORWARD DROP  &lt;br /&gt;  12. $IPT -t nat -P OUTPUT ACCEPT  &lt;br /&gt;  13. $IPT -t nat -P PREROUTING ACCEPT  &lt;br /&gt;  14. $IPT -t nat -P POSTROUTING ACCEPT  &lt;br /&gt;  15.   &lt;br /&gt;  16.   &lt;br /&gt;  17.   &lt;br /&gt;  18. $IPT -N SERVICES  &lt;br /&gt;  19.   &lt;br /&gt;  20. #drop spoofed packets  &lt;br /&gt;  21.   &lt;br /&gt;  22. $IPT -A INPUT --in-interface ! lo --source 127.0.0.0/8 -j DROP  &lt;br /&gt;  23.   &lt;br /&gt;  24. #limit ping requests  &lt;br /&gt;  25.   &lt;br /&gt;  26. $IPT -A INPUT -p icmp -m icmp -m limit --limit 1/second -j ACCEPT  &lt;br /&gt;  27.   &lt;br /&gt;  28. #drop bogus packets  &lt;br /&gt;  29.   &lt;br /&gt;  30. iptables -A INPUT   -m state --state INVALID -j DROP  &lt;br /&gt;  31. iptables -A FORWARD -m state --state INVALID -j DROP  &lt;br /&gt;  32. iptables -A OUTPUT  -m state --state INVALID -j DROP  &lt;br /&gt;  33. $IPT -t filter -A INPUT -p tcp --tcp-flags FIN,ACK FIN -j DROP  &lt;br /&gt;  34. $IPT -t filter -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP  &lt;br /&gt;  35. $IPT -t filter -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP  &lt;br /&gt;  36. $IPT -t filter -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP  &lt;br /&gt;  37. $IPT -t filter -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP  &lt;br /&gt;  38. $IPT -t filter -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP  &lt;br /&gt;  39. $IPT -t filter -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP  &lt;br /&gt;  40.   &lt;br /&gt;  41. #allowed inputs  &lt;br /&gt;  42.   &lt;br /&gt;  43. $IPT -A INPUT --in-interface lo -j ACCEPT  &lt;br /&gt;  44. $IPT -A INPUT -j SERVICES  &lt;br /&gt;  45.   &lt;br /&gt;  46. #allow responses  &lt;br /&gt;  47.   &lt;br /&gt;  48. $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT  &lt;br /&gt;  49.   &lt;br /&gt;  50.   &lt;br /&gt;  51. #allow services  &lt;br /&gt;  52.   &lt;br /&gt;  53. $IPT -A SERVICES -p tcp --dport 22 -j ACCEPT  &lt;br /&gt;  54. $IPT -A SERVICES -p tcp --dport 8080 -j ACCEPT  &lt;br /&gt;  55.   &lt;br /&gt;  56. $IPT -A SERVICES -m iprange --src-range 192.168.1.1-192.168.1.254 -p tcp --dport 631 -j ACCEPT  &lt;br /&gt;  57.   &lt;br /&gt;  58. $IPT -A SERVICES -m iprange --src-range 192.168.1.1-192.168.1.254 -p udp --dport 631 -j ACCEPT  &lt;br /&gt;  59.   &lt;br /&gt;  60.   &lt;br /&gt;  61. $IPT -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080  &lt;br /&gt;  62.   &lt;br /&gt;  63. $IPT -A FORWARD -p tcp --dport 8080 -j ACCEPT  &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-9063984935460225901?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/9063984935460225901/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=9063984935460225901' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/9063984935460225901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/9063984935460225901'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/11/video-tutorial-iptables-linux-firewall.html' title='Video tutorial IPTABLES - linux firewall'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-8490448967752092566</id><published>2008-11-05T19:05:00.007+01:00</published><updated>2008-11-05T19:21:42.904+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Jak odmontować pendrive'a po informacji: umount: /media/usbdisk: device is busy...</title><content type='html'>Jeżeli chcesz odmontować dysk USB i otrzymasz informację w stylu:&lt;br /&gt;&lt;br /&gt;&lt;div class=code&gt;# umount /media/usbdisk/&lt;br /&gt;umount: /media/usbdisk: device is busy&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;spróbuj uzyć komendy lsof dzięki której możesz sprawdzić który program używa twojego pendrive'a:&lt;br /&gt;&lt;br /&gt;&lt;div class=code&gt;COMMAND  PID   USER  FD TYPE DEVICE SIZE NODE NAME&lt;br /&gt;xmms    2567 wojtek cwd  DIR   8,17 4096    1 /media/usbdisk/&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Aby zobaczyć, który plik jest w użyciu wystarczy wpisać:&lt;br /&gt;&lt;br /&gt;&lt;div class=code&gt;# lsof /dev/sdb1&lt;br /&gt;COMMAND  PID USER    FD TYPE DEVICE    SIZE NODE NAME&lt;br /&gt;xmms    2567 wojtek cwd  DIR   8,17    4096    1 /media/usbdisk&lt;br /&gt;xmms    2567 wojtek  8r  REG   8,17 2713101  377 /media/usbdisk/music.mp3&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Teraz wystarczy tylko poczekać aż dany proces skończy działać lub wyłączyć go ręcznie podając PID:&lt;br /&gt;&lt;br /&gt;&lt;div class=code&gt;# kill 2567&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-8490448967752092566?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/8490448967752092566/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=8490448967752092566' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/8490448967752092566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/8490448967752092566'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/11/jak-odmontowa-pendrivea-po-informacji.html' title='Jak odmontować pendrive&apos;a po informacji: umount: /media/usbdisk: device is busy...'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-5002340412638310464</id><published>2008-10-22T06:43:00.002+02:00</published><updated>2008-10-22T06:50:07.410+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Resetowanie zapomnianego hasła w MySQL</title><content type='html'>Czasami zdarza się nam zapomnieć hasła roota w mysql. Mi to się zdarzyło przynajmniej kilka razy na serwerach na których rzadko pracowałem. Na szczęście możliwe jest zresetowania hasła do mysql z poziomu systemowego użytkownika root.&lt;br /&gt;&lt;br /&gt;Najpierw zatrzymujemy mysql:&lt;br /&gt;&lt;br /&gt;/etc/init.d/mysql stop&lt;br /&gt;&lt;br /&gt;Następnie:&lt;br /&gt;&lt;br /&gt;mysqld –skip-grant-tables –u root&lt;br /&gt;mysql -u root&lt;br /&gt;mysql&gt; use mysql;&lt;br /&gt;mysql&gt; UPDATE user SET Password = PASSWORD(’newpass’) WHERE User = ‘root’;&lt;br /&gt;mysql&gt; FLUSH PRIVILEGES;&lt;br /&gt;&lt;br /&gt;I gotowe. Teraz nasze hasło do mysql to ’newpass’.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-5002340412638310464?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/5002340412638310464/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=5002340412638310464' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/5002340412638310464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/5002340412638310464'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/10/resetowanie-zapomnianego-hasa-w-mysql.html' title='Resetowanie zapomnianego hasła w MySQL'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-1216678456414344582</id><published>2008-10-10T19:21:00.013+02:00</published><updated>2008-10-19T10:13:56.479+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='RegEx'/><title type='text'>Wprowadzenie do wyrażeń regularnych w PHP - metaznaki</title><content type='html'>Jeżeli często używamy linuxa to na pewno wyrażenia regularne nie są nam obce. Również wiele języków webowych ma dobrze rozwiniętą obsługę tych wyrażeń. Dzisiaj przyjrzymy się wykorzystywaniu wyrażeń regularnych (ang. regular expressions, w skrócie regex lub regexp) w PHP. &lt;br /&gt;Wyrażenia regularne są potężną techniką opisywania wzorców tekstu występujących w plikach tekstowych - wiele programów wykorzystuje tą funkcjonalność. Programy do wyszukiwania takie jak 'grep'  opierają się właśnie na tych wyrażeniach. Zasadniczo wyrażenia regularne ukształtowały się w świecie linuxa. Powstało wiele języków skryptowych, takich jak perl, ruby, PHP, JS, etc., które bazują na wyrażeniach regularnych. Wyrażenia regularne są również intensywnie wykorzystywane w module mod_rewrite w Apache'u, który opisałem we wcześniejszych postach. Coraz mniej jest języków, które nie posiadają choćby kilku funkcji wykorzystujących wyrażenia regularne, tak więc bardzo istotną sprawą jest opanowanie tego wielofunkcyjnego narzędzia.&lt;br /&gt;Nie przestrasz się zewnętrznym wyglądem ułożonych wyrażeń regularnych; mnóstwo znaków specjalnych sprawia wrażenia trudnego do opanowania, ale jak już poznasz podstaw to uświadomisz sobie, że łatwiej już chyba nie może być. Przykładowo, za pomocą wzorca [a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z]{2,4} można sprawdzić poprawność wpisanego w formularz adresu e-mail. Poznając podstawy wyrażeń regularnych powyższy zapis stanie się dla Ciebie jasny jak słońce.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Metaznaki:&lt;/b&gt;&lt;br /&gt;Wyrażenia regularne mogą składać się ze zwykłych znaków lub z metaznaków. Zwykłe znaki to np. zapis "RegEx is easy", natomiast metaznaki oprócz tego, że wyglądają jak zwykłe znaki, mają dodatkowo pewne zastosowanie merytoryczne. W wyrażeniach regularnych używając zwykłego znaku np. "P", znajdujemy w tekście "P". Jeżeli użyjemy metaznaku, możemy dopasować o wiele więcej szukanych fragmentów.&lt;br /&gt;Wyróżniamy następujące metaznaki:&lt;br /&gt;&lt;b&gt;. + ? * ^ $ [ ( ) \ | {&lt;/b&gt;&lt;br /&gt;Słownie te znaki to: kropka, plus, znak zapytania, asterisk, karetka, dolar, nawias kwadratowy otwierający, nawiasy zwykłe, backslash, kreska pionowa (alternatywa), klamra otwierająca. &lt;br /&gt;&lt;br /&gt;&lt;div class=code&gt;&lt;b&gt;.&lt;/b&gt; - kropka pasuje do dowolnego znaku, a więc wyrażenie r.d pasuje do wyrażeń rod, rad, rid, r$d, r6d, itd.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;+&lt;/b&gt; - plus to jedno lub więcej wystąpień wyrażenia poprzedzającego, np. Do+M pasuje do DoM, DooM, DoooM, DooooM, itd.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;?&lt;/b&gt; - znak zapytania oznacza zero lub jedno wystąpienie poprzedzajacego wyrażenia, a więc np. Do?M pasuje do DM lub DoM.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;*&lt;/b&gt; - asteriks to zero lub więcej wystąpień wyrażenia poprzedzającego, np. Do*M pasuje do DM, DoM, DooM, DoooM, DooooM, itd.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;^&lt;/b&gt; - karetka użyta na początku wyrażenia (przed nawiasami) odpowiada za początek linii, natomiast użyta po nawiasie kwadratowym oznacza zaprzeczenie, np. [^0-9] oznacza wszystkie znaki z wyjątkiem liczb od 0 do 9.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;$&lt;/b&gt; - dolar oznacza koniec danego napisu lub po prostu koniec linii&lt;br /&gt;&lt;br /&gt;&lt;b&gt;[ ]&lt;/b&gt; - nawiasy kwadratowe służą do dopasowywania liter z podanego zbioru, np. [dgj] pasuje do jednej z liter, d, g lub j. [a-z] oznacza wszystkie małe litery od a do z, jednak taki zakres nie obejmuje polskich znaków. Aby określić wszystkie znaki polskiego alfabetu musimy użyć wyrażenia [a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ]&lt;br /&gt;&lt;br /&gt;&lt;b&gt;( )&lt;/b&gt; - tzw. atom - umożliwia zastosowanie alternatywy | (or) oraz na dopasowywanie powtarzających się fragmentów ciągów znaków. Przykładowo, do wyrażenia /^(abc)+$/ pasują ciągi "abc", "abcabc", "abcabcabc" itd.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;\&lt;/b&gt; - backslash pozwala nam na używanie specjalnych znaków we wzorcu, tak aby były również wyszukiwane a nie traktowane jako metaznak. Tzn. aby znaleźć plik.txt musimy użyć zapisu plik\.txt. Wyrażenie plik.txt potraktowałoby nam kropkę jako metaznak i znalazłoby również wyrażenia takie jak plikitxt, plik1txt, etc.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;|&lt;/b&gt; - pionowa kreska (ang. pipeline)oznacza alternatywę. Inaczej mówiąc jest to operator logiczny 'OR'. Jeżeli np. napiszemy a|b|c oznacza to, że w danym wyrażeniu może wystąpić a lub b lub c.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Najłatwiej jest zrozumieć działanie metaznaków na przykładzie. Załóżmy, że chcemy w pliku tekstowym odnaleźć wszelkie wpisy o treści *.php to nasze wyrażenie regularne będzie miało postać \*\.php a nie *.php, ponieważ * i . to metaznaki i aby były traktowane jako normalny znak musimy użyć backslasha. Z angielskiego nazywa się to escape character, jednak trzeba pamiętać aby używać go tylko przed mataznakami, czyli przed '(', ')', '[', ']', '{', '}', '\', '*', '|', '^', '$', '?' przed zwykłymi znakami powoduje coś zupełnie innego, a mianowicie predefiniowane klasy znakowe. Ale o tym w kolejnym poście.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-1216678456414344582?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/1216678456414344582/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=1216678456414344582' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1216678456414344582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1216678456414344582'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/10/wprowadzenie-do-wyrae-regularnych-w-php.html' title='Wprowadzenie do wyrażeń regularnych w PHP - metaznaki'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-6108997687840576530</id><published>2008-10-03T20:36:00.009+02:00</published><updated>2008-10-04T22:23:15.619+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Strutkura katalogów systemu Linux</title><content type='html'>Sposób w jaki Linux rozmieszcza swoje pliku na dysku jest kompletnie różny od tego stosowanego w Windowsie. Każdy z użytkowników Linuxa zapewne pamięta kiedy pierwszy raz wyświetlił zawartość swojej partycji linuksowej - jak wielkie było było zdziwienie a zarazem przerażenie na myśl o pracy z takim "drzewem" a raczej "lasem" plików. Obecnie użytkownicy którzy przechodzą na Linuxa mają już pewien zarys tego co mogą tam zobaczyć, jednak dobra znajomość katalogów systemu jest kluczem do opanowania Linuxa w stopniu średnio-przeciętnego użytkowania.&lt;br /&gt;Ten artykuł jest wstępem do poznania struktury plików - zostanie tu opisany pierwszy poziom katalogów Linuksa. Cały artykuł ma na celu ułatwić początkowym użytkownikom tego systemu wybór odpowiednich katalogów do instalacji konkretnych programów.&lt;br /&gt;Poniżej znajduję się przykładowa struktura katalogów dla RedHat Linux.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_zmRa1FbVcEc/SOZpflNkHOI/AAAAAAAAAFc/AYUfqhx_eQA/s1600-h/FS-layout.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_zmRa1FbVcEc/SOZpflNkHOI/AAAAAAAAAFc/AYUfqhx_eQA/s400/FS-layout.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5253002006660127970" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;/&lt;/b&gt;&lt;br /&gt;Katalog główny oznaczony jest w Linuxie symbolem "/" (slash) - określonym jest również słowem "root", które oznacza z angielskiego korzeń. Wszystkie katalogi wywodzą się od tego jednego. To w tym miejscu jest zainstalowana cała struktura plików. Przenosząc to na język Windowsa - "/" jest tym sam co "c:" w Windowsie. Linux nie uruchomi się bez zawartości "/". Usunięcie stąd plików jest tym samym co usunięcie zawartości folderu "c:/Windows" w Windowsie.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;/bin&lt;/b&gt;&lt;br /&gt;Folder /bin zawiera ważne programy systemowe, czyli pliki binarne (wykonywalne). Od tego właśnie wywodzi się nazwa - "bin" jest skrótem od "binary". To tutaj znajdują się najczęściej używane programy, takie jak: cat, less, grep, more, cp, mkdir, date, dmesg, etc...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;/boot&lt;/b&gt;&lt;br /&gt;Jak sama nazwa wskazuje, ten katalog jest odpowiedzialny za uruchomienie całego systemu oraz same jądro Linuxa. Gdyby nie jądro nie byłoby Linuxa. To ono odpowiada za wszystkie uruchomione procesy w systemie. Drugim krytycznym dla systemu programem znajdującym w katalogu boot jest bootloader, czyli program odpowiadający za zlokalizowane jądra i uruchomienie go.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;/dev&lt;/b&gt;&lt;br /&gt;"Dev" jest skrótem słowa "device", czyli urządzenie. W Linuxie każde urządzenie jest plikiem. Oznacza to, że dla każdego podłączonego urządzenia w systemie zostaje utworzony odpowiadający mu plik, za pomocą którego system komunikuje się z urządzeniem. Jeżeli system wykrywa dysk kojarzy go z plikiem np."/dev/sda". W tym przypadku /dev jest katalogiem a /sda plikiem odpowiadającym za dysk. Tutaj koniecznie trzeba powiedzieć o pliku /dev/null, który jest jakby czarną dziurą - śmietnikiem na bity, które do niego wpadają. Wykorzystujemy je gdy np. chcemy przekierować dane ze standardowego wyjścia (ekranu) do miejsca w którym dane nie będą ani zapisane ani wyświetlane, czyli do /dev/null. Jeżeli np. chcemy sformatować cały dysk twardy możemy to zrobić komendą: 'dd if=/dev/null of=/dev/sda'. Skopiuje to zawartość urządzenia /dev/null, czyli naszą próżnię, na dysk twardy - cała zawartość dysku zostanie skasowana.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;/etc&lt;/b&gt;&lt;br /&gt;Jeżeli lubisz konfigurować programy, ustawiać system pod własne wymagania i grzebać w ustawieniach to w tym katalogu będziesz spędzał najwięcej czasu. W /etc system przechowuje pliki konfiguracyjne wszystkich programów. Oczywiście programy pod Linuxem domyślnie są już dosyć rozsądnie skonfigurowane ale jeżeli je jeszcze bardziej zoptymalizować to wystarczy, że otworzysz do edycji odpowiedni tekstowy plik konfiguracyjny i edytujesz odpowiednie linie. Przeważnie pliki konfiguracyjne są opatrzone sensownymi komentarzami i gotowymi komendami, które wystarczy odhashować i gotowe. Wystarczy podstawowa znajomość języka angielskiego.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;/lib&lt;/b&gt;&lt;br /&gt;W tym katalogu znajdziemy skompilowane biblioteki niezbędne do uruchomienia systemu. Większość plików znajdujących się w tym katalogu ma rozszerzenie '.so' co oznacza 'shared object'. Te pliki są tak zbudowane aby mogły być wykorzystane przez programu różnego rodzaju. Dzięki temu nie musimy ściągać różnych programów po 300 mb, ale np. programy, które zajmują 50 mb i korzystają z tych samych plików '.so' co inne programy. W Windowsie takie pliki mają nazwę 'Dynamically Linked Libraries' powszechnie znano jako DLL. Jako przeciętny użytkownik prawdopodobnie nie będziesz musiał korzystać z plików, które znajdują się w katalogu /lib. Cały proces kojarzenia plików odbywa się automatycznie. Czasami jednak możesz spotkać się z błędem 'missing shared object'. Oznacza to, że program który instalujesz lub uruchamiasz wymaga obecności innego programu.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;/lost+found&lt;/b&gt;&lt;br /&gt;W tym katalogu znajdziesz pliki odnalezione podczas wykonywania testów dysku. Do czego to się może przydać? Jeżeli użytkownik nie zamknie systemu prawidłowo lub system dozna nagłego braku zasilania to w trakcie następnego wczytywania się systemu zostanie uruchomiony program skanujący, który sprawdzi czy wszystko jest w porządku i w razie potrzeby spróbuje naprawić błędy. Wszelkie pliki uszkodzone i naprawione są umieszcza w katalogu /lost+found aby użytkownik mógł je przejrzeć i podjąć decyzję co z nimi dalej zrobić.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;/mnt&lt;br /&gt; /media&lt;/b&gt;&lt;br /&gt;Te dwa katalogi znajdujące się w głównym katalogu sytemu odpowiedzialne są za montowanie dysków, cd-romów, pendrive'ów oraz wszelkich urządzeń przenoszących dane. W zależności od dystrybucji Linuxa w katalogu /media montowane są nośniki wymienne jak pendrive, dyskietka, karty pamięci, czy napędy cdrom. Natomiast w /mnt montowane są dyski twarde. Wyjątkiem tutaj jest Ubuntu, gdzie dyski montowane są w katalogu /media. We wcześniejszych dystrybucjach Linuxa konieczne było montowanie nośników ręcznie, tzn. poprzez odpowiednie komendy. Obecnie, w większości dystrybucji nośniki montowane są automatycznie po podłączeniu. Oczywiście można takie ustawienia zmienić i montować ręcznie. To samo dotyczy miejsca montowania - /mnt i /media to tylko domyślna konfiguracja dla montowanych nośników. Tak naprawdę możesz zamontować dowolne urządzenie w jakimkolwiek katalogu na dysku, jeżeli oczywiście masz do niego dostęp. Jednak montowanie urządzeń w tych katalog znacznie ułatwia nam późniejsze poruszanie się po nich. Jeśli chodzi o katalog /media to jest on nową rzeczą w Linuxie. Kiedyś używało się tylko katalogu /mnt.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;/opt&lt;/b&gt;&lt;br /&gt;Tutaj możemy instalować oprogramowanie dodatkowe. W Linuxie, mówiąc o oprogramowaniu dodatkowym, mam na myśli takie, które nie jest dostępne w repezytorium i jest instalowane z paczek. Aby nie oddzielać programów instalowanych ręcznie od tych systemowych poprzez np.zmianę nazwy katalogów możemy je po prostu zainstalować w /opt. Różne dystrybucje różnie się ustosunkowują do tego katalogu. Jeżeli domyślnie instalujesz Apache' jego pliki konfiguracyjne znajdują się w /etc. Jeżeli zainstalujesz Apache'a w pakiecie LAMP, wszystkie pliki instalują się w katalogu /opt. Więc często w nowych dystrybucjach ten katalog jest po prostu wykorzystywany do przechowywania oprogramowania trzeciego.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;/proc&lt;/b&gt;&lt;br /&gt;W tym katalogu znajdują się wszelkie informacje odnośnie uruchomionych na twoim systemie procesów jak również o stanie komputera. Np. plik '/proc/cpuinfo' przechowuje dane na temat twojego procesora: prędkość, marka, taktowanie, etc. Znajdziesz tam również informację związane z systemem plików, ilością wolnej pamięci, miejsca, itd.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;/sys&lt;/b&gt;&lt;br /&gt;Od wersji jądra w wersji 2.6 znajdziemy tam interfejs zmiany parametrów jądra. Obecnie katalog /sys przejmuje funkcjonalność katalogu /proc.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;/tmp&lt;/b&gt;&lt;br /&gt;W tym katalogu, jak sama nazwa wskazuje, zapisywane są pliki tymczasowe. Znajdziesz tutaj pliki, które system musiał pobrać np. podczas surfowania po internecie lub instalacji jakiegoś programu. Większość plików z tego katalogu po zakończeniu danej operacji jest usuwana automatycznie, jednak warto co jakiś czas tam zajrzeć aby sprawdzić czy system nie generuje nam jakiegoś zbędnego śmietnika plików.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;/usr&lt;/b&gt;&lt;br /&gt;Gdybyś teraz użył komendy 'ls /usr/bin' prawdopodobnie byś zobaczył bardzo długą listę różnego rodzaju programu. Pewnie trochę to Cię dziwi bo przecież wszystkie pliki binarne miały być trzymane w katalogu /bin, więc skąd tego tutaj tyle? Dzieje się tak ponieważ Linux rozdziela wszystkie programy na te które są niezbędne do uruchomienia systemu oraz na te, które są używane "dla wygody" przez użytkownika, np. przeglądarki, odtwarzacze muzyki i filmów, programy graficzne, itd, itd... Porównując Linuxa z Windowsem możemy powiedzieć, że /usr jest dla Linuxa tym czym "c:/Program Files" dla Windowsa.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;/var&lt;/b&gt;&lt;br /&gt;Jeżeli na twoim systemie działają różnego rodzaju serwery pocztowe, www, ftp, ssh itp. to będziesz bardzo często korzystał z katalogu /var, ponieważ znajdują się tutaj logi systemowe. Cały katalog działa podobnie do /tmp, ponieważ pliki przechowywane tutaj są tymczasowe ale nie w tym samym sensie co te w /tmp. Pliki znajdujące się w katalogu /var nie są krytyczne dla uruchomienia żadnego programu, natomiast pomagają użytkownikowi diagnozować co dzieje się w tle jego systemu. Z jaką częstotliwością te pliki będą się kasowały oraz ile miejsca zajmowały zależy od nas. W katalogu /var/mail znajduje się nasza poczta; wszystkie wysłane i odebrane wiadomości, więc nie oszczędzajmy miejsca na ten katalog.&lt;br /&gt;&lt;br /&gt;Mam nadzieję, że ten artykuł chociaż trochę przybliżył początkującym użytkownikom jak również tym, którzy już od jakiegoś czasu pracują na Linuxie, rozeznanie się w strukturze katalogów Linuxa. Oczywiście Linux zawiera jeszcze mnóstwo miejsc o których nie pisałem a które mogą być kluczem w rozwiązaniu pewnym problemów użytkownika lub administratora systemu. Jeżeli masz jakiś konkretny problem związany z tym postem pisz do mnie lub w komentarzu. Postaram się Ci pomóc!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-6108997687840576530?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/6108997687840576530/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=6108997687840576530' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6108997687840576530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6108997687840576530'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/10/strutkura-katalogw-systemu-linux.html' title='Strutkura katalogów systemu Linux'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zmRa1FbVcEc/SOZpflNkHOI/AAAAAAAAAFc/AYUfqhx_eQA/s72-c/FS-layout.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-8158869164111989625</id><published>2008-09-27T17:09:00.003+02:00</published><updated>2008-09-27T17:29:56.314+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Linux na PlayStation 3</title><content type='html'>Zapewne nie każdy wie, że na ostatniej konsoli wyprodukowanej przez sony można uruchomić system operacyjny, a mianowicie Linux. Taka funkcjonalność co prawda nie jest nowa, ale po raz pierwszy jest to standardowa możliwość, bez dodatkowych modyfikacji oraz rozszerzeń. Do tej pory konsole były tak konstruowane aby zapobiegać uruchomieniu obcych systemów a tym bardziej systemów darmowych. Inną konsolą na której jest to możliwe jest Xbox, jednak tutaj konieczne jest zainstalowanie dodatkowo chipa, więc wyraźnie widać kto tutaj zrobił zdecydowany krok naprzód.&lt;br /&gt;Dzięki możliwości uruchomienia na PS3 systemu Linux mamy naprawdę duże możliwości konfiguracji. Jeżeli wspomnę, że jest możliwość podłączenia do konsoli klawiatury i myszy mamy do czynienia z przenośnym pecetem, na którym pójdą zaawansowane gry (te pod PSX). Jedyna rzecz, której nie uruchomimy na konsolowym systemie to akceleratory graficzne, ale patrząc na możliwość samej konsoli jeśli chodzi o gry to na pewno możemy sobie bez tego poradzić. Teraz możemy używać konsoli do surfowania po internecie, pracy w oprogramowaniu biurowym, uruchamiać wszelkie rodzaje formatów audio i video oraz udostępniać pliki w sieci! &lt;br /&gt;Zalety linuxa znamy świetnie, ale znamy też jego rzekome wady, do których można zaliczyć trudny proces instalacji i konfiguracji na PS3. Dystrybucje linuxa dopiero zaczynają się dostosowywać do możliwości ich adaptacji na konsoli. Jak na razie ludzie którzy posiadają linuxa na swojej konsoli to są w głównej mierze hobbyści, którzy z linuxem są za pan brat od wielu lat i instalacja na flashdiskach nie sprawia im żadnego problemu. Ale pojawiło się światełko w tunelu dla ludzi, którzy znają linuxa albo ze słyszenia albo z pobieżnej pracy w graficznym środowisku. Pojawiła się dystrybucja &lt;a href="http://www.terrasoftsolutions.com/products/ydl/"&gt;Yellow Dog&lt;/a&gt;, która jest przeznaczona dla komputerów z procesorem PowerPC (np. komputery Amiga, wcześniejsze modele Apple Macintosh z procesorami Motorola oraz PlayStatin 3). Bazuje ona na dystrybucji Red Hat Linux i wydaję się, że wyjątkowo dobrze się rozwija. &lt;br /&gt;Jak widać o linuxie w Świecie coraz głośniej; coraz więcej ludzi i organizacji docenia zalety tego w pełni konfigurowalnego systemu, więc osobiście uważam, ze czas poświęcony na nauczanie oraz samą pracę w tym systemie nigdy nie będzie czasem straconym.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-8158869164111989625?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/8158869164111989625/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=8158869164111989625' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/8158869164111989625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/8158869164111989625'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/09/linux-na-playstation-3.html' title='Linux na PlayStation 3'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-1262216942723694521</id><published>2008-09-24T18:12:00.003+02:00</published><updated>2008-09-24T18:32:40.395+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wirtualizacja'/><title type='text'>Jak wyłączyć irytujący dzwięk "beep" w VMware</title><content type='html'>Jak w tytule, niby proste ale nie do końca. Od jakiegoś czasu moje lenistwo wzięło górę na pisaniem postów na blogu dlatego powoli przerzucam się na screencasty. Wszelkie czynności związane zwłaszcza z linuxem będę przedstawiał na wirtualnych systemach, prawdopodobnie VMware. W tej chwili jestem w fazie testów i pewien problem przysporzyło mi wyłączenie irytującego dźwięku, który wydaję VMware jeżeli wykonamy w konsoli nieprawidłową operację np. usuwając jakiś tekst linii klawiszem backspace i w momencie skasowanie całego tekstu gdy dalej naciskamy backspace. Wydaję to się nie dużym problemem ale przy nagrywaniu screencastów znacznie obniża jakość nagrania. Wbrew temu co większość myśli sprawa wygląda trochę bardziej skomplikowanie niż tylko wejście w ustawienia i odhaczeniu checkboxa sound. Po kolei napiszę jak to zrobić w trzech najbardziej popularnych systemach operacyjnych.&lt;br /&gt;&lt;br /&gt;1. Microsoft Vista&lt;br /&gt;Cała sprawa wyłączenia tego dźwięku sprowadza się do odnalezienia pliku konfiguracyjnego VMware config.ini i wpisaniu tam linii:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;mks.noBeep = "TRUE"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Problemem jest odnalezienie tego pliku o ile w ogóle istnieje. Vista przetrzymuje ten plik w katalogu &lt;i&gt;ProgramData/VMware/VMware Workstation&lt;/i&gt;. Jeżeli tam go nie znajdziemy to znaczy, że nie edytowaliśmy żadnych ustawień w VMware i należy to zrobić poprzez edycja jakichś ustawień w programie, np. przez zmianę przydzielonej pamięci do hosta. Taka czynność powinna spowodować utworzenie takiego pliku. Jeżeli i to nie pomogło to należy taki plik utworzyć ręcznie w podanym katalogu. Przy edycji konieczne jest otworzenie tego pliku jako administrator.&lt;br /&gt;&lt;br /&gt;2. Microsoft XP&lt;br /&gt;Analogicznie jak powyżej tyle że w katalogu &lt;i&gt;C:\Users\All Users\VMware\VMware Workstation\config.ini&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;3. Linux&lt;br /&gt;W tym miejscu linux nie różni się od powyższych systemów. katalog to: &lt;i&gt;~/.vmware/config&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;W przypadku gdyby dźwięk ciągle się wydobywał piszcie w komentarzach.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-1262216942723694521?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/1262216942723694521/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=1262216942723694521' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1262216942723694521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1262216942723694521'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/09/jak-wyczy-irytujcy-dzwik-beep-w-vmware.html' title='Jak wyłączyć irytujący dzwięk &quot;beep&quot; w VMware'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-6974599876979946011</id><published>2008-08-27T07:16:00.005+02:00</published><updated>2008-08-27T16:53:07.646+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='Na wesoło'/><title type='text'>EA Sports kontra użytkownicy TouTube</title><content type='html'>Dzisiaj trochę z innej beczki ale ciągle o programowaniu ;) Jak wiadomo napisanie bezbłędnego programu nie jest rzeczą łatwą, zwłaszcza jeśli chodzi o grę komputerową. Tylko programiści gier mogą wiedzieć jak wiele warunków musi zostać spełnionych i ile testów musi przejść program zanim zostanie ostatecznie skończona - a terminy gonią. Dotyczy to w szczególności gier, które ukazują się co roku, odświeżone, z nazwą różniącą się tylko rokiem na końcu. Wiecie już o jakie gry chodzi? Oczywiście, słynne gry sportowo-zręcznościowe EA Sports. Bezwzględni użytkownicy YouTube nie przepuszczą żadnej grze, jeżeli zauważą jakieś bugi, publikując błędy w postaci filmów w internecie. Wchodząc na YouTube możecie znaleźć mnóstwo tego typu filmów, wystarczy wpisać "game bugs" lub coś podobnego. Do tej pory nikt z tego powodu nie był specjalnie urażony; twórcy gier uczyli się na błędach a internauci się śmiali. Levinator25 myślał, że tak będzie również tym razem i zamieścił na YouTubie filmik z bug'iem z Tiger Woods PGA Tour 08, w którym mogliśmy zobaczyć jak nasza postać w grze cudownie chodzi po wodzie. Chciałbym zobaczyć minę Levinatora25, kiedy zobaczył odpowiedź EA Sports na jego film ;) Obejrzyjmy ją razem.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/FZ1st1Vw2kY&amp;hl=pl&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/FZ1st1Vw2kY&amp;hl=pl&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-6974599876979946011?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/6974599876979946011/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=6974599876979946011' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6974599876979946011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6974599876979946011'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/08/ea-sports-kontra-uytkownicy-toutube.html' title='EA Sports kontra użytkownicy TouTube'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-3685153429929430469</id><published>2008-08-24T21:08:00.006+02:00</published><updated>2008-08-24T21:25:35.054+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Google i matematyka</title><content type='html'>Właśnie trafiłem na pewną ciekawostkę. Nasza ulubiona wyszukiwarka nie jest jednak idealna - wystarczy wejść na &lt;a href="http://www.google.pl/search?q=399999999999999-399999999999998&amp;ie=utf-8&amp;oe=utf-8&amp;aq=t&amp;rls=org.mozilla:pl:official&amp;client=firefox-a"&gt;google.pl&lt;/a&gt; i sprawdzić ile to jest 399 999 999 999 999-399 999 999 999 998. My znamy wynik, ale czy google zna? A może to kolejny żart jego twórców, obdarzonych tak dobrze już znanym i nie do końca rozumianym poczuciem humoru?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-3685153429929430469?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/3685153429929430469/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=3685153429929430469' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/3685153429929430469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/3685153429929430469'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/08/google-i-matematyka.html' title='Google i matematyka'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-2872795898735591926</id><published>2008-08-17T13:42:00.023+02:00</published><updated>2008-08-27T16:53:38.474+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Podstawy HTML i CSS - wideo tutorial</title><content type='html'>Serfując w sieci znalazłem bardzo interesujący tutorial - można się z niego w 40 minut nauczyć podstaw HTML i kilka naprawdę istotnych rzeczy na temat CSS. Jeżeli ktoś zaczyna zabawę z tymi językami to naprawdę gorąco polecam zacząć od tego - to tylko 40 minut!&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/GwQMnpUsj8I&amp;hl=pl&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/GwQMnpUsj8I&amp;hl=pl&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;i&gt;źródło: http://pl.youtube.com/watch?v=GwQMnpUsj8I&amp;feature=rec-fresh&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-2872795898735591926?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/2872795898735591926/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=2872795898735591926' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2872795898735591926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2872795898735591926'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/08/podstawy-html-i-css-wideo-tutorial.html' title='Podstawy HTML i CSS - wideo tutorial'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-8164486081406164376</id><published>2008-08-15T21:46:00.013+02:00</published><updated>2008-08-17T14:26:23.128+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.htaccess'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>Mod_rewrite, czyli przyjazne adresy URL z .htaccess</title><content type='html'>Często zdarza się, że nasze adresy URL do podstron zaczynają nabierać naprawdę przerażająco długiej długości, np. &lt;i&gt;/index.php?id=galeria&amp;sid=2008&amp;ssid=wakacje&lt;/i&gt;. Z takim adresami często nie radzą sobie roboty indeksujące strony, dlatego część podstron może po prostu zostać nie dodana do indeksu. Oczywistym minusem tak długich adresów jest również ich nieczytelność. Tutaj z pomocą przychodzi nam moduł Apache'a - mod_rewrite. Przede wszystkim należy sprawdzić w pliku konfiguracyjnym Apache'a czy nasz serwer go obsługuje, szukamy więc linijki &lt;i&gt;LoadModule rewrite_module modules/mod_rewrite.so&lt;/i&gt;. Jeżeli jest odhashowana to wszystko w porządku, w przeciwnym wypadku usuwamy hasha (#). Jeżeli oczywiście nie masz dostępu do pliku konfiguracyjnego to po prostu wykonaj w jakimś skrypcie php polecenie &lt;i&gt;phpinfo();&lt;/i&gt; i odszukaj części odpowiadającej za uruchomione moduły - powinieneś tam znaleźć wpis odpowiedzialny za &lt;i&gt;mod_rewrite&lt;/i&gt;. Jeżeli go nie znajdziesz to musisz się skontaktować z administratorem w celu uruchomienia tego modułu.&lt;br /&gt;Mod_rewrite korzysta z wyrażeń regularnych, oto najważniejsze z nich:&lt;br /&gt;&lt;div class=code&gt;. Dowolny znak &lt;br /&gt;^ Oznacza początek napisu &lt;br /&gt;$ Oznacznik końca (c$ znaczy, że ciąg tekstowy musi zakończyć się na c) &lt;br /&gt;+ Wystąpi jeden lub więcej razy &lt;br /&gt;* Zero lub więcej wystąpień &lt;br /&gt;? Zero lub jedno wystąpienie &lt;br /&gt;! Negacja wyrażenia &lt;br /&gt;( Rozpoczyna grupowanie (przetwarzanie ciągu znaków, jakby był to pojedynczy element) &lt;br /&gt;[ Rozpoczyna klasę znaków, np. dopasowane do przedziału od 0 do 9, to definicja klasy [0-9]&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Przykładowy wpis do .htaccess może wyglądać tak:&lt;br /&gt;&lt;div class=code&gt;RewriteEngine on&lt;br /&gt;RewriteRule ^index.html$ index.php [L]&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Pierwsza linia powoduje uruchomienie mod-rewrite, natomiast w drugiej widzimy już użycie wyrażeń regularnych. Taki zapis oznacza, że jeżeli na serwerze mamy plik index.php to możemy się również do niego odnieść wpisując index.html. Jeżeli chodzi o atrybut &lt;i&gt; [L]&lt;/i&gt; to jest to skrót od &lt;i&gt;Last rule&lt;/i&gt; i oznacza on, że linia w której się znajduję jest ostatnią linią, czyli kolejne reguły nie będą dalej wykonywane. Dodatkowo możemy dopisać atrybut &lt;i&gt;[NC]&lt;/i&gt;, który oznacza że to czy adres będzie wpisany dużymi literami czy małymi nie robi żadnego znaczenia, tak więc wpisując &lt;code&gt;domeda.com/STRONA1/index.php&lt;/code&gt; otrzymamy to samo co przy wpisie &lt;code&gt;domeda.com/strona1/index.php&lt;/code&gt;.&lt;br /&gt;Teraz zajmijmy się już konkretnymi przykładami. Załóżmy, że nasza strona znajduję się pod takim adresem: &lt;code&gt; www.strona.pl/menu.php?id=4&lt;/code&gt;. Aby adres był czytelny dla użytkownika dobrze jakby był takiego formatu: &lt;code&gt; www.strona.pl/menu-4&lt;/code&gt;. Aby otrzymać taki wynik wystarczy dodać do .htaccess następującą linkijkę: &lt;code&gt;RewriteRule ^menu-([^-]+).html$ menu.php?id=$1&lt;/code&gt;. Teraz po kolei wyjaśnię ten zapis: ([^-]+) oznacza wszystkie znaki z wyjątkiem myślnika, w takim przypadku za wykluczenie odpowiedzialny jest znak ^, natomiast + oznacza wystąpienie znaku raz lub więcej razy. Jeżeli np. chcemy aby tam były umieszczone wyłącznie liczby to wpisujemy ([0-9]+) . Jeśli chodzi o okrągłe nawiasy oznaczają one zmienne - w tym przypadku to co jest w nawiasie w pierwszej części ciągu jest przenoszone do drugiej części do zmiennej $1 i wyświetlane w URL. Jeżeli nawiasów byłoby więcej to odpowiadałyby one kolejno zmiennym $1 $2 $3 itd.&lt;br /&gt;&lt;br /&gt;Tutaj bardziej czytelny przykład:&lt;br /&gt;&lt;div class=code&gt;RewriteEngine On&lt;br /&gt;RewriteRule (aktualnosci)/(kraj)/([0-9]+) /wyswietl.php?what=$1&amp;skad=$2&amp;id=$3&lt;br /&gt;#lub&lt;br /&gt;RewriteRule (+)/(+)/([0-9]+) /wyswietl.php?what=$1&amp;skad=$2&amp;id=$3&lt;br /&gt;#lub&lt;br /&gt;RewriteRule ([a-z]+)/([a-z]+)/([0-9]+) /wyswietl.php?what=$1&amp;skad=$2&amp;id=$3&lt;/div&gt;&lt;br /&gt;Zamieni on adres &lt;i&gt;http://moja-strona.pl/wyswietl.php?what=aktualnosci&amp;skad=kraj&amp;id=108&lt;/i&gt; na: &lt;i&gt;http://moja-strona.pl/aktualnosci/kraj/108&lt;/i&gt;. Po więcej szczegółów odsyłam do dokumentacji Apachea.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-8164486081406164376?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/8164486081406164376/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=8164486081406164376' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/8164486081406164376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/8164486081406164376'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/08/modrewrite-czyli-przyjazne-adresy-url-z.html' title='Mod_rewrite, czyli przyjazne adresy URL z .htaccess'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-8445828782716084267</id><published>2008-08-15T20:32:00.005+02:00</published><updated>2008-08-17T14:33:43.617+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.htaccess'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>.htaccess i blokowanie dostępu do stron</title><content type='html'>Wcześniej pisałem o blokowaniu dostępu do strony za pomocą pliku .htpasswd, jednak możemy również zablokować dostęp do naszych stron przez określony adres IP lub przez całe ich grupy. Tutaj jak zwykle przydatność takiego blokowania jest jedynie ograniczona przez naszą wyobraźnię. Adresy blokujemy komendą deny, np.:&lt;div class=code&gt;deny from 111.222.333.444&lt;/div&gt;&lt;br /&gt;Jeżeli chcemy ograniczyć dostęp wszystkim np. do jakiejś strony:&lt;div class=code&gt;deny from all&lt;/div&gt;&lt;br /&gt;Istnieje również możliwość udostępnienia stron tylko wybranym adresom:&lt;div class=code&gt;deny from all&lt;br /&gt;allow from 111.222.333.444&lt;/div&gt; W pierwszej linii blokujemy dostęp wszystkim adresom, a w drugiej linii dajemy dostęp określonym adresom IP.&lt;br /&gt;Często bardzo ważne jest nadanie kolejności przetwarzania wpisów, do tego celu używamy &lt;code&gt; Order allow, deny&lt;/code&gt;. Taki zapis powoduje, ze najpierw przetwarzane są instrukcje odpowiedzialne za dostęp a następnie te za blokowanie. Rozważmy następujący przykład:&lt;div class=code&gt;order allow, deny&lt;br /&gt;deny from 111.222.333.444&lt;br /&gt;deny from 555.666.777.888&lt;br /&gt;allow from all&lt;/div&gt; Jeżeli w takim przypadku nie użylibyśmy dyrektywy &lt;code&gt;order allow, deny&lt;/code&gt; to najpierw zostały by zablokowane adresy 111.222.333.444 i 555.666.777.888 po to tylko żeby za chwilę zostały odblokowane dyrektywą &lt;code&gt;allow from all&lt;/code&gt;.&lt;br /&gt;Mamy również możliwość blokowania hostów z jakiejś określonej domeny. Robimy to tak samo jak powyżej, jednak zamiast adresu IP wpisujemy adres domeny, np.: &lt;code&gt;deny jakas.domena.com&lt;/code&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-8445828782716084267?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/8445828782716084267/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=8445828782716084267' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/8445828782716084267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/8445828782716084267'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/08/htaccess-i-blokowanie-dostpu-do-stron.html' title='.htaccess i blokowanie dostępu do stron'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-7909751627304963243</id><published>2008-08-10T09:40:00.007+02:00</published><updated>2008-08-17T14:35:11.723+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.htaccess'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>Budowa stron błędów w .htaccess</title><content type='html'>Kontynuując tworzenie pliku .htacces napiszę trochę istotnych informacji na temat stron błędów a Apache. Za pomocą odpowiednich plików w .htaccess możemy tworzyć własne strony błędów. HTTP posiada numeryczne kody, które odpowiadają wynikom poszczególnych operacji jak i też błędów. Dzielą się one na następujące grupy:&lt;br /&gt;1XX - kody informacyjne;&lt;br /&gt;2XX - kody powodzenia;&lt;br /&gt;3XX - kody przekierowania;&lt;br /&gt;4XX - kody błędów aplikacji po stronie użytkownika;&lt;br /&gt;5XX - kody błędów aplikacji po stronie serwera;&lt;br /&gt;&lt;br /&gt;My zajmiemy się tymi dwoma ostatnimi, czyli komunikatami o błędach. Na początek musi wiedzieć dokładnie jakie kod co oznacza, a więc &lt;i&gt;(źródło:&lt;a href="http://czytelnia.reporter.pl/rozdzialy/aparec.pdf"&gt;http://czytelnia.reporter.pl/rozdzialy/aparec.pdf)&lt;/a&gt;&lt;/i&gt;:&lt;div class=code&gt;&lt;b&gt;4xx — kody błędów klienta:&lt;/b&gt;&lt;br /&gt;400 Złe zadanie&lt;br /&gt;401 Dostęp nieautoryzowany&lt;br /&gt;402 Wymagana opłata (niestosowane)&lt;br /&gt;403 Dostęp zabroniony&lt;br /&gt;404 Nieznaleziony&lt;br /&gt;405 Metoda niedozwolona&lt;br /&gt;406 Nie do zaakceptowania&lt;br /&gt;407 Wymagane uwierzytelnienie proxy&lt;br /&gt;408 Upłynął limit czasu zadania&lt;br /&gt;409 Konflikt&lt;br /&gt;410 Nieobecny&lt;br /&gt;411 Potrzebna długość&lt;br /&gt;412 Niespełnione warunki wstępne&lt;br /&gt;413 Zadanie zbyt długie&lt;br /&gt;414 Zadanie URI zbyt długie&lt;br /&gt;415 Nieobsługiwany rodzaj medium&lt;br /&gt;416 Zakres zadania niezadowalający&lt;br /&gt;417 Oczekiwanie niespełnione&lt;br /&gt;&lt;b&gt;5xx — kody błędów serwera:&lt;/b&gt;&lt;br /&gt;500 Wewnętrzny błąd serwera&lt;br /&gt;501 Niezaimplementowany&lt;br /&gt;502 Zła brama&lt;br /&gt;503 Usługa niedostępna&lt;br /&gt;504 Upłyną limit czasu bramy&lt;br /&gt;505 Nieobsługiwana wersja protokołu HTTP&lt;/div&gt;&lt;br /&gt;Wszystko co należy zrobić aby odwołać się do określonego błędu to dodać do pliku .htaccess następującą linię:&lt;div class=code&gt;ErrorDocument 403 /errors/403.html&lt;/div&gt; W katalogu /errors/ umieszczamy strony z opisami błędów, które zostają uruchomione w momencie wystąpienia danego błędu.&lt;br /&gt;Oczywiście można pójść na łatwiznę i załatwić to bez tworzenia nowych stron o błędach w html tworząc zwykłe przekierowanie:&lt;div class=code&gt;ErrorDocument 404 http://www.google.pl/search?hl=pl&amp;client=firefox-a&amp;rls=org.mozilla%3Apl%3Aofficial&amp;hs=pC6&amp;q=space+of+code&amp;btnG=Szukaj&amp;lr=lang_pl&lt;/div&gt;&lt;br /&gt;Kolejną możliwością jest zwyczajne wyświetlanie prostego tekstu, np.:&lt;div class=code&gt;ErrorDocument 403 "Ten serwer wymaga uwierzytelnienia, musisz się zalogować"&lt;/div&gt;&lt;br /&gt;W skrócie to tyle na temat stron błędów w .htaccess. Reszta zależy już tylko od waszej wyobraźni. Dobrej zabawy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-7909751627304963243?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/7909751627304963243/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=7909751627304963243' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/7909751627304963243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/7909751627304963243'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/08/budowa-stron-bdw-w-htaccess.html' title='Budowa stron błędów w .htaccess'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-6512630889685000193</id><published>2008-08-09T22:56:00.021+02:00</published><updated>2009-03-25T19:50:12.607+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.htaccess'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>Tajniki pliku .htaccess - budowa od podstaw</title><content type='html'>Dzisiaj opowiem trochę o pliku który tak bardzo ułatwia mi wszelkie prace związane z Apache'm - mowa tu o .htaccess. Oczywiście sam plik jest zwykłym plikiem tekstowym w którym zapisujemy ustawienia serwera Apache dlatego należy uważać na wszelkie edytory tekstowe, które zapisują pliki z rozszerzeniem .txt bo wtedy zwyczajnie nasz plik nie będzie działał. A więc krótko; jeżeli chcesz zabezpieczyć pewne strony lub pliki na swoim serwerze przed niepowołanymi użytkownikami, zmienić wyświetlany w URL adres, zablokować niepożądanych gości po adresie IP, wyświetlać tylko niektóre pliki z katalogu, tworzyć przekierowania, zdefiniować jakie typy rozszerzeń będą otwierane przez jakie programy, wybrać czy plik ma być otwierany czy zapisywany na dysku i wiele wiele innych rzeczy to zdecydowanie powinieneś zapoznać się z plikiem .htaccess!&lt;br /&gt;Ja zacznę od podstaw. Warto wiedzieć jak budować taki plik, więc zacznijmy od najbardziej praktycznej rzeczy jaki istnieje w programowaniu - od komentarzy. Komentarze w .htaccess tworzy się podobnie jak w PHP, czyli poprzez dodanie znaku # na początku linii. Warto również pamiętać aby każde linie zamykać enterem.&lt;br /&gt;&lt;br /&gt;Do dzieła! Na początek zadbałbym o odpowiednie uprawnienia dostępu do pliku. Optymalnie będą to ustawienia 644, które pozwolą na dostęp do pliku przez serwer ale uniemożliwią jego zmianę z poziomu przeglądarki - wpisujemy w shellu &lt;code&gt;Chmod 644 .htaccess&lt;/code&gt;.&lt;br /&gt;Pierwszym naszym wpisem będzie określenie domyślnego pliku strony WWW, do tego celu użyjemy &lt;code&gt;DirectoryIndex&lt;/code&gt;. Tutaj możemy podać kilka nazw głównych plików, które oddzielamy spacjami np. &lt;code&gt;DirectoryIndex index.php index.html index.htm glowna.php main.html&lt;/code&gt;. Tutaj ważna jest kolejność, jeżeli istnieje plik index.php to on będzie naszym domyślnym, jeżeli nie istnieje to następny w kolejności, czyli index.html. To jest bardzo przydatne w przypadku, gdy nasza strona ma trochę inną strukturę niż standardy, np. naszym startowym plikiem może być start.php, wtedy ten plik zostanie wczytany po wejściu na nasz serwer. Oczywiście jeżeli planujemy jakieś prace remontowe i nie chcemy żeby nasi goście oglądali ten bałagan dajemy &lt;code&gt;DirectoryIndex roboty.html&lt;/code&gt; i wtedy nasi goście oglądają piękną informację na temat tego co się dzieje na stronie.&lt;br /&gt;&lt;br /&gt;Teraz parę zdań na temat powiązań typów plików, czyli MimeType. Są to rozszerzenia, które zwracane są przeglądarce po znalezieniu na serwerze danego typu pliku. Chodzi tutaj o reakcję naszej przeglądarki na odczyt pliku z jakimś rozszerzeniem. Oczywiście większość rozszerzeń jest zdefiniowana domyślnie na naszym serwerze, czyli np. po kliknięciu w plik audio pojawia nam się monit odnośnie ściągnięcia pliku na dysk. Czasami jednak zdarza się, że chcemy aby konkretne rozszerzenia były otwierane trochę inaczej, np. jeśli chcemy niektóre pliki ściągać na dysk zamiast ich wyświetlać wpisujemy: &lt;div class=code&gt;AddType application/octet-stream .pdf .gz&lt;/div&gt;&lt;br /&gt;Możemy również wymusić otwieranie odpowiednich typów w plików w wybranych przez nasz programach - bardzo przydatne przy spakowanych plikach. Poniżej znajduję się listing przypisanie większości znanych formatów do aplikacji &lt;i&gt;źródło: Internet Maker&lt;/i&gt;:&lt;div class=code&gt;1. #css, html, xml, asp, flash i inne&lt;br /&gt;2. AddType text/css .css&lt;br /&gt;3. AddType application/xhtml+xml .xhtml&lt;br /&gt;4. AddType text/html .shtml&lt;br /&gt;5. AddType text/xml .xml&lt;br /&gt;6. AddType text/html .asp&lt;br /&gt;7. Addtype application/x-httpd-php .php&lt;br /&gt;8. AddType application/x-shockwave-flash .swf&lt;br /&gt;9. AddType application/x-director .dir .dcr .dxr .fgd&lt;br /&gt;10. AddType application/x-authorware-map .aam&lt;br /&gt;11. AddType application/x-authorware-seg .aas&lt;br /&gt;12. AddType application/x-authorware-bin .aab&lt;br /&gt;13. AddType image/x-freehand .fh4 .fh5 .fh7 .fhc .fh&lt;br /&gt;14. AddType application/x-java-applet .class&lt;br /&gt;15. # dokumenty&lt;br /&gt;16. AddType application/pdf .pdf&lt;br /&gt;17. AddType application/msword .doc&lt;br /&gt;18. #multimedia&lt;br /&gt;19. AddType audio/mpeg .mp3&lt;br /&gt;20. AddType video/x-msvideo .avi&lt;br /&gt;21. AddType audio/x-wav .wav&lt;br /&gt;22. AddType video/quicktime .mov .qt&lt;br /&gt;23. AddType video/x-ms-asf .asf .asx&lt;br /&gt;24. AddType audio/x-ms-wma .wma&lt;br /&gt;25. AddType audio/x-ms-wax .wax&lt;br /&gt;26. AddType video/x-ms-wmv .wmv&lt;br /&gt;27. AddType video/x-ms-wvx .wvx&lt;br /&gt;28. AddType video/x-ms-wm .wm&lt;br /&gt;29. AddType video/x-ms-wmx .wmx&lt;br /&gt;30. AddType application/x-ms-wmz .wmz&lt;br /&gt;31. AddType application/x-ms-wmd .wmd&lt;br /&gt;32. #skompresowane&lt;br /&gt;33. AddType application/zip .zip&lt;br /&gt;34. AddType application/x-gzip .gz&lt;br /&gt;35. AddType application/x-gtar .gtar&lt;br /&gt;36. AddType application/x-rar-compressed .rar&lt;br /&gt;37. AddType application/octet-stream .dmg&lt;br /&gt;38. AddType application/x-7z-compressed .7z&lt;br /&gt;39. #graficzne&lt;br /&gt;40. Addtype image/jpg .jpg&lt;br /&gt;41. Addtype image/gif .gif&lt;br /&gt;42. #pozostałe&lt;br /&gt;43. AddType application/x-bittorrent .torrent&lt;br /&gt;44. AddType application/vnd.rn-realmedia .rm&lt;br /&gt;45. AddType audio/vnd.rn-realaudio .ra .ram&lt;br /&gt;46. AddType video/vnd.rn-realvideo .rv&lt;/div&gt;&lt;br /&gt;A teraz bardzo przydatna informacja dla osób, które mają problemy z kodowaniem tekstu na stronach. Dzięki odpowiednim wpisom w .htaccess możemy ustawić kodowanie dokumentów, np.:&lt;div class=code&gt;AddDefaultCharset ISO-8859-1&lt;br /&gt;AddDefaultCharset ISO-8859-2&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Za pomocą pliku .htaccess można bardzo łatwo i szybko wprowadzić autoryzację użytkowników dla danego katalogu. Do tego celu będziemy musieli utworzyć plik &lt;b&gt;.htpasswd&lt;/b&gt; w którym będą wpisywani użytkownicy oraz ich zakodowane hasła. Na stronie &lt;a href="http://www.tools.dynamicdrive.com/password/"&gt;tools.dynamicdrive&lt;/a&gt; znajdziemy edytor pliku .htpasswd - wystarczy wypisać użytkowników oraz ich hasła, a skrypt wygeneruje nam odpowiedni kod do wklejenia do naszego pliku. Standardowo wpis w .htpasswd wygląda tak: &lt;div class=code&gt;uzytkownik:/YKTtGojL9BVA&lt;/div&gt; Skrypt ze strony dynamicdrive wygeneruje wam również kod do wklejenia do pliku .htaccess, który będzie miał postać:&lt;div class=code&gt;AuthName "Restricted Area"&lt;br /&gt;AuthType Basic&lt;br /&gt;AuthUserFile /home/mysite/.htpasswd&lt;br /&gt;AuthGroupFile /dev/null&lt;br /&gt;require valid-user&lt;/div&gt;W polu restricted area możemy wpisać co chcemy, np. "Ta strefa wymaga autoryzacji, zaloguj się" - to właśnie wyświetli się podczas próby wejścia na zabezpieczony teren. &lt;i&gt;AuthUserFile&lt;/i&gt; musi kierować do naszego pliku z hasłami, natomiast &lt;i&gt;require valid-user&lt;/i&gt; odpowiada za obszar jaki ma być zabezpieczony hasłem. Jeżeli zostawimy tak jak jest to wtedy cała strona będzie wymagała zalogowania, natomiast jeżeli chcemy zabezpieczyć hasłem tylko jeden plik, np.:dane_osobowe.html to dodajemy odpowiednie tagi:&lt;div class=code&gt;&lt;xmp&gt;&lt;files html="dane_osobowe.html"&gt;&lt;/xmp&gt;&lt;br /&gt;&lt;xmp&gt;require valid-user&lt;/xmp&gt;&lt;br /&gt;&lt;xmp&gt;&lt;/files&gt;&lt;/xmp&gt;&lt;/div&gt; Zabezpieczanie w ten sposób strony dotyczy tylko połączeń HTTP. Jeżeli ktoś połączy się z serwerem przez FTP to takie uwierzytelnienie nie będzie działać.&lt;br /&gt;&lt;br /&gt;W kolejnym poście opiszę strony błędów, które możemy tworzyć za pomocą pliku .htaccess.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-6512630889685000193?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/6512630889685000193/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=6512630889685000193' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6512630889685000193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/6512630889685000193'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/08/tajniki-pliku-htaccess-budowa-od.html' title='Tajniki pliku .htaccess - budowa od podstaw'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-1294732060332816719</id><published>2008-08-04T21:31:00.007+02:00</published><updated>2008-08-17T14:42:27.164+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Budujemy panel w PHP do zarządzania adresami sieci w Linux w oparciu o edycję pliku /etc/network/interfaces</title><content type='html'>Dzisiaj zajmiemy się budową panelu w PHP, który poprzez proste wpisywanie adresów w pola tekstowe będzie nam edytował plik &lt;i&gt;/etc/network/interfaces&lt;/i&gt; po czym zrestartuje automatycznie sieć. Jest to bardzo przydatne jeżeli ktoś zarządza serwerem bądź ruterem na linuxie i zamiast łączyć się przez SSH po prostu loguje się na stronę jako admin lub ktokolwiek i tam swobodnie i bez przeszkód wpisuje swoje ustawienia sieci. Całość tłumacze w oparciu o Debiana.&lt;br /&gt;Zaczynając pisać kod w PHP, który wykonuje pewne polecenia przez przez konsole należy zaznajomić się z prawami dostępu w linuxie. Jak wiadomo domyślnie wszelkie skrypty linuxa, które służą do edycji systemowych ustawień należą do właściciela i grupy root. Niestety (albo stety) nie możemy (nie chcemy) uruchomić serwera apachea jako root ponieważ jest to wysoce ryzykowne dla naszego serwera. W standardzie apache uruchamia wszelkie skrypty jako użytkownik &lt;i&gt;www-data&lt;/i&gt; lub po prostu &lt;i&gt;33&lt;/i&gt;. Dlatego właśnie musimy zmienić właściciela oraz grupę wszystkich plików które będą przez nas używane na &lt;i&gt;www-data&lt;/i&gt;.&lt;br /&gt;Oto lista plików, których właścicieli musimy zmienić poleceniami: &lt;code&gt;chown www-data [plik]&lt;/code&gt; oraz &lt;code&gt;chgrp www-data [plik]&lt;/code&gt;:&lt;br /&gt;1. /etc/network/interfaces&lt;br /&gt;2. /etc/init.d/networking&lt;br /&gt;3. /etc/network/run/ifstate&lt;br /&gt;&lt;br /&gt;Ok, jeżeli mamy już zmienione uprawnienia możemy zabrać się za nasz panel, ale najpierw rzućmy okiem na nasz plik &lt;i&gt;/etc/network/interfaces&lt;/i&gt;. U mnie wygląda on tak:&lt;div class=code&gt;auto lo&lt;br /&gt;iface lo inet loopback&lt;br /&gt;up ip l s imq0 up &amp;&amp; ip l s imq1 up&lt;br /&gt;auto eth0&lt;br /&gt;iface eth0 inet static&lt;br /&gt;address 212.244.101.111&lt;br /&gt;netmask 255.255.255.53&lt;br /&gt;network 10.5.1.0&lt;br /&gt;broadcast 10.5.1.10&lt;br /&gt;gateway 10.5.1.1&lt;br /&gt;up echo 1 &gt; /proc/sys/net/ipv4/conf/all/proxy_arp&lt;br /&gt;auto eth1&lt;br /&gt;iface eth1 inet static&lt;br /&gt;address 212.244.101.129&lt;br /&gt;netmask 255.255.255.128&lt;br /&gt;network 212.244.101.128&lt;br /&gt;broadcast 212.244.101.255&lt;br /&gt;up route add -host 212.244.101.244 dev eth1&lt;br /&gt;auto eth1:1&lt;br /&gt;iface eth1:1 inet static&lt;br /&gt;address 10.10.1.1&lt;br /&gt;netmask 255.255.0.0&lt;br /&gt;network 10.10.1.1&lt;br /&gt;broadcast 10.10.1.255&lt;br /&gt;auto eth1:0&lt;br /&gt;iface eth1:0 inet static&lt;br /&gt;address 172.16.171.1&lt;br /&gt;netmask 255.255.255.0&lt;br /&gt;network 172.16.171.0&lt;br /&gt;broadcast 172.16.171.255&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Tutaj każdy będzie musiał się wykazać inicjatywą i zbudować własny kod PHP pod swój plik &lt;i&gt;interfaces&lt;/i&gt;.&lt;br /&gt;Aby zbudować panel będziemy musieli utworzyć dla pliki PHP: panel.php i panel_edit.php.&lt;br /&gt;Tak mniej więcej będzie wyglądał plik panel.php:&lt;br /&gt;&lt;iframe src="http://wojtek.mroczkowski.googlepages.com/panel.html" class="source_code" style="width: 100%; height: 20em;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;A tak będzie wyglądał nasz plik panel_edit.php:&lt;br /&gt;&lt;iframe src="http://wojtek.mroczkowski.googlepages.com/panel_edit.html" class="source_code" style="width: 100%; height: 20em;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Wszelkie szczegóły starałem się umieścić w kodzie w komentarzach. Kod nie jest skomplikowany, więc myślę że każdy sobie poradzi z jego zrozumieniem. W razie problemów proszę pisać w komentarzach - postaram się rozwiać wszelkie wątpliwości.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-1294732060332816719?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/1294732060332816719/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=1294732060332816719' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1294732060332816719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1294732060332816719'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/08/budujemy-panel-w-php-do-zarzdzania.html' title='Budujemy panel w PHP do zarządzania adresami sieci w Linux w oparciu o edycję pliku /etc/network/interfaces'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-8907658623780694564</id><published>2008-07-25T22:47:00.013+02:00</published><updated>2008-07-26T00:03:16.865+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogspot'/><title type='text'>Jak wyświetlić czytelny i kolorowy kod na Blogspot?</title><content type='html'>Jeżeli chcemy na naszym blogu wyświetlać sformatowany (highlighted) kod jakiegokolwiek języka musimy zrobić kilka następujących czynności:&lt;br /&gt;1. Instalujemy program o nazwie &lt;a href="http://www.jedit.org/"&gt;jEdit&lt;/a&gt;. Najlepiej najnowszą wersję. Jeśli ściągniemy &lt;i&gt;Java based installer&lt;/i&gt; żadne skróty nie dodadzą nam się w systemie. Wtedy uruchamiamy program wchodząc do katalogu docelowego i odpalamy plik &lt;i&gt;jedit.jar&lt;/i&gt;.&lt;br /&gt;2. Uruchamiamy program, wchodzimy do zakładki &lt;i&gt; Plugins -&gt; Plugin Manager.&lt;/i&gt; Następnie klikamy &lt;i&gt; Download options&lt;/i&gt; i wybieramy serwer lustrzany, który jest nam najbliższy. Teraz możemy zrestartować jEdit.&lt;br /&gt;3. Ponownie wchodzimy do &lt;i&gt;Plugin Manager&lt;/i&gt; i klikamy zakładkę &lt;i&gt;Install&lt;/i&gt;. Odnajdujemy plugin o nazwie &lt;b&gt;Code2HTML&lt;/b&gt;, zaznaczamy go i instalujemy.&lt;br /&gt;4. Teraz musimy sobie przygotować kod, który będziemy chcieli wyświetlić i zapisać go na dysku. Musimy dopilnować aby plik miał prawidłowe rozszerzenie - jEdit potrafi rozpoznawać różne języki i dostosowuje do nich konkretne formatowania kodu. Kiedy wczytamy już tak przygotowany plik do programu, wchodzimy do &lt;i&gt;Plugins -&gt; Code2HTML -&gt; HTMLize current buffer.&lt;/i&gt;&lt;br /&gt;5. Edytujemy dowolnie wynik konwersji - możemy tu pozmieniać kolory oraz formatowania dla poszczególnych sesji. Zapisujemy gotowy plik z rozszerzeniem &lt;b&gt;.html&lt;/b&gt; i uploadujemy go na jakiś serwer. Ja używam do tego &lt;a href="http://pages.google.com/"&gt;google pages&lt;/a&gt;. Bardzo wygodne.&lt;br /&gt;6. Teraz pisząc nowego posta na blogspot po prostu wstawiamy taki kod:&lt;iframe src="http://wojtek.mroczkowski.googlepages.com/iframe.html" class="source_code" style="width: 100%; height: 5em;"&gt;&lt;/iframe&gt;Można tutaj przy okazji pogrzebać trochę w css'ie aby dopasować wygląd tego okna do swojego bloga. Poniżej znajduje się przykładowa funkcja służąca do formatowania kodu w PHP przygotowana w jEdit:&lt;br /&gt;&lt;iframe src="http://wojtek.mroczkowski.googlepages.com/xml_highlight.html" class="source_code" style="width: 100%; height: 20em;"&gt;&lt;/iframe&gt;&lt;br /&gt;OK, to tyle na temat kolorowania składni kodu. Jeżeli ktoś zna jakieś inne ciekawe sposoby na wygenerowanie kodu na stronie w bardziej przejrzysty sposób to proszę pisać w komentarzach lub na maila.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-8907658623780694564?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/8907658623780694564/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=8907658623780694564' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/8907658623780694564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/8907658623780694564'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/07/jak-wywietli-czytelny-i-kolorowy-kod-na.html' title='Jak wyświetlić czytelny i kolorowy kod na Blogspot?'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-8076813263330713840</id><published>2008-07-25T21:48:00.021+02:00</published><updated>2008-08-03T11:47:26.215+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Jak wyświetlić kolorowy (highlighted) kod PHP na swojej stronie?</title><content type='html'>Czasami zdarza się, że potrzebujemy czytelnie wyświetlić jakiś kod PHP na własnej stronie. Moglibyśmy go formatować za pomocą kodu HTML, CSS lub ewentualnie napisać jakąś funkcję w PHP, która zrobi to za nas. Niestety wszystkie te rozwiązania są bardzo czasochłonne. Tutaj przychodzi nam z pomocą funkcja &lt;i&gt;highlight_string()&lt;/i&gt;. Za jej pomocą możemy bardzo łatwo wyświetlić kod PHP, który umieszczony w &lt;i&gt;()&lt;/i&gt; zostanie odpowiednio sformatowany. A więc wpisując:&lt;br /&gt;&lt;iframe src="http://wojtek.mroczkowski.googlepages.com/unformated.html" class="source_code" style="width: 100%; height: 20em;"&gt;&lt;/iframe&gt;&lt;br /&gt;Zobaczysz mniej więcej coś takiego:&lt;br /&gt;&lt;iframe src="http://wojtek.mroczkowski.googlepages.com/highlighted1.html" class="source_code" style="width: 100%; height: 15em;"&gt;&lt;/iframe&gt;&lt;br /&gt;    Napisałem "mniej więcej" ponieważ na blogspot nie ma możliwości dodawania skryptów PHP. Tak naprawdę kolorowy kod na blogspot uzyskuje się całkiem inaczej. Niedługo opiszę ten sposób. &lt;br /&gt;Aby dowiedzieć się więcej szczegółów na temat &lt;i&gt;highlight_string()&lt;/i&gt; zapraszam na stronę &lt;a href="http://pl2.php.net/manual/pl/function.highlight-string.php"&gt;manuala PHP.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-8076813263330713840?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/8076813263330713840/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=8076813263330713840' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/8076813263330713840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/8076813263330713840'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/07/jak-wywietli-kolorowy-highlighted-kod.html' title='Jak wyświetlić kolorowy (highlighted) kod PHP na swojej stronie?'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-2294367571429119980</id><published>2008-07-06T01:23:00.013+02:00</published><updated>2008-08-17T14:44:01.648+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Postfix - podstawowa konfiguracja serwera poczty na Linuxie</title><content type='html'>No więc stało się. W ostanim poście pisałem na temat konfiguracji DenyHosta i okazało się, że bardzo dobrą sprawą byłoby gdybyśmy mieli skonfigurowany na naszym systmie serwer poczty. Wydaję mi się, że najlepszą alternatywą do zasłużonego i niezbyt bezpieczniego sendmaila jest postfix. Nie będe tu się rozpisywał na temat szczegółowej konfiguracji, jeżeli ktoś będzie chciał szczegołowo wejść w temat to na pewno znajdzie mnóstwo dokumentacji w internecie, polecam przejrzeć tą na stronie postfixa &lt;a href="http://www.postfix.org/docs.html"&gt;dokumentacja&lt;/a&gt;. Teraz po protsu zróbmy tak żeby postfix działał optymalnie konfigurując go pod "przeciętnego" użytkownika. Zaczynajmy!&lt;br /&gt;&lt;br /&gt;1. Ten punkt jest opcjonalny - dla tych którzy mają zainstalowany starszy serwer poczty jakim jest sendmail. Przede wszystkim musimy go usunąć. Najpeirw sprawdzamy czy sendmail jest obecnie uruchomiony:&lt;br /&gt;&lt;code&gt;ps x&lt;/code&gt;&lt;br /&gt;Jeżeli tak, to go wyłączamy:&lt;br /&gt;&lt;code&gt; /etc/init.d/sendmail stop&lt;/code&gt;&lt;br /&gt;i usuwamy:&lt;br /&gt;&lt;code&gt;apt-get remove --purge sendmail&lt;/code&gt;&lt;br /&gt;Jeżeli usunięcie w ten sposób jest niemożliwe należy usunąc sendmaila ręcznie. Robimy to następująco:&lt;br /&gt;&lt;code&gt;which sendmail&lt;/code&gt;&lt;br /&gt;po czym zmieniamy nazwy wyświetlonych plików:&lt;br /&gt;&lt;code&gt;mv sendmail sendmail.OFF&lt;/code&gt;&lt;br /&gt;Teraz zabieramy prawa temu plikowi:&lt;br /&gt;&lt;code&gt;chmod 700 sendmail.OFF&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Następnie usuwamy go ze skryptów startowych. Zależnie od dystrybucji, wpis powinien znajdować się w &lt;b&gt;/etc/rc.d/&lt;/b&gt; lub w &lt;b&gt; /etc/rc.d/init.d &lt;/b&gt;. Należy odnaleźć wywołanie sendmaila w którymś z plików rc.X o je usunąć lub zahashować (#). W jego miejsce wpisujesmy &lt;code&gt;postfix start&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;2. Przechodzimy do instalacji postfixa - najłatwiejszy sposób to:&lt;br /&gt;&lt;code&gt; apt-get install postfix &lt;/code&gt;&lt;br /&gt;po czym uruchomi nam się podstawowa konfiguracja. W pierwszym oknie klikamy OK, następnie w &lt;i&gt;General type of configuration&lt;/i&gt; wybieramy &lt;i&gt;Internet Site&lt;/i&gt;. W następnym oknie zobaczymy &lt;i&gt;Mail Name&lt;/i&gt; defaultowo przypisana jest tu nazwa hosta, więc tak możemy zostawić. Teraz możemy przejść do właściwej części konfiguracji.&lt;br /&gt;&lt;br /&gt;3. Zabieramy się za konfigurację lokalną. Wszystkie pliki konfiguracyjne znajdują się w &lt;b&gt;/etc/postfix/&lt;/b&gt;. Nie ma tego dużo - my skupimy się na pliku &lt;b&gt;main.cf&lt;/b&gt;. Przydatne nam będzie polecenie, które wyświetla wszystkie ustawienia oraz zmienne postfixa - &lt;b&gt;postconf&lt;/b&gt;. Sprobuj je wywołać samo, a następnie z parametrem  np. &lt;b&gt;myhostname&lt;/b&gt;.&lt;br /&gt;Otwieramy plik konfiguracyjny postfixa:&lt;br /&gt;&lt;code&gt;nano /etc/postfix/main.cf&lt;/code&gt;&lt;br /&gt;Odnajdujemy wpis &lt;b&gt;myhostname&lt;/b&gt; i upewniamy się, że jest tam wpisana nazwa naszego hosta.&lt;br /&gt;Dla ułatwienia wrzucę tutaj podstawowy plik konfiguracyjny, który powinien działać:&lt;br /&gt;&lt;code&gt;&lt;div class=code&gt;command_directory = /usr/sbin&lt;br /&gt;mail_owner = postfix&lt;br /&gt;mydomain = &lt;i&gt;wpisujemy nazwę naszej domeny&lt;/i&gt;&lt;br /&gt;myhostname = &lt;i&gt;wpisujemy nazwę naszego hosta &lt;/i&gt;&lt;br /&gt;myorigin = $mydomain&lt;br /&gt;mydestination = $myhostname, localhost.$mydomain, mail.$mydomain, localhost, $mydomain&lt;br /&gt;relayhost =&lt;br /&gt;relay_domains = $mydestination&lt;br /&gt;mynetworks = 127.0.0.0/8 192.168.1.1/24 &lt;i&gt;Dzięki pierwszemu adresowi nasza poczta rozsyłana jest globalnie, drugi adres jest adresem naszej podsieci - przeważnie jest to także nasza brama, dzięki temu adresowi maile są wysyłane w Świat. &lt;/i&gt;&lt;br /&gt;inet_interfaces = all&lt;br /&gt;inet_protocols = ipv4&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;4. Zapisujemy plik, wpisujemy &lt;code&gt; postfix reload&lt;/code&gt; i teraz już możemy wysyłać pocztę za pomocą polecenia &lt;code&gt;mail&lt;/code&gt;.&lt;br /&gt;Podstawową konfigurację mamy za sobą. Tak skonfigurowany serwer poczty nie jest chroniony w żaden sposób i może posłużyć za bramę dla spamerów. Jeżeli naszym dostawcą internetu TP S.A. to nasze maile będą odbijane przez gmail. Na nasze maile również nie można w żaden sposób odpowiedzieć czy napisać do nas z zewnątrz. Wszystkie te problemy rozwiąże w kolejnych postach.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-2294367571429119980?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/2294367571429119980/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=2294367571429119980' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2294367571429119980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/2294367571429119980'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/07/postfix-konfiguracja-serwera-poczty-na.html' title='Postfix - podstawowa konfiguracja serwera poczty na Linuxie'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-5570198572736814344</id><published>2008-07-03T21:58:00.005+02:00</published><updated>2008-08-17T14:45:46.739+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>DenyHosts, czyli jeszcze bezpieczniejsze SSH</title><content type='html'>Witam po długiej przerwie. Kto by pomyślał, że to będzie taki pracowity okres… Przejdźmy do rzeczy: ostatnimi czasy poświęcam więcej czasu systemowi o wiele znaczącej nazwie jaką jest Linux. Moje ostatnie plany „zmusiły” mnie do postawienia serwera na Debianie i jak się okazało sprawiło mi to wiele frajdy. Wszystko wspaniale działa – mysql, PHP, samba i rzecz, która była mi niezbędna do pracy – SSH. Po pewnym czasie zauważyłem, że na moim serwerze generuje się dziwny ruch – możemy to zobaczyć wpisując jako root następującą komendę:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;cat /var/log/auth.log |grep invalid&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;Wynik będzie prawdopodobnie podobny do tego poniżej tylko, że znacznie duższy.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;div class=code&gt;Jul  3 20:59:49 debian-serwer sshd[9627]: Failed password for invalid user alex from 193.218.155.219 port 36407 ssh2&lt;br /&gt;Jul  3 20:59:52 debian-serwer sshd[9629]: Failed password for invalid user brett from 193.218.155.219 port 36504 ssh2&lt;br /&gt;Jul  3 20:59:54 debian-serwer sshd[9631]: Failed password for invalid user mike from 193.218.155.219 port 37059 ssh2&lt;br /&gt;Jul  3 20:59:57 debian-serwer sshd[9633]: Failed password for invalid user alan from 193.218.155.219 port 37120 ssh2&lt;br /&gt;Jul  3 20:59:59 debian-serwer sshd[9635]: Failed password for invalid user data from 193.218.155.219 port 37707 ssh2&lt;br /&gt;Jul  3 21:00:04 debian-serwer sshd[9639]: Failed password for invalid user http from 193.218.155.219 port 37879 ssh2&lt;br /&gt;Jul  3 21:00:06 debian-serwer sshd[9641]: Failed password for invalid user httpd from 193.218.155.219 port 39878 ssh2&lt;br /&gt;Jul  3 21:00:16 debian-serwer sshd[9649]: Failed password for invalid user info from 193.218.155.219 port 43904 ssh2&lt;br /&gt;Jul  3 21:00:18 debian-serwer sshd[9651]: Failed password for invalid user shop from 193.218.155.219 port 44402 ssh2&lt;br /&gt;Jul  3 21:00:21 debian-serwer sshd[9653]: Failed password for invalid user sales from 193.218.155.219 port 45696 ssh2&lt;br /&gt;Jul  3 21:00:23 debian-serwer sshd[9655]: Failed password for invalid user web from 193.218.155.219 port 46620 ssh2&lt;br /&gt;Jul  3 21:00:26 debian-serwer sshd[9657]: Failed password for invalid user www from 193.218.155.219 port 47784 ssh2&lt;br /&gt;Jul  3 21:00:28 debian-serwer sshd[9659]: Failed password for invalid user wwwrun from 193.218.155.219 port 48591 ssh2&lt;br /&gt;Jul  3 21:00:31 debian-serwer sshd[9661]: Failed password for invalid user adam from 193.218.155.219 port 49459 ssh2&lt;br /&gt;Jul  3 21:00:33 debian-serwer sshd[9663]: Failed password for invalid user stephen from 193.218.155.219 port 50373 ssh2&lt;br /&gt;Jul  3 21:00:35 debian-serwer sshd[9665]: Failed password for invalid user richard from 193.218.155.219 port 51208 ssh2&lt;br /&gt;Jul  3 21:00:38 debian-serwer sshd[9667]: Failed password for invalid user george from 193.218.155.219 port 51476 ssh2&lt;br /&gt;Jul  3 21:00:40 debian-serwer sshd[9669]: Failed password for invalid user michael from 193.218.155.219 port 52192 ssh2&lt;br /&gt;Jul  3 21:00:43 debian-serwer sshd[9671]: Failed password for invalid user john from 193.218.155.219 port 52903 ssh2&lt;br /&gt;Jul  3 21:00:46 debian-serwer sshd[9673]: Failed password for invalid user david from 193.218.155.219 port 53839 ssh2&lt;br /&gt;Jul  3 21:00:48 debian-serwer sshd[9675]: Failed password for invalid user paul from 193.218.155.219 port 54252 ssh2&lt;br /&gt;Jul  3 21:00:53 debian-serwer sshd[9679]: Failed password for invalid user angel from 193.218.155.219 port 55321 ssh2&lt;br /&gt;Jul  3 21:00:58 debian-serwer sshd[9683]: Failed password for invalid user pgsql from 193.218.155.219 port 56702 ssh2&lt;br /&gt;Jul  3 21:01:01 debian-serwer sshd[9685]: Failed password for invalid user pgsql from 193.218.155.219 port 57653 ssh2&lt;br /&gt;Jul  3 21:01:06 debian-serwer sshd[9689]: Failed password for invalid user adm from 193.218.155.219 port 58824 ssh2&lt;br /&gt;Jul  3 21:01:09 debian-serwer sshd[9691]: Failed password for invalid user ident from 193.218.155.219 port 59109 ssh2&lt;br /&gt;Jul  3 21:01:11 debian-serwer sshd[9693]: Failed password for invalid user resin from 193.218.155.219 port 60094 ssh2&lt;/code&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;Interesujące, prawda? Są to boty, które przeszukują sieć w poszukiwaniu dziur w zabezpieczeniach. Jeżeli im się uda – mamy kolejne zoombie w necie. Proszę zauważyć, że w tym przypadku wszystkie próby pochodzą z jednego adresu. Można to zrobić ręcznie i po prostu zablokować takie ip na firewallu ale to działa tylko na chwilę, takich adresów jest naprawdę wiele, przynajmniej kilka dziennie, więc to by była syzyfowa praca. Tutaj z pomocą przychodzi nam program o nazwie DenyHosts &lt;a href="http://denyhosts.sourceforge.net"&gt;pobierz&lt;/a&gt;.&lt;br /&gt;To jest bardzo prosty program ale jego funkcjonalność wydaję się nieoceniona – blokuje wszystkie takie ataki wg ustawionych kryteriów, powiadamia nas o tym na maila oraz wysyła adres agresora na swój serwer i tam uaktualnia ogólną bazę danych zbanowanych adresów, które każdy klient blokuje również u siebie. Obecnie z DenyHosts korzysta 6800 klientów, więc została utworzona już całkiem pokaźna baza. Przy uaktualnianiu cogodzinnym do naszej listy banów dodaje się kilkadziesiąt nowych adresów. Po poprawnej konfiguracji takie ataki stają się naprawdę sporadyczne.&lt;br /&gt;A teraz do rzeczy – jak to się robi?&lt;br /&gt;1. A więc zaczynamy standardowo, czyli od instalacji programu:&lt;br /&gt;&lt;code&gt;sudo apt-get install denyhosts&lt;/code&gt;&lt;br /&gt;2. Program  jest już defaultowo skonfigurowany i uruchamia się już po instalacji ale my chcemy trochę usprawnić jego pracę. Edytujemy plik konfiguracyjny:&lt;br /&gt;&lt;code&gt;sudo nano /etc/denyhosts.conf&lt;/code&gt;&lt;br /&gt;3. Zabieramy się do edycji. Pierwsze sekcje pomijamy bo nas za bardzo nie interesują, dotyczą rozmieszczenia plików z logami itp. Kolejna sekcja wygląda następująco:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;########################################################################&lt;br /&gt;#&lt;br /&gt;# PURGE_DENY: removed HOSTS_DENY entries that are older than this time&lt;br /&gt;#             when DenyHosts is invoked with the --purge flag&lt;br /&gt;#&lt;br /&gt;#      format is: i[dhwmy]&lt;br /&gt;#      Where 'i' is an integer (eg. 7)&lt;br /&gt;#            'm' = minutes&lt;br /&gt;#            'h' = hours&lt;br /&gt;#            'd' = days&lt;br /&gt;#            'w' = weeks&lt;br /&gt;#            'y' = years&lt;br /&gt;#&lt;br /&gt;# never purge:&lt;br /&gt;PURGE_DENY =&lt;br /&gt;#&lt;br /&gt;# purge entries older than 1 week&lt;br /&gt;#PURGE_DENY = 1w&lt;br /&gt;#&lt;br /&gt;# purge entries older than 5 days&lt;br /&gt;#PURGE_DENY = 5d&lt;br /&gt;#######################################################################&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Tutaj ustawiamy po jakim czasie adres ma być usuwany z naszej listy zbanowanych adresów. Defaultowo j PURGE_DENY jest bez parametrów co oznacza, że adresy nie będą w ogóle usuwany - tak zostawiamy.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#######################################################################&lt;br /&gt;#&lt;br /&gt;# BLOCK_SERVICE: the service name that should be blocked in HOSTS_DENY&lt;br /&gt;#&lt;br /&gt;# man 5 hosts_access for details&lt;br /&gt;#&lt;br /&gt;# eg.   sshd: 127.0.0.1  # will block sshd logins from 127.0.0.1&lt;br /&gt;#&lt;br /&gt;# To block all services for the offending host:&lt;br /&gt;#BLOCK_SERVICE = ALL&lt;br /&gt;# To block only sshd:&lt;br /&gt;BLOCK_SERVICE  = sshd&lt;br /&gt;# To only record the offending host and nothing else (if using&lt;br /&gt;# an auxilary file to list the hosts).  Refer to:&lt;br /&gt;# http://denyhosts.sourceforge.net/faq.html#aux&lt;br /&gt;#BLOCK_SERVICE =&lt;br /&gt;#&lt;br /&gt;#######################################################################&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Tutaj ustawiamy dla których usług ma być blokowany dany adres. Standardowo jest ustawione blokowanie na wszsytkie usługi - tutaj również tak zostawiamy.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#######################################################################&lt;br /&gt;#&lt;br /&gt;# DENY_THRESHOLD_INVALID: block each host after the number of failed login&lt;br /&gt;# attempts has exceeded this value.  This value applies to invalid&lt;br /&gt;# user login attempts (eg. non-existent user accounts)&lt;br /&gt;#&lt;br /&gt;DENY_THRESHOLD_INVALID = 5&lt;br /&gt;#&lt;br /&gt;#######################################################################&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;W tym miejscu ustawiamy po ilu nieudanych próbach adres będzie blokowany dla kont których nie ma w &lt;kbd&gt;/etc/passwd &lt;/kbd&gt;. Przeważnie dotyczy to ataków słowników. Sądze, że my znamy własny login, więc można to spokojnie zmniejszyć do 2 prób.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#######################################################################&lt;br /&gt;#&lt;br /&gt;# DENY_THRESHOLD_VALID: block each host after the number of failed&lt;br /&gt;# login attempts has exceeded this value.  This value applies to valid&lt;br /&gt;# user login attempts (eg. user accounts that exist in /etc/passwd) except&lt;br /&gt;# for the "root" user&lt;br /&gt;#&lt;br /&gt;DENY_THRESHOLD_VALID = 10&lt;br /&gt;#&lt;br /&gt;#######################################################################&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Ta reguła dotyczy prób logowania na istniejące konta. Radzę zachować tutaj ostrożność - my też możemy się pomylić lub zapomnieć hasła. 7-8 prób będzie to optymalną wartością.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#######################################################################&lt;br /&gt;#&lt;br /&gt;# DENY_THRESHOLD_ROOT: block each host after the number of failed&lt;br /&gt;# login attempts has exceeded this value.  This value applies to&lt;br /&gt;# "root" user login attempts only.&lt;br /&gt;#&lt;br /&gt;DENY_THRESHOLD_ROOT = 1&lt;br /&gt;#&lt;br /&gt;#######################################################################&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Powyższa opcja od razu blokuje próbę logowania jako root.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#######################################################################&lt;br /&gt;#&lt;br /&gt;# DENY_THRESHOLD_RESTRICTED: block each host after the number of failed&lt;br /&gt;# login attempts has exceeded this value.  This value applies to&lt;br /&gt;# usernames that appear in the WORK_DIR/restricted-usernames file only.&lt;br /&gt;#&lt;br /&gt;DENY_THRESHOLD_RESTRICTED = 1&lt;br /&gt;#&lt;br /&gt;#######################################################################&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Ta opcja blokuje wszystkie próby użycia loginu, który jest wymieniony w pliku restricted-usernames.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#######################################################################&lt;br /&gt;#&lt;br /&gt;# SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS&lt;br /&gt;#&lt;br /&gt;# SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES|NO&lt;br /&gt;# If set to YES, if a suspicious login attempt results from an allowed-host&lt;br /&gt;# then it is considered suspicious.  If this is NO, then suspicious logins&lt;br /&gt;# from allowed-hosts will not be reported.  All suspicious logins from&lt;br /&gt;# ip addresses that are not in allowed-hosts will always be reported.&lt;br /&gt;#&lt;br /&gt;SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES&lt;br /&gt;######################################################################&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Tutaj powinniśmy mieć YES. Program monitoruje wtedy raporty DenyHosts w celu odnalazienia podejrzanych logowań lub odnajduje wpisy, które nie są przydatne.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;######################################################################&lt;br /&gt;#&lt;br /&gt;# HOSTNAME_LOOKUP&lt;br /&gt;#&lt;br /&gt;# HOSTNAME_LOOKUP=YES|NO&lt;br /&gt;# If set to YES, for each IP address that is reported by Denyhosts,&lt;br /&gt;# the corresponding hostname will be looked up and reported as well&lt;br /&gt;# (if available).&lt;br /&gt;#&lt;br /&gt;HOSTNAME_LOOKUP=YES&lt;br /&gt;#&lt;br /&gt;######################################################################&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Jeżeli YES to atakujący host będzie informowany o blokowaniu (o ile to jest możliwe). Jeżeli zależy nam na prędkości proponuje to wyłączyć.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;######################################################################&lt;br /&gt;#&lt;br /&gt;# LOCK_FILE&lt;br /&gt;#&lt;br /&gt;# LOCK_FILE=/path/denyhosts&lt;br /&gt;# If this file exists when DenyHosts is run, then DenyHosts will exit&lt;br /&gt;# immediately.  Otherwise, this file will be created upon invocation&lt;br /&gt;# and deleted upon exit.  This ensures that only one instance is&lt;br /&gt;# running at a time.&lt;br /&gt;#&lt;br /&gt;# Redhat/Fedora:&lt;br /&gt;#LOCK_FILE = /var/lock/subsys/denyhosts&lt;br /&gt;#&lt;br /&gt;# Debian&lt;br /&gt;LOCK_FILE = /var/run/denyhosts.pid&lt;br /&gt;#&lt;br /&gt;# Misc&lt;br /&gt;#LOCK_FILE = /tmp/denyhosts.lock&lt;br /&gt;#&lt;br /&gt;######################################################################&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Zabezpieczenie przed urchomieniem dwa razy programu. Usuwamy komentarz przy naszej dystrybucji.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#######################################################################&lt;br /&gt;#&lt;br /&gt;# ADMIN_EMAIL: if you would like to receive emails regarding newly&lt;br /&gt;# restricted hosts and suspicious logins, set this address to&lt;br /&gt;# match your email address.  If you do not want to receive these reports&lt;br /&gt;# leave this field blank (or run with the --noemail option)&lt;br /&gt;#&lt;br /&gt;# Multiple email addresses can be delimited by a comma, eg:&lt;br /&gt;# ADMIN_EMAIL = foo@bar.com, bar@foo.com, etc@foobar.com&lt;br /&gt;#&lt;br /&gt;ADMIN_EMAIL = xxx@xxx.pl&lt;br /&gt;#&lt;br /&gt;#######################################################################&lt;br /&gt;&lt;br /&gt;#######################################################################&lt;br /&gt;#&lt;br /&gt;# SMTP_HOST and SMTP_PORT: if DenyHosts is configured to email&lt;br /&gt;# reports (see ADMIN_EMAIL) then these settings specify the&lt;br /&gt;# email server address (SMTP_HOST) and the server port (SMTP_PORT)&lt;br /&gt;#&lt;br /&gt;#&lt;br /&gt;SMTP_HOST = localhost&lt;br /&gt;SMTP_PORT = 25&lt;br /&gt;#&lt;br /&gt;#######################################################################&lt;br /&gt;&lt;br /&gt;#######################################################################&lt;br /&gt;#&lt;br /&gt;# SMTP_USERNAME and SMTP_PASSWORD: set these parameters if your&lt;br /&gt;# smtp email server requires authentication&lt;br /&gt;#&lt;br /&gt;#SMTP_USERNAME=foo&lt;br /&gt;#SMTP_PASSWORD=bar&lt;br /&gt;#&lt;br /&gt;#####################################################################&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;W tym miejscu możemy sobie ustawić powiadomienia na adres e-mail. Wszystkie ruchy w logach będą raportowane. Polecam jeżeli ktoś ma skonfigurowany serwer poczty, polecam Postfix. Może w kolejnym poście opiszę konfigurację takiego serwera.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#######################################################################&lt;br /&gt;#&lt;br /&gt;# SMTP_FROM: you can specify the "From:" address in messages sent&lt;br /&gt;# from DenyHosts when it reports thwarted abuse attempts&lt;br /&gt;#&lt;br /&gt;SMTP_FROM = DenyHosts &lt;nobody@localhost&gt;&lt;br /&gt;#&lt;br /&gt;#######################################################################&lt;br /&gt;&lt;br /&gt;#######################################################################&lt;br /&gt;#&lt;br /&gt;# SMTP_SUBJECT: you can specify the "Subject:" of messages sent&lt;br /&gt;# by DenyHosts when it reports thwarted abuse attempts&lt;br /&gt;SMTP_SUBJECT = DenyHosts Report&lt;br /&gt;#&lt;br /&gt;######################################################################&lt;br /&gt;&lt;br /&gt;######################################################################&lt;br /&gt;#&lt;br /&gt;# SMTP_DATE_FORMAT: specifies the format used for the "Date:" header&lt;br /&gt;# when sending email messages.&lt;br /&gt;#&lt;br /&gt;# for possible values for this parameter refer to: man strftime&lt;br /&gt;#&lt;br /&gt;# the default:&lt;br /&gt;#&lt;br /&gt;#SMTP_DATE_FORMAT = %a, %d %b %Y %H:%M:%S %z&lt;br /&gt;#&lt;br /&gt;######################################################################&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Tutaj kolejne ustawienia poczty - ustawiamy nadawacę, temat i format daty.&lt;br /&gt;&lt;br /&gt;Kolejne sekcje zostawiamy defaultowo aż do:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#######################################################################&lt;br /&gt;#&lt;br /&gt;# SYNC_SERVER: The central server that communicates with DenyHost&lt;br /&gt;# daemons.  Currently, denyhosts.net is the only available server&lt;br /&gt;# however, in the future, it may be possible for organizations to&lt;br /&gt;# install their own server for internal network synchronization&lt;br /&gt;#&lt;br /&gt;# To disable synchronization (the default), do nothing.&lt;br /&gt;#&lt;br /&gt;# To enable synchronization, you must uncomment the following line:&lt;br /&gt;#SYNC_SERVER = http://xmlrpc.denyhosts.net:9911&lt;br /&gt;#&lt;br /&gt;#######################################################################&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Tutaj wybieramy czy DenyHosts ma się łączyć z serwerem w celu aktualizacji bazy adresów. Defaultowo wyłączone - proponuję włączyć poprzez usunięcie hasha przy SYNC_SERVER.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#######################################################################&lt;br /&gt;#&lt;br /&gt;# SYNC_INTERVAL: the interval of time to perform synchronizations if&lt;br /&gt;# SYNC_SERVER has been uncommented.  The default is 1 hour.&lt;br /&gt;#&lt;br /&gt;#SYNC_INTERVAL = 1h&lt;br /&gt;#&lt;br /&gt;#######################################################################&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Wybieramy jak często ma być robiona aktualizacja. Ja mam 1h ale jeżeli nie lubimy jak nasz serwer często się aktualizuje możemy tu ustawić np. 12h.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#######################################################################&lt;br /&gt;#&lt;br /&gt;# SYNC_UPLOAD: allow your DenyHosts daemon to transmit hosts that have&lt;br /&gt;# been denied?  This option only applies if SYNC_SERVER has&lt;br /&gt;# been uncommented.&lt;br /&gt;# The default is SYNC_UPLOAD = yes&lt;br /&gt;#&lt;br /&gt;#SYNC_UPLOAD = no&lt;br /&gt;SYNC_UPLOAD = yes&lt;br /&gt;#&lt;br /&gt;#######################################################################&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Tutaj wybieramy czy chcemy robić upload naszej bazy zablopkowanych adresów. Proponuje YES.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#######################################################################&lt;br /&gt;#&lt;br /&gt;# SYNC_DOWNLOAD: allow your DenyHosts daemon to receive hosts that have&lt;br /&gt;# been denied by others?  This option only applies if SYNC_SERVER has&lt;br /&gt;# been uncommented.&lt;br /&gt;# The default is SYNC_DOWNLOAD = yes&lt;br /&gt;#&lt;br /&gt;#SYNC_DOWNLOAD = no&lt;br /&gt;#SYNC_DOWNLOAD = yes&lt;br /&gt;#&lt;br /&gt;#&lt;br /&gt;#&lt;br /&gt;#######################################################################&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Czy chcemy ściągać bazy adresów innych użytkowników? Oczywiście, że tak.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#######################################################################&lt;br /&gt;#&lt;br /&gt;# SYNC_DOWNLOAD_THRESHOLD: If SYNC_DOWNLOAD is enabled this parameter&lt;br /&gt;# filters the returned hosts to those that have been blocked this many&lt;br /&gt;# times by others.  That is, if set to 1, then if a single DenyHosts&lt;br /&gt;# server has denied an ip address then you will receive the denied host.&lt;br /&gt;#&lt;br /&gt;# See also SYNC_DOWNLOAD_RESILIENCY&lt;br /&gt;#&lt;br /&gt;#SYNC_DOWNLOAD_THRESHOLD = 10&lt;br /&gt;#&lt;br /&gt;# The default is SYNC_DOWNLOAD_THRESHOLD = 3&lt;br /&gt;#&lt;br /&gt;#SYNC_DOWNLOAD_THRESHOLD = 3&lt;br /&gt;#&lt;br /&gt;#######################################################################&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Tutaj mała opcja filtrowania. Jeżeli ustawimy na 1 to wtedy wszystkie adresy zablokowane przez przynajmniej jeden serwer zostaną również zablokowane u nas. Proponuje zostawić jak jest.&lt;br /&gt;&lt;br /&gt;4. Zapisujemy plik i wpisujemy:&lt;br /&gt;&lt;code&gt;sudo /etc/init.d/denyhosts restart&lt;/code&gt;&lt;br /&gt;i możemy spać spokojnie ;) Od tej pory każdy kto będzie próbował się zalogować w podejrzany sposób będzie blokowany a jego ip będzie umieszczane w &lt;b&gt;/etc/hosts.deny &lt;/b&gt;. Wszystkie logi programu, łącznie z zablokowanymi adresami znajdują się w &lt;b&gt;/var/log/denyhosts&lt;/b&gt;.&lt;br /&gt;Dziękuje i pozdrawiam!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-5570198572736814344?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/5570198572736814344/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=5570198572736814344' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/5570198572736814344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/5570198572736814344'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/07/denyhosts-czyli-jeszcze-bezpieczniejsze.html' title='DenyHosts, czyli jeszcze bezpieczniejsze SSH'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-1448043178740766702</id><published>2008-06-26T05:16:00.003+02:00</published><updated>2008-10-26T14:24:58.489+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Polityka prywatności'/><title type='text'>Polityka prywatności SpaceOfCode.blogspot.com</title><content type='html'>SpaceOfCode.blogspot.com zastrzega sobie prawo do wprowadzania zmian w Polityce Prywatności. Każdego klienta SpaceOfCode.blogspot.com i użytkownika serwisów oraz czasopism należących do SpaceOfCode.blogspot.com obowiązuje aktualna Polityka Prywatności.&lt;br /&gt;Jakiekolwiek wprowadzane zmiany nie wpływają na podstawową zasadę: SpaceOfCode.blogspot.com nie sprzedaje i nie udostępnia osobom trzecim danych personalnych czy adresowych klientów/użytkowników swoich serwisów i czasopism.&lt;br /&gt;Jeśli nie zgadzasz się z Polityką Prywatności, proszę nie odwiedzać serwisów, nie prenumerować czasopism należących do SpaceOfCode.blogspot.com oraz nie nabywać produktów i usług oferowanych przez SpaceOfCode.blogspot.com.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Dane Osobowe&lt;/h2&gt;&lt;br /&gt;W czasie korzystania z serwisów należących do SpaceOfCode.blogspot.com możesz zostać poproszony o podanie niektórych swoich danych osobowych poprzez wypełnienie formularza lub w inny spos&amp;oacute;b. Dane, o które będziesz proszony, to w większości przypadków imię i adres&lt;br /&gt;e-mail.&lt;br /&gt;Wymagamy tylko tych danych, które są niezbędne do działania serwisu. Niepodanie wymaganych danych zablokuje czynność, którą te dane dotyczyły.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Subskrypcja bezpłatnych czasopism&lt;/h2&gt;&lt;br /&gt;Zaprenumerowanie elektronicznych i bezpłatnych czasopism należących do SpaceOfCode.blogspot.com wymaga podania w odpowiednim formularzu swojego imienia i adresu e-mail. Pola te są obowiązkowe.&lt;br /&gt;Uzyskane w ten sposób dane są dodawane do listy mailingowej e-zinu. Adres e-mail jest niezbędny do tego, aby można było wysłać danemu czytelnikowi numer czasopisma. Imię pozwala SpaceOfCode.blogspot.com zwracać się do czytelników po imieniu.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Niezapowiedziane Wiadomości&lt;/h2&gt;&lt;br /&gt;SpaceOfCode.blogspot.com zastrzega sobie prawo do wysyłania niezapowiedzianych wiadomości osobom, których dane kontaktowe posiada i które zgodziły się z Polityką Prywatności.&lt;br /&gt;Pod pojęciem niezapowiedzianych wiadomości SpaceOfCode.blogspot.com rozumie informacje odnoszące się bezpośrednio do jego serwisów, czasopism, usług i produktów (np. zmiany, wewnętrzne promocje), niekomercyjne listy (np. życzenia, komentarze osobiste itp.) oraz informacje komercyjne, których rozsyłka została opłacona przez klientów SpaceOfCode.blogspot.com.&lt;br /&gt;Podmioty zlecające komercyjne mailingi nie mają wglądu w dane kontaktowe osób znajdujących się na listach adresowych SpaceOfCode.blogspot.com.&lt;br /&gt;Informacje komercyjne są filtrowane w stopniu w jakim jest to możliwe, ograniczana jest ich objętość i wysyłane są sporadycznie.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Jawne Dane Osobowe&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;Dane osobowe podane na serwisach należących do SpaceOfCode.blogspot.com przy okazji wysyłania komentarzy do artykułów, odpowiedzi na forum itp. są dostępne dla wszystkich odwiedzających strony zawierające te dane. SpaceOfCode.blogspot.com nie ma możliwości zabezpieczenia użytkowników przed osobami prywatnymi lub firmami, które te dane wykorzystają do przesłania nieokreślonych informacji. Dlatego dane te nie podlegają Polityce Prywatności.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Inne formularze&lt;/h2&gt;&lt;br /&gt;Formularze znajdujące się gościnnie na serwisach należących do SpaceOfCode.blogspot.com i dotyczące usług, produktów, serwisów i czasopism nieobsługiwanych przez SpaceOfCode.blogspot.com nie podlegają Polityce Prywatności.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Cookies (Ciasteczka)&lt;/h2&gt;&lt;br /&gt;Niektóre obszary serwisów należących do SpaceOfCode.blogspot.com mogą wykorzystywać cookies, czyli małe pliki tekstowe wysyłane do komputera internauty identyfikujące go w sposób potrzebny do uproszczenia lub umorzenia danej operacji.&lt;br /&gt;Cookies są nieszkodliwe ani dla komputera ani dla jego użytkownika i jego danych.&lt;br /&gt;Warunkiem działania cookies jest ich akceptacja przez przeglądarkę i nie usuwanie ich z dysku.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Partnerzy&lt;/h2&gt;&lt;br /&gt;Polityka Prywatności nie dotyczy serwisów i firm, których dane kontaktowe podane są w serwisach i czasopismach należących do SpaceOfCode.blogspot.com.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Wyłączenie Odpowiedzialności&lt;/h2&gt;&lt;br /&gt;SpaceOfCode.blogspot.com został stworzony, aby pomagać programistom, webmasterom i designerom. Nie powinno się bezwarunkowo korzystać ze skryptów, które udostępniamy. Zawsze pamiętaj, aby dany artykuł przeczytać i szczegółowo&lt;br /&gt;przeanalizować, gdyż może nie być stosowny do Twojej sytuacji, ewentualnie skonfrontuj z innymi podobnymi publikacjami.&lt;br /&gt;Opinie wyrażone przez społeczność na forum, w komentarzach lub w inny sposób nie zawsze są zgodne z opinią SpaceOfCode.blogspot.com.&lt;br /&gt;SpaceOfCode.blogspot.com oraz jego redakcja nie bierze na siebie odpowiedzialności za zamieszczone reklamy. Kupujący powinien być ostrożny odpowiadając na reklamę, bądź wysyłając pieniądze.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-1448043178740766702?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/1448043178740766702/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=1448043178740766702' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1448043178740766702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/1448043178740766702'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/10/polityka-prywatnoci-spaceofcodeblogspot.html' title='Polityka prywatności SpaceOfCode.blogspot.com'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3842635440530228771.post-8439280116750159825</id><published>2008-03-24T23:30:00.000+01:00</published><updated>2008-07-04T17:50:20.257+02:00</updated><title type='text'>Witam na moim blogu.</title><content type='html'>Witam!&lt;br /&gt;&lt;br /&gt;Nazywam się Wojtek Mroczkowski i mam zamiar zamieszczać tutaj wszystko co tylko może się przydać przeciętnemu lub nawet nieprzeciętnemu użytkownikowi sieci oraz otwartych systemów operacyjnych. Cieszę się gdy mam okazję komuś pomóc, więc jak ktoś będzie miał jakieś problemy związane z linuxem, siecią lub programowaniem w jednym z którychś języków webowych to proszę śmiało pisać.&lt;br /&gt;&lt;br /&gt;Pozdrawiam wszystkich!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3842635440530228771-8439280116750159825?l=spaceofcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://spaceofcode.blogspot.com/feeds/8439280116750159825/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3842635440530228771&amp;postID=8439280116750159825' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/8439280116750159825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3842635440530228771/posts/default/8439280116750159825'/><link rel='alternate' type='text/html' href='http://spaceofcode.blogspot.com/2008/03/witam-na-moim-blogu.html' title='Witam na moim blogu.'/><author><name>Admin</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://1.bp.blogspot.com/_zmRa1FbVcEc/SvVg04ZWKWI/AAAAAAAAAHI/9kyz7bcoUTU/S220/foto.jpg'/></author><thr:total>0</thr:total></entry></feed>
