<?xml version="1.0" encoding="iso-8859-2"?><rss version="2.0"><channel><title>CapaciousCore.pl</title><link>http://www.capaciouscore.pl/</link><description>Projektowanie stron WWW od podszewki</description><language>pl</language><ttl>60</ttl><item><title>YouTube ułatwia piracenie</title><pubdate>Tue, 21 Feb 2012 6:10:48 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/youtube-ulatwia-piracenie/</link><comments>http://www.capaciouscore.pl/artykuly/youtube-ulatwia-piracenie/#komentarze</comments><description><![CDATA[Pamiętacie jeszcze te huczne wydarzenie, jakim było zamknięcie Megavideo? Nagle pojawiły się setki głosów w sieci mówiących o tym, że nigdzie indziej nie było tak unikalnej ilości filmów. To naprawdę smutne. Wystarczy sobie wejść na YouTube i wpisać frazę <a href="http://www.youtube.com/results?search_query=ca%C5%82y+film" target="_blank" class="postlink">cały film</a>. Do wyboru, do koloru mamy masę materiałów, które można spokojnie obejrzeć bez limitów. Z każdym dniem pula filmów rośnie i nikt już nad tym nie panuje. Ciekawe kto pierwszy z publiki krzyknie, że zamkną Google?!? Tak duże korporacje działające w komitywie ze służbami specjalnymi USA i nie tylko mają zagwarantowaną nietykalność.
<br />

<br />
Najlepsze w tym wszystkim jest to, że oglądamy bez limitów i możemy ściągać także bez limitów, czyli YouTube niejako ułatwia rozpowszechnianie nielegalnych materiałów. Jakościowo wygląda to całkiem przyzwoicie. Oczywiście nigdy nie zaspokoi się ego fanów &quot;Full HD&quot; ale kogo to obchodzi? Zapisujemy sobie do mp4 i mamy praktycznie typowe avi lub rmvb. Przy łączu 10 Mbps ściąganie filmu trwającego np. półtorej godziny trwa jakieś 5 minut. Z resztą nie trzeba nawet ściągać skoro film zapisuję się w cache przeglądarki jako flv.
<br />

<br />
Pomijając kwestie techniczne zostają jeszcze kwestie prawne. Oczywiście w tym momencie zawsze pozostaje użycie sławnej formułki:
<br />
<p class="quote">Cytat:</p><blockquote>Copyright Disclaimer Under Section 107 of the Copyright Act 1976, allowance is made for &quot;fair use&quot; for purposes such as criticism, comment, news reporting, teaching, scholarship, and research. Fair use is a use permitted by copyright statute that might otherwise be infringing. Non-profit, educational or personal use tips the balance in favor of fair use.</blockquote>
Ciężko mi sobie wyobrazić jak dużą ilość osób trzeba będzie zatrudnić w korporacjach celem kontrolowania samego YouTube. Automaty na niewiele się zdadzą z racji poprzednich doświadczeń.
<br />

<br />
A wszystko to dzięki genialnemu pomysłowi wujka Sama, który chciał umożliwić wgrywanie dłuższych materiałów. Nie neguję faktu, że taka możliwość jest potrzebna jednak w gestii Was pozostawiam kalkulacje ile filmów jest legalnie zamieszczonych w tubie, a ile nie.
<br />
<h2>Bonus niezwiązany z tematem</h2>
<a href="http://www.youtube.com/watch?v=AjhwLDEQzsU">http://www.youtube.com/watch\?v=AjhwLDEQzsU</a>]]></description></item><item><title>[PHP] Sprawdzenie poprawności numeru PESEL</title><pubdate>Mon, 13 Feb 2012 8:17:52 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/sprawdzanie-poprawnosci-numeru-pesel-w-php/</link><comments>http://www.capaciouscore.pl/artykuly/sprawdzanie-poprawnosci-numeru-pesel-w-php/#komentarze</comments><description><![CDATA[Nawiązując do ostatniej <a href="http://www.capaciouscore.pl/artykuly/rozkmina-dotyczaca-peselu/" target="_blank" class="postlink">rozkminy</a> w wirze wydarzeń chciałbym Wam przedstawić klasę napisaną w PHP, której celem jest walidacja numeru PESEL.
<br />

<br />
Kod jest zbudowany w taki sposób, aby łatwo można było go przenieść na inne języki. Nie krępujcie się i zmieniajcie dowoli, co Wam się żywnie podoba, aby wynikiem była jeszcze większa optymalizacja.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;Dla&nbsp;czystości&nbsp;sumienia</span><span style="color: #0000BB">set_time_limit</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">);</span><span style="color: #0000BB">$trafione_zatopione&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;include&nbsp;</span><span style="color: #DD0000">'./pesel.class.php'</span><span style="color: #007700">;</span><span style="color: #0000BB">$pesel&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">;</span><span style="color: #0000BB">$black_hole&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">get_time</span><span style="color: #007700">();</span><span style="color: #FF8000">//&nbsp;Pozdro&nbsp;i&nbsp;poćwicz&nbsp;czyli&nbsp;mały&nbsp;test&nbsp;[3,1kk&nbsp;kombinacji&nbsp;-&gt;&nbsp;i&nbsp;310k&nbsp;prawidłowych&nbsp;(po&nbsp;równo&nbsp;dla&nbsp;obu&nbsp;płci&nbsp;czyli&nbsp;155k&nbsp;dla&nbsp;kobiet&nbsp;i&nbsp;155k&nbsp;dla&nbsp;mężczyzn)]</span><span style="color: #007700">for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">10100000</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;=&nbsp;</span><span style="color: #0000BB">13199999</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">){</span><span style="color: #0000BB"> $lotto&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">fill_with_zeros</span><span style="color: #007700">(</span><span style="color: #0000BB">$h</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">11</span><span style="color: #007700">);</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$pesel&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">is_valid</span><span style="color: #007700">(</span><span style="color: #0000BB">$lotto</span><span style="color: #007700">)&nbsp;===&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$h&nbsp;</span><span style="color: #007700">+=&nbsp;</span><span style="color: #0000BB">9&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">$pesel&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">10</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">++</span><span style="color: #0000BB">$trafione_zatopione</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Wycięte:&nbsp;date('d-m-Y',&nbsp;$pesel&nbsp;-&gt;&nbsp;date)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">$lotto</span><span style="color: #007700">.</span><span style="color: #DD0000">'&nbsp;(Kto:&nbsp;'</span><span style="color: #007700">.(</span><span style="color: #0000BB">$pesel&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">get_gender</span><span style="color: #007700">()&nbsp;===&nbsp;</span><span style="color: #0000BB">true&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #DD0000">'samica'&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">'samiec'</span><span style="color: #007700">).</span><span style="color: #DD0000">',&nbsp;Pierwsze&nbsp;zalogowanie&nbsp;na&nbsp;świat:&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">fill_with_zeros</span><span style="color: #007700">(</span><span style="color: #0000BB">$pesel&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">date</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">).</span><span style="color: #DD0000">'-'</span><span style="color: #007700">.</span><span style="color: #0000BB">fill_with_zeros</span><span style="color: #007700">(</span><span style="color: #0000BB">$pesel&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">date</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">).</span><span style="color: #DD0000">'-'</span><span style="color: #007700">.</span><span style="color: #0000BB">$pesel&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">date</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">].</span><span style="color: #DD0000">')&lt;br&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Lub&nbsp;po&nbsp;prostu&nbsp;$pesel&nbsp;-&gt;&nbsp;is_valid($lotto)&nbsp;dla&nbsp;samego&nbsp;"sprawdzenia&nbsp;wydajności"</span><span style="color: #007700">}</span><span style="color: #FF8000">//&nbsp;Lekkie&nbsp;przekłamanie?</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'Trafione:&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$trafione_zatopione</span><span style="color: #007700">.</span><span style="color: #DD0000">',&nbsp;Czas&nbsp;generowania:&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">round</span><span style="color: #007700">((</span><span style="color: #0000BB">get_time</span><span style="color: #007700">()&nbsp;-&nbsp;</span><span style="color: #0000BB">$black_hole</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">8</span><span style="color: #007700">).</span><span style="color: #DD0000">'s?'</span><span style="color: #007700">;</span><span style="color: #FF8000">/* *&nbsp;post&nbsp;scriptum: *&nbsp;1)&nbsp;Używanie&nbsp;date()&nbsp;to&nbsp;bardzo&nbsp;głupi&nbsp;pomysł&nbsp;bo&nbsp;zaczynamy&nbsp;od&nbsp;01-01-1970(?)&nbsp;kiedy&nbsp;daty&nbsp;PESELU&nbsp;zaczynają&nbsp;się&nbsp;od&nbsp;01-01-1800 *&nbsp;2)&nbsp;Powyższy&nbsp;skrypt&nbsp;generuje&nbsp;prawidłowe&nbsp;PESEL'e&nbsp;dla&nbsp;dat&nbsp;pomiędzy&nbsp;01-01-1900&nbsp;i&nbsp;31-01-1900 *&nbsp;3)&nbsp;Powyższy&nbsp;skrypt&nbsp;pakuje&nbsp;+20MB&nbsp;znaków&nbsp;do&nbsp;przęglądarki *&nbsp;4)&nbsp;PHP&nbsp;w&nbsp;porównaniu&nbsp;do&nbsp;innych&nbsp;języków&nbsp;wysokiego&nbsp;poziomu&nbsp;jest&nbsp;bardzo&nbsp;niewydajny.&nbsp;Konsekwencje&nbsp;braku&nbsp;kompilacji&nbsp;muszą&nbsp;być. *&nbsp;5)&nbsp;Przez&nbsp;pętle&nbsp;i&nbsp;inne&nbsp;fragmenty&nbsp;kodu&nbsp;"test&nbsp;sprawnościowy"&nbsp;będzie&nbsp;pokazywał&nbsp;wadliwe&nbsp;wyniki&nbsp;(najlepiej&nbsp;sprawdzać&nbsp;ile&nbsp;zajmuje&nbsp;wykonanie&nbsp;$pesel&nbsp;-&gt;&nbsp;is_valid()) *&nbsp;6)&nbsp;Pełna&nbsp;nieskompresowana&nbsp;lista&nbsp;PESEL'i&nbsp;w&nbsp;sekwencji&nbsp;\d{11}\r\n&nbsp;zajmuję&nbsp;~22GB&nbsp;-&gt;&nbsp;[ciach] *&nbsp;7)&nbsp;Umyślnie&nbsp;zapomniałem&nbsp;<img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> */</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">fill_with_zeros</span><span style="color: #007700">(</span><span style="color: #0000BB">$bad_string</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$length</span><span style="color: #007700">){</span><span style="color: #0000BB"> return&nbsp;str_pad</span><span style="color: #007700">(</span><span style="color: #0000BB">$bad_string</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$length</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'0'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">STR_PAD_LEFT</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;Where&nbsp;is&nbsp;a&nbsp;$good_string?</span><span style="color: #007700">}</span><span style="color: #FF8000">/*function&nbsp;fill_with_zeros($bad_string,&nbsp;$length){ //&nbsp;Liczymy&nbsp;długość $actual_length&nbsp;=&nbsp;strlen($bad_string); //&nbsp;Uzupełniamy&nbsp;jeżeli&nbsp;potrzeba if($actual_length&nbsp;&lt;&nbsp;$length) { &nbsp;$bad_string&nbsp;=&nbsp;str_repeat('0',&nbsp;($length&nbsp;-&nbsp;$actual_length)).$bad_string; } return&nbsp;$bad_string;&nbsp;//&nbsp;Where&nbsp;is&nbsp;a&nbsp;$good_string?}*/</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">get_time</span><span style="color: #007700">(){</span><span style="color: #0000BB"> list</span><span style="color: #007700">(</span><span style="color: #0000BB">$usec</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$sec</span><span style="color: #007700">)&nbsp;=&nbsp;</span><span style="color: #0000BB">explode</span><span style="color: #007700">(</span><span style="color: #DD0000">'&nbsp;'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">microtime</span><span style="color: #007700">());</span><span style="color: #0000BB"> return&nbsp;</span><span style="color: #007700">((float)</span><span style="color: #0000BB">$usec&nbsp;</span><span style="color: #007700">+&nbsp;(float)</span><span style="color: #0000BB">$sec</span><span style="color: #007700">);}</span><span style="color: #FF8000">/*&nbsp;Dla&nbsp;przypomnienia: *&nbsp;Int32&nbsp;-&gt;&nbsp;Signed: *&nbsp;-2,147,483,648&nbsp;do&nbsp;2,147,483,647&nbsp;-&gt;&nbsp;od&nbsp;-(2^31)&nbsp;do&nbsp;(2^31)&nbsp;-&nbsp;1 *&nbsp;Int32&nbsp;-&gt;&nbsp;Unsigned *&nbsp;0&nbsp;do&nbsp;4,294,967,295&nbsp;-&gt;&nbsp;2^32&nbsp;-&nbsp;1 *&nbsp;Int64&nbsp;-&gt;&nbsp;Signed *&nbsp;-9,223,372,036,854,775,808&nbsp;do&nbsp;9,223,372,036,854,775,807&nbsp;-&gt;&nbsp;od&nbsp;-(2^63)&nbsp;do&nbsp;(2^63)&nbsp;-&nbsp;1 *&nbsp;Int64&nbsp;-&gt;&nbsp;Unsigned *&nbsp;0&nbsp;do&nbsp;18,446,744,073,709,551,615&nbsp;-&gt;&nbsp;(2^64)&nbsp;-&nbsp;1 *//*-------------------------------------------+ | &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PHP_INT_MAX &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| +---------------+---------------------------+ | &nbsp; &nbsp; 32&nbsp;bit &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;64&nbsp;bit &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | +---------------+---------------------------+ |&nbsp;2,147,483,647&nbsp;|&nbsp;9,223,372,036,854,775,807&nbsp;| +---------------+---------------------------*/</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Plus źródło klasy:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">/** *&nbsp;@author:&nbsp;CapaciousCore *&nbsp;@version:&nbsp;1.07 */</span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">{</span><span style="color: #0000BB"> public&nbsp;$pesel</span><span style="color: #007700">;</span><span style="color: #0000BB"> public&nbsp;$date</span><span style="color: #007700">;</span><span style="color: #0000BB"> private&nbsp;$weights&nbsp;</span><span style="color: #007700">=&nbsp;array(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">7</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">9</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">7</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">9</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;Zbędne&nbsp;jeżeli&nbsp;nie&nbsp;używamy&nbsp;opcji&nbsp;numer&nbsp;dwa&nbsp;w&nbsp;metodzie&nbsp;is_valid_check_sum()</span><span style="color: #0000BB"> private&nbsp;$base_year</span><span style="color: #007700">;</span><span style="color: #0000BB"> public&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">is_valid</span><span style="color: #007700">(</span><span style="color: #0000BB">$pesel</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Zbędne&nbsp;jeżeli&nbsp;ma&nbsp;się&nbsp;własną&nbsp;walidację</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">preg_match</span><span style="color: #007700">(</span><span style="color: #DD0000">'#^\d{11}$#'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$pesel</span><span style="color: #007700">)&nbsp;===&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; return&nbsp;false</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">else</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #FF8000">//&nbsp;Aby&nbsp;nie&nbsp;rzutować&nbsp;za&nbsp;każdym&nbsp;razem&nbsp;przy&nbsp;operacjach</span><span style="color: #0000BB"> &nbsp; for</span><span style="color: #007700">(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">11</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">]&nbsp;=&nbsp;(int)</span><span style="color: #0000BB">$pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Walidacja&nbsp;PESEL'u&nbsp;bez&nbsp;sprawdzania&nbsp;daty&nbsp;nie&nbsp;ma&nbsp;sensu!</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">is_valid_check_sum</span><span style="color: #007700">()&nbsp;===&nbsp;</span><span style="color: #0000BB">true&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">is_valid_date</span><span style="color: #007700">()&nbsp;===&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> public&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">get_gender</span><span style="color: #007700">()</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Przy&nbsp;założeniu,&nbsp;że&nbsp;podany&nbsp;PESEL&nbsp;jest&nbsp;poprawny&nbsp;(true&nbsp;oznacza&nbsp;kobietę,&nbsp;false&nbsp;oznacza&nbsp;mężczyznę)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">9</span><span style="color: #007700">]&nbsp;%&nbsp;</span><span style="color: #0000BB">2&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> private&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">is_valid_check_sum</span><span style="color: #007700">()</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$sum&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">10&nbsp;</span><span style="color: #007700">-&nbsp;((</span><span style="color: #0000BB">1&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]&nbsp;+&nbsp;</span><span style="color: #0000BB">3&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;+&nbsp;</span><span style="color: #0000BB">7&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">]&nbsp;+&nbsp;</span><span style="color: #0000BB">9&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">]&nbsp;+&nbsp;</span><span style="color: #0000BB">1&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">4</span><span style="color: #007700">]&nbsp;+&nbsp;</span><span style="color: #0000BB">3&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">5</span><span style="color: #007700">]&nbsp;+&nbsp;</span><span style="color: #0000BB">7&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">6</span><span style="color: #007700">]&nbsp;+&nbsp;</span><span style="color: #0000BB">9&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">7</span><span style="color: #007700">]&nbsp;+&nbsp;</span><span style="color: #0000BB">1&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">8</span><span style="color: #007700">]&nbsp;+&nbsp;</span><span style="color: #0000BB">3&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">9</span><span style="color: #007700">])&nbsp;%&nbsp;</span><span style="color: #0000BB">10</span><span style="color: #007700">))&nbsp;%&nbsp;</span><span style="color: #0000BB">10</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">/*&nbsp;Lub&nbsp;opcja&nbsp;numer&nbsp;dwa&nbsp;(szkoda&nbsp;CPU?) &nbsp;for($h&nbsp;=&nbsp;0;&nbsp;$h&nbsp;&lt;&nbsp;10;&nbsp;$h++) &nbsp;{ &nbsp; $sum&nbsp;+=&nbsp;$this&nbsp;-&gt;&nbsp;weights[$h]&nbsp;*&nbsp;$this&nbsp;-&gt;&nbsp;pesel[$h]; &nbsp;} &nbsp;$sum&nbsp;=&nbsp;10&nbsp;-&nbsp;$sum&nbsp;%&nbsp;10; &nbsp;*/</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;(</span><span style="color: #0000BB">$sum&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">10</span><span style="color: #007700">]);</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> private&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">is_valid_date</span><span style="color: #007700">()</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$month&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">get_birth_month</span><span style="color: #007700">();</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">is_valid_month</span><span style="color: #007700">(</span><span style="color: #0000BB">$month</span><span style="color: #007700">)&nbsp;===&nbsp;</span><span style="color: #0000BB">true&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">is_valid_day</span><span style="color: #007700">(</span><span style="color: #0000BB">$month</span><span style="color: #007700">)&nbsp;===&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> private&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">is_valid_day</span><span style="color: #007700">(</span><span style="color: #0000BB">$month</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$day&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">get_birth_day</span><span style="color: #007700">();</span><span style="color: #0000BB"> &nbsp;$year&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">get_birth_year</span><span style="color: #007700">();&nbsp;</span><span style="color: #FF8000">//&nbsp;Jeżeli&nbsp;ma&nbsp;służyć&nbsp;także&nbsp;wyświetlaniu&nbsp;daty&nbsp;to&nbsp;musi&nbsp;się&nbsp;ten&nbsp;zapis&nbsp;znaleźć&nbsp;tutaj</span><span style="color: #0000BB"> &nbsp;$is_correct_date&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$day&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; if</span><span style="color: #007700">((</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">1&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">3&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">5&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">7&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">8&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">10&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">12</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;</span><span style="color: #0000BB">$day&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">32</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;$is_correct_date&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; else&nbsp;</span><span style="color: #007700">if((</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">4&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">6&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">9&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">11</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;</span><span style="color: #0000BB">$day&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">31</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;$is_correct_date&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; else &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;$leap_year&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">is_leap_year</span><span style="color: #007700">(</span><span style="color: #0000BB">$year</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$leap_year&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; if</span><span style="color: #007700">(</span><span style="color: #0000BB">$day&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">30</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;$is_correct_date&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">else</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; if</span><span style="color: #007700">(</span><span style="color: #0000BB">$day&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">29</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;$is_correct_date&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$is_correct_date&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #FF8000">//&nbsp;Wycięte&nbsp;(patrz&nbsp;index.php:30)</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #FF8000">//&nbsp;$this&nbsp;-&gt;&nbsp;date&nbsp;=&nbsp;strtotime($day.'-'.$month.'-'.$year);&nbsp;//&nbsp;!ISO&nbsp;8601&nbsp;-&nbsp;Czy&nbsp;to&nbsp;najszybsza/najoptymalniejsza&nbsp;metoda?</span><span style="color: #0000BB"> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">date&nbsp;</span><span style="color: #007700">=&nbsp;array(</span><span style="color: #0000BB">$day</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$month</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$year</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">$is_correct_date</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">/*&nbsp;Lub &nbsp;$day&nbsp;=&nbsp;$this&nbsp;-&gt;&nbsp;get_birth_day(); &nbsp;$year&nbsp;=&nbsp;$this&nbsp;-&gt;&nbsp;get_birth_year(); &nbsp;return&nbsp;checkdate($month,&nbsp;$day,&nbsp;$year);&nbsp;//&nbsp;Ciekawe&nbsp;dlaczego&nbsp;nie&nbsp;taka&nbsp;(logiczniejsza)&nbsp;kolejność:&nbsp;$day,&nbsp;$month,&nbsp;$year?&nbsp;(Amerykański&nbsp;styl?) &nbsp;*/</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> private&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">is_valid_month</span><span style="color: #007700">(</span><span style="color: #0000BB">$month</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;(</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">0&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">13</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> private&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">get_birth_day</span><span style="color: #007700">()</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">10&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">4</span><span style="color: #007700">]&nbsp;+&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">5</span><span style="color: #007700">];</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> private&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">get_birth_month</span><span style="color: #007700">()</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$month&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">10&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">]&nbsp;+&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">80&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">93</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $month&nbsp;</span><span style="color: #007700">-=&nbsp;</span><span style="color: #0000BB">80</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">base_year&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1800</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">else&nbsp;if(</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">20&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">33</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $month&nbsp;</span><span style="color: #007700">-=&nbsp;</span><span style="color: #0000BB">20</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">base_year&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">2000</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">else&nbsp;if(</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">40&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">53</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $month&nbsp;</span><span style="color: #007700">-=&nbsp;</span><span style="color: #0000BB">40</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">base_year&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">2100</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">else&nbsp;if(</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">60&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$month&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">73</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $month&nbsp;</span><span style="color: #007700">-=&nbsp;</span><span style="color: #0000BB">60</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">base_year&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">2200</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">else</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">base_year&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1900</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">$month</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> private&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">get_birth_year</span><span style="color: #007700">()</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">base_year&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">10&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]&nbsp;+&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">];</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> private&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">is_leap_year</span><span style="color: #007700">(</span><span style="color: #0000BB">$year</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;((</span><span style="color: #0000BB">$year&nbsp;</span><span style="color: #007700">%&nbsp;</span><span style="color: #0000BB">4&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">0&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$year&nbsp;</span><span style="color: #007700">%&nbsp;</span><span style="color: #0000BB">100&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">)&nbsp;||&nbsp;(</span><span style="color: #0000BB">$year&nbsp;</span><span style="color: #007700">%&nbsp;</span><span style="color: #0000BB">400&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">));</span><span style="color: #0000BB"> </span><span style="color: #007700">}}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>]]></description></item><item><title>PESEL - rozkmina</title><pubdate>Sun, 12 Feb 2012 9:48:41 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/rozkmina-dotyczaca-peselu/</link><comments>http://www.capaciouscore.pl/artykuly/rozkmina-dotyczaca-peselu/#komentarze</comments><description><![CDATA[Dla osób niezorientowanych się w temacie PESEL-u polecam na początku opis na <a href="http://pl.wikipedia.org/wiki/PESEL" target="_blank" class="postlink">wiki</a> oraz dokładniejszy na <a href="http://wipos.p.lodz.pl/zylla/ut/pesel.html" target="_blank" class="postlink">tej stronie</a>.
<br />

<br />
Odnosząc się do <a href="http://sobak.pl/839/php-sprawdzanie-poprawnosci-numeru-pesel/" target="_blank" class="postlink">ostatniego wpisu</a> towarzysza Sobaka zostałem zainspirowany kwestią PESEL-u. Po pierwsze doszedłem do wniosku, że prawie wszystkie skrypty czy źródła programów są błędne. Nawet znaleziony jakiś algorytm w sieci zawiera błąd, bo nie uwzględnia wszystkich dni przestępnych, przez co wyszedł mi za pierwszym razem zły wynik przy generowaniu pełnej bazy danych PESEL-i. Takie są właśnie efekty bezmózgiego kopiowania. Z tego co pamiętam to w pierwszym podejściu wygenerowało 1825000000 możliwych kombinacji uwzględniając poprawność dat urodzenia. Dobrze, że <b>Guliwer</b> szybko wyprowadził mnie z błędu, dlatego serdecznie mu za to dziękuję. Ogólnie bardzo nieoptymalnie napisane są te wszystkie oprogramowania. Ma to też swoje dobre strony, bo można bazować na czyimś (nie)doświadczeniu i zbudować coś lepszego. Ogólnie najpierw poprawiłem, zoptymalizowałem i przepisałem czyjś kod strukturalny na OOP w PHP i dałem do oceny na FW, a następnie bazując na tym kodzie napisałem wersje C#, z której wygenerowałem pełną bazę danych.
<br />

<br />
Zakładając, że nie popełniłem innego błędu to liczba <b>1826210000</b> jest prawdziwą ilością kombinacji numerów PESEL uwzględniając prawidłowe daty. Z początku chciałem wygenerować to w PHP jednak szybko doszedłem do wniosku, że jest niewydajne. Z tego powodu zacząłem pisać projekt w C jednak również okazało się, że jest niedostatecznie wydajnie. W związku z tym napisałem aplikacje w C# i po raz kolejny doceniłem moc tego języka. W ogóle jaka śmieszna rzecz wynikła z całej tej zabawy. Na Sobaka komputerze program działał dwa razy wolniej niż u mnie mimo, że mam procesor AMD <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Cała ta technologia Turbo Boost u Sobaka zdała się na nic. Podczas drugiego podejścia program działał bez przerwy od 23:26 do 15:14 następnego dnia. Szkoda, że dopiero potem (po wygenerowaniu 75% wyników) wpadłem na genialny pomysł optymalizacji. Ostatnią cyfrą PESEL'u jest suma kontrolna, czyli w przypadku, kiedy jest nią np. <tt>0</tt> to można spokojnie dodać <tt>10</tt> do głównego <i>wskaźnika</i> pętli. Jeżeli mnie myślenie nie zwodzi to tak to powinno wyglądać:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;ciach</span><span style="color: #007700">for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">10100000</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;=&nbsp;</span><span style="color: #0000BB">13199999</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB"><em><span></span><span style="color: #007700">++</span><span style="color: #0000BB">$h</span></em></span><span style="color: #007700">){</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$pesel&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">is_valid</span><span style="color: #007700">(</span><span style="color: #0000BB">fill_with_zeros</span><span style="color: #007700">(</span><span style="color: #0000BB">$h</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">11</span><span style="color: #007700">))&nbsp;===&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;<em><span>$h&nbsp;</span><span style="color: #007700">+=&nbsp;</span><span style="color: #0000BB">9&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">$pesel&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">pesel</span><span style="color: #007700">[</span><span style="color: #0000BB">10</span><span style="color: #007700">];</span><span style="color: #0000BB"></span></em> &nbsp;</span><span style="color: #007700">++</span><span style="color: #0000BB">$trafione_zatopione</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}}</span><span style="color: #FF8000">//&nbsp;ciach</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Za pierwszym razem bez zaznaczonego drugiego zapisu ta pętla generuję się średnio 40 sekund, a po optymalizacji o połowę mniej. Z pewnością zastanawiacie się, dlaczego tam jest <tt>9</tt> zamiast <tt>10</tt>? Zauważcie, że za każdym razem, kiedy zakończy się wykonywanie <i>bloku</i> pętli to wartość zmiennej <tt>$h</tt> jest preinkrementowana. Kod umyślnie podany w formacie skryptu PHP, ponieważ dla większości będzie zrozumiały.
<br />

<br />
Przy założeniu, że identyfikatory zapisujemy w takim formacie: <tt>\d{11}\r\n</tt> to nieskompresowana całość zajmuje 22,1 GB (bajtów: 23 740 730 000), a po spakowaniu WinRAR'em przy maksymalnej kompresji mamy 2,95 GB (bajtów: 3 171 925 429). Całkiem przyzwoicie, prawda? W zasadzie całe te <tt>\r\n</tt> jest niepotrzebne, bo wskaźnikiem wewnątrz pliku można w bardzo prosty sposób sterować. W zależności od struktury pliku ogólnie wygląda to tak, że inkrementujemy wartość wskaźnika pętli o np. <tt>14</tt> i odczytujemy pierwsze <tt>11</tt> znaków.
<br />

<br />
Pomijając techniczny bełkot zastanawia mnie jedna rzecz. W ciągu jednego dnia według tego algorytmu może urodzić się maksymalnie 5k dziewczyn i 5k chłopców. Nie jestem w stanie dokopać się do materiałów z GUS-u albo innego normalnego źródła, dlatego pozostawiam to Wam. Wyobraźcie sobie teraz sytuacje, w której jednego dnia urodzi się więcej niż przewidziane 10k dzieci. Zastanawia mnie czy nastąpi załamanie systemów informatycznych <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> W końcu wiele rzeczy opiera się o numer PESEL, a w takim przypadku nie będzie można przydzielić. Po ostatnich wpadkach ze stronami rządowymi wątpię, aby poprawki zostały wprowadzone w szybkim tempie. Zastanawia mnie czy szczęśliwcy będą wykluczeni z systemu? Jest na to jakiś przepis? Zauważcie, że wystarczyłoby się skrzyknąć w sieci, aby w przeciągu konkretnych 3 dni postarać się o dziecko i przy farcie któryś z nich byłby przebojowy dla tego kraju.
<br />

<br />
Gdyby ktoś zapyta o źródła programu do generowania pełnej bazy danych to z góry mówię, że nie udostępniam. Każdy ogarnięty programista jest w stanie zmontować to samodzielnie.
<br />

<br />
<tt><b>1826210000</b> = (5000 dziewczynek + 5000 chłopców) * ilość dni</tt>
<br />
<tt>ilość dni = od 1800 do 2299 czyli 500 lat w tym 121 przestępnych co daje nam 500 * 365 + 121</tt>
<br />

<br />
Grunt to podejście empiryczne stąd udostępniam <a href="http://www.capaciouscore.pl/download/other/pesel-final.png" target="_blank" class="postlink">zrzut ekranu</a> końcowego wyniku całej zabawy. Pozdrawiam z tego miejsca towarzysza Sobaka i przypominam o wspólnych teoriach dotyczących ile to wszystko zajmie w liczbach <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Kochane szacunki, prawda? Teraz Twoja kolej na analizę tego wszystkiego kolego.]]></description></item><item><title>[PHP] Detekcja użytkownika TOR'a</title><pubdate>Fri, 27 Jan 2012 10:06:36 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/detekcja-uzytkownika-tora-w-php/</link><comments>http://www.capaciouscore.pl/artykuly/detekcja-uzytkownika-tora-w-php/#komentarze</comments><description><![CDATA[Ostatnio miałem chwilkę na zabawę z TOR'em i wyciągnąłem jakieś wnioski. O tej sieci anonimowej nie będę się rozpisywać, bo szkoda mi czasu na to. Z pewnością znajdziecie informacji w sieci na ten temat. Kilka dni temu chciałem zarejestrować się na Wykopie, lecz zobaczyłem komunikat, że mam bana na IP. Chwila konsternacji i oto mamy:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">echo&nbsp;(</span><span style="color: #0000BB">is_tor_user</span><span style="color: #007700">()&nbsp;?&nbsp;</span><span style="color: #DD0000">'Chapaj&nbsp;dzide'&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">'Tego&nbsp;osobnika&nbsp;i&nbsp;tak&nbsp;trzeba&nbsp;jakoś&nbsp;ukarać'</span><span style="color: #007700">);</span><span style="color: #FF8000">//&nbsp;Łopatologia</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">is_tor_user</span><span style="color: #007700">(){</span><span style="color: #0000BB"> return&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">gethostbyname</span><span style="color: #007700">(</span><span style="color: #0000BB">reverse_ip_octets</span><span style="color: #007700">(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'REMOTE_ADDR'</span><span style="color: #007700">]).</span><span style="color: #DD0000">'.'</span><span style="color: #007700">.</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'SERVER_PORT'</span><span style="color: #007700">].</span><span style="color: #DD0000">'.'</span><span style="color: #007700">.</span><span style="color: #0000BB">reverse_ip_octets</span><span style="color: #007700">(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'SERVER_ADDR'</span><span style="color: #007700">]).</span><span style="color: #DD0000">'.ip-port.exitlist.torproject.org'</span><span style="color: #007700">)&nbsp;==&nbsp;</span><span style="color: #DD0000">'127.0.0.2'&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #0000BB">true&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">);}function&nbsp;</span><span style="color: #0000BB">reverse_ip_octets</span><span style="color: #007700">(</span><span style="color: #0000BB">$ip</span><span style="color: #007700">){</span><span style="color: #0000BB"> return&nbsp;implode</span><span style="color: #007700">(</span><span style="color: #DD0000">'.'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">array_reverse</span><span style="color: #007700">(</span><span style="color: #0000BB">explode</span><span style="color: #007700">(</span><span style="color: #DD0000">'.'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$ip</span><span style="color: #007700">)));}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Nie ma co ukrywać, że byłem natchniony inną inspiracją. Zastanawia mnie czy jest sens używania TOR'a bez (ekstra proxy) skoro łatwo można to wykryć? Dlaczego autorstwo projektu dało taką możliwość? Z resztą i tak jakoś musisz się połączyć z TOR'em, więc ślad w ISP zostaje. Gdyby ktoś chciał sprawdzić czy to faktycznie działa to polecam to <a href="http://www.capaciouscore.pl/download/other/detect-tor.php" target="_blank" class="postlink">demo</a>.]]></description></item><item><title>ACTA, SOPA, PIPA - fortel</title><pubdate>Sun, 22 Jan 2012 10:17:33 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/acta-sopa-pipa-czyli-fortel/</link><comments>http://www.capaciouscore.pl/artykuly/acta-sopa-pipa-czyli-fortel/#komentarze</comments><description><![CDATA[Od paru dniu w sieci można zaobserwować wzmożoną akcję części internautów związana z wyżej wymienionymi terminami. W szczególności tyczy się to ACTA, które ma zostać podpisane 26 stycznia. Czy tak się wydarzy? Zobaczymy za kilka dni. Niektórzy przesyłają, komu tylko mogą informacje związane z &quot;protestem&quot;, a inni np. olewają temat. Czytając masę komentarzy osób postronnych dochodzę do wniosku, że część wie &quot;piąte przez dziesiąte&quot; lub innymi słowy &quot;słyszy, że dzwonią, ale nie wie, w którym kościele&quot; natomiast druga część ma nieco większe pojęcie. Jednostki, które mają interes w podpisaniu tych &quot;aktów prawnych&quot; opowiedzą się oczywiście za i vice versa.
<br />

<br />
Nie odnosicie wrażenia, że takie rzeczy powinny być podane do publicznej wiadomości z większym wyprzedzeniem? Przychodzą mi na myśl takie słowa:
<br />
<p class="quote">Cytat:</p><blockquote>Warto też przypomnieć, że wrześniu ubiegłego roku prezydent Bronisław Komorowski podpisał nowelizację, która pozwala na wprowadzenie stanu wojennego, wyjątkowego lub stanu klęski żywiołowej w razie zewnętrznego zagrożenia w cyberprzestrzeni. - To jest potrzebna ustawa, na którą czeka nie tylko polski system bezpieczeństwa, ale także system ogólnonatowski - argumentował wtedy prezydent.</blockquote>
O ile dobrze pamiętam to wczoraj media &quot;podłapały&quot; temat <i>ataków na strony rządowe</i>. Ile w tym prawdy? To powinniście ocenić sami na podstawie analizy materiałów z rożnych źródeł, a następnie wyciągnąć wnioski! Najlepsze są te teorie/ideologie, które snują ludziska w swoich głowach. Zastanawia mnie jak można nazwać osoby floodujące serwery rządowe hakerami - toż to śmiech na sali. Według niektórych osób cel został osiągnięty, bo sprawa się rozdymała. Kwestią kalkulacji jest to czy opłaci się wprowadzenie tego porozumienia przez &quot;rządzących&quot;.
<br />

<br />
Ludzie to cholerni hipokryci. Na wiki można przeczytać:
<br />
<p class="quote">Cytat:</p><blockquote>Według jej przeciwników naruszy ona pierwszą poprawkę do Konstytucji Stanów Zjednoczonych: <b>jest cenzurą Internetu</b>, sparaliżuje Internet oraz <b>zagrozi informatorom i ogólnie wolności słowa</b>.</blockquote>
Pfff... i co z tego? Na liście przeciwników mamy Google, które to Chińskiej Republice Ludowej pomagało? <a href="http://pl.wikipedia.org/wiki/Cenzura_Internetu_w_Chińskiej_Republice_Ludowej" target="_blank" class="postlink">Link dla zainteresowanych</a>. Wnioski? Warto także zwrócić uwagę na <a href="http://pl.wikipedia.org/wiki/ACTA#Krytyka" target="_blank" class="postlink">ostatni akapit w dziale krytyka</a>.
<br />

<br />
Czy ktoś się Ciebie pytał o zdanie? Były jakieś konsultacje społeczne? Nadal jesteś zwolennikiem demokracji gdzie, co 4 lata wybierasz swojego pana? Chyba nie trzeba przypominać frekwencji z ostatnich wyborów? Mówi Wam coś termin <a href="http://pl.wikipedia.org/wiki/Demokracja_bezpośrednia" target="_blank" class="postlink">demokracja bezpośrednia</a>?
<br />

<br />
Moja kryształowa kula mówi mi, że nawet, jeżeli zostanie ACTA podpisana to przejdziecie z tym do porządku dziennego i za parę tygodni nie będziecie rozpamiętywać. Zamiast spamować po sieci i &quot;atakować&quot; strony rządowe powinniście się zorganizować i zaprotestować <i>in real world</i>. Myślicie, że kogoś to obchodzi, że kilka stron zostanie położonych? Nie bądźcie śmieszni. Bije zakład, że znaczna część krzykaczy i napinaczy internetowych nie wzięłaby udziału w manifestacjach. Kilkanaście milionów Polaków, a tylko kilka lub kilkanaście tysięcy wzięło udział w Marszu Niepodległości. Przy traktacie lizbońskim także mocno nie protestowano, więc dlaczego teraz miałoby się coś zmienić?]]></description></item><item><title>Do czego potrzebny jest proces rejestracji w sklepie internetowym?</title><pubdate>Tue, 17 Jan 2012 6:01:40 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/do-czego-potrzebny-jest-proces-rejestracji-w-sklepie-internetowym/</link><comments>http://www.capaciouscore.pl/artykuly/do-czego-potrzebny-jest-proces-rejestracji-w-sklepie-internetowym/#komentarze</comments><description><![CDATA[Od jakiegoś czasu obserwuje wejścia na moją stronę z wyżej wymienionej frazy. Po krótkiej wymianie zdań z innymi osobnikami doszedłem do wniosku, że warto naskrobać kilka słów na ten temat.
<br />

<br />
Pierwsze, co mi się nasuwa do głowy to myśl: &quot;właściwie do niczego nie jest potrzebna rejestracja&quot;. Nie prowadzę na ten temat badań, ale uważam, że jakaś część klientów wolałaby uniknąć procesu rejestracji i po prostu zamówić towar bądź usługę. W tej grupie znajduję się także ja. Po pierwsze nie lubię rejestrować się w kolejnych sklepach internetowych marnując w ten sposób swój cenny czas. Trzeba zrozumieć sposób myślenia potencjalnego klienta. Jeżeli sklep leci przez HTTP zamiast HTTPS to z góry odpada w moich oczach. Bardziej rozgarnięty klient ma na uwadze fakt, że z każdym kolejnym razem, kiedy podaje swoje dane rośnie ryzyko ich wycieku. Bardzo niemiła sytuacja dla obu stron i nie życzę jej nikomu. Jeżeli ktoś jest na tyle bystry to użyję adresu e-mailowego, który zarezerwowany jest wyłącznie dla danego podmiotu. W przypadku wycieku bazy danych z takim adresem i wykorzystaniem go w niecnych celach mamy jak w banku poniesienie konsekwencji. Z przykładem takiej sytuacji można zapoznać się <a href="http://niebezpiecznik.pl/post/jak-walczyc-ze-spamerem/" target="_blank" class="postlink">tutaj</a>. Ponadto nie każdemu chce się czytać kolejny regulamin, dlatego im jest krótszy i treściwy tym lepiej. To, co opisałem powyżej należy miedzy innymi do czynników zaufania i bezpieczeństwa.
<br />

<br />
Po drugie użyję cytatu znajomego:
<br />
<p class="quote"><cite>jsmp</cite> napisał(a):</p> <blockquote><p>IMO to obawa, czy podczas tej rejestracji nie &quot;kupią&quot; z automatu jakiegoś kota w worku. Po drugie kwestia anonimowości - jak wybierają sklep internetowy, to tego też oczekują, stąd może rodzić się obawa o to. No i trzeci argument - w normalnym sklepie się nie rejestrują, więc uważają, że w sklepie, którego tylko forma sprzedaży jest inna, będzie tak samo - wchodzą, kupują i podają adres wysyłki, płacą - i tyle. Nie uważają, żeby była potrzeba zapisywać się tam na stałe.</blockquote>
Tutaj warto się na chwile zatrzymać przy zagadnieniu anonimowości. Zdaję sobie sprawę, że przypadki, o których za chwile napisze nie zdarzają się często jednak warto mieć je na uwadze. Prowadzenie sklepu internetowego wiążę ze sobą pewne ryzyko. Proszę sobie wyobrazić sytuacje, w której wredna osoba robi psikusa i zamawia masę towaru na osobę, której nie lubi. Jeżeli taki zgredek ma pojecie jak to zrobić anonimowo wtedy sprzedawca wchodzi w koszta. Zmierzam do tego, że rejestracja użytkownika nie gwarantuje podania danych zgodnych z prawdą. Weryfikacja każdego klienta z osobna wymaga odpowiedniego zaplecza, które nie każdy posiada.
<br />

<br />
Bezkompromisową zaletą wymaganej rejestracji jest fakt, że możemy z łatwością przyznawać zniżki najbardziej aktywnym kupującym. Dodatkowo kompletujemy bazę mailingową w celu wysyłania np. ofert specjalnych. Trzeba tylko pamiętać o tym, aby osoba rejestrująca wyraziła zgodę na takie rzeczy. Jeżeli klient zamierza być stałym bywalcem to na rękę będzie mu rejestracja chociażby, dlatego, że nie będzie musiał ponownie podawać swoich danych.
<br />

<br />
I na koniec ważny smaczek całej tej zabawy. W związku ze zbieraniem danych osobowych musimy pamiętać o GIODO. Przez przypadek wpadłem na <a href="http://www.audyt-ip.pl/index.php?m=faq#q9" target="_blank" class="postlink">tą stronę</a>. Zawiera dużo cennych informacji, które mogą się Wam przydać.]]></description></item><item><title>UPC - opinia</title><pubdate>Mon, 16 Jan 2012 6:42:01 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/opinia-o-upc/</link><comments>http://www.capaciouscore.pl/artykuly/opinia-o-upc/#komentarze</comments><description><![CDATA[Dzisiejsza sytuacja zmusiła mnie do komentarza. Gdyby to zdarzyło się raz czy dwa to przymknąłbym oko. Niestety w mojej pamięci są co najmniej 4 identyczne sytuacje. Pomiędzy północą, a pierwszą w nocy znika internet i pojawia się po paru godzinach. Jeżeli to prace konserwacyjne to można było wybrać środek nocy a nie... Co ciekawe sytuacja nie miała miejsca przed podpisaniem nowej umowy. W momencie, gdy zgodziliśmy się na internet, telewizję cyfrową i niepotrzebny telefon to pojawił się zgrzyt. Śmieszy mnie fakt, że cena takich samych parametrów internetu i telewizji z telefonem jak i bez niego jest identyczna. Gdzie tu logika? W końcu utrzymanie techniczne wymaga pieniędzy. Oczywiście nie ma mowy o jakiejkolwiek negocjacji ceny, bo tak to zazwyczaj jest z molochami. Dodajmy do tego brak odpowiedniej wiedzy przez osobę będącą w biurze w moim mieście. Zwrócenie uwagi na kilka istotnych szczegółów było niczym innym jak rzuceniem grochem o ścianę. &#8222;Nasi specjaliści z pewnością o tym wiedza i pracują nad tym, aby poprawić ten stan rzeczy&#8221; - czyli typowe zlanie klienta i zapewnienie, że wszystko jest ok. Wystarczy wejść w Operze na stronę kontaktową UPC i przeczytamy magiczny komunikat:
<br />
<p class="quote">Cytat:</p><blockquote>Strona, którą oglądasz, może być nieprawidłowo wyświetlana w przeglądarce Opera. Przepraszamy za niedogodności.</blockquote>
Dodajmy do tego sytuacje, w której istnieje możliwość wysłania wiadomości do nich bez użycia HTTPS. <img src="http://www.capaciouscore.pl/smiles/icon_eek.gif" class="emoticon" alt="Shocked" />
<br />

<br />
Kilkukrotnie miałem okazje osobiście dzwonić na infolinię i zdałem sobie sprawę, że to tylko strata czasu i pieniędzy. Było to powiązane z bardzo słabą fonią jednego z programów (TLC) oraz <i>śnieżeniem</i> np. Superstacji. Zazwyczaj miało to miejsce po deszczu. Domniemywam, że ma to związek ze studzienką umiejscowiona obok bloku. Często nie była ona zamknięta i co jakiś czas ktoś w niej grzebał. Najwyraźniej kilka osób musiało się zdenerwować i powiedzieć, co myśli, bo studzienka została odrestaurowana.
<br />

<br />
Przypomina mi się sytuacja, w której pod koniec trwania umowy z TPSA był problem z internetem. Mianowicie transfer skakał jak kangur w Australii. Upewniłem się, że sytuacja jest niezależna ode mnie. Świeży system operacyjny i dobre źródła zostały wykorzystane jednak efekt był zawsze taki sam. Pamiętam, że dzwoniłem na infolinię i usłyszałem coś o modernizacji łącza. Szkoda tylko, że ta sytuacja utrzymywała się minimum miesiąc. Z tego powodu zrezygnowałem z ich usług. Taka sama sytuacja będzie miała miejsce z UPC. Do Multimediów także nie zamierzam się przenieść z powodu ogólnopolskiej awarii. Szkoda, że mieszkam w małym mieście i nie mam zbyt dużego wyboru. Mam nadzieje, że pod koniec okresu trwania umowy dostanę ciekawą ofertę od jakiegoś ISP.
<br />

<br />
PS
<br />
W dekoderze UPC jest jakiś błąd w oprogramowaniu. Jeżeli nie ma połączenia z <i>bązą</i> i wejdziemy sobie np. w program telewizyjny lub cokolwiek innego związanego z wysłaniem zapytania to zawieszamy urządzenie. <img src="http://www.capaciouscore.pl/smiles/icon_rolleyes.gif" class="emoticon" alt="Rolling Eyes" />]]></description></item><item><title>hostil.pl - kolejny darmowy hosting typu krzak</title><pubdate>Sat, 14 Jan 2012 2:01:48 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/hostil-pl-czyli-kolejny-darmowy-hosting-typu-krzak/</link><comments>http://www.capaciouscore.pl/artykuly/hostil-pl-czyli-kolejny-darmowy-hosting-typu-krzak/#komentarze</comments><description><![CDATA[Ostatnio na pewnym forum ktoś zapytał jak ominąć reklamy na tym hostingu. Pomijając fakt, że jest to raczej złamanie regulaminu. Osobiście zwróciłem uwagę na coś innego. Zdaje sobie sprawę, że nie można mieć dobrego hostingu i to jeszcze za darmo. Rozbawił mnie fakt, że na stronie hostingu pojawią się takie same reklamy jak na kontach klienta. Odnoszę wrażenie, że zostało to przygotowane przez jakiegoś dzieciaka. Strona oparta na tabelkach, błędy merytoryczne chociażby w regulaminie, marne forum i tak dalej <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" />
<br />
<p class="quote"><cite>Punkt 7 regulaminu hostingu</cite> napisał(a):</p> <blockquote><p><b>Hostil.pl nie żadnej odpowiedzialności za treści</b>, jakie znajdują się na stronach umieszczonych w serwisie przez użytkowników. <b>Opowiedzialość</b> za te treści spoczywa na użytkownikach.</blockquote>
Chyba chodziło o to, że nie ponosi żadnej odpowiedzialności?
<br />
<p class="quote"><cite>Punkt 11 regulaminu hostingu</cite> napisał(a):</p> <blockquote><p>Użytkownik zakładając konto na Hostil.pl zgadza się na <b>przetwarzanie danych osobowych</b> przez Hostil.pl, także do celów marketingowych. Użytkownikowi przysługuje prawo do wglądu, edycji i usunięcia danych przekazanych podczas rejestracji konta. W przypadku podania przez użytkownika nieprawdziwych danych osobowych właściciel serwisu może bez żadnego ostrzeżenia usunąć konto użytkownika.</blockquote>
Po pierwsze zastanawia mnie, jakie to dane. Przy rejestracji podajemy jedynie &quot;login&quot; i adres e-mail. Czy <i>zbiór danych osobowych</i> został zgłoszony i zarejestrowany w GIODO? Niestety nigdzie na stronie nie ma informacji kto jest właścicielem więc byłem zmuszony sprawdzić domenę przy pomocy whois i odnoszę wrażenie, że została zarejestrowana na osobę prywatną. W celu rozwiania wątpliwości wysłałem zapytanie do ich &quot;webmastera&quot;. Niestety nie uzyskałem odpowiedzi. Najwyraźniej zadałem niewygodne pytanie <img src="http://www.capaciouscore.pl/smiles/icon_sad.gif" class="emoticon" alt="Sad" /> Czy Waszym zdaniem &quot;ktoś&quot; powinien się zająć tą sprawą?]]></description></item><item><title>Re: Powyborcza refleksja 2011</title><pubdate>Tue, 10 Jan 2012 12:02:40 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/re-powyborcza-refleksja-2011/</link><comments>http://www.capaciouscore.pl/artykuly/re-powyborcza-refleksja-2011/#komentarze</comments><description><![CDATA[Najwidoczniej nie mam cierpliwości skoro produkuje to przemyślenie. Nie pamiętam dokładnie, kiedy wysłałem komentarz, ale widzę, że nie został zaakceptowany. Nie zapisałem sobie go, a szkoda. Ten &quot;artykuł&quot; jest odpowiedzią na <a href="http://www.zyxist.com/pokaz.php/powyborcza_refleksja_2011" target="_blank" class="postlink">ten wpis</a>. Skupmy się głównie na słowach autora.
<br />

<br />
Skoro mainstreamowe media cały czas bębniły o ruchu poparcia to nie trudno było się domyślić, na kogo część wyborców odda głos. Znaleziono nisze i ją wykorzystano. To czy ktoś spełni swoje postulaty to inna bajka. Oczywiście, że KK jest dobrym tematem do &quot;ojeżdżania&quot;. Grunt to próbować zdyskredytować przeciwników, prawda? Jesteś pewny, że każdy duchowny z Kościoła w 100% rozlicza się z państwem? Wystawia fakturę? Ah... bym zapomniał. Ci, którzy nie mają innych zajęć (czyt. nie są np. katechetami) płacą podatek zryczałtowany, prawda? Tu chrzest, tam pogrzeb, gdzieś ślub i nie zapomnijmy o ogłoszeniach z ambony oraz tacy. Czysty biznes jak się patrzy. Oczywiście, że twierdze, że związki wyznaniowe nie powinny mieć żadnych ulg bo z jakiej racji mają ją mieć? Żyjemy chyba w państwie świeckim, tak? Jeżeli nazwiemy &quot;paroma&quot; ulgami karmienie kogoś, kto reprezentuje całkiem odmienny światopogląd to nadal jest to &quot;sprawiedliwe&quot;? Z jakiej racji ateiści albo wyznawcy innych religii mają dotować na KK i ich ideologie? Co to jakąś instytucja uprzywilejowana? I to wszystko z naszych wspólnych podatków jeszcze?
<br />

<br />
Nie przejeździłem ani km na ulgach. Ogólnie gardzę komunikacją miejską, pociągami i PKS'em. Skoro ustawodawca dał jakieś ulgi to się z nich korzysta, prawda? Skoro ja mam oddać różnicę biurokratom to niech oddadzą ją także te &quot;przedsiębiorstwa&quot; zagraniczne działające na naszym rynku. Dlaczego obcy ma mieć lepiej niż swój? Chyba mi nie powiesz, że przyciąganie obcego kapitału jest lepsze niż pomnażanie narodowego? Czesane są pieniądze tutaj i wypływają z kraju. Tyle w tym temacie moim zdaniem. Trzeba mieć &quot;niezłe sumienie&quot;, aby brać <a href="http://blog.titos2k.com/index.php/zrobmy-internety-po-polsku/" target="_blank" class="postlink">dotacje</a>. Skoro sugerujesz coś o szwindlach obywateli to wskaż konkretny. Doniesiesz na kogoś? Skoro ktoś przewiózł legalnie towary ze Słowacji to dlaczego ma płacić akcyzę? Ponownie: skoro masz dowody na wytworzenie <i>dobrych trunków</i> na terenie akademików to, dlaczego tego nie zgłosisz? Taki dobry z Ciebie obywatel?
<br />

<br />
Chyba zapomniałeś jak okres wojenny i czas PRL'u nauczył Polaków kombinować? To jest stan umysłu i trwa po dziś dzień. Odwracamy sytuacje i odpowiedz po cichu w sumieniu na następujące pytanie: jesteś aż tak sprawiedliwy, że nie masz sobie nic do zarzucenia? Świętoszek i idealista? Oczywiście lepiej oskarżać innych zamiast siebie (bo co złego to nie ja, prawda?). Typowa polska mentalność narzekania. Grunt to uogólniać i sprowadzać wszystkich do tego samego parteru według Ciebie.
<br />

<br />
Nie popieram tej &quot;formacji politycznej&quot;, która uzyskała &quot;10%&quot; to po raz. Po dwa moim zdaniem miejscem dla religii nie jest w szkoła. Po trzecie patrzymy najpierw na siebie, a dopiero potem ewentualnie na kogoś. Po czwarte skoro Ciebie tak wszystko to boli to, co z tym robisz? Nic? Tak myślałem. Jesteś kolejnym krzykaczem w internecie i niczym po za tym. Po piąte: niektórym potrzebny jest solidny rachunek sumienia.
<br />
<p class="quote">Cytat:</p><blockquote>Każdy kij ma dwa końce</blockquote>
Podejmiesz rękawice?]]></description></item><item><title>[PHP] Pobieranie uptime serwera</title><pubdate>Fri, 06 Jan 2012 9:23:17 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/pobieranie-uptime-serwera-w-php/</link><comments>http://www.capaciouscore.pl/artykuly/pobieranie-uptime-serwera-w-php/#komentarze</comments><description><![CDATA[Ponieważ ostatnimi czasy mocno rozleniwiłem się przez <a href="http://sobak.pl/" target="_blank" class="postlink">Sobak</a>'a to walimy prosto z mostu.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">get_uptime</span><span style="color: #007700">(){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Windows</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">php_uname</span><span style="color: #007700">(</span><span style="color: #DD0000">'s'</span><span style="color: #007700">)&nbsp;==&nbsp;</span><span style="color: #DD0000">'Windows&nbsp;NT'</span><span style="color: #007700">)&nbsp;</span><span style="color: #FF8000">//&nbsp;lub&nbsp;if(strtolower(substr(PHP_OS,&nbsp;0,&nbsp;3))&nbsp;==&nbsp;'win')&nbsp;lub&nbsp;...&nbsp;wymyśl&nbsp;coś&nbsp;sam</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$is_windows&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;$cmd&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'net&nbsp;statistics&nbsp;server'</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Mac,&nbsp;Linux,&nbsp;Unix</span><span style="color: #0000BB"> else&nbsp;</span><span style="color: #FF8000">//&nbsp;if(php_uname('s')&nbsp;==&nbsp;'Darwin'&nbsp;||&nbsp;php_uname('s')&nbsp;==&nbsp;'Linux'&nbsp;||&nbsp;php_uname('s')&nbsp;==&nbsp;'Unix')&nbsp;i&nbsp;tak&nbsp;dalej&nbsp;<img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /></span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$cmd&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'uptime'</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;lub&nbsp;'cat&nbsp;/proc/uptime'&nbsp;lub&nbsp;'/usr/bin/uptime'&nbsp;lub&nbsp;...&nbsp;wymyśl&nbsp;coś&nbsp;sam</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> $stats&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">shell_exec</span><span style="color: #007700">(</span><span style="color: #0000BB">$cmd</span><span style="color: #007700">);</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$is_windows</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;preg_match</span><span style="color: #007700">(</span><span style="color: #DD0000">'#\d{1,2}/\d{1,2}/\d{4}&nbsp;\d{1,2}:\d{1,2}&nbsp;(?:AM|PM){1}#'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$stats</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$matches</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;$time&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">time</span><span style="color: #007700">()&nbsp;-&nbsp;</span><span style="color: #0000BB">strtotime</span><span style="color: #007700">(</span><span style="color: #0000BB">$matches</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp;$uptime</span><span style="color: #007700">[]&nbsp;=&nbsp;</span><span style="color: #0000BB">intval</span><span style="color: #007700">(</span><span style="color: #0000BB">$time&nbsp;</span><span style="color: #007700">%&nbsp;</span><span style="color: #0000BB">60</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;Sekundy</span><span style="color: #0000BB"> &nbsp;$uptime</span><span style="color: #007700">[]&nbsp;=&nbsp;</span><span style="color: #0000BB">intval</span><span style="color: #007700">(</span><span style="color: #0000BB">$time&nbsp;</span><span style="color: #007700">/&nbsp;</span><span style="color: #0000BB">60&nbsp;</span><span style="color: #007700">%&nbsp;</span><span style="color: #0000BB">60</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;Minuty</span><span style="color: #0000BB"> &nbsp;$uptime</span><span style="color: #007700">[]&nbsp;=&nbsp;</span><span style="color: #0000BB">intval</span><span style="color: #007700">(</span><span style="color: #0000BB">$time&nbsp;</span><span style="color: #007700">/&nbsp;</span><span style="color: #0000BB">3600&nbsp;</span><span style="color: #007700">%&nbsp;</span><span style="color: #0000BB">24</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;Godziny</span><span style="color: #0000BB"> &nbsp;$uptime</span><span style="color: #007700">[]&nbsp;=&nbsp;</span><span style="color: #0000BB">intval</span><span style="color: #007700">(</span><span style="color: #0000BB">$time&nbsp;</span><span style="color: #007700">/&nbsp;</span><span style="color: #0000BB">86400</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;Dni</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;$uptime[]&nbsp;=&nbsp;intval($seconds&nbsp;/&nbsp;31536000)&nbsp;//&nbsp;Lata?</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Musisz&nbsp;dopisać&nbsp;kawałek&nbsp;kodu,&nbsp;który&nbsp;został&nbsp;zalinkowany**</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> return&nbsp;$uptime</span><span style="color: #007700">;}function&nbsp;</span><span style="color: #0000BB">format_uptime</span><span style="color: #007700">(){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Tutaj&nbsp;powinień&nbsp;być&nbsp;kod&nbsp;do&nbsp;odmiany&nbsp;sekund,&nbsp;minut,&nbsp;godzin,&nbsp;dni&nbsp;i&nbsp;ewentualnie&nbsp;lat*</span><span style="color: #007700">}</span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">get_uptime</span><span style="color: #007700">());</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Oczywiście jeżeli ruszamy takie zagadnienia to trzeba pamiętać i mieć na uwadze fakt, że po pierwsze wymagane są uprawnienia do wykonywania poleceń systemowych i po drugie trzeba mieć na względzie jakiś cache żeby nie męczyć ale o tym chyba już wiecie <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" />
<br />

<br />
* Ponieważ nie lubię odkrywać koła na nowo to osoby zainteresowane muszą w swojej gestii poszukać gotowego rozwiązania dotyczącego -&gt; patrz komentarz w funkcji <tt>format_uptime()</tt>. Coś na wzór <a href="http://www.cauchy.pl/systemy/php-mysql/liczba-godzin-do-okreslonej-daty/index.php" target="_blank" class="postlink">tego</a> tylko z mniejsza ilością &quot;syfu&quot; w kodzie. Gotowe rozwiązanie wisi gdzieś na forum.php.pl - tak dla podpowiedzi.
<br />
** Tak jak powiedziałem na górze &quot;nie lubię odkrywać koła na nowo&quot; to polecam <a href="http://www.danielkassner.com/2011/08/24/linux-uptime" target="_blank" class="postlink">ten artykuł</a>. Gdyby linki kiedyś wygasły to tutaj mirror screenshot <a href="http://www.capaciouscore.pl/download/other/danielkassner-com-linux-uptime-1.png" target="_blank" class="postlink">numer 1</a> i <a href="http://www.capaciouscore.pl/download/other/danielkassner-com-linux-uptime-2.png" target="_blank" class="postlink">numer 2</a>.
<br />

<br />
I bym zapomniał na koniec. Dla tych, co chcą w JS polecam <a href="http://www.xenocafe.com/tutorials/php/realtime_server_uptime_in_windows/index.php" target="_blank" class="postlink">ten pseudokod</a>, który wymaga drastycznych modyfikacji... Gdyby adres kiedyś wygasł to dajcie cynk to zapodam mirror'a.]]></description></item><item><title>Bajki, na których wyrosłem</title><pubdate>Sat, 31 Dec 2011 11:13:10 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/bajki-na-ktorych-wyroslem/</link><comments>http://www.capaciouscore.pl/artykuly/bajki-na-ktorych-wyroslem/#komentarze</comments><description><![CDATA[Ze względu na to, że jestem człowiekiem wygodnym i nie lubię się powtarzać pomyślałem sobie, że skoro już kilkanaście razy powtarzam ten wątek w rozmowach, to może przygotuję gotową listę, aby nie sięgać ponownie do pamięci.
<br />

<br />
Skoro było już o grach, to pomyślałem sobie, że korzystając z okazji opowiem kilka słów o bajkach, które zwichnęły moją psychikę. Uwierzcie mi, że było ich sporo i zaraz się o tym przekonacie.
<br />

<br />
Ja w porównaniu do młodszego pokolenia pamiętam jeszcze czasy Fox Kids (zwane teraz Jetix [a zasadniczo już Disney XD - dop. korekt.]) oraz starego, dobrego Cartoon Network. Najpierw będą wymienione kreskówki z Fox Kids chronologicznie, potem z Cartoon Network, a na koniec ekstra dodatki. Przy okazji podkreślę, że o niektórych mogłem zapomnieć.
<br />

<br />
Skoro jesteście już gotowi na mały szok to poniżej zamieszczam listę:
<br />
<ul class="list">
<li><b>Pinokio</b> - w sumie niegłupia bajka, lecz pierwsze co mi przyszło do głowy to <a href="http://www.mmpoznan.pl/396117/2011/12/7/demolka-w-bajkowej-alei-wandali-zatrzymal-swiety-mikolaj?category=spozaMiasta" target="_blank" class="postlink">ten artykuł</a>. Czasami aż trudno mi uwierzyć w te wszystkie <i>doniesienia prasowe</i>.</li>
<li><b>Księżniczka Sissi</b> - będąc bardzo młodym szczylem pamiętam, że to oglądałem <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /></li>
<li><b>Trzy małe duszki</b> - tę bajkę kojarzę trochę, ale niezbyt za nią przepadałem</li>
<li><b>Teknoman</b> - ten tytuł pamiętam bardzo dobrze. Wszystko, co było związane z technologią i kosmosem od zawsze mnie interesowało. Ciekawe, dlaczego w związku z tym nie zostałem kosmonautą? Oh może, dlatego, że w Polsce nie ma NASA?</li>
<li><b>Eskadra Orła</b> - tę pozycję także pamiętam dość dobrze.</li>
<li><b>M.A.S.K.</b> - nie było takie głupie do momentu kiedy ostatnio tego nie obejrzałem. Boże, co ja mogłem wtedy myśleć oglądając coś takiego. Nie zmienia to faktu, że bajka w dzieciństwie wydawała się fajna.</li>
<li><b>Kleszcz</b> - ciekawe, kto z Was nie pamięta starego, poczciwego kleszcza wypijającego krew z każdego przestępcy <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /> Na swój sposób komicznie zrealizowana kreskówka lecz podobała mi się.</li>
<li><b>Piotruś Pan i piraci</b> - chyba marzeniem większości z nas było wyobrażenie, aby latać tak jak Peter Pan, prawda?</li>
<li><b>Spider-man</b> - jedna z ulubionych kreskówek większości chłopaków?</li>
<li><b>X-Men </b> - tak samo jak powyżej.</li>
<li><b>Potworne pomidory</b> - pamiętam, że oglądałem to, lecz nie było to zbytnio interesujące.</li>
<li><b>Incredible Hulk</b> - tego chyba nie muszę przedstawiać?</li>
<li><b>Fantastyczna Czwórka</b> - stara, dobra bajka. Każdy ze starszej generacji powinien ją pamiętać.</li>
<li><b>Srebrny Surfer</b> - kolejny, dobry tytuł, z którym warto zapoznać się.</li>
<li><b>Bob Budowniczy</b> - &quot;Bob Budowniczy zawsze da radę!&quot; ciekawe motto, które można przełożyć na życie codzienne.</li>
<li><b>Guziczek</b> - nie, nie ten o którym myślicie <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /></li>
<li><b>Inspektor Gadżet</b> - będąc młodym chłopakiem zawsze ciekawiło mnie to co w następnym odcinku zostanie użyte jako gadżet.</li>
<li><b>Kosmiczne wojny</b> - tytuł kojarzę, ale nie pamiętam, o czym to dokładnie było</li>
<li><b>Leśna rodzina</b> - pamiętam tę bajkę jak ryła mi beret jak byłem młody <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /></li>
<li><b>Łebski Harry</b> - właściwie nie wiem, co tutaj napisać</li>
<li><b>Pecola</b> - pamiętam te małe przestrzenne postacie. Przypomina mi się, że kiedyś dawno temu wizytowałem taką stronę gdzie można było ściągnąć projekty takich kartonowych postaci, wydrukować i poskładać. Ktoś pamięta jak to się nazywa?</li>
<li><b>Pole Position</b> - oglądało się ale niezbyt już pamiętam czy warto było</li>
<li><b>Przygody Pytalskich</b> - kolejna świetna bajka do rycia beretu</li>
<li><b>Przygody Syrenki</b> - oglądało się a co! Ciekawe jak smakuje <i>mjenso</i> takiej syrenki <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /></li>
<li><b>Superświnka</b> - nie oglądałem, ale po sprawdzeniu <a href="http://www.youtube.com/watch?v=ku9Zs1JKQmo" target="_blank" class="postlink">co to jest</a> musiałem wylistować. Chyba azjaci przegięli ze swoją wizją supermana <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /></li>
<li><b>Świat Bobbiego</b> - stara, dobra kreskówka z mojego dzieciństwa.</li>
<li><b>Ulisses 31</b> - nie mam bladego pojęcia, co ja sobie wtedy myślałem oglądając tę bajeczkę.</li>
<li><b>Wesoła siódemka</b> - ktoś to pamięta?</li>
<li><b>Farma pełna strachów</b> - ta kreskówka tłumaczy wiele złych rzeczy w mojej psychice.</li>
<li><b>Przygody Kuby Guzika</b> - pamiętam i miło wspominam.</li>
<li><b>Świat według Ludwiczka</b> - zarąbiste rozkminy.</li>
<li><b>Simpsonowie</b> - osoby nie znające tej &quot;kreskówki&quot; powinny zostać spalone na stosie <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /></li>
<li><b>Gęsia skórka</b> - chciałem zobaczyć co to za kreskówka, ale wyskoczyły mi jakieś gołe laski <img src="http://www.capaciouscore.pl/smiles/icon_sad.gif" class="emoticon" alt="Sad" /></li>
<li><b>Szalony Jack, pirat</b> - prawie jak ten film z Johnym Depp'em.</li>
<li><b>Power Rangers</b> - tylko początku pamiętam, bo dalsze części to była szmira. </li>
<li><b>Digimon</b> - 10x lepsze od Pokemonów.</li>
<li><b>Walter Melon</b> - eh ten melon razem z jego nosem wielgaśnym.</li>
<li><b>Pokémon</b> - kiedyś trochę się oglądało.</li>
<li><b>Wunschpunsch</b> - kolejna psychodeliczna &quot;bajeczka&quot;.</li>
<li><b>Odlotowe agentki</b> - przynajmniej kreatywne. Ktoś, kto wymyślał te gadżety miał łeb.</li>
<li><b>Dzieciaki z klasy 402</b> - niegłupie.</li>
<li><b>Zły pies</b> - dziwna bajka.</li>
<li><b>Nowe przygody Lucky Luke'a</b> - jedna z lepszych kreskówek, jaką miałem okazję zobaczyć w swoim życiu.</li>
<li><b>Oggy i karaluchy</b> - pomimo dziwnego tytułu bajka nie była zła. W sumie zawsze mnie rozbawiała.</li>
<li><b>Hamtaro &#8211; wielkie przygody małych chomików</b> - coś pozytywnego (nie mylić z pożywnym) dla duszy.</li>
<li><b>Tajemnicze opowieści Moville'a</b> - troszkę przerażające?</li>
<li><b>Shin-chan</b> - zboczone tematy.</li>
<li><b>Ach, ten Andy!</b> - niech wyjdzie choć jeden przed szereg co w podstawowej szkole nie był jak Andy!</li>
<li><b>Medabots</b> - tylko tytuł kojarzę.</li>
<li><b>Beyblade V-Force</b> - kolejna dziwna odmiana pokemoniastych stworów.</li>
<li><b>Wojownicze Żółwie Ninja</b> - pamiętam w życiu miałem ich wiele. Szczególnie jak przywozili pizze <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /> Lepsze niż moje bojowe elfy (pozdrawiam zaznajomionych w temacie).</li>
<li><b>Roboluch</b> - śmiać się czy płakać?</li>
<li><b>Wyścigi NASCAR</b> - kojarzę bajkę. Chciałem przypomnieć sobie, ale znowu goła baba mi wyskoczyła na grafice wujka Google.</li>
<li><b>Sonic X</b> - a pamiętacie grę o nazwie Sonic albo Croc?</li>
<li><b>Tutenstein</b> - kolejny mroczny, fajny tytuł.</li>
<li><b>Scooby Doo</b> - dawno temu oglądałem, ale znudziło mi się bo było głupie i schematyczne.</li>
<li><b>Flintstonowie</b> - Wilma! Gdzie jesteś?!?</li>
<li><b>Tom i Jerry</b> - uwielbiałem</li>
<li><b>Zwariowane Melodie</b> - kto nie zna ten ma niezły uszczerbek na zdrowiu psychicznym. W którym to kraju ta bajka była zakazana? Apropo Strusia Pędziwiatra to powinniście <a href="http://www.youtube.com/watch?v=iraMOxBkq8A" target="_blank" class="postlink">to zobaczyć</a>.</li>
<li><b>Dastardly i Muttley</b> - zawsze mnie to bawiło.</li>
<li><b>Dink, mały dinozaur</b> - pamiętam tego małego zgreda!</li>
<li><b>Droopy, superdetektyw</b> &#8211; też niegłupia bajeczka.</li>
<li><b>Jetsonowie</b> - o tak! Kosmiczna rodzinka... Ciekawe za ile lat tak będzie wyglądać nasza teraźniejszość?</li>
<li><b>Kocia Ferajna</b> - wracamy na stare śmieci!</li>
<li><b>Miś Yogi</b> - tego pana nie musze chyba przedstawiać, prawda?</li>
<li><b>Nowe przygody Kapitana Planety</b> - oglądałem nie przeczę <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /></li>
<li><b>Odlotowe wyścigi</b> &#8211; dziwna, ale fajna bajka.</li>
<li><b>Richie Rich</b> - zawsze to jakaś odmienność, prawda?</li>
<li><b>Rodzina Addamsów</b> - nie znosiłem tego kiczu!</li>
<li><b>Johnny Bravo</b> - kto nie lubił tych debilnych i zarazem śmiesznych tekstów?</li>
<li><b>Krowa i Kurczak</b> - zawsze mnie to bawiło.</li>
<li><b>Laboratorium Dextera</b> &#8211; wręcz to uwielbiałem.</li>
<li><b>Prawdziwe przygody Jonny&#8217;ego Questa</b> - tak jak poprzednio. Byłem zafascynowany tym jak stworzono ten materiał i to w takich czasach.</li>
<li><b>Dwa głupie psy</b> - może i głupie, ale śmieszyło mnie to.</li>
<li><b>Animaniacy</b> - przez chwilę oglądałem, ale szybko mi się znudziło.</li>
<li><b>Maska</b> - tak samo jak powyżej.</li>
<li><b>Jam Łasica</b> - kto nie pamięta tego &quot;przemądrzałego&#8221; stwora?</li>
<li><b>Atomówki</b> - ryły ostro beret.</li>
<li><b>Heathcliff i Dingbat</b> - pamiętam, że oglądałem i tylko tyle...</li>
<li><b>Żukosoczek</b> - coś jak Rodzina Adamsów?</li>
<li><b>Ed, Edd i Eddy</b> - chyba nie trzeba przedstawiać?</li>
<li><b>Głupi i głupszy</b> - bawiło mnie to.</li>
<li><b>Żywiołki</b> - kojarzę tylko z nazwy.</li>
<li><b>Musze opowieści</b> - pamiętam to bardzo dobrze. Pamiętam jak kolega w podstawówce na plastyce narysował identyczną postać.</li>
<li><b>Wampirzyca Mona</b> &#8211; kolejny dziwny nietypowy tytuł, który oglądałem.</li>
<li><b>Kacper</b> - oglądałem, ale bardzo szybko zrezygnowałem.</li>
<li><b>Chojrak - tchórzliwy pies</b> - straszne ale fajne <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /></li>
<li><b>Mike, Lu i Og</b> - nawet mi się to podobało.</li>
<li><b>Hong Kong Phooey</b> - oglądałem, ale nie pamiętam, co w niej było</li>
<li><b>Owca w Wielkim Mieście</b> - typowy przykład tego jak wygląda sytuacja człowieka, który przeprowadził się z małego miasta do dużego <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /></li>
<li><b>Bliźniaki Cramp</b> - bajka, na której się wychowałem.</li>
<li><b>X-Men: Ewolucja</b> - tak samo jak powyżej.</li>
<li><b>Batman Przyszłości</b> - i ponownie tak jak powyżej. Ubóstwiam soundtrack z tej bajki.</li>
<li><b>Kapitan Grotman i Aniołkolatki</b> - pamiętam tego kudłatego stwora.</li>
<li><b>Perypetie Penelopy Pitstop</b> - kolejna ryjąca dekiel bajka.</li>
<li><b>Strażnicy czasu</b> - świetna bajka.</li>
<li><b>Mroczni i źli (Mroczne Przygody Billy&#8217;ego i Mandy; Zło w Potrawce)</b> - zawsze lubiłem podejście Mandy i Żniwiarza.</li>
<li><b>Samuraj Jack</b> - świetny klimat miała ta bajka.</li>
<li><b>Liga Sprawiedliwych</b> - fajne</li>
<li><b>Cubix</b> - nawet bardzo fajne.</li>
<li><b>Kryptonim: Klan Na Drzewie</b> - niechude</li>
<li><b>Ozzy i Drix</b> - kolejny dobry tytuł moim zdaniem.</li>
<li><b>Chris Colorado</b> - lubiłem te nowoczesne klimaty.</li>
<li><b>Gwiezdne wojny: Wojny klonów</b> - świetne i mam ochotę obejrzeć to ponownie.</li>
<li><b>Robotbo</b> - kojarzę.</li>
</ul>
<h2>Inne</h2>
Pomijając materiały występujące w Cartoon Network i Fox Kids pamiętam także następujące:
<br />
<ul class="list">
<li><b>Dragon Ball</b> - saga, na której się wychowałem. Osoby, które jej nie oglądały powinny się wstydzić!</li>
<li><b>Gdzie jest Wally?</b> - no właśnie gdzie?!?</li>
<li><b>Dżdżownica Jim</b> - pamiętam, że była nawet gra z <a href="http://www.capaciouscore.pl/download/other/Earthworm-Jim.jpg" target="_blank" class="postlink">tym stworem</a>.</li>
<li><b>Motomyszy z Marsa</b> &#8211; hm?</li>
<li><b>Rocket Power</b> - pamiętam z obrazków.</li>
<li><b>Garfield i przyjaciele</b> &#8211; &quot;niedobry&quot; był <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /></li>
<li><b>Sailor Moon</b> - <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /></li>
<li><b>Tom i przyjaciele</b> - chyba jedna z pierwszych bajek jaką widziałem na CN. Pamiętam, że w tamtych czasach była jeszcze po angielsku.</li>
<li><b>Spongebob</b> &#8211; właściwie to bajka?</li>
<li><b>Yin Yang Yo!</b> &#8211; <a href="http://www.youtube.com/watch?v=5_b2tzEHt74" target="_blank" class="postlink">ryj mi spadł!</a></li>
<li><b>Ulica sezamkowa</b> &#8211; <a href="http://www.forumweb.pl/profile.php?mode=viewprofile&amp;u=2" target="_blank" class="postlink">logeen</a> pożeracz ciasteczek <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /> Ot takie powtórki naćpane cukrem z ciasteczek na potęgę.</li>
<li><b>Voltron - obrońca wszechświata</b> - jedna z pierwszych bajek, jakie widziałem.</li>
<li><b>nieznany tytuł</b> - ktoś pamięta jak nazywała się bajka z tego <a href="http://www.youtube.com/watch?v=gAjR4_CbPpQ" target="_blank" class="postlink">wideoklipu</a>?</li>
</ul>
<h2>WTF?</h2>
Z cyklu co się dzisiaj dzieje i jakich wzorców pakują do głowy młodym ludziom.
<br />
<ul class="list">
<li><b>Galactik Football</b> - raz widziałem i pomyślałem &quot;fuj&quot;!</li>
<li><b>Naruto</b> - nie trawie kompletnie.</li>
<li><b>Nie ma to jak hotel</b> - totalny WTF!</li>
<li><b>Włatcy Móch</b> - czego to właściwie uczy?</li>
<li><b>pasmo Kartony</b> - porażka?</li>
<li><b>Lazy town</b> - what the hell is this?</li>
<li><b>Niesamowity świat Gumballa</b> - <a href="http://www.youtube.com/watch?v=eexRPhDJjH4" target="_blank" class="postlink">szybkie intro</a>, czyli wtf</li>
<li><b>Xiaolin - pojedynek mistrzów</b> - nie ma chyba nawet słowa aby określić co to za kicz jest.</li>
<li><b>Szpiegowska rodzinka</b> - WTF?</li>
<li><b>Co gryzie Jimmy&#8217;ego?</b> - chyba pchły...</li>
</ul>
Niektóre tytuły są jeszcze znośne np. <b>Wyspa Totalnej Porażki</b> czy <b>Niezwykłe przypadki Flapjacka</b> (dzięki Soanvig), lecz reszta nowszych pozycji to tandetny kicz. Tytuły, które nie zostały wymienione można interpretować jako nie lubiane. Pominąłem polskie pozycje, bo za dużo by wymieniać. W ogóle jestem zdziwiony, że chciało mi się to wszystko pisać. Pamiętam jak TVP chciało zlikwidować wieczorynkę jednak wycofali się z pomysłu. Cieszę się, że jestem starszej daty i nie wpakowano mi do głowy jakiś shitów. Polecam tą <a href="http://www.youtube.com/watch?v=jybHs5ZXP_s" target="_blank" class="postlink">ciekawą rozkminę</a> na temat Smerfów i nie tylko. Korzystając z okazji <a href="http://www.youtube.com/watch?NR=1&amp;v=Bu1TM_1vDfQ" target="_blank" class="postlink">podlinkowuje</a> inną ciekawą rozkminę. Powiem tylko tyle, że z bajek się wyrasta albo nie. Są przecież ludzie, co w wieku 30 i więcej lat nadal je oglądają. Znam kilka takich osób. Osobiście wyrosłem z bajek, bo to tylko marnowanie czasu. Liczy się tylko i wyłącznie to czy uczą czegoś pożytecznego czy wpajają złe wzorce. Tutaj pozostawiam Wam pole do refleksji. Cieszę się, że wychowałem się w takim, a nie innym pokoleniu/generacji. Nowa generacja jest sieczką moim zdaniem. Z perspektywy czasu można się pośmiać, co się oglądało, lecz myślę, że to było lepsze czasy aniżeli to, co teraz dzieciakom pakują do głów. Jakieś bajki pokroju Hannah Montana i pokrewne &quot;koleżanki&quot;. Choć mięliśmy świadomość, że większość akcji, co wystąpiła w kreskówkach nie wystąpi w realu to jednak się z tego śmialiśmy i czerpaliśmy &quot;szczęście&quot;.
<br />

<br />
Z dedykacją dla znajomego: <a href="http://www.youtube.com/watch?v=tTo9wcWHlJU" target="_blank" class="postlink">Flapjack - Stu Na Jednego</a> oraz <a href="http://www.youtube.com/watch?v=iraMOxBkq8A" target="_blank" class="postlink">Struś Pędziwiatr</a>. Kiedyś nie rozumieliśmy drugiego znaczenia <a href="http://www.youtube.com/watch?v=wkExT3UDusM" target="_blank" class="postlink">tego</a>, a teraz? <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Pamiętacie <a href="http://www.capaciouscore.pl/download/other/anty-buka.jpeg" target="_blank" class="postlink">to</a>? Ciekawa, a wręcz <a href="http://www.capaciouscore.pl/download/other/brilliant-comment.png" target="_blank" class="postlink">genialna rozkmina w komentarzach</a>.
<br />
<h2>Materiały pomocnicze aka pomoce naukowe</h2>
<ul class="list">
<li><a href="http://pl.wikipedia.org/wiki/RTL_7" target="_blank" class="postlink">http://pl.wikipedia.org/wiki/RTL_7</a></li>
<li><a href="http://pl.wikipedia.org/wiki/TV4_(Polska)#Seriale_animowane_dla_dzieci" target="_blank" class="postlink">http://pl.wikipedia.org/wiki/TV4_(Polska)#Seriale_animowane_dla_dzieci</a></li>
<li><a href="http://pl.wikipedia.org/wiki/Wieczorynka#Seriale_wieczorynkowe" target="_blank" class="postlink">http://pl.wikipedia.org/wiki/Wieczorynka#Seriale_wieczorynkowe</a></li>
<li><a href="http://pl.wikipedia.org/wiki/Cartoon_Network#Historia" target="_blank" class="postlink">http://pl.wikipedia.org/wiki/Cartoon_Network#Historia</a></li>
<li><a href="http://pl.wikipedia.org/wiki/Jetix#Historia" target="_blank" class="postlink">http://pl.wikipedia.org/wiki/Jetix#Historia</a></li>
</ul>]]></description></item><item><title>YouTube a ładowanie oraz ściąganie materiałów</title><pubdate>Sat, 31 Dec 2011 5:06:15 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/youtube-a-ladowanie-oraz-sciaganie-materialow/</link><comments>http://www.capaciouscore.pl/artykuly/youtube-a-ladowanie-oraz-sciaganie-materialow/#komentarze</comments><description><![CDATA[Nie używam HTML5 oraz tagu <tt>&lt;video&gt;</tt> jednak mam pewną obserwację. Mianowicie z początku film ładuje się bardzo szybko (&quot;uzupełnienie bufora&quot;), a potem spowalnia. Zastanawia mnie, jaki mechanizm stosuję się do balansu &quot;obciążenia&quot;. Jest on w playerze czy po stronie serwera? Inaczej sprawa wygląda, gdy ściągam materiały via <b>Easy YouTube Video Downloader</b> (w FireFox'ie) bądź przez własne oprogramowanie do tego celów stworzone <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Gdy ściągamy materiał na dysk to leci pełnym transferem (u mnie 10Mbps) natomiast gdy oglądamy film to leci to transferem zbliżonym do 1-2Mbps.
<br />

<br />
<a href="http://www.youtube.com/html5" target="_blank" class="postlink">http://www.youtube.com/html5</a>]]></description></item><item><title>Opera i AdSense</title><pubdate>Sat, 31 Dec 2011 3:57:35 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/opera-i-adsense/</link><comments>http://www.capaciouscore.pl/artykuly/opera-i-adsense/#komentarze</comments><description><![CDATA[Wczoraj w godzinach popołudniowych zauważyłem, że moja strona nie wczytuję się do końca na Operze. Pomyślałem sobie &quot;No to kolejny dzień z dodatkowym zajęciem&quot;. Z początku myślałem, że to wina serwera jednak szybko nabrałem podejrzeń, gdy w innej przeglądarce strona wczytywała się prawidłowo. Nie przeprowadzałem żadnych aktualizacji i &quot;problem&quot; powstał z niczego. Ponadto parę osób zgłosiło mi tą samą sytuację. Wyłączyłem JS dla swojej strony i widzę, że wszystko hula. Z początku myślałem, że to Google Analytics, lecz po chwili odkryłem, że &quot;faktyczna&quot; wina leży po stronie AdSense. W konsoli miałem sugestię adresu (AdSensa) oraz komunikat: &quot;<a href="http://www.capaciouscore.pl/download/other/adsense-opera-browser-javascript.png" target="_blank" class="postlink">User Javascript thread Opera has modified the JavaScript on www.google.com (Google). See browser.js for details</a>&quot;. W sieci nie było praktycznie żadnych wskazówek na ten temat z wyjątkiem <a href="http://my.opera.com/community/forums/topic.dml?id=1028382" target="_blank" class="postlink">tego wątku</a>. Niestety niewiele mi pomogło stwierdzenie, które padło na końcu topicu. Myślałem, że problemem jest update kodu dla reklam bo <tt>google_ad_client</tt> posiadało wcześniej wartość <tt>pub-1878843796244220</tt> natomiast w panelu po porównaniu zauważyłem, że brakuje prefiksu <tt>ca-</tt>. Niestety ta modyfikacja nic nie dała. Swoją drogą miałem okazję przeanalizować <b>browser.js</b>. Muszę przyznać, że jest to ciekawe rozwiązanie. Ponieważ sobie nie wyświetlam reklam z racji tego, że nie ma to najmniejszego sensu to pomyślałem także, że napisze mini skrypcik, aby ktoś mógł wyłączyć sobie reklamy u mnie na stronie.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">if(!</span><span style="color: #0000BB">$_COOKIE</span><span style="color: #007700">[</span><span style="color: #DD0000">'<em><span>tajemnicza_wartość</span></em>'</span><span style="color: #007700">]){</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">setcookie</span><span style="color: #007700">(</span><span style="color: #DD0000">'<em><span>tajemnicza_wartość</span></em>'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'1'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">time</span><span style="color: #007700">()&nbsp;+&nbsp;</span><span style="color: #0000BB">31536000</span><span style="color: #007700">)&nbsp;?&nbsp;</span><span style="color: #DD0000">'ok'&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">'fail'</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;Expire&nbsp;in&nbsp;1&nbsp;year</span><span style="color: #007700">}else{</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'cookie&nbsp;exists'</span><span style="color: #007700">;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Potem tylko w plikach szablonu jeden warunek ekstra do <tt>if</tt>'a i temat zamknięty.
<br />

<br />
Jeżeli ktoś znajdzie fix'a (dotyczącego JavaScript) to prosiłbym o zostawienie komentarza.]]></description></item><item><title>Urzędy a osoby niepełnosprawne</title><pubdate>Tue, 27 Dec 2011 10:26:10 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/urzedy-a-osoby-niepelnosprawne/</link><comments>http://www.capaciouscore.pl/artykuly/urzedy-a-osoby-niepelnosprawne/#komentarze</comments><description><![CDATA[Przed chwilą usłyszałem niezły żart w telewizji. Nie dalej jak godzinkę temu chwalili się, że wychodzi nowa ustawa mówiąca, iż w każdym urzędzie (jeżeli dobrze usłyszałem) ma być pracownik znający np. język migowy. Po prostu wow. Mamy XXI wiek, rok 2011 i dopiero teraz wpadają na takie pomysły? Takie rzeczy powinny być zrobione już dawno temu. Temat szeroki jak rzeka i możliwe, że wkrótce rozwinę go bardziej. Z pewnością będzie tam opisana problematyka dostępu do informacji przez osoby niewidome. Może część z Was pamięta jak media co chwile zwracały uwagę urzędom i innym instytucjom, że nie są one przystosowane dla osób niepełnosprawnych? Brak wind, nieprzemyślane dworce kolejowe, autobusy, chodniki i tak dalej mówią Wam coś? To, że część ludzi nie dostrzega problemu nie oznacza, że go nie ma. I nie chodzi tutaj o sztuczne rozdmuchiwanie sprawy, bo problem istnieje. Z resztą postawcie się na miejscu tych osób i ciekawe czy bylibyście zadowoleni? Ot taki krótki wpis ala przemyślenia. Moim celem nie jest narzekanie tylko działanie, zwracanie uwagi na coś, co już dawno temu powinno zostać rozwiązane.]]></description></item><item><title>Święta w Polsce po resocjalizacji</title><pubdate>Tue, 20 Dec 2011 2:06:17 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/swieta-w-polsce-po-resocjalizacji/</link><comments>http://www.capaciouscore.pl/artykuly/swieta-w-polsce-po-resocjalizacji/#komentarze</comments><description><![CDATA[<h2>Na początek trochę historii</h2>
Święta Bożego Narodzenia, jak wszyscy wiedzą wypadają 25 grudnia. Dlaczego akurat ta data?
<br />

<br />
Według Kościoła Katolickiego jest to data narodzin Jezusa, dowodem na to jest komentarz Hipolita Rzymskiego do Księgi Daniela:
<br />
<p class="quote">Cytat:</p><blockquote>Pierwsze przyjście Pana naszego wcielonego, w którym narodził się w <a href="http://pl.wikipedia.org/wiki/Betlejem" target="_blank" class="postlink">Betlejem</a> miało miejsce ósmego dnia przed kalendami styczniowymi</blockquote>
Święta te zaczynają się 24 grudnia (Wigilia) - popularnie zwane Gwiazdką. W tym dniu obowiązuje post ścisły ilościowy (3 posiłki, w tym jeden do syta - uroczysta kolacja) oraz jakościowy (od mięsa). Tradycja nakazuje zasiadać do kolacji, gdy na niebie pojawi się pierwsza gwiazdka (na pamiątkę gwiazdy prowadzącej Trzech Króli do stajenki).
<br />
Jeśli chodzi o post, to nie każdy wie, ale został on zniesiony w 1983 roku, jednak w Polsce został podtrzymany, aż do roku 2003. Aktualnie post w Wigilię jest jedynie zalecany.
<br />
Według polskiej literatury kulinarnej podaje się, że w czasie wieczerzy wigilijnej, liczba gości powinna być parzysta (dodatkowo jeden talerz dla zmarłych, Dzieciątka, nieobecnych lub niespodziewanych gości). Jeśli chodzi o liczbę potraw, to w szlacheckiej Polsce wynosiła odpowiednio: 13 - u magnatów, 11- u szlachty, 9- u mieszczaństwa; jednak wg niektórych źródeł powinna wynosić 12.
<br />
Według księcia J.O. Radziwiłła wszystkie ryby, są liczone jako jedno danie. Trzeba jednak pamiętać, że 13 potraw to górna granica.
<br />
W Kościołach o północy odbywa się uroczysta msza święta zwana Pasterką.
<br />
25 grudnia jest nazwany dniem Bożego Narodzenia, natomiast 26 grudnia jako drugi dzień świąt obchodzony jest na pamiątkę pierwszego męczennika za wiarę chrześcijańską - Św. Szczepana.
<br />

<br />
Święta Bożego Narodzenia (w większości rodzin) są obchodzone jako święta rodzinne, gdzie gromadzą się krewni.
<br />
Podstawowymi symbolami tych świąt w większości rodzin są: choinka, opłatek, kolędy, prezenty, mikołaj, pierwsza gwiazdka, karp, barszcz z uszkami, pierogi z grzybami. Jednak na stołach w niektórych rodzinach również nie może zabraknąć: makówek, piernika, kutii, moczki oraz kompotu z suszonych owoców.
<br />
<h2>Aktualnie o świętach</h2>
W dzisiejszych czasach święta mają mało wspólnego z tradycją. Znajdzie się jakiś procent (większy, bądź mniejszy) ludzi, którzy będą świętować tradycyjnie.
<br />
Jak wyglądają przygotowania do świat każdy widzi. W domu szał sprzątania (jakby nie można było tego robić częściej albo chociaż zacząć z miesiąc wcześniej, ale komu się chce <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" />), zakupy na wigilijną wieczerze (wydawania miesięcznej wypłaty, żeby się nażreć przez 3 dni) oraz prezenty.
<br />
Jeśli chodzi o prezenty, to przeglądając internet ostatnimi czasy, można zobaczyć wiele stron, które oferują prezenty dla ludzi o różnych zainteresowaniach (np. <a href="http://internetmaker.pl/artykul/7422,1,jaki_prezent_dla_programisty" target="_blank" class="postlink">dla programistów</a>). Ja całkowicie rozumiem, że prezent powinien być trafiony, bo nikt nie lubi dostawać co roku skarpet lub czegoś podobnego, ale po jaką cholerę kupować prezenty za połowę wypłaty?
<br />
Ludzie w te święta zapominają jak powinien wyglądać ten czas. Przez 2 tygodnie (lub może więcej) ludzie robią wszystko, by te święta wyglądały idealnie, ale im bardziej się starają, tym mniej im to wychodzi. 
<br />
<h2>Jak wyglądają święta ze strony obserwatora</h2>
Wszystko zaczyna się jakoś na początku grudnia. Pomału widzimy reklamy w sklepach, w internecie oraz na ulotkach (tych śmieciach, które pałętają się po skrzynkach pocztowych oraz klatkach schodowych). Na początek szał prezentów na 6 grudnia, by dzieciom zrobić prezent i przypominać im o tradycji. W Polsce coraz więcej rodzin kończy z prezentami w mikołajki, a preferuje tylko w Wigilię (lub w pierwszy dzień świąt).
<br />
W miarę upływu dni zbliżamy się do Świąt Bożego Narodzenia. Co za tym idzie? Coraz więcej reklam i chwytów marketingowych. Im bliżej 24 grudnia, tym więcej ludzi można zobaczyć w sklepach. Wchodząc do dużych sklepów widzimy świąteczny wystrój, sztuczny zapach cynamonu, ludzi przebranych za Mikołajów oraz Aniołki (na niektórych można oko zawiesić <img src="http://www.capaciouscore.pl/smiles/icon_razz.gif" class="emoticon" alt="Razz" />) sprzedające opłatki. Najważniejszą jednak rzeczą (jeśli nie zwracamy uwagi na wygląd) jest denerwująca muzyka. Po co to wszystko? Tylko po to, żeby wyciągnąć od nas jak najwięcej pieniędzy w czasie przygotowań do świąt. Gdy już przemkniemy na hale sklepową, co widzimy? Setki rodzajów bombek, światełek i innych dupereli. Przeciskamy się przez tłum ludzi i zmierzamy w końcu w kierunku upragnionych regałów. Wszystko, dałoby się jakoś przeboleć, gdyby nie te &quot;promocje&quot;. Większość ludzi łapie się na nie, a tak naprawdę to w czasie zbliżających się świąt ceny zostały podniesione, żeby teraz wyglądały na &quot;promocje&quot;. Nie mówię, że nie wszystko to oszustwa, bo zdarzają się prawdziwe promocje, ale za to inne artykuły, które i tak kupimy są droższe, czyli kupując taniej coś, co tak naprawdę nie jest konieczne, zapłacimy więcej za rzeczy konieczne.
<br />
Gdy już mamy pełen koszyk i wydaje nam się, że mamy już wszystko (co jest tylko iluzją, bo im bliżej świąt tym bardziej sobie przypominany, że jednak czegoś nie kupiliśmy) zmierzamy do kasy. Zanim się tam dostaniemy znowu &quot;promocje&quot; i jakieś stworzenia świąteczne (w większości fajne laski <img src="http://www.capaciouscore.pl/smiles/icon_razz.gif" class="emoticon" alt="Razz" />) zatrzymują nas, by zaoferować coś w promocji.
<br />
Przebrnęliśmy przez tłum &quot;akwizytorów&quot; i jesteśmy już &#8230; w długiej kolejce do kasy. Przed nami z 5-10 osób, więc mamy czas nad zastanowieniem się, czego jeszcze nie kupiliśmy. Z minutę na minutę jesteśmy coraz bliżej kasy, aż w końcu (po 15-30 minutach) jesteśmy obsługiwani przez kasjera/kasjerkę. W czasie świąt, można również przy kasach dostrzec ludzi, którzy pomagają nam pakować zakupy. Czasem za pomoc wrzucamy coś pieniędzy, bo nam głupio nie dać, jednak święta to czas, w których mamy &quot;kochać&quot; bliźnich, dlatego nie zważając ile już wydaliśmy, to i tak coś wrzucimy (czasem, żeby po prostu się lepiej poczuć).
<br />
Nareszcie zakupy zrobione, zapłacone, więc możemy zmierzać do środka transportu, żeby zawieźć zakupy do domu. Wychodząc ze sklepu lub w trakcie pakowania zakupów do samochodu, bardzo często podchodzą do nas różni ludzie i pytają czy damy im coś do jedzenia lub czy mogą nam odwieźć wózek. W święta głupio jest odmówić, więc się zgadzamy lub dajemy coś do jedzenia. Ja mam taką zasadę: jeśli czuję od kogoś alkohol to jeszcze go spierdolę, a jeśli nie to jeszcze coś dorzucę od siebie.
<br />
Mamy już wszystko spakowane do samochodu i mamy kilka możliwości, tzn. możemy jechać kupić prezenty, choinkę lub po prostu wrócić do domu. W najlepszym wypadku wybieramy ostatnią opcję. W trakcie powrotu samochodem do domu, prawie zawsze włączamy radio, by umilić sobie jazdę i posłuchać czegoś miłego. Jednak jest jedna zasada, że im bliżej świąt tym mniej muzyki, którą dotychczas słuchaliśmy, a więcej świątecznych badziewi.
<br />
Gdy już przebrniemy przez miasto i dojedziemy pod dom, zostaję wypakowanie wszystkich zakupów. Zbierają się wszyscy domownicy, żeby pomóc (dziwne, bo w normalny dzień nikt dupy nie ruszy). Wszystko już wniesione do domu, więc teraz trzeba to gdzieś pochować.
<br />
W większości domów w momencie, kiedy jedni są na zakupach inni sprzątają, żeby jakoś podzielić obowiązki. Jednak jeśli tego nie robią, zostaje to zrobić w inny dzień.
<br />
Zostaje już kilka dni do świąt, więc jeśli wcześniej nie wysprzątaliśmy domu, to teraz najwyższy czas na generalne porządki. Pozostały prezenty... i to najgorsze co mogło zostać, bo albo kupimy coś drogiego i prawie na pewno się spodoba, albo zostaję tańszy prezent, ale tu już trzeba kombinować, co danej osobie by się przydało.
<br />
Zrobiliśmy już zakupy, mamy kupioną choinkę, posprzątanie w domu oraz prezenty też są już w paczkach. Zostaję przygotowanie wieczerzy. Wszyscy się starają, by były to najlepsze święta, dlatego robią co mogą, by tak było. Każdy najdrobniejszy problem może prowadzić do kłótni. Ale idąc dalej. Nadchodzi Wigilia - upragnione święto. Przyjeżdża rodzina, wszyscy zasiadają przy stole, każdy się do każdego głupio uśmiecha, żeby udawać, że się cieszy, że może oglądać te wszystkie mordy lub naprawdę się cieszy, bo ma darmową wyżerkę.
<br />
Następuję składanie sobie życzeń. Każdy życzy drugiemu, jak najlepiej (mimo, że wcześniej jakby mogli, to by skakali sobie do gardeł). Każdy złożył sobie życzenia, więc siadają do stołu. Następuje konsumpcja. Co jest najgorsze usłyszeć od rodziny? Że to, co właśnie jedzą jest mogło być lepsze. Tyle dni starania się, a tu jak zwykle coś komuś nie pasuję. Idąc dalej&#8230; PREZENTY!!! Każdy czeka na ten moment, ponieważ każdy lubi dostawać prezenty. Widać pełno radości na twarzach oraz kilka rozczarować, ale każdemu nie da się dogodzić <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" />
<br />
Wszyscy zjedli, dostali prezenty, to czas na pasterkę. Niektórzy idą inni mają to gdzieś. Ci co idą, to albo trafia do kościoła albo spotkają się ze znajomymi (aby pić lub żeby pogadać <img src="http://www.capaciouscore.pl/smiles/icon_razz.gif" class="emoticon" alt="Razz" />).
<br />
Wigilia za nami. W pierwszy dzień świąt jemy to, co zostało z wigilii. W większości rodzin w tym samym momencie oglądamy telewizję i widzimy te same, bajki, filmy, co każdego roku, ale i tak je oglądamy. W tym roku miało nie być Kevina, jednak internauci dali sobie z tym radę i w TV znowu go zobaczymy kolejny raz. Niektórzy w pierwszy, a inni w drugi dzień świąt odwiedzają dalszą rodzinę. Kolejnego dnia w TV leci to samo, co dnia poprzedniego, ale to i tak nie psuję nam nastroju, bo w końcu są ŚWIĘTA.
<br />

<br />
Reasumując. Święta już nie są takie same jak tradycyjnie powinny być. W aktualnych czasach święta stały się równoznaczne z komercja. Najlepiej byłoby gdybyście wnioski i podsumowanie zrobili sobie w głowie.
<br />

<br />
Artykuł napisany we współpracy ze znajomym o nicku <a href="http://www.blog.ivek.pl/" target="_blank" class="postlink">Ivek</a>.
<br />

<br />
Nie każdemu może się to spodobać, co zostało tutaj zaprezentowane, ale na koniec zapraszam do oglądnięcia poniższego filmiku:
<br />
<a href="http://www.youtube.com/watch?v=TrYUT4ylyXQ">http://www.youtube.com/watch\?v=TrYUT4ylyXQ</a>
<br />

<br />
PS
<br />
Denerwujący są także ludzie z przeróżnych fundacji chodzący po domach właśnie wtedy, kiedy przypomną sobie, że ludzie maja w tym okresie lepszy (sztucznie wygenerowany) humor.
<br />
PPS
<br />
Zauważcie, że dzisiaj ludzie narzekają na święta, bo nie są takie same jak kiedyś. Kiedyś ludzie ciężko trudzili się, aby zdobyć prezent czy inne rzeczy na święta, a teraz praktycznie wszystko macie w sklepach.]]></description></item><item><title>Stare dobre gry jednym słowem klasyki</title><pubdate>Sat, 17 Dec 2011 6:10:08 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/stare-dobre-gry-jednym-slowem-klasyki/</link><comments>http://www.capaciouscore.pl/artykuly/stare-dobre-gry-jednym-slowem-klasyki/#komentarze</comments><description><![CDATA[Temat długi jak mój mały przyjaciel, prawda? Każdy, kto choć parę tygodni spędził przed komputerem wie jak dużo daje przyjemności granie. Ja postaram się ograniczyć do minimum wspomnienia, bo za dużo byłoby pisania. Oto lista gier, które odcisnęły duże piętno na mojej psychice:
<br />
<ul class="list">
<li><b>Duke Nukem 3D</b> - pierwsza gra, w którą kiedykolwiek grałem. Hm, to było coś koło 3-4 klasy podstawówki.</li>
<li><b>Doom</b> - także jedna z pierwszych gier, w jakie grałem.</li>
<li>seria <b>Age of Empires</b> - szczególnie pierwsza I druga część. Trzecia też jest niegłupia, ale nie ma już tego klimatu. Pamiętam, że AI w pierwszej części nie była super dopracowana no, ale...</li>
<li><b>Worms Armageddon</b> i <b>Worms World Party</b>, czyli seria ukochanych, nieśmiertelnych robaczków, które lubiły wykonywać wszystkie moje sadystyczne polecenia. Wszystkie wersje powyżej WWP są kiczem (tak twierdze ja i <a href="http://sobak.pl/" target="_blank" class="postlink">Sobak</a>). W szczególności tyczy się to Worms Reloaded.</li>
<li>seria <b>The Settlers</b> - w szczególności wersja oznaczona cyferką numer II. Pamiętam, że w to siepało się w nieskończoność. Trójka czy czwórka nie była taka głupia, ale nic nie przebijało prostoty dwójki. Jakiś czas temu grałem w odnowioną wersję dwójki, czyli The Settlers II: 10-lecie. Szkoda, że zlamili sprawę. Może jak znajdę chwilkę to opiszę w osobnym artykule, o co mi chodzi.</li>
<li>seria <b>Grand Theft Auto</b> - świetna gra mimo, że byłem troszkę za młody żeby w nią grać ;) Eh te bekanie i pierdzenie w dwójce. Czasami sobie myślę, że fajnie byłoby zobaczyć jedynkę i dwójkę w wersji 3D.</li>
<li>nieśmiertelne <b>Heroes III</b> działające stymulująco na mózg. Czwórka nie była głupia, ale miała też sporo niedociągnięć.</li>
<li>seria <b>Need for Speed</b> - pierwszy kontakt z NFS miałem gdzieś pod koniec szkoły podstawowej, kiedy to rypałem z kolegą z klatki w dwójkę i trójkę. Stare dobre czasy jak się dzieliło ekran na dwie części i dzieliło się również klawiaturą. Osobiście uważam, że NFS skończył się zaraz po wersji Underground 2.</li>
<li>seria <b>FIFA</b> - pamiętam jak grałem z kolegą w 98. Sterowanie myszką nie było głupie <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Szczególnie wtedy kiedy grało się na tym małym boisku (halówka). Nie uznaje FIFY powyżej wersji 2002.</li>
<li>seria <b>Resident Evil</b> - pamiętam jak w dwójkę napinałem po nocy będąc małym dzieckiem. Jeden z głupszych pomysłów. Trójka też niczego sobie nie była. Jedno słowo tłumaczy wszystko. Nemesis! <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /> Trzeba przyznać, że ekipa odpowiadająca za dźwięki w grze dokonała czegoś, czego nigdy nie zapomnę.</li>
<li>seria <b>Jagged Alliance</b> - od dwójki wzwyż aczkolwiek uważam, że kontynuacja serii jest beznadziejna. Mam na myśli Hired Guns: The Jagged Edge. Ostatnio miałem okazję pograć sobie w dwójkę w wersji 1.13 I muszę przyznać, że świetna sprawa. Moim zdaniem ta gra strasznie rozwija logikę.</li>
<li><b>Gorky 17</b> - coś ala JA tylko w nieco innym stylu.</li>
<li><b>Faraon</b> i dodatek <b>Kleopatra</b> - fajne gry strategiczne z super klimatem i lektorem.</li>
<li><b>O.N.I.</b> lub <b>ONI</b> - każdy kto grał w tą grę wie, że ma unikalny klimat. Szkoda, że dziś już takich gier nie robią. Spece od reverse engineering wyciągnęli między innymi soundtracki z tej gry oraz pracują nad multiplayerem. Udostępnili także edytor save'ów oraz <i>małą dokumentację</i> dotyczącą tego jak tą grę modyfikować.</li>
<li><b>Elastomania</b> &#8211; tego chyba nikomu nie trzeba przedstawiać?</li>
<li><b>Icy Tower</b> - kolejny klasyk, który powinien być zaliczony przez każdego!</li>
<li><b>SWAT 3</b> - kolejny dobry klasyk. Grałem także w czwórkę, ale jest zbyt krótka.</li>
<li>seria <b>Unreal Tournament</b> - stare, dobre mordobicie z botami. Jak na stare czasy to najbardziej doceniałem wersje z rocznika 1999.  Pamiętam, że po LAN'ie klepałem trochę z kolegą. Swoją drogą gra ma świetny soundtrack.</li>
<li>seria <b>Quake</b> - w szczególności ta oznaczona cyferką dwa.</li>
<li><b>Diablo II</b> - nie znam osoby, która by nie grała w tą grę i źle ja wspominała. Moim zdaniem wszystko, co wypuszcza ze swoich rąk Blizzard Entertainment nie może być lipą. Kosztem większego oczekiwania na produkt dopracowują wszystkie nawet najdrobniejsze detale. Już widzę rzeszę maniaków grających, a raczej nolifiących w Diablo III.</li>
<li>seria <b>Serious Sam</b> - wręcz kultowa gra, która powinna zostać zaliczona przez każdego miłośnika krwi na monitorze. Żeby dłużej nie strzępić języka odeśle Was do <a href="http://www.youtube.com/watch?v=UMQGcED7MsY" target="_blank" class="postlink">recenzji</a>.</li>
<li>kilka gier z serii <b>Star Wars</b> - pierwszą, w jaką grałem były wyścigi natomiast drugą typowe RPG.</li>
<li><b>Mafia</b> - do końca swoich dni będę miło wspominał tą grę. Podobno dwójkę zlamili według <a href="http://www.youtube.com/watch?v=-LSyHBISGr8" target="_blank" class="postlink">tej recenzji</a> ale i tak mam ochotę w nią pograć</li>
<li>seria <b>SimCity</b> - w szczególności 3000 i 4. Każdy, kto nazywa siebie fanem gier ekonomicznych i strategicznego myślenia musi koniecznie w nią pograć. Grunt to stworzyć swój świat, w którym każdy mieszkaniec jest zadowolony. Muszę przyznać, ze 4 była dla mnie dużym zaskoczeniem. Bardzo wiele usprawnień wprowadzono, które były na plus.</li>
<li><b>Driver</b> - mimo wielu wad tej gry mam do niej sentyment. Jak na tamte czasy to ta gra była luksusem <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /></li>
<li><b>Outlaws</b> - bardzo stara gierka, której celem było zabicie bandytów na dzikim wschodzie.</li>
<li>Soldat - muszę przyznać, że dawno temu czasami zdarzało mi się w nią trochę popykać. Jest niegłupia, a zarazem wciągająca.</li>
<li><b>Blobby Volley</b> - świetna gra działająca na refleks.</li>
<li>seria <b>Stronghold</b> - świetna seria, z która mam same miłe wspomnienia. Dwójka była jeszcze przyzwoita natomiast to, co zrobili dalej było totalnym nieporozumieniem. Niesamowity klimat i oprawa dźwiękowa sprawiały, że jest to gra wręcz idealna pomimo schematyczności AI.</li>
<li>seria <b>Tony Hawk's Pro Skater</b> - tego tytułu chyba nikomu nie trzeba przedstawiać? Ubóstwiałem dwójkę i trójkę. Pamiętam, że miałem małą przygodę z Tony Hawk's Underground 2 jednak była nieporównywalna do wcześniejszych wersji. Swoją drogą ta gra ma świetny soundtrack.</li>
<li><b>Original War</b> - dość nietypowa strategia mająca swój klimat. Szkoda, że dziś nie ma kontynuacji takich &quot;serii&quot;.</li>
<li><b>Motocross Madness</b> - stara dobra gra, w której można powydurniać się na całego robiąc przeróżne sztuczki.</li>
<li>seria <b>Splinter Cell</b> - posiada swój fajny, mroczny klimat.</li>
<li><b>Virtua Fighter</b> - stara dobra napierdzielanka. Odpowiednik Mortal Kombat?</li>
<li><b>Real War</b> - inna, dość specyficzna strategia starego typu.</li>
<li><b>Traffic Giant</b> - dość ciekawa strategia ekonomiczna.</li>
<li><b>RollerCoaster Tycoon</b> - świetna strategia jednym słowem. Zawsze kochałem patrzyć jak ludki zarzygują mi drogi po dobrej zabawie. Może i dość schematyczna gra, ale mimo tego warto w nią pograć.</li>
<li><b>Pizza Syndicate</b> i <b>Pizza Connection 2</b> - obie gry reprezentują pewien styl. Czasami zastanawiam się, dlaczego nie powstał mix tych dwóch gier?</li>
<li><b>Medieval II: Total War</b> - każdy lubiący klimaty średniowieczne gdzie leję się krew powinien w nią zagrać.</li>
<li><b>Legion</b> - kolejna dość nietypowa strategia. Szkoda, że zbyt prosta.</li>
<li>seria <b>Hotel Giant</b> - kolejny tytuł dla osób lubiących gry ekonomiczne.</li>
<li>seria <b>Medal of Honor</b> - tego tytułu chyba nikomu nie trzeba przedstawiać? Pamiętam jak kiedyś po LAN'ie się pykało na mapie zwanej Stalingrad.</li>
<li><b>World War III: Black Gold</b> - pomimo wielu niedoskonałości tej gry lubię do niej wracać.</li>
<li><b>Rome: Total War</b> - coś ala Medieval II: Total War dla bardziej wyrafinowanych graczy.</li>
<li><b>Polanie</b> - bardzo nietypowa strategia, ze świetną oprawa dźwiękową.</li>
<li><b>Panzer General II</b> - kolejna świetna strategia, której najważniejszym elementem było dobre planowanie.</li>
<li><b>KKND</b> &#8211; świetna strategia jak na tamte czasy.</li>
<li>seria <b>Metal Slug</b> - każdy, kto grał na automatach pamięta tą grę. Ja wolę pograć sobie w nią wiedząc, że nie zmarnuje mnóstwa żetonów.</li>
<li><b>Combat Flight Simulator</b> - zawsze lubiłem sobie trochę polatać. Pamiętam, że grałem także w inne symulatory np. pociągów, ale nie pamiętam ich nazw.</li>
<li><b>Wolfenstein</b> - coś ala Medal of Honor.</li>
<li><b>Starcraft</b> - tej gry nikomu nie trzeba przedstawiać.</li>
<li><b>Warcraft</b> - tej gry także nikomu nie trzeba przedstawiać.</li>
<li><b>Colin McRae</b> - stara dobra gra, z która mam same miłe wspomnienia. Pamiętam, że grałem w kilka podobnych, lecz nie pamiętam tytułów.</li>
<li><b>Civilization III</b> - kolejna dość ciekawa strategia.</li>
<li>seria <b>Anno</b> - po prostu coś, czego nie może ominąć żaden koneser gier strategicznych i ekonomicznych.</li>
<li>seria <b>Dragon Ball Mugen</b> - ot taki odpowiednik Mortal Kombat i Virtua Fighter. Polecam każdemu fanowi smoczych kul.</li>
<li><b>Larry 7 miłość na fali</b> - pozostawię bez komentarza.</li>
<li><b>WACKI: Kosmiczna rozgrywka</b> - kto nie grał ten niech teraz żałuje.</li>
<li><b>Hokus Pokus Różowa Pantera</b> - <i>dość ciekawa</i> gra przygodowa obfitująca w debilne komentarze i jeszcze debilniejsze sytuacje.</li>
<li>seria <b>Commandos</b> - na tej liście nie może zabraknąć tego tytułu, prawda?</li>
<li><b>Counter-Strike</b> - każdy fanatyk krwi i karcenia botów wie, że ta gra jest dla niego. Świetne połączenie gry drużynowej, strategii i refleksu.</li>
<li>seria <b>The Sims</b> - tak, przyznaję się z biciem, że czasami zdarzało mi się grać z nudów w tą grę. Jedynka miała trochę niedopracowany mechanizm życia aczkolwiek w dwójce już to poprawili. Nie wiem jak w trójce sytuacja wygląda, bo jeszcze nie miałem okazji pograć.</li>
<li><b>Last Call</b> - genialna gra, w której wcielasz się w rolę barmana i obsługujesz klientów. Oczywiście jak przegniesz z napojem to potem rzygną sobie.</li>
<li><b>Gearhead Garage</b> - kolejna &quot;innowacyjna&quot; gra polegająca na naprawie pokiereszowanych aut.</li>
<li><b>Knight Online</b> i <b>World of Warcraft</b> - w te dwa MMORPG rypałem, z czego w tą pierwszą znacznie dłużej. Nie zmienia to faktu, że Tibii i Metina się nie tykałem. Ogólnie za dużo by o tym pisał. Może kiedyś napisze jakiś grubszy artykuł o KO.</li>
<li><b>Sanktuarium</b> - mroczne klimaty, ale warto było w to pograć.</li>
<li><i>Desert 3</i> - właściwie to nie pamiętam nazwy tej gry, ale tak ją nazywam. Chodziło o to, że fruwaliśmy sobie w kosmosie i szukaliśmy kluczy i przechodziliśmy kolejne etapy</li>
</ul>
<h2>Pegasus</h2>
Nie znam gry, w która nie grałem <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Mario, bombery, czołgi, Contra, wyścigi czy inne szmery bajery. Tak, to wszystko zaliczyłem. Oj tak pamiętam to dobrze. Normalnie nie jadłem naleśników, ale coś mnie w przedszkolu podkusiło, żeby zjeść. Zjadłem i Salmonella zaatakowała <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /> Musze przyznać, że były pyszne te naleśniki co nie zmienia faktu, że potem po nich konałem. 40 stopni gorączki murowane i granie z mamą w pegasusa <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /> W sumie na przemian granie i spanie.
<br />
<h2>Podsumowanie</h2>
Pamiętam jeszcze kilka gier aczkolwiek nie pamiętam ich nazw, więc nie wymieniam. Dla mnie najistotniejszą kwestią jest grywalność, nie grafika! Fabuła to podstawa. Do dzisiejszego dnia miło wspominam wszystkie te tytuły, które ukształtowały moja zwichniętą psychikę. Szkoda, że teraz gry poszły na cukierkową grafikę, a nie na jakość.]]></description></item><item><title>Flash zaliczył dno w moich oczach</title><pubdate>Sun, 11 Dec 2011 8:54:56 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/flash-zaliczyl-dno-w-moich-oczach/</link><comments>http://www.capaciouscore.pl/artykuly/flash-zaliczyl-dno-w-moich-oczach/#komentarze</comments><description><![CDATA[Przelała się czara goryczy. Nawiązując do dwóch artykułów: <a href="http://www.capaciouscore.pl/artykuly/avast-i-ochrona/" target="_blank" class="postlink">Avast i &quot;ochrona&quot;</a> oraz <a href="http://www.capaciouscore.pl/artykuly/nachalne-instalatory-oprogramowania/" target="_blank" class="postlink">Nachalne instalatory oprogramowania</a> chcę tylko powiedzieć, że nie spodziewałem się takiej akcji po korporacji Adobe. W związku z zaistniałą <a href="http://www.capaciouscore.pl/download/other/adobe-flash-faux-pas.png" target="_blank" class="postlink">sytuacją</a> rezygnuję definitywnie z używania Flash'a. Powtórzę swoją myśl, do czego nie przywykłem: &quot;To użytkownik ma decydować o tym czy coś chce instalować czy nie. Rady z przygotowaną sugestią, co powinienem zainstalować są również nie na miejscu.&quot;. Skoro ludzie w zarządach korporacji decydujący o takich rzeczach i uważają użytkowników końcowych za idiotów no to siłą rzeczy trzeba z nich zrezygnować. Identyczna sytuacja jak ze Skype, który to mi instaluję bez mojej wiedzy Toolbara... To ja mam marnować swój czas na odinstalowywanie niepotrzebnej mi rzeczy i wysyłanie wiadomości do <i>dev team</i> z powodu głupoty innych osób? Za jaką karę? Pomijam już inne aspekty typu dostępność, użyteczność, nachalność i inne. Flash głównie służył mi do podglądania reklam, aby wiedzieć, co nowego agencje interaktywne wymyśliły. Tak więc argument o AdBlock'u zostałby szybko obalony <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Nie mogę się doczekać kiedy wejdzie w życie standard HTML5 i CSS3. Kiedy to nastąpi to cała ta technologia Flash wyginie śmiercią naturalną tak jak IE6. Z tego co czasami czytam to wiele osób z branży już zaczęło dyskredytować cały ten bajzel zafundowany przez ukochane Adobe. Dla mnie Ci, co nie będą posiadać alternatywnej strony statycznej w HTML'u idą na straty. I pomyśleć, że zmarnowano ileś tam czasu pracownikom Google tylko po to, aby ich webcrawler (Googlebot) mógł czytać pliki swf. Puenta jest bardzo prosta. <b>Jeżeli będę potrzebować antywirusa albo innego toolbara to sam go sobie zainstaluje!</b>]]></description></item><item><title>Avast i &quot;ochrona&quot;</title><pubdate>Fri, 02 Dec 2011 1:16:57 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/avast-i-ochrona/</link><comments>http://www.capaciouscore.pl/artykuly/avast-i-ochrona/#komentarze</comments><description><![CDATA[Osobiście nie jestem zwolennikiem jakiekolwiek programu antywirusowego, ponieważ uważam, że najlepszym antywirusem jest nasz rozum. Jeżeli nie mam pewności, co do źródła binarki to wtedy najlepszym rozwiązaniem jest tzw. multiscan przy pomocy np. <a href="http://www.virustotal.com/" target="_blank" class="postlink">VirusTotal</a>. Nie zawsze raporty są wiarygodnym źródłem informacji, dlatego też najlepiej, jeżeli się zna na temacie to warto sprawdzić, co faktycznie jest w aplikacji, jakie funkcje z bibliotek systemowych są ładowane i co określony fragment kodu wywołuje. Niejednokrotnie spotkałem się z aplikacjami, które nie były w żadnej bazie sygnatur wirusów. Dopiero po czasie się tam pojawiały. Moim zdaniem najlepiej używać OllyDbg lub IDA, aby dowiedzieć się, co faktycznie siedzi w środku. 
<br />

<br />
Jakiś czas temu pewna osoba próbowała mi wmówić, że HideToolz ukrywa tak proces, że jest nie do wykrycia. Tak to jest jak osoba nie mająca pojęcia o programowaniu i jądrze systemu stara się wyjaśnić coś programiście. Oczywiście kategorycznie musiałem zaprzeczyć takiej głupocie i wyjaśnić oprawcy, że jest w błędzie. Całość opisałem w artykule <a href="http://www.capaciouscore.pl/artykuly/pobieranie-listy-procesow-i-ubicie-wybranych-celow-w-php/" target="_blank" class="postlink">[PHP] Pobranie listy procesów i ubicie wybranych celów</a>.
<br />

<br />
Podczas wykonywania testów coś zwróciło moją uwagę. Ze względu na to, że parę dni wcześniej zainfekowałem sobie komputer bodajże robakiem o nazwie Parite to chciałem uniknąć ponownego zarażenia, dlatego też zainstalowałem sobie Avast'a dla pewności, aby sprawdzić, które aplikacje nie zostały zainfekowane. Bardzo zdziwił mnie fakt, gdy uruchomiłem HideToolz, ukryłem proces i dopiero po jakimś czasie Avast poinformował mnie, że coś jest nie tak. Dokładnie to chodziło o nieznany sterownik załadowany przez wyżej wymieniony program. Skoro Avast reaguje dopiero po kilku minutach na taką rzecz to dla mnie jest to żadne zabezpieczenie. W ciągu paru chwil mogę nagrzebać wystarczająco, aby nie pozbierać systemu do kupy. Jakie to zabezpieczenie? Żadne!]]></description></item><item><title>Diody elektroluminescencyjne zamiast innych żarówek</title><pubdate>Thu, 01 Dec 2011 11:38:19 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/diody-elektroluminescencyjne-zamiast-innych-zarowek/</link><comments>http://www.capaciouscore.pl/artykuly/diody-elektroluminescencyjne-zamiast-innych-zarowek/#komentarze</comments><description><![CDATA[Zacznijmy od tego, że ten wpis miałem napisać dawno, dawno temu. Niestety jak zwykle przećpałem za mocno i sprasował mi się czas. Czy ktoś uwierzyłby w to, że pale narkotyki? Raczej nie... A na serio to miałem multum innych zajęć i wystąpił przysłowiowy &quot;leń&quot;. Mój mózg sugeruje mi, że na ten poroniony pomysł używania halogenów wpadli moi starzy. Chyba nikogo to nie dziwi? Kilka lat później, (czyli kilka miesięcy temu) starsza wpadła na genialny pomysł wymienienia halogenów na LED'y. Myślę sobie spoko, czemu nie. No i tak polataliśmy sobie po sklepach, kupiliśmy co trzeba i nadszedł czas montażu. Oczywiście ja pod rygorem porażenia przez elektrycznego pastucha trzymanego przez moją starsza w ręce wspiąłem się na drabinę i zacząłem wymieniać w podsufitce czy tam wewnątrz kasetonów halogeny na zestawy żarówek z diodami elektroluminescencyjnymi. Chyba każdy zobaczy prostą różnicę pomiędzy 160W, a 10-15W? Oczywiście to zwróci się po jakimś czasie jak zwykle. Światło z LED'ów zazwyczaj jest punktowe. Nie wiem jak z barwą i przystępnością dla oka ludzkiego, bo w przedpokoju zazwyczaj bywam przelotem jak ludzie na lotnisku. Pomijam już chory fakt odnośnie tego jak sprzedawcy chcą kroić niezłe pieniądze na pośredniczeniu miedzy producentem, a klientem. Wszystkim tym, którzy chcą zrobić to samo, co ja polecam zakup takich rzeczy przez internet. Kłaniają się czysto ekonomiczne względy w tej sprawie. Oczywiście najlepiej zobaczyć produkt przed jego zakupem, ale to inna bajka. Dziwie się, dlaczego dopiero niedawno na polskim rynku pojawiły się tego typu produkty. Po drugie dziwie się ludziom, którzy używają tzw. energooszczędnych żarówek. Jak dla mnie jest to jedna wielka bzdura. Ani to ekologiczne, ani energooszczędne. Wystarczy wziąć do łapy jedną sztukę i sprawdzić, co jest w środku. Masa zbędnej elektroniki. Jeżeli wyobrazimy sobie procesu produkcji i miliony, jeżeli nie miliardy sztuk tego crap'u to zanieczyszczenie środowiska jest z pewnością nie małe. Do tego dodajmy fakt, że takie cudeńka wprowadzają zakłócenia i to, że w początkowej fazie działania pobierają więcej energii. Mimo, że większej wagi nie przywiązuje do ekologii to sam fakt marnotrawienia takiej ilości zasobów jest zastanawiający. Dlaczego te żarówki nie są dwuczęściowe z możliwością wymiany elementu odpowiedzialnego za emisje światła?!? Pomijam fakt, że światło emitowane przez te żarówki jest niezdrowe dla ludzkiego oka. Mi to i tak bez różnicy, bo siedzę sobie w swojej grocie (czyt. pokoju) i napromieniowuje twarz od monitora, a potem świece w ciemnościach. Fajnie, nie? Korzystając z okazji wspomnę o zwykłych żarówkach i &quot;genialnym&quot; pomyśle Unii Europejskiej, czyli naszego oprawcy. W imię czego zakazane zostały żarówki 200, 100 i bodajże 75 watowe? Przecież każdy z nas wie, że jeżeli ktoś będzie chciał je dostać to i tak dostanie. Przez te chore dyrektywy poszerza się tylko &quot;czarny rynek&quot;. I zamiast bredzić o oszczędności energii i bzdurach dotyczących emisji CO2 ludzie powinni się zająć tym co jest ważne. Jak już chcecie oszczędzać to wymieńcie sobie okna bo to właśnie przez nie ucieka znaczna ilość ciepła! Nie wierzycie? Sprawdźcie kamerą termowizyjną! Ocieplenie budynku także robi swoje przy kosztach utrzymania (ogrzewania) gospodarstwa domowego. Powinniście się nad tym zastanowić. Nawet jeżeli prawdą jest stwierdzenie, że sprawność LED'ów spada o połowę po wyświeceniu połowy godzin jej żywotności to i tak dla mnie wielkiej różnicy nie robi. Jak kobieta potrzebuje dobrego światła to się go montuje ale w toaletce czy tam w łazience przy lustrze. Zwróćcie uwagę także na &quot;specjalne&quot; żarówki ze standardowym gwintem do żyrandoli. Pozdrawiam zdrowo myślących.]]></description></item><item><title>[C#] Aplikacja służąca do detekcji kolorów</title><pubdate>Fri, 11 Nov 2011 6:54:12 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/aplikacja-sluzaca-do-detekcji-kolorow-c-sharp/</link><comments>http://www.capaciouscore.pl/artykuly/aplikacja-sluzaca-do-detekcji-kolorow-c-sharp/#komentarze</comments><description><![CDATA[Bazując na kodzie <a href="http://www.planet-source-code.com/vb/authors/ShowBio.asp?lngAuthorId=6641469325&amp;lngWId=10" target="_blank" class="postlink">Philippa Pearce</a> służącym do przechwytywania obrazu z kamery stworzyłem małą aplikację do detekcji podstawowych 16 kolorów. Podobno niemożliwe, a jednak możliwe, prawda Moniczko? Oczywiście można rozszerzyć ilość kolorów do większej palety jednak ja wołałem zostać przy podstawowej palecie. Ponadto możliwe, że w przyszłości uzupełnię program o opcje ładowania grafiki z określonej lokalizacji. Program jest na tyle intuicyjny, że myślę, że nie trzeba nic tłumaczyć. Gdy klikniemy w przycisk detekcji to wywali nam <tt>Alert</tt>, czyli po języku programistów aplikacji tzw. <tt>MessageBox</tt>.
<br />

<br />
Kluczową sprawą jest oświetlenie. Jeżeli będzie nieprawidłowe to uzyskamy niewłaściwy wynik, co nie powinno nas dziwić. Zwróćcie uwagę na fotografię poniżej:
<br />
<img src="http://www.capaciouscore.pl/download/other/detect-color-real.jpg" alt="detect-color-real.jpg" />
<br />
W rzeczywistości moje ściany są krwistoczerwone. Po zbiciu do palety podstawowych webowych kolorów uzyskujemy coś takiego:
<br />
<img src="http://www.capaciouscore.pl/download/other/detect-color-worked.jpg" alt="detect-color-worked.jpg" />
<br />
I w wyniku przeliczenia program powie nam, że dominującym kolorem jest kolor żółty. Tzw. żarówki energooszczędne są marnym źródłem światła.
<br />

<br />
Ważnym aspektem dobrej detekcji koloru jest oświetlenie oraz umiejscowienie przedmiotu, którego kolor chcemy badać. Najlepiej, aby obiekt zakrywał cały przechwytywany obraz. Jeżeli mamy kamerę, która automatycznie odpowiednio przybliża i oddala obraz to mamy ułatwioną sprawę.
<br />

<br />
Jeżeli będę miał trochę czasu to może napiszę taką aplikację na telefon, bo poszła sugestia, aby taka powstała. Jak widzicie małym kosztem można uzyskać cel. Nie trzeba koniecznie kupować specjalnego osprzętowania służącego do detekcji kolorów.
<br />

<br />
Ah i bym zapomniał link do aplikacji <a href="http://www.capaciouscore.pl/download/other/detekcja-koloru.rar" target="_blank" class="postlink">detekcja-koloru.rar</a> <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Dla jasności powiem tylko tyle, że została ona napisana w C# i wymaga .NET Framework 2.0. Używacie jej na własną odpowiedzialność!]]></description></item><item><title>Powód dla którego nie korzystam z FireFoxa i Chrome</title><pubdate>Wed, 09 Nov 2011 5:05:07 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/powod-dla-ktorego-nie-korzystam-z-firefoxa-i-chrome/</link><comments>http://www.capaciouscore.pl/artykuly/powod-dla-ktorego-nie-korzystam-z-firefoxa-i-chrome/#komentarze</comments><description><![CDATA[Pomimo tego, że jestem zwolennikiem Opery to z chęcią korzystałbym na przemian także z FireFox'a. Nie dlatego, że ma przewagę na rynku przeglądarek w Polsce ale dlatego, że posiada stos przydanych narzędzi do analizowania strony. Mam na myśli chociażby Live HTTP Headers, FireBug, Greasemonkey i inne. Mimo, że Chrome jest szybki i funkcjonalny to nigdy więcej go nie użyję. Powód jest bardzo błachy i rozbija się o rewelacje, kiedy to przeglądarka wysyłała informacje, co wstukuje na klawiaturze. Takich rzeczy nie potrzebuje. I nie obchodzi mnie, że można to wyłączyć albo znaleźć odpowiednią alternatywę dla Chroma, która istnieje, ale nie pamiętam nazwy. Polityka i slogan &quot;Don't be evil&quot; dokonała kolejnego fail'a. Cały problem rozbija się o <b>błąd 105 (net::ERR_NAME_NOT_RESOLVED)</b>. Dlaczego niby w Operze takich problemów nie ma!?! Co kilka kilkanaście stron podczas przeglądania internetu widzę komunikat, że nie można wyświetlić strony. I dopiero za którymś razem zaskakuje i ponownie koło się zamyka. Wszystkie te &quot;rozwiązania&quot; problemu nic nie dają! Zabawy ze ścianami ognia, DNS'ami, ustawieniami proxy i innymi pierdołami nic nie zmieniają. Żeby była jasność przywróciłem ustawienia fabryczne routera jak i testowałem to na czystym systemie. Jeżeli chcecie obarczyć mojego dostawce internetu (UPC) to także będzie to błąd bo testowałem u trzech rożnych providerów internetu (Multimedia, Neozdrada i wspomniana wczesniej UPC) jednak problem był taki sam. Jedyne gdzie mogę i wykorzystuję liska jest sławny localhost, czyli mój mały poligon.]]></description></item><item><title>1 listopada dniem &quot;Wszystkich Świętych&quot; i korków drogowych</title><pubdate>Sun, 30 Oct 2011 4:06:02 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/1-listopada-dniem-wszystkich-swietych-i-korkow-drogowych/</link><comments>http://www.capaciouscore.pl/artykuly/1-listopada-dniem-wszystkich-swietych-i-korkow-drogowych/#komentarze</comments><description><![CDATA[Zdaje sobie sprawę, że nie każdy może dostać kilka dni urlopu dwa tygodnie przed lub dwa tygodnie po &quot;Wszystkich Świętych&quot; jednak Ci, co mogą powinni tak zrobić i zamiast kisić się w korkach akurat w weekend najbliższy 1 listopada to powinni pojechać tydzień lub dwa tygodnie przed lub tydzień lub dwa tygodnie po całej tej imprezie... W ten sposób część korków można zneutralizować tak sądzę. Jak zwykle w tym okresie telewizja powie o niezliczonej liczbie pijanych kierowców oraz tych co jeżdżą od święta. Jak pokazują statystyki w tym okresie prawie co roku zginie na drogach od kilku do kilkunastu osób. Ja np. pojechałem jakieś 1,5 tygodnia przed całym tym eventem i miałem praktycznie spokój. Przy okazji odkryłem &quot;objazd&quot; omijający budowę dwupasmówki przed Lublinem. Tak się składa, że jechałem z Chełma za Lublin w stronę Rzeszowa. Wystarczy odbić w lewo na obwodnicy w Piaskach i przejedź przez Bychawe, aby znaleźć się na trasie prowadzącej do województwa podkarpackiego. Trasę oceniam dobrze z wyjątkiem kilku kawałków, na których trzeba zwolnić. Ponadto droga rzadko uczęszczana i można mocniej rozpędzić się. Przy okazji fajne klimaty pagórków - raz jedziesz w górę, a raz w dół <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" />]]></description></item><item><title>Reklamy w telewizji i nie tylko</title><pubdate>Sat, 29 Oct 2011 11:44:05 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/reklamy-w-telewizji-i-nie-tylko/</link><comments>http://www.capaciouscore.pl/artykuly/reklamy-w-telewizji-i-nie-tylko/#komentarze</comments><description><![CDATA[Ostatnio zastanawiam się, jaka część publiki wierzy w to, co mówią w reklamie. Grunt to zapatrzyć się bezgranicznie w to, co jest serwowane w mediach. Schemat jak zwykle jest ten sam, czyli super rewelacyjny produkt będący remedium na Twój problem. Jakiś czas temu moja mama chciała sprawdzić z ciekawości efektywność Vanish'a do dywanów. Po porównaniu stanu dywanu przed i po zabiegu szybko doszliśmy do wniosku, że to kolejny beznadziejny produkt. Jak zwykle wszystko ładnie, pięknie wygląda w telewizji natomiast w rzeczywistości nie jest już tak różowo? Ot jeden przykład z miliona. Nic nie zastąpi zwykłego prania wykonanego przez fachowca. Kolejnym przykładem przekolorywania rzeczywistości są wszelakiego typu klipy związane z sieciami barów szybkiej obsługi. Na obrazie widać, jakie to wszystko kolorowe i piękne jednak jak się chwile zastanowić to, dlaczego nie pokażą np. Amerykanów obżerających się tą padlina dzień w dzień? No przecież to by nie wyglądało smakowicie! Nie będę rozbijał się o całe te granie na emocjach i innych zjawiskach związanych z oddziaływaniem na &quot;szare komórki&quot;. Innym ciekawym przykładem są kredyty. Weź sobie kredyt na jakaś rzecz, potem jeszcze kilka na debetową i spłacaj z odsetkami. Na reklamach pokazują jak to mało odsetek ma, jak łatwo go wziąć, a w rzeczywistości lichwiarski procent. Dlatego właśnie dziwie się ludziom, którzy biorą kredyt. Dlaczego dają na sobie zarabiać? Przecież lepiej jest odkładać systematycznie określoną kwotę i potem nie płacić zbędnego haraczu! Podobno ludzie są istotami przedsiębiorczymi... Co się bardziej opłaca? Zapłacić 100% za produkt czy 130% zasilając przy okazji portfele finansjery? Grunt to mieć to natychmiast, grunt to <a href="http://pl.wikipedia.org/wiki/Konsumpcjonizm" target="_blank" class="postlink">konsumpcjonizm</a>. Teraz odwróćmy sytuacje. Śmieszne oferty do mnożenia kapitału np. przez lokaty. Jeżeli ktoś lubi mrozić pieniądze to niech to robi dalej. Ot temat do głębszej refleksji nad tym jak inwestować pieniądze, aby uzyskać jak najwięcej. Wychodzę z założenia, że jeżeli coś (produkt lub usługa) jest dobre to nie potrzebuje reklamy, bo samo się rozreklamuję przy pomocy klientów. Kolejnym przykładem są leki. Każdy przedstawiany jako super rewelacyjny, skuteczny, posiadający jakiś tam laur konsumenta. Jak coś Ciebie boli to idzie się do lekarza, a nie łyka garść leków przeciwbólowych! W ten sposób ukrywasz tylko problem zamiast go rozwiązać. Trzeba mieć totalnie nierówno pod sufitem żeby właśnie tak postępować. Polacy w tego typu akcjach są mistrzami, a statystyki to tylko potwierdzają. Kolejną kategorią są sprzęty AGD i RTV. Czasami zdarzy się, że faktycznie taniej kupimy jakiś produkt a częściej stanie się tak, że po prostu przepłacimy. W większości przypadków rabaty i promocje tyczą się produktów, które są niechodliwe, wadliwe bądź są z &quot;odrzutu&quot;. Zrozumcie, że każdy musi zarabiać, a nie przynosić straty. Następną kategorią są telefony komórkowe. Często zastanawiam się czy ludzie biorący nowe modele, które pojawiły się na rynku faktycznie ich potrzebują. Nie rozumiem tych, co biorą telefony na umowę. To tak jakby założyć sobie kaganiec na pysk. Ja uzupełniam prepaid raz na miesiąc albo rzadziej i nigdy nie potrafię wydać kwoty doładowania. Kiedyś doszło do takiej sytuacji, że na koncie miałem jakieś ~300zł. Musiałem mocno się nastarać żeby zbić ten <i>wynik</i>. Innym aspektem reklam telefonów komórkowych jest forma przedstawienia. Młodzi rozumieją przekaz natomiast osoby starszej generacji już niekoniecznie. Moja mama zawsze mówi mi, że nie trawi tych reklam (szczególnie Heyah i ostatnio oswajacza internetowego). Rozumiem, że jest to kierowane do osób młodych bądź ogarniętych w technologii. Przypomniała mi się sytuacja jak Telekomunikacja <i>Polska</i> parodiowała reklamy Netii i vice versa. Nie powiem, że specy od reklamy nie wysilili się <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Przypominają mi się reklamy nieśmiertelnego <a href="http://blip.pl/s/607803423" target="_blank" class="postlink">Frugo</a>, które wróciło na rynek. Szkoda, że w moim mieście nie spotkałem białego, szczególnie w większej butelce. Taka buteleczka kosztuję 2zł. Po promocji już 2,5zł, a nawet więcej. To już lepiej kupić sobie Dr Witt'a, który wchodzi lepiej niż schłodzona wódka! Można go pić litrami i nigdy nie ma się dość tak samo jak Frugo czy Tymbarka. Innym przykładem są pasty do zębów. Każda tego typu reklama mówi, że zęby staną się bielsze i wiele innych podobnych bzdur. Jak chcesz mieć bielsze zęby to idziesz do dentysty i sobie je wybielasz po prostu. Często odnoszę wrażenie, że reklamy mają za zadanie jedynie zmianę myślenia konsumenta tzn. by ten myślał, że <strike>coś się zmienia</strike>to faktycznie działa. Ot taki motyw z psychologii. Jeżeli wmawiasz sobie, że będziesz chory to w końcu tak się stanie. Wszystko to de facto stan umysłu. Ostatnio robiąc za szofera miałem okazję posłuchać sobie trochę radia w samochodzie. Słowo daję więcej tam reklam aniżeli samej muzyki. W kolorowym szkiełku to samo. Nie dość, że człowiek płaci za program to jeszcze &quot;musi&quot; oglądać i/lub słuchać niepożądane reklamy. Jeżeli miałbym taką opcję to chętnie bym zapłacił extra, aby nie widzieć ani jednej. Oczywiście można przekombinować i po prostu wyciszać fonię w momencie zniknięcia znaczka programu w trakcie oglądania konkretnego programu. Tak, tak drogie dzieci to jest możliwe. Internet jest taki sam. Z roku na rok coraz więcej nachalnych reklam stąd nie dziwię się coraz większej grupie osób stosujących blokady zbędnych <i>elementów</i>. Najgorszym wytworem agencji reklamowych są te typu, które mają &quot;fruwający&quot; charakter, trudny do znalezienia przycisk zamknij zwany potocznie iksem albo autoplay bez możliwości pauzy bądź przyciszenia. Ze swojego doświadczenia wiem, że Flash w jakiś 98% służy jedynie do prezentacji reklamy w lepszym bądź gorszym świetle. W sumie JavaScript też czasami przyczynia się do nachalnych zachowań reklam. Ostatnim wątkiem są billboardy multimedialne. Jeszcze w mieście idzie zrozumieć na skrzyżowaniu. Zawsze na chwilę można rzucić wzrokiem jednak niepojętym dla mnie jest zjawiskiem umieszczanie ich na trasie, kiedy rozpraszają kierujących pojazdem. Pomijam już często stosowany efekt kalejdoskopu.
<br />

<br />
Wiem, że tym artykułem naraziłem się wielu osobom, ale nie dbam o to. Podsumowując ten mały wywód powiem tak: Media żyją dla i z reklam! Gdy ich publika spada to analogicznie zysk ze sprzedaży reklam także wyparowuję.]]></description></item><item><title>Przykład manipulacji</title><pubdate>Fri, 21 Oct 2011 5:05:52 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/przyklad-manipulacji/</link><comments>http://www.capaciouscore.pl/artykuly/przyklad-manipulacji/#komentarze</comments><description><![CDATA[Ostatnio w jakimś programie emitowanym po wyborach i ogłoszeniu pełnych wyników wyłapałem manipulacje. Załóżmy, że partia x uzyskała 20% głosów przy 50% frekwencji. Polityk y z frakcji x wypowiedział następujące zdanie: &quot;Uzyskaliśmy 20% poparcie wśród społeczeństwa.&quot;. Oczywiście jest to nieprawda, bo uzyskali 20% spośród osób, które oddały glos. Nie można traktować reszty osób uprawnionych do glosowania jako bezmózgie zombie. Przekładając wynik partii x na % społeczeństwa, które oddało na nich glos daje w rezultacie 10% poparcia wśród narodu. Według mnie jest to licząca różnica. Żeby było zabawniej to frekwencja wyniosła, poniżej 50% co oznacza, że mniejszość zadecydowała o losach większości. Z drugiej strony zastanawia mnie ile musi wynieść frekwencja, aby wybory można było zakwestionować? Czy jeżeli zagłosuje raptem 10% uprawnionych do głosowania to takie referendum nadal będzie ważne?]]></description></item><item><title>Jak powinny wyglądać wybory i referenda?</title><pubdate>Fri, 07 Oct 2011 12:20:41 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/jak-powinny-wygladac-wybory-i-referenda/</link><comments>http://www.capaciouscore.pl/artykuly/jak-powinny-wygladac-wybory-i-referenda/#komentarze</comments><description><![CDATA[W tym artykule króciutko, bo szkoda mi nerwów. Przedstawię Wam moją wizję jak powinny wyglądać wybory XXI wieku w cywilizowanym kraju. Referenda i wszystkiego rodzaju podobne sprawy powinny być nowoczesne i nastawione na oszczędności. W związku z tym wszystko powinno być zinformatyzowane i zoptymalizowane. Nie mowie tutaj o <a href="http://www.webkrytyk.pl/" target="_blank" class="postlink">pseudo-specjalistach tworzących strony rządowe</a>, a o specjalistach wysokiej klasy z wiedzą i doświadczeniem. Zauważcie ile pieniędzy, papieru i zasobów ludzkich marnuje się na wyborach i referendach ogólnokrajowych. Można je przecież wykorzystać w inny sposób. Według mnie prawie w każdym lokalu wyborczym jest internet i w wielu lokalizacjach dostęp do kilku prowidentów stad moje pytanie, dlaczego nie można umożliwić wyborów w ten sposób? Dlaczego nie umożliwić każdemu obywatelowi możliwości wybrania swojego kandydata przez internet? Przecież deklaracje podatkowe możemy już w ten sposób składać. Tak samo przecież powinno się zakładać firmy i załatwiać sprawy z urzędami. Jeżeli nie ma kontaktu z urzędnikiem to zmniejsza się ryzyko korupcji i manipulacji. Ryzykiem tej zabawy oczywiście jest fakt, że ktoś niepowołany może uzyskać dostęp i zrobić bałagan jednak takie systemy powinny być dobrze zabezpieczone. Do wyborów wystarczy zwykły komputer. Niekoniecznie musi być to maszyna przerobiona na np. coś ala biletomat, które są problematyczne dla ich właścicieli <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Domniemywam, że potrzebny będzie podpis cyfrowy jednak i tak podobno wkrótce każdy ma go mieć. Dowody osobiste z czipem czy innym &quot;bzdetnym wymysłem&quot;. Wyborca mógłby zagłosować niezależnie od miejsca, w którym się znajduje o ile ma dostęp do komputera i internetu. Akurat to w dzisiejszych czasach jest standardem. Wielkim plusem tego rozwiązania będzie fakt, że wyniki wyborów będą natychmiastowo znane i znikną spekulacje, która partia ile dostała procent. Zauważcie też, że dla osób niepełnosprawnych byłby to krok naprzód. Nie musi człowiek iść bądź jechać do punktu docelowego tylko robi to z domu. Minusem jest ryzyko wystąpienia awarii sieci, dlatego wspomniałem o dwóch niezależnych operatorach. Ponadto oprogramowanie i same serwery powinny być tak skonstruowane, aby nie zapchać sieci. W Polsce tylko niekompetentni ludzie mogliby do takiej sytuacji dopuścić. W końcu frekwencja wyborcza nie jest wysoka. Wiec skoro ludzie chcą nowoczesnej Polski to, dlaczego takie zmiany nie zostały nadal dokonane? Oczywiście, jeżeli glos byłby oddawany to informacja, musiałaby być szyfrowana. Mam nadzieje, że jest to dla każdego oczywiste. I na koniec pytanie do publiczności, co sadzicie o tym pomyśle?
<br />

<br />
[edit]
<br />
Wizję, którą nie tylko ja przedstawiam można zaliczyć do rewolucyjnych, bo nie będziemy musieli wybierać swoich przedstawicieli w Sejmie, lecz zaczniemy bezpośrednio decydować o tym, co dla nas jest ważne. Gorąco zachęcam do zapoznania się z tą prezentacja.
<br />
<a href="http://www.youtube.com/watch?v=dxEA8WFYq80">http://www.youtube.com/watch\?v=dxEA8WFYq80</a>]]></description></item><item><title>Projektowanie stron WWW uwzględniając osoby niewidome i niedowidzące</title><pubdate>Thu, 06 Oct 2011 5:31:44 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/projektowanie-stron-www-uwzgledniajac-osoby-niewidome-i-niedowidzace/</link><comments>http://www.capaciouscore.pl/artykuly/projektowanie-stron-www-uwzgledniajac-osoby-niewidome-i-niedowidzace/#komentarze</comments><description><![CDATA[Dzisiejszy wpis dedykuję twórcom aplikacji webowych, którzy chcą zaznajomić się z kwestią postrzegania stron internetowych przez osoby niedowidzące i niewidome. Ostatnio zainteresowałem się tematyką osób niewidomych i tym jak oni odbierają przekaz idący z internetu. W celu uzyskania informacji musiałem poznać kilka osób znających tematykę i dowiedzieć się u samego źródła jak to wygląda. Na początku przeszukałem indeks sieciowy pod kątem stron prowadzonych przez osoby niewidome. W ten sposób znalazłem kilku ochotników i kilku kolejnych przy pomocy <a href="https://lists.adm.uw.edu.pl/mailman/listinfo/typhlos" target="_blank" class="postlink">listy dyskusyjnej Typhlos</a>. Po wymianie korespondencji z ochotnikami dostałem kilka ciekawych materiałów, które zaprezentuje poniżej. Wszystkie kwestie rozbijają się o <a href="http://pl.wikipedia.org/wiki/Dostępność_(WWW)" target="_blank" class="postlink">accessibility</a>, <a href="http://pl.wikipedia.org/wiki/Użyteczność_(informatyka)" target="_blank" class="postlink">usability</a>, <a href="http://pl.wikipedia.org/wiki/Web_Content_Accessibility_Guidelines" target="_blank" class="postlink">WCAG</a> oraz <a href="http://pl.wikipedia.org/wiki/WAI" target="_blank" class="postlink">WAI</a>. Przeglądanie stron WWW przez ta grupę jest możliwe przy użyciu <a href="http://pl.wikipedia.org/wiki/Czytnik_ekranowy" target="_blank" class="postlink">screen readerów</a>. Przeglądanie stron internetowych przez osoby niewidome można przyrównać do używania np. przeglądarki <a href="http://pl.wikipedia.org/wiki/Lynx_(przeglądarka)" target="_blank" class="postlink">Lynx</a>. Mówiąc wprost liczy się treść statyczna czyli HTML. Wygląd czyli CSS jest całkowicie pomijany no bo i po co on właściwie potrzebny, prawda? Sprawa z JavaScriptem jest bardziej skomplikowana. Jeżeli skrypty są dobrze napisane to jest szansa, że czytnik ekranu odczyta. Ogólnie są duże utrudnienia w dynamicznym ładowaniu treści przy pomocy np. AJAX'u i różnorakich animacjach. Dlatego tak ważną kwestią jest to, aby <b>strona była w pełni funkcjonalna</b> bez żadnych dodatków (czytane JavaScript). Trzeba pamiętać, że <u>JavaScript jest tylko dodatkiem</u>. Korzystając z okazji powiem, aby niedoświadczeni nie mylili Javy z JavaScript'em, bo to są rożne języki. Apropo Javy to z tego, co wiem to ona jest praktycznie niedostępna dla osób niewidomych. Idąc dalej tym tokiem myślenia ważną kwestią jest poprawnie napisana strona, spełniająca standardy. Pomijam zdeprecjonowane elementy, o których każdy wie, że nie należy ich stosować. Prawidłowe zamykanie tagów, to ważna sprawa i warto o niej pamiętać. Przez jakieś dziwne niedopatrzenia strona może stać się niedostępna, bo zostanie źle sparsowana. Pamiętajmy, że tworzenie stron internetowych to poezja. Żeby zobaczyć i poczuć jak to wygląda w rzeczywistości powinniście ściągnąć jakiś czytnik ekranu, wyłączyć monitor i sprawdzić na ile Wasza strona jest czytelna i dostępna. Lista polecanych czytników ekranu wygląda następująco:
<br />
<ul class="list">
<li>Windows
<br />
<ul class="list">
<li>NVDA</li>
<li>SuperNova</li>
<li>Jaws</li>
<li>Window-Eyes</li>
</ul>
</li>
<li>
</li>
<li>Linux
<br />
<ul class="list">
<li>Orca (Gnome)</li>
</ul>
</li>
<li>Mac OS
<br />
<ul class="list">
<li>VoiceOver</li>
</ul>
</li>
</ul>
Pamiętam, że zadałem dość istotne pytanie dotyczące HTML5. Jak wiece nie został on jeszcze uwolniony mimo, że część korporacji go promuje (np. Google). Ponadto część webmasterów przerobiła strony tak aby były &quot;zgodne&quot; z wyżej wymienionym standardem. I tutaj pojawia się problem. Bo czytniki nie są jeszcze dostosowane do tych zmian co powoduje problemy z odczytywaniem stron. Oczywiście każdy rozumie, że HTML5 poprawi możliwości odnośnie poruszania się po stronie, ale jest na to IMO za wcześnie. Moim zdaniem powinno się poczekać aż dokumentacja będzie w pełni gotowa w wersji &quot;finalnej&quot;. Myślę, że do tego czasu twórcy czytników ekranowych dostosują swoje programy, aby uwzględniały tą technologie.
<br />

<br />
Jak wiemy w dobie dzisiejszej informatyzacji, gdyby społeczeństwo odciąć od internetu to dostałoby jakiegoś amoku. Łatwo zauważyć, że z roku na rok coraz częściej na stronach widać multimedia wszelkiego typu. Jeżeli strony są zrobione przez <a href="http://www.webkrytyk.pl/" target="_blank" class="postlink">niefachowe osoby, które nie maja pojęcia o temacie</a> to nietrudno dojść do wniosku, że takie strony staną się niedostępne dla konkretnych grup ludzi.
<br />
<a name="podstawowe_wytyczne"></a><h2>Podstawowe wytyczne</h2>
Poniżej przedstawiam listę podstawowych wytycznych, jakimi powinno się kierować przy budowaniu strony.
<ol class="list list_1">
<li>Tytuł strony, czyli słynne <tt>title</tt> powinno odzwierciedlać jej zawartość. Ta kwestia rozbija się o SEO i jego efekty czyli pozycjonowanie strony. Przykładowo: mamy stronę główną firmy, to dajemy <i>Strona główna - Nazwa firmy</i>. <b>Im krótszy tytuł tym lepiej</b>.</li>
<li>Jedną z najistotniejszych kwestii jest struktura strony. To właśnie od niej zależy czy strona będzie czytelna. Rozchodzi się o używanie nagłówków, list, tabel (do danych tabelarycznych) i <strike>ramek</strike>. Te ramki to oczywiście żart i nieaktualna informacja, która dostałem, bo kto w dzisiejszych czasach używa ramek?!?</li>
<li>Jeżeli na stronie pojawiają się cytaty, akronimy i skróty to powinny one być ujęte w odpowiedni znacznik. Czytnik ekranu rozróżnią takie elementy i informuje czytelnika o nich. Ponadto, jeżeli strona jest wielojęzyczna, należy używać atrybutu języka, bo mówi to screen readerowi aby przełączył język. Jeżeli taka informacja znajduje się na stronie, to podczas kolejnych wizyt program będzie wiedział jak się dostosować.</li>
<li>Kolejnym ważnym aspektem jest udostępnianie odnośników pomiędzy poprzednia i następna stroną, a stroną aktualnie przeglądaną. W ten sposób osoby słabo orientujące się w stronie mogą bez przeszkód przemieszczać się po niej.</li>
<li>Jest taka wytyczna, że jeżeli struktura strony oparta jest o tabelki (sic!) to należy dla treści użyć jednej tabelki, a dla menu drugiej. Oczywiście jest to najgorsze z możliwych rozwiązań, bo jak wiemy strony budujemy na blokach, czyli <tt>div</tt>'ach. <u>Tabele służą tylko i wyłącznie do przedstawienia danych tabelarycznych</u>.</li>
<li>Kolejną ważną sugestią jest to, aby w źródle strony <b>content był przed menu</b>, co umożliwi łatwiejsze przemieszczanie się po stronie, bo najpierw użytkownik dostanie się do treści, a dopiero potem do menu. Jest to bardzo banalne do realizacji, bo do dyspozycji mamy CSS. Jest taka sugestia, aby udostępniać link na początku strony o treści &quot;pomiń nawigacje&quot;, który bezpośrednio przenosi czytelnika do treści. Link taki można ustawić w stylach CSS, jest on niewidoczny dla normalnego odbiorcy korzystającego z przeglądarek graficznych, ale programy odczytu ekranu go zauważą i osoby niewidome będą mogły z niego skorzystać. W tradycyjnym rozwiązaniu po załadowaniu strony syntezatory najpierw odczytują obszar menu tak, więc chcąc przejść do właściwej treści trzeba za każdym razem wysłuchiwać linki tworzące menu strony. Przy bardzo rozbudowanych stronach bardzo wydłuża to czas jej odbioru. Powyżej opisana metoda pozwala pominąć obszar nawigacji.</li>
<li>Często źle rozgrywaną sprawą jest atrybut <tt>alt</tt> dla obrazków. Jeżeli macie menu graficzne to koniecznością jest opisanie dokładnie każdego graficznego linku. W przypadku skomplikowanej grafiki warto dla dokładniejszego opisu zastosować atrybut <tt>longdesc</tt>. Ponadto dla lepszej identyfikacji hiperłączy można użyć atrybutu <tt>title</tt>. Programy odczytujące zawartość ekranu bezproblemowo potrafią odczytywać takie rzeczy. Jeżeli nie dajesz odpowiedniego <tt>alt</tt>'u bądź dajesz go na odwal się, aby validator nie przywalał się to nie zasługujesz na miano webmastera. Drobnym szczegółem dla <tt>longdesc</tt> jest to, że może on być zastosowany dla obrazków, które nie są hiperłączami.</li>
<li>W kwestii formularzy sprawa wygląda bardzo prosto. Powinno się używać <tt>fieldset</tt>, <tt>label</tt> i <tt>accesskey</tt> tam gdzie istnieje taka możliwość. Oprogramowanie do poruszania się na stronie informuje osobę niewidoma o takich rozwiązaniu i w ten sposób pomaga w nawigacji po niej. Ze względu na to, że jest możliwość dublowania klawiszy sugeruje się aby wykorzystywać raczej cyfry niż litery. Trzeba także pamiętać, aby nie używać skrótów klawiszowych przeglądarki.</li>
<li>Gdy piszemy stronę w <i>trybie</i> <tt>strict</tt> musimy się liczyć z większą czułością na niektóre błędy. Rozchodzi się miedzy innymi o tzw. <tt>target blank</tt>, który odpowiedzialny jest za otwieranie nowego okna lub zakładki. Ogólnie zamyśl jest taki, że to <b>użytkownik ma decydować</b> o tym czy chce otworzyć stronę w nowej karcie czy w tej samej. Dla osób niewidomych jest to tylko utrudnienie, jeżeli strona otwiera się w nowej zakładce. Jednym z argumentów jest fakt, że nie wszystkie programy informują o zaistniałej sytuacji. Często właśnie w takiej sytuacji osoby niewidome są zagubione i nie wiedzą, co się dzieje. W związku z tym musza sprawdzić, jakie mają otwarte zakładki i w ten sposób trącą czas. Jeszcze gorszą sytuacją może się przydarzyć, gdy obie zakładki posiadają taki sam <tt>title</tt>. Przykładową wymówką do otwarcia nowego okna jest np. poinformowanie czytelników o tym, że w dniu tym i tym praca instytutu została skrócona do tej i tej godziny.</li>
<li>Istotna kwestia są nagłówki. Nie jest to tylko zagadnienie z punktu widzenia usability, ale także z punktu widzenia SEO oraz accessibility. Wiadomo, że nagłówki mają większą moc pozycjonerską na wybrane frazy. Przy użyciu odpowiednich skrótów klawiszowych osoba niewidoma może przeskoczyć bezpośrednio do <tt>h1</tt> albo <tt>h2</tt> jeżeli taki istnieje.</li>
<li>Jeżeli mamy jakiś wykaz to warto go wsadzić w listy numerowane bądź też tzw. unordered. Program analizujący treść witryny od razu będzie wiedział, że istnieją listy i w ten sposób osoba niewidoma może bezpośrednio do nich przeskoczyć. Ta sytuacja tyczy się także menu, które powinno być na lisice zbudowane! Trzeba pamiętać, że nie powinno się robić zbyt rozbudowanych zagnieżdżanych list. Zaleca się maksymalnie, aby nie przekraczać trzeciego poziomu zagnieżdżenia. Po prostu mocno rozbudowane listy wielopoziomowe są trudne do wyobrażenia przez osoby niewidome. Zwracajcie uwagę, aby elementy listy nie były puste, bo mogą być mylące dla <i>nieprzeciętnych</i> gości odwiedzających Waszą stronę.</li>
<li>Wcześniej mówiłem o tym, aby stosować nagłówki tam gdzie trzeba. Jedna z trafniejszych uwag jest fakt, że często w szablonach rożnych <a href="http://pl.wikipedia.org/wiki/System_zarządzania_treścią" target="_blank" class="postlink">CMS</a>'ów stosowane są one obok menu np. <tt>h4</tt> dla menu w <a href="http://pl.wikipedia.org/wiki/WordPress" target="_blank" class="postlink">WordPress</a>'ie. Należy tego unikać, bo nagłówki służą do poruszania się po treści strony, a nie po menu!</li>
<li>Jeżeli przedstawiamy jakieś dane w tabeli to zaleca się wykorzystanie znacznika <tt>caption</tt>, który jest pomocny do przemieszczania czytelnika do wybranej tabeli i przy okazji jeżeli taka sytuacja ma miejsce to odczytywany jest tytuł tabeli jeżeli został on zdefiniowany. Jeżeli nie macie potrzeby wyświetlania nagłówka tabeli to możecie ją schować z poziomu CSS natomiast, jeżeli screen readear napotka taką rzecz na swojej drodze to poinformuje o niej czytelnika.</li>
<li>Wszystkie tabele, które prezentują jakieś dane powinny być tworzenie w jak najbardziej przejrzysty sposób. Zaleca się nie tworzenie tabel, które nie posiadają widocznych granic, a także unikanie prezentowania informacji w tabelach o złożonej zagnieżdżonej strukturze. Takie sprawy komplikują bardzo orientowanie się w strukturze, hierarchii i zaznaczaniu prezentowanej informacji. Gdy doszło już do sytuacji, w której struktura tabeli jest bardzo złożona to należy zastosować streszczenia dla całej zawartości oraz dla poszczególnych rzędów bądź komórek. Streszczenia nie są wyświetlane przez przeglądarki natomiast ułatwiają osobom niewidomych poruszanie się po takim obiekcie.</li>
<li>Niedopuszczalne jest używanie elementów graficznych, których celem pozycjonowania innych elementów. Mam tutaj na myśli słynne cięcie, layoutów przez &quot;specjalistów wysokiej klasy&quot; w Photoshopie. Jeżeli w formularzu przycisk jest graficzny to nie należy pomijać jego opisu!</li>
<li>Jeżeli wypunktowanie na liście jest obrazkiem to należy odpowiednio zaznaczyć ten fakt przybliżona zawartość dla atrybutu <tt>alt</tt>.</li>
<li>Wszelkie inne obrazki używane na stronie takie jak np. emotikony powinny być zaopatrzone w atrybut <tt>alt</tt>, w którego treści powinien być zawarty zwięzły opis wyglądu lub znaczenia obrazka.</li>
<li>Stanowczo nie zalecane jest stosowanie tzw. map graficznych. Jeżeli już koniecznie musicie takową mapę zastosować to nie zapomnijcie o <tt>alt</tt>'cie dla poszczególnych fragmentów jak i całości.</li>
<li>Kiedy coś takiego jak ramka miało prawo istnieć zalecało się oznaczanie tytułami poszczególnych elementów przy pomocy atrybutu <tt>name</tt>. Na szczęście minęły już lata, w których używa się ramek co nas nowoczesnych webmasterów bardzo cieszy. Można powiedzieć, że języki skryptowe wyparły wyżej wymienione rozwiązanie.</li>
<li>Jedna z wytycznych, jakie przeczytałem jest informacja o tym, aby tworzyć kilka osobnych definicji kolorów tła i czcionek, dzięki którym osoby słabowidzące mogłyby je dopasowywać dzięki specjalnemu mechanizmowi. Osobiście uważam, że większość przeglądarek posiada coś takiego jak &quot;zastosowanie autorskiego arkuszu stylów&quot;, co rozwiązuje ten problem.</li>
<li>W celu lepszego wyróżnienia hiperlinków zaleca się ustawianie im innego koloru i cech czcionki. Chodzi tutaj, aby linki zawarte w treści były np. innego koloru i dodatkowo były podkreślone. W ten sposób człowiek przez przypadek nie będzie musiał odkrywać, że gdzieś jest &quot;ukryty&quot; link.</li>
<li>To, co już wczesnej wspomniałem, czyli korzystanie z JavaScript'u. Powtórzę się i powiem, że strona powinna być tak samo funkcjonalna z jak i bez JS'u. Starajcie się unikać zdarzeń typu <tt>onMouseOver</tt> i podobnych, które czytniki ekranu bardzo słabo interpretują i mogą wprowadzić w błąd niewidomych obserwatorów.</li>
<li>Pola formularzy powinny być bezwzględnie odpowiednio oznaczone. Mam tutaj na myśli używanie etykiet, które są bardzo pomocne w nawigacji. Właśnie, dlatego tak często o to prowadzimy batalie na rożnego rodzaju forach. Labele powinny być jak najbliżej wybranych elementów formularza. Owe etykiety informują czytelnika o przeznaczeniu poszczególnego elementu formularza. W przypadku, kiedy nie zostanie znaleziona etykieta program odczytujący zawartość ekranu przedstawi niewidomemu zawartość atrybutu <tt>name</tt>. Takie zjawisko może być bardzo mylące szczególnie, jeżeli nazwy pól są &quot;niedostatecznie&quot; ludzkie. Ponadto połączenie etykiety z polem formularza znacznie ułatwia korzystanie ze strony przez osoby słabowidzące, które dzięki temu zabiegowi mają do dyspozycji większy obszar, w który mogą &quot;kliknąć&quot;.</li>
<li>Przy tworzeniu formularzy należy pamiętać o tym, aby pola, które muszą być wypełnione, zostały zaopatrzone w dodatkową tekstową informację o konieczności ich wypełnienia. Taka informacja może być umieszczona jako etykieta danego pola lub tekst znajdujący się w jego bezpośrednim pobliżu.</li>
<li>W formularzach należy unikać stosowania tzw. &quot;dzielonych pól edycyjnych&quot;, których działanie polega na tym, że po wpisaniu pierwszej części treści kursor jest automatycznie przenoszony do kolejnej. Takie działanie uniemożliwia użytkownikowi niewidomemu dokonywanie poprawek we wpisywanej treści przy pomocy klawiatury.</li>
<li>Coraz częściej stosuje się technologie AJAX do wyświetlania podpowiedzi w tzw. &quot;dymkach&quot;. Może i dla przeciętnego zjadacza chleba jest ona łatwa do zlokalizowania jednak dla osoby niewidomej jest problematyczna w odnalezieniu, dlatego odradza się jej stosowanie. Często można zauważyć te zjawisko na rożnego rodzaju forach, które poprzez zalinkowanie rożnych fraz reklamują je. Przykładem takich akcji są firmy udostępniające reklamę kontekstową (np. <a href="http://www.adkontekst.pl/" target="_blank" class="postlink">adkontekst.pl</a>).</li>
<li>Komunikaty o błędnym wypełnieniu pól formularza powinny być przekazywane w formie komunikatów bądź okien dialogowych wyrzucanych przez przeglądarkę. Sugeruje się, aby nie były one wyróżniane w miejscu gdzie normalnie znajduje się treść strony. Informacja taka może być trudna do znalezienia przez użytkownika niewidomego bądź słabowidzącego.</li>
<li>Należy unikać sytuacji, w których zmieniana jest zawartość listy bez przeładowania przy pomocy innej listy. Efektem takich zabiegów jest sytuacja, w której czytnik ekranu może zgubić się!</li>
<li>Należy unikać stosowania przycisków graficznych. Jeżeli jest taka konieczność to obowiązkiem jest odpowiednie opisanie go atrybutem <tt>alt</tt>.</li>
<li>Jedna z kluczowych spraw jest unikanie mechanizmu autoryzacji polegającym na poproszeniu użytkownika o przepisanie kodu z obrazka (tzw. captcha, token).</li>
<li>I jeszcze jedna ważna uwaga. Jeżeli zmieniamy mechanizm adresowania podstron, to należy pamiętać o kompatybilności wstecznej, czyli aby poprzednie linki były redirectowane na nowe adresy.</li>
<li><tt>marquee</tt> jest totalnie złym pomysłem, ze względu na to, że po napotkaniu takiego elementu na stronie czytnik zapętla się i odczytuje cały czas ten sam tekst</li>
<li>Pusty <tt>div</tt> to zbędny <tt>div</tt>! Zamiast robić zbędne elementy po prostu zagnieżdżaj jeden w drugim!</li>
<li>Nie należy stosować linków, których anchorem jest słowo &quot;więcej&quot;. Lepiej po prostu napisać &quot;więcej o standardach kodowania&quot;.</li>
<li>Pamiętajcie, aby zachować hierarchie nagłówków. Czyli najpierw używamy <tt>h1</tt>, a dopiero potem <tt>h2</tt> i tak dalej.</li>
<li>Jeżeli prowadzimy duży serwis to konsekwentnie powinniśmy pilnować struktury strony. Oznacza to, że na poszczególnych podstronach nie zmieniamy ułożenia na stronie.</li>
<li>Nigdy nie wrzucaj na stronę muzyki, która włącza się automatycznie w momencie załadowania. Jeżeli już koniecznie chcecie udostępnić taką rzecz to należy udostępnić dostępny &quot;panel sterowania&#8221;, aby można było włączyć, wyłączyć, podgłaśniać i ściszać.</li>
<li>Nie należy także używać animacji bądź gifów, które wykorzystują technikę tzw. kalejdoskopu.</li>
</ol>
<a name="kwestia_captchy"></a><h2>Kwestia captchy</h2>
W ostatnim jednym z ostatnich punktów listy wspomniałem o tym, aby nie stosować tego typu rozwiązań. Jest masa artykułów odnośnie tego niekorzystnego zjawiska i pozwolę sobie podlinkować tylko jeden wpis - <a href="http://www.webaudit.pl/blog/2006/captcha-nie-uzywaj/" target="_blank" class="postlink">Captcha - nie używaj!</a>. Liczę na inwencje Was, webdeveloperów ażebyście doczytali w tej kwestii na rożnych blogach i vortalach webmasterskich. Wiem, że do niektórych przeglądarek istnieją odpowiednie wtyczki służące do &quot;łamania captchy&quot; na rożne sposoby. Zazwyczaj te wtyczki obsługują najpopularniejsze serwisy i ich nieznośne tokeny. Takie rozwiązanie nie jest skuteczne w 100% i może być wykorzystywane także przez spamerów. Chce zauważyć, że nie powinniśmy przerzucać odpowiedzialności sprawdzania kto jest botem, a kto zwykłym człowiekiem na naszego czytelnika. Jest kilka alternatywnych rozwiązań, które wykazują się dużą skutecznością. Mam na myśli np. <a href="http://sblam.com/" target="_blank" class="postlink">Sblam!</a> lub słynny <a href="http://akismet.com/" target="_blank" class="postlink">Akismet</a> znany z m.in. WordPress'a. 
<br />

<br />
Wszystko rozbija się o ekonomie i możliwości personalne. Jeżeli prowadzimy bloga albo serwis, w którym istnieje możliwość dodawania komentarzy, to mamy do wybory dwie drogi. Pierwszą opcją jest używanie mechanizmu typu <a href="http://www.google.com/recaptcha" target="_blank" class="postlink">rechaptcha</a>, który jednak dla niektórych może być problematyczny. Trzeba mieć na uwadze, że ten mechanizm jest bardzo popularny i upodobali sobie go spamerzy, dlatego według mnie nie warto go stosować. Z kolei drugą opcją jest po prostu używanie filtrów antyspamowych oraz manualne akceptowanie komentarzy. Ten sposób jest skuteczniejszy, ale wymaga zaprzęgnięcia pewnych zasobów personalnych, aby osiągnąć cel. 
<br />

<br />
Korzystając z okazji opowiem trochę o mechanizmie recaptcha. Z tego, co pamiętam to wystarczy wpisać poprawnie jedno z dwóch słów, które faktycznie jest istotne i &quot;autoryzacja&quot; zostanie dokonana. Czasami zdarza się, że kod z obrazka jest mocno niewyraźny i trzeba go odświeżyć. Jak będę miał trochę czasum, to w komentarzu pokaże Wam co mi się wyświetliło. Ponadto w polu tego mechanizmu istnieje informacja o mniej więcej takiej treści &quot;Type the two words&quot;. Sugeruje to jakoby trzeba było wpisać dwa słowa. Wszystko się zgadza natomiast, jeżeli odsłuchujemy informacji dźwiękowej to część użytkowników wprowadza to w błąd, bo faktycznie trzeba przepisać wszystkie puszczane liczby. Pamiętam, że gdzieś w necie natknąłem się na program łamiący głosową captche, który był wyjątkowo skuteczny. 
<br />

<br />
Wnioski dla mnie są proste. Skoro i tak da się to złamać to narzuca się pytanie, dlaczego tego używać? Z doświadczenia wiem, że odnośnie głosowej captchy to około 50% ścieżek dźwiękowych daje się bezbłędnie odsłuchać i przepisać.
<br />
<a name="kilka_slow_o_wai"></a><h2>Kilka słów o WAI</h2>
Na początku artykułu wspomniałem o inicjatywie <abbr title="Web Accessibility Initiative ">WAI</abbr>. Teraz pozwolę sobie to trochę rozwinąć. Została ona podjęta w celu opracowania standardów, metod, narzędzi oraz działań edukacyjnych i badawczych, aby zapewnić dostępność stron internetowych dla osób z różnymi typami niepełnosprawności. W prace konsorcjum zaangażowane jest  wiele organizacji reprezentowanych przez osoby niepełnosprawne. Organizacja jest podzielona na pewne grupy robocze, które zajmują się poszczególnymi aspektami projektowania stron internetowych. Głównymi celami poszczególnych grup są:
<br />
<ul class="list">
<li>Wpływanie na to aby nowo powstałe technologie internetowe w pełni umożliwiały dostępność stron internetowych dla osób z rożnymi typami niepełnosprawności.</li>
<li>Rozpowszechnianie materiałów szkoleniowych dotyczących tworzenia &quot;praktycznych&quot; witryn WWW.</li>
<li>Tworzenie i rozpowszechnianie narzędzi pozwalających na budowanie dostępnych stron internetowych.</li>
<li>Współpraca ze środowiskami badawczymi celem opracowania nowych technologii, które będą spójne z ideologią konsorcjum.</li>
</ul>
<a name="kilka_slow_o_technologii_flash"></a><h2>Kilka slow o technologii Flash</h2>
Wbrew powszechnej opinii obiekty Flash mogą być dostępne dla osób niewidomych i niedowidzących, jeżeli tylko zostaną dobrze przygotowane. Zazwyczaj komponenty flashowe są mocno nasycone rożnego rodzaju elementami graficznymi i dźwiękowymi. Ponadto poszczególne elementy tych animacji są niedostępne dla osób niewidomych i częściowo dla osób słabowidzących. 
<br />

<br />
Dlatego właśnie firma Adobe udostępniła narzędzie, aby interaktywne obiekty były dostępna dla wszystkich. Z informacji, które posiadam zaleca się używanie Flash Playera w wersji minimum 10 do takich celów. Korporacja udostępniła <a href="http://www.adobe.com/accessibility/products/flash/best_practices.html" target="_blank" class="postlink">poradnik</a> instruujący grafików jak powinno się tworzyć dostępne aplikacje. Gorąco polecam przewertowanie tego dokumentu oraz ich oficjalnego bloga! 
<br />

<br />
Osobiście uważam, że technologia Flash wymrze w ciągu kilku lat. W większości przypadków śluzy ona do wyświetlania nachalnych reklam i nic poza tym. Oczywiście można je zablokować za pomocą wtyczek typu Adblock Plus, ale to inna bajka. 
<br />

<br />
Dlaczego twierdze, ze to upadnie? Flash co najwyżej może przydaje się jako jakiś player (choć niekoniecznie dźwiękowy). Mowa o filmach na YT. Oczywiście w technologii HTML5 nie jest on konieczny. Jedyne, co mi przychodzi do głowy to wyrafinowane prezentacje. Ponadto z Flashem wiążą się dodatkowe koszta. Jeżeli posiadamy stronę w tej technologii to powinniśmy także zadbać o to, aby była wersja &quot;alternatywna&quot;, czyli HTML'owska. Dla mnie jest to oczywistość, konieczność i wymóg. Nawet, jeżeli webcrawler Google potrafi indeksować, analizować i czytać obiekty Adobe to nic nie zastąpi czystej treści przedstawionej za pomocy HTML'a! Pozwolę sobie w tym momencie zacytować pewien dokument:
<br />
<p class="quote">Cytat:</p><blockquote>Aby udostępnić elementy prezentacji flash dla osób niewidomych i słabowidzących, należy zastosować się do następujących zaleceń:
<ol class="list list_1">
<li><b>Zaopatrzenie elementów graficznych w alternatywne opisy tekstowe</b>. W tworzonej prezentacji należy dodać takie elementy jak: nazwy dla ikon, opisy dla animacji oraz opisy tekstowe dla wyróżnionych fragmentów tekstu lub grup grafik, które przekazują jakąś wspólną ideę.</li>
<li><b>Udostępnienie ruchomych animacji</b>. Użycie animacji, w których teksty poruszają się w krótkim czasie w nieskończonych przebiegach wprowadza w błąd programy odczytujące zawartość ekranu. Próbują one bowiem odczytywać ciągle od nowa całą stronę, przez co ich głos się jąka lub zawiesza. Aby uniknąć takiego efektu, należy dostosować te animacje w odpowiedni sposób. Problem ten można rozwiązać na przykład poprzez dodanie przycisków umożliwiających zatrzymanie animacji oraz krokowe wyświetlanie kolejnych napisów animacji.</li>
<li><b>Zastosowanie komponentów dostępności</b>. Aplikacja Flash CS4 została wyposażona w szereg komponentów, które można dodać do tworzonej prezentacji flash w celu jej udostępnienia. Umożliwiają one dodanie etykiet tekstowych, przycisków nawigacyjnych, skrótów klawiszowych i innych elementów ułatwiających użytkowanie prezentacji przez osoby niewidome i słabowidzące. Udostępnianie komponentów tworzonej prezentacji polega zwykle na wykonaniu polecenia programu, które powoduje dodanie do komponentu prezentacji dodatkowego obiektu udostępniającego ten obiekt. Umożliwia on między innymi obsługiwanie przez użytkownika przycisków przy pomocy klawiatury oraz dodanie alternatywnych opisów i etykiet do poszczególnych elementów slajdu.</li>
<li><b>Zapewnienie odpowiedniej kolejności odczytywania elementów prezentacji</b>. Wizualne rozmieszczenie poszczególnych elementów prezentacji nie musi być identyczne z logiczną kolejnością, która byłaby odpowiednia dla użytkowników programów odczytujących ekran. Taką kolejność odczytywania można ustalić na trzy sposoby: Pierwszym jest ograniczenie rozmiaru poszczególnych stron prezentacji i w ten sposób uproszczenie jej struktury. Drugi sposób polega na dodaniu do prezentacji dodatkowych elementów, które w bardziej linearny sposób opisują pozostałe elementy. Trzecim sposobem zapewnienia odpowiedniej kolejności odczytywania jest użycie tzw. skryptów akcji, które przenoszą użytkownika do odpowiednich miejsc prezentacji w zależności od tego, gdzie się on aktualnie znajduje. W ten sposób można kontrolować to, w jakim porządku prezentacja będzie odczytywana przez program mówiący.</li>
<li>Dodanie skrótów klawiszowych do prezentacji[/b]. Dodanie przycisków nawigacyjnych do wszystkich elementów prezentacji powoduje, że można poruszać się pomiędzy nimi przy pomocy klawiatury. Należy jednak pamiętać o tym, aby definicje skrótów klawiszowych umieszczać w każdym slajdzie zamiast określania ich osobno dla pojedynczych obiektów. Bardzo ważne jest, aby unikać używania pustych animacji jako przycisków. Nie są one rozpoznawane przez programy odczytujące ekran i w związku z tym nie mogą być odczytane.</li>
<li><b>Dodanie etykiet i opisów tekstowych</b>. Z myślą o potrzebach osób z innymi niesprawnościami (np. niesłyszących), program Flash CS4 Professional został zaopatrzony w specjalne komponenty, które umożliwiają dodawanie opisów tekstowych do zawartości audio i video, która jest umieszczana w prezentacjach. Te etykiety można także wykorzystać jako opisy tekstowe fragmentów wideo, które mogą być odczytane przez osoby niewidome. Dodawanie takich opisów polega na utworzeniu specjalnego pliku XML (DFXP), a następnie dołączeniu go do prezentacji.</li>
<li><b>Zapewnienie kontroli odtwarzania sekwencji wideo</b>. Sposób odtwarzania filmów wchodzących w skład prezentacji powinien być możliwie jak najlepiej dostępny dla osób niewidomych, słabowidzących oraz innych używających wyłącznie klawiatury. Aplikacja Flash CS4 Professional posiada wbudowane specjalne schematy udostępniające filmy wideo. Pozwalają one na dodanie napisów oraz przycisków nawigacyjnych umożliwiających zatrzymanie, wznowienie czy przewinięcie filmu, które mogą być wybrane przy pomocy klawiatury.</li>
<li><b>Zapewnienie kontroli odtwarzania dźwięków</b>. Strumienie audio, które są odtwarzane bezpośrednio na stronach internetowych sprawiają kłopoty programom odczytującym ekran. Zawartość dźwiękowa, czyli np. odtwarzana muzyka miesza się z głosem syntetycznym, który jest generowany przez program mówiący. Jest to efekt bardzo nieprzyjemny dla użytkownika gdyż rozprasza jego uwagę. Najważniejszym sposobem zapewnienia kontroli odtwarzania dźwięku jest dodanie do okienka odtwarzania przycisków służących do wznowienia i zatrzymania odtwarzania, oraz przycisków umożliwiających nawigację poprzez jego zawartość.</li>
<li><b>Prawidłowe Wyeksponowanie i wyrażenie struktury prezentacji</b>. Poszczególne slajdy (ramki) prezentacji flash mogą być bardzo złożone pod względem struktury, wyglądu, oraz sposobów nawigacji. W rezultacie są one często bardzo trudne do interpretacji dla programów odczytujących ekran. Aby rozwiązać problemy związane ze skomplikowaną strukturą prezentacji należy dodać do niej opis pozwalający na wyrażenie struktury i znaczenia poszczególnych elementów każdego slajdu. Mogą być one tworzone jako osobne okienka zawierające tekstowy opis slajdu, do których użytkownik może się przenieść w każdej chwili, gdy tego potrzebuje.</li>
<li><b>Opisanie stanu poszczególnych kontrolek</b>. W prezentacjach flash występuje zwykle bardzo wiele różnego rodzaju elementów takich jak: przyciski, pola wyboru, pola edycyjne, listy wyboru itd. Są one nazywane kontrolkami. Ważnym elementem dostosowania prezentacji jest poinformowanie użytkownika o aktualnym stanie każdej kontrolki. Na przykład, jeśli użytkownik naciśnie przycisk &quot;odtwarzaj&quot;, który po tym zdarzeniu zmieni swoją nazwę na &quot;Wstrzymaj&quot; należy go o tym fakcie poinformować. Ponowne naciśnięcie takiego przycisku zmienia jego nazwę na &quot;Odtwarzaj&quot;, o czym użytkownik powinien być również powiadomiony.</li>
<li><b>Ostrożne używanie kolorów</b>. W prezentacjach flash można używać bardzo wielu różnych kombinacji kolorów. Ze względu na dostępność dla osób słabowidzących, należy pamiętać o tym, aby wybierane kolory przekazywały jakąś konkretną informację i posiadały określone znaczenie dla użytkownika. Zbyt duża ilość używanych kolorów będzie utrudniała mu korzystanie z prezentacji. Dla użytkowników niewidomych nie powinno się stosować alternatywnych opisów w rodzaju &quot;kliknij zielony przycisk&quot; a zamiast tego powinien wystąpić komunikat &quot;kliknij przycisk Odtwarzaj&quot;, który oczywiście może mieć zielony kolor. Z tych samych powodów należy pamiętać o zapewnieniu właściwego, wyraźnego kontrastu pomiędzy tłem a samymi elementami prezentacji.</li>
</ol>
Przygotowana prezentacja flash może być sprawdzona pod względem jej dostępności dla użytkowników posiadających problemy ze wzrokiem. Przewodnik dla osób tworzących prezentacje zawiera tylko najważniejsze zalecenia i wskazówki dotyczące udostępnienia prezentacji flash dla potrzeb użytkowników niewidomych lub słabowidzących. Rzeczywiste, najefektywniejsze i pełne sprawdzenie dostępności prezentacji może być wykonane tylko w praktyce. Firma Adobe proponuje kilka następujących metod sprawdzania dostępności prezentacji.
<ol class="list list_1">
<li>Należy uruchomić prezentację używając jednocześnie programu odczytu ekranu takiego jak Jaws czy Window Eyes i sprawdzić, czy jest ona w pełni czytelna dla użytkownika.</li>
<li>Należy sprawdzić działanie prezentacji wyłącznie z użyciem klawiatury, ale bez używania programu odczytu ekranu. Pozwoli to na wyeliminowanie błędów polegających na tym, że niektóre skróty klawiszowe w prezentacji kolidują ze skrótami klawiaturowymi programów odczytujących ekran.</li>
<li>W celu poprawienia dostępności prezentacji można użyć narzędzia pochodzącego z pochodzącego od innego producenta niż firma Adobe a służącego do sprawdzania jej dostępności.</li>
</ol>
W reszcie należy przeprowadzić test prezentacji, którego uczestnikami powinni być potencjalni niewidomi i słabowidzący użytkownicy.</blockquote>
<a name="testery_dostepnosci"></a><h2>Testery dostepnosci strony WWW</h2>
Oczywiście nic nie zastąpi wykwalifikowanego pracownika w celu przeprowadzania szeregu testów dostępności jednak są rozwiązania, które mogą pomoc i zasugerować nam, jakie rzeczy na swojej witrynie powinniśmy poprawić. Podstawową kwestią jest to, aby nasza witryna nie miała błędów składniowych. Takie rzeczy możemy wykryć validatorem dostarczonym przez konsorcjum W3C. Oczywiście jest to podstawa, aby przejść do dalszych etapów validacji i sprawdzania dostępności. Jednym z najpopularniejszych narzędzi jest tzw. <a href="http://wave.webaim.org/" target="_blank" class="postlink">WAVE</a>. Ostatnio pewien znajomy przedstawił mi polski odpowiednik, który jest aktualnie w fazie testów. Zachęcam do testowania i informowania o błędach. Polski validator został wyprodukowany pod skrzydłami firmy Utilitia i znajduje się pod <a href="http://validator.utilitia.pl/" target="_blank" class="postlink">tym adresem</a>. Zachęcam wszystkich do przeanalizowania ich strony ponieważ jest ciekawa. Jest to po prostu sugestia, a nie reklama.
<br />
<a name="konkluzja"></a><h2>Konkluzja</h2>
Nie można zapominać o tym, że dostęp informacji szczególnie publicznych jest ustawowo zapewniony mimo, że często niewidomi internauci natrafiają na rożnego rodzaju problemy dlatego należy zrobić wszystko aby zmienić ten stan rzeczy na lepszy. Jest to swojego rodzaju prośba do wszystkich programistów, webmasterów, webdeveloperów, grafików i tak dalej aby zaczęli zauważać problem i zastanawiać się jak go rozwiązać. To, w jakim stopniu osoby niewidome i niedowidzące będą miały dostęp do stron internetowych będzie miał wpływ na ich rozwój, a to z kolei na rozwój społeczeństwa. Przez wiele lat, osoby takie nie miały możliwości czytania gazet, śledzenia tego, co dzieje się na świecie, odsłuchiwania muzyki z internetu czy zawierania wirtualnych znajomości. Komputer był dla nich zbędną maszyną, z której korzystali inni, a oni mogli im jedynie zazdrościć. Czas mija, technika się rozwija, ale wygląda na to, że ciągle zajmujemy się sobą, zapominając o tych, którzy potrzebują kilku dosłownie udogodnień i pomysłów, by w pełni czerpać radość z tego, co nam sprawia przyjemność.
<br />

<br />
Ponadto gorąco zachęcam do przeczytania kilku materiałów szkoleniowych, które pogłębią Waszą wiedzę dotycząca dostępności aplikacji. Można je znaleźć pod tymi adresami (kolejność losowa):
<br />
<ul class="list">
<li><a href="http://www.w3.org/WAI/" target="_blank" class="postlink">Web Accessibility Initiative</a></li>
<li><a href="http://www.microsoft.com/enable/" target="_blank" class="postlink">Strona Microsoftu poświecona dostępności</a></li>
<li><a href="http://diveintoaccessibility.org/" target="_blank" class="postlink"><strike>Dive Into Accessibility</strike></a> <a href="http://mimas.ceti.pl/dia/accessibility_statement.html" target="_blank" class="postlink">W głąb dostępności</a> (znaleziony przypadkiem polska wersja dokumentu) - książka w wersji elektronicznej o tworzeniu dostępnych stron dla osób niepełnosprawnych.</li>
<li><a href="http://www.adobe.com/accessibility/products/flash/best_practices.html" target="_blank" class="postlink">Przewodnik dla twórców prezentacji Flash</a></li>
<li><a href="http://firr.org.pl/uploads/file/nasze_publikacje/FIRR_Dostepne_WWW.pdf" target="_blank" class="postlink">Dostępne WWW</a> wyprodukowane przez Fundacje Instytutu Rozwoju Regionalnego</li>
<li><a href="http://www.webusability.pl/kurs-usability-2.pdf" target="_blank" class="postlink">Kurs usability</a></li>
<li><a href="http://www.usabilitylover.pl/baza-wiedzy" target="_blank" class="postlink">Baza wiedzy dotycząca usability</a></li>
<li><a href="http://www.widzialni.eu/index.php?p=sd&amp;id=35&amp;action=show" target="_blank" class="postlink">Dostępność stron internetowych - korzyści w biznesie</a></li>
</ul>]]></description></item><item><title>Bug YouTuba</title><pubdate>Fri, 23 Sep 2011 10:54:41 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/bug-youtube/</link><comments>http://www.capaciouscore.pl/artykuly/bug-youtube/#komentarze</comments><description><![CDATA[W sumie nie jest to moje odkrycie i jest ono przypadkowe. Wszelakie podziękowania należą się Monice za jej omyłkę przy wklejaniu linka <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Już tłumaczę o co chodzi. Zawsze myślałem, że Google jako poważna korporacja przewiduje dosłownie wszystko, co może znaleźć się w danych wejściowych przychodzących od użytkownika. Myliłem się i sami zaraz zobaczycie dlaczego. Klikamy w <a href="http://www.youtube.com/watch?http://www.youtube.com/watch?v=0uQ_X6nQ8xk" target="_blank" class="postlink">tego linka</a> i patrzymy co się dzieje. Zwróćcie uwagę, że w adresie jest &quot;śmieszny&quot; błąd. ID filmu umyślnie został zmieniony. Ogólnie myślałem, że moja przeglądarka (Opera) ma dopracowany mechanizm blokujący wielokrotne odświeżanie tej samej strony. Niestety myliłem się bo browser sam nie zastopuje tego zapętlonego procesu. W normalnych przypadkach wysłanie nagłówka <tt>location</tt> do przeglądarki kilka razy pod rząd powoduje zapytanie usera czy chce kontynuować otwieranie strony. Konkluzje zbudujcie sami.]]></description></item><item><title>MSN i problem malware</title><pubdate>Tue, 20 Sep 2011 2:20:11 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/msn-i-problem-z-malware/</link><comments>http://www.capaciouscore.pl/artykuly/msn-i-problem-z-malware/#komentarze</comments><description><![CDATA[Ze względu na to, że mam paru znajomych z zagranicy, to oczywistą sprawą jest to, że jakoś z nimi musze utrzymywać kontakt, prawda? Od kiedy pamiętam, zawsze używałem <abbr title=" Windows Live Messenger">MSN</abbr>'a, czyli produktu Microsoft'u. Ogólnie ma dużo zalet, o których nie chce mi się pisać. No może napisze tylko o dwóch. Jedną z nich jest bardzo łatwe udostępnianie grafiki metodą drag&amp;drop, a drugą ważną cechą jest bardzo wygodne przesyłanie plików. Musze przyznać, że człowiek się do niego może mocno przyzwyczaić. Wiem, że ma tam swoje wady, ale tak to w życiu właśnie bywa. Pomijając już fakt, że najnowsze wersje tego komunikatora nie są tworzone pod XP, co mnie bardzo martwi. Im częściej ktoś napiera na mnie w celu wywarcia presji abym zmienił system tym częściej utwierdzam się w przekonaniu, żeby tego nie robić. Odnoszę wrażenie, że cały ten komunikator mimo świetnej oprawy graficznej jest bardzo nieumiejętnie pisany, bo są specjalne programy, które potrafią wyłączyć praktycznie każdą funkcjonalność programu w tym głupie reklamy. Wracając do tematu. Sytuacja potworzyła mi się kilkukrotnie już. Sam nie wiem, po co zrobiłem tak, żeby mój główny adres e-mail był na domenie powiązany z kontem MSN no ale... Chyba chodziło o to aby było &quot;oficjalnie&quot;. Ostatnimi czasy obserwuje nasilone ataki malware, które wykradają listę kontaktów i wysyłają zainfekowane aplikacje, celem dalszej egzystencji. Nie byłoby w tym nic śmiesznego gdyby nie fakt, że Ci co to pisali też do geniuszy nie należeli. Zamiast używać kopii ukrytej wiadomości to po prostu w adresacie widnieje pełna lista kontaktów. W ten sposób można się dowiedzieć kto z kim rozmawia <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Wszystko to nie zmienia faktu, że staram się trzymać ogarniętych znajomych na liście kontaktów, a mimo to czasami zdarza mi się taki rodzaj &quot;spamu&quot;. Ostatnio dostałem coś ala &quot;Happy Birthday&quot;. W załączniku była spakowana aplikacja, która okazała się perfidnym malware po sprawdzeniu w serwisie VirusTotal.]]></description></item><item><title>AdSense i żądana operacja nie może zostać wykonana</title><pubdate>Sun, 18 Sep 2011 10:50:34 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/adsense-i-zadana-operacja-nie-moze-zostac-wykonana/</link><comments>http://www.capaciouscore.pl/artykuly/adsense-i-zadana-operacja-nie-moze-zostac-wykonana/#komentarze</comments><description><![CDATA[Od parunastu dni obserwuje dziwną usterkę polegającą na wyświetlaniu się takiego komunikatu: <img src="http://www.capaciouscore.pl/download/other/google-adsense.png" alt="google-adsense.png" />
<br />
Zdarza się to zawsze, gdy wchodzę do panelu AdSense za pierwszym razem. Po odświeżeniu strony zawsze wszystko wraca do porządku dziennego. Gdyby ktoś miał problem z odczytaniem zrzutu ekranu cytuje treść komunikatu:
<br />
<p class="quote">Cytat:</p><blockquote>Przepraszamy, żądana operacja nie może zostać wykonana. Nasi programiści zostali powiadomieni o problemie i będą próbowali go rozwiązać.</blockquote>
Ktoś ma pomysł dlaczego tak się dzieje?]]></description></item><item><title>Allegro - podbijanie liczby wyświetleń aukcji</title><pubdate>Sat, 17 Sep 2011 2:36:25 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/podbijanie-liczby-wyswietlen-aukcji-na-allegro/</link><comments>http://www.capaciouscore.pl/artykuly/podbijanie-liczby-wyswietlen-aukcji-na-allegro/#komentarze</comments><description><![CDATA[W sumie do odkrycia tego nie zaliczę jednak ostatnio przez przypadek wpadłem na jakąś tam aukcje i zwróciłem uwagę na licznik wyświetleń. Przyznam się szczerze, że wcześniej do niego nie przywiązywałem większej wagi. Omyłkowo odświeżyłem aukcje i okazało się, że zlicza odsłony. Moje pytanie brzmi, jaki jest sens wstawiania takiego licznika skoro można go dowolnie manipulować? Mam na myśli najprostszy skrypt typu:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$link&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'http://allegro.pl/<em><span>link-do-aukcji-id</span></em>.html'</span><span style="color: #007700">;while(</span><span style="color: #0000BB">1</span><span style="color: #007700">){</span><span style="color: #0000BB"> file_get_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$link</span><span style="color: #007700">);}</span><span style="color: #FF8000">//&nbsp;lub&nbsp;np.</span><span style="color: #007700">for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">1000</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">){</span><span style="color: #0000BB"> file_get_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$link</span><span style="color: #007700">);}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Ot najprostsza metoda na manipulacje liczbą wyświetleń. Nawet curl'a nie trzeba &quot;implementować&quot;. Ciekawe czy taki licznik to był świadomy plan czy po prostu nie chcieli się babrać w paręnaście linijek kodu, aby zablokować sztucznie podbijane liczby. Dla mnie wniosek jest prosty. Wiarygodność tych danych jest niska i można, choć trochę pokazać, co poniektórym, że &quot;aukcja jest bardzo popularna&quot;.
<br />

<br />
PS
<br />
Jak się piszę słowo &quot;paręnaście&quot;? Oddzielnie czy razem? Mi Word sugeruje, że oddzielnie a słownik w internecie, że razem. Oddzielnie ma więcej wyników w Google natomiast razem mniej.]]></description></item><item><title>Do końca roku szkolnego 2012 pozostało</title><pubdate>Sat, 17 Sep 2011 2:03:40 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/do-konca-roku-szkolnego-2012-pozostalo/</link><comments>http://www.capaciouscore.pl/artykuly/do-konca-roku-szkolnego-2012-pozostalo/#komentarze</comments><description><![CDATA[Dla tych co rozpoczęli rok szkolny 1 września mam bardzo dobrą wiadomość. Od dziś możecie odliczać online ile dni pozostało do końca roku szkolnego 2011/2012. Przy okazji ponabijam sobie trochę statystyk na odwiedzających. <img src="http://www.capaciouscore.pl/download/other/do-konca-roku-szkolnego-2012-pozostalo.php" alt="do-konca-roku-szkolnego-2012-pozostalo.php" />]]></description></item><item><title>NVDA - ponadprogramowe podgłośnienie</title><pubdate>Sun, 04 Sep 2011 8:19:13 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/ponadprogramowe-podglosnienie-w-nvda/</link><comments>http://www.capaciouscore.pl/artykuly/ponadprogramowe-podglosnienie-w-nvda/#komentarze</comments><description><![CDATA[Dziś w nocy skończyłem malutki programik, aby &quot;pomagał&quot; mojej znajomej w wyciszaniu <a href="http://pl.wikipedia.org/wiki/NonVisual_Desktop_Access" target="_blank" class="postlink">NVDA</a> czyli <a href="http://pl.wikipedia.org/wiki/Screen_reader" target="_blank" class="postlink">czytnika ekranu</a>. Rozchodzi się o to, że niby za cicho mówię. Dziwie mnie, bo to jakoś inni rozmówcy ze Skrzypa (czytane Skype) nie narzekają na to. Prawda towarzyszu <a href="http://www.sobak.pl/" target="_blank" class="postlink">Sobak</a>? A spróbuj mi nie odpowiedzieć to będziesz miał blitzkrieg. Wracając do pobocznego wątku dostałem sugestie jakoby mój mikrofon za mało łapał, co jest strange. Ze względu na to, że mnie słabo słychać to znajoma musi często, gesto ściszać do 30% lektora, aby było można posłuchać mojego jakże uroczego głosu. Tak, tak pochlebiam sobie i przy okazji dowartościowuję się. Pomyślałem sobie, że napisze mały program, który umożliwi na szybko zmianę głośności wybranego pana albo pani. W tym celu na szybko przeskanowałem pamięć softem Cheat Engine i dostałem to, czego chciałem, czyli offset odpowiedzialny za volume. Zdziwiłem się, że gdy pasek jest na 100% to wartość w komórce pamięci wynosi raptem <tt>55</tt> punktów/jednostek/cokolwiek. Po chwili refleksji zmanipulowałem wartość i okazało się, że jak dam na <tt>255</tt> to jest stanowczo głośniej. Ot moje małe przypadkowe odkrycie. Co ciekawe jak damy powyżej wyżej wymienionej wartości to będzie jeszcze głośniej. Głośniej nie znaczy lepiej, bo powyżej tego progu lektor staje się dla mnie niezrozumiały (za mocno ma przepity głos?). Ciekawe czy to nieumyślny bug zrobiony przez programistów czy umyślne działanie? Aha i żeby była jasność mówimy o wersji NVDA 2011.2 released. Jeżeli chodzi o offset właściwej wartości to jest nim numer <tt>0x6F7A9948</tt>. Dodatkowo są trzy ekstra odpowiedzialne za kontrolkę suwaka pod adresami: <tt>0x6F7AF16C</tt>, <tt>0x6F7AFD78</tt> i <tt>0x6F7C02AC</tt>. Są one nieistotne, bo wystarczy zmodyfikować tylko tą pierwszą wartość no, ale ciekawość czasami silniejsza niż sięganie do samary.]]></description></item><item><title>[PHP] Generator losowych haseł</title><pubdate>Mon, 29 Aug 2011 1:12:51 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/generator-losowych-hasel-w-php/</link><comments>http://www.capaciouscore.pl/artykuly/generator-losowych-hasel-w-php/#komentarze</comments><description><![CDATA[Jak wiemy co jakiś czas hasła do kont, które posiadamy w sieci powinny być zmieniane. Ponieważ ostatnio mnie naszła refleksja i nie chciało mi się na pałę wystukiwać &quot;losowych&quot; znaków to pomyślałem sobie, że napiszę maluteńki generator <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Z tego co pamiętam to bezpiecznie jest zmieniać hasło co jakiś czasu (sugeruję co jeden miesiąc). Do czego może nam się to przydać? Odpowiednio przerabiając ten skrypt można go zastosować w większości serwisów, które udostępniają możliwość rejestrowania kont. Mam na myśli np. resetowanie hasła po akceptacji linka, który przyszedł w mailu do użytkownika.
<br />
<a name="wyjasnienie"></a><h2>Wyjaśnienie</h2>
Właściwie trzeba wyjaśnić tylko jedną rzecz. Jak ugryźć tablicę <tt>$config['mode']</tt>? Jeżeli klucz z numerem <tt>0</tt> <i>zwraca prawdę</i> to do zestawu znaków dodawane są liczby. W przypadku <tt>1</tt> są to znaki specjalne. Ostatnie dwa klucze odpowiadają za małe (<tt>2</tt>) i duże litery (<tt>3</tt>).
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;Konfiguracja</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'mode'</span><span style="color: #007700">]&nbsp;=&nbsp;array(</span><span style="color: #0000BB">true</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;Fajna&nbsp;tablica,&nbsp;nie?</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'length'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">8</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;Alfabet</span><span style="color: #0000BB">$letters&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'abcdefghijklmnopqrstuvwxyz'</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;Liczby</span><span style="color: #007700">if(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'mode'</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">]){</span><span style="color: #0000BB"> $values&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'0123456789'</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;Można&nbsp;użyć&nbsp;tego:&nbsp;implode('',&nbsp;range(0,&nbsp;9));</span><span style="color: #007700">}</span><span style="color: #FF8000">//&nbsp;Znaki&nbsp;specjalne</span><span style="color: #007700">if(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'mode'</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">]){</span><span style="color: #0000BB"> $values&nbsp;</span><span style="color: #007700">.=&nbsp;</span><span style="color: #DD0000">'`~!@#$%^&amp;*()_-=+&lt;&gt;?,.|\/\'";:[]{}'</span><span style="color: #007700">;}</span><span style="color: #FF8000">//&nbsp;Małe&nbsp;litery</span><span style="color: #007700">if(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'mode'</span><span style="color: #007700">][</span><span style="color: #0000BB">2</span><span style="color: #007700">]){</span><span style="color: #0000BB"> $values&nbsp;</span><span style="color: #007700">.=&nbsp;</span><span style="color: #0000BB">$letters</span><span style="color: #007700">;}</span><span style="color: #FF8000">//&nbsp;Duże&nbsp;litery</span><span style="color: #007700">if(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'mode'</span><span style="color: #007700">][</span><span style="color: #0000BB">3</span><span style="color: #007700">]){</span><span style="color: #0000BB"> $values&nbsp;</span><span style="color: #007700">.=&nbsp;</span><span style="color: #0000BB">strtoupper</span><span style="color: #007700">(</span><span style="color: #0000BB">$letters</span><span style="color: #007700">);}for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$length&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$values</span><span style="color: #007700">)&nbsp;-&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">);&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'length'</span><span style="color: #007700">];&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">){</span><span style="color: #0000BB"> $random_symbols&nbsp;</span><span style="color: #007700">.=&nbsp;</span><span style="color: #0000BB">substr</span><span style="color: #007700">(</span><span style="color: #0000BB">$values</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">mt_rand</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$length</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">);}echo&nbsp;</span><span style="color: #DD0000">'Losowe&nbsp;hasło&nbsp;na&nbsp;teraz&nbsp;brzmi:&nbsp;&lt;pre&gt;'</span><span style="color: #007700">.</span><span style="color: #0000BB">htmlspecialchars</span><span style="color: #007700">(</span><span style="color: #0000BB">$random_symbols</span><span style="color: #007700">).</span><span style="color: #DD0000">'&lt;/pre&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Osoby, które chcą przetestować cały skrypt zapraszam do <a href="http://www.capaciouscore.pl/examples/generator-losowych-hasel/index.php" target="_blank" class="postlink">dema</a>. Aha i bym zapomniał! Lekką modyfikację tego kodu można znaleźć w tym <a href="http://www.forumweb.pl/viewtopic.php?p=378593#378593" target="_blank" class="postlink">wątku</a>.]]></description></item><item><title>Chełm - Uroki tego miasta, czyli ulica Kolejowa</title><pubdate>Tue, 09 Aug 2011 9:58:08 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/chelm-uroki-tego-miasta-czyli-ulica-kolejowa/</link><comments>http://www.capaciouscore.pl/artykuly/chelm-uroki-tego-miasta-czyli-ulica-kolejowa/#komentarze</comments><description><![CDATA[Zapewne żaden z Was nie mieszka w moim mieście jednak pomyślałem sobie, że pochwalę się małym projektem, który niedawno zrealizowałem. Od kilku lat mam prawo jazdy i w związku z tym mam <i>przyjemność</i> przemieszczania się ulicą Kolejową. Według mnie jest to jedna z najbardziej zaniedbanych ulic w tym mieście. Aby oszczędzić kopiowania niepotrzebnej treści proszę przeczytać opis filmu na YouTube oraz <a href="http://autochelm.com/viewtopic.php?t=2018" target="_blank" class="postlink">ten wątek</a>, jeżeli ktoś ma ochotę komentować.
<br />
<a href="http://www.youtube.com/watch?v=XpKawkAAx4w">http://www.youtube.com/watch\?v=XpKawkAAx4w</a>]]></description></item><item><title>[PHP] Zabezpieczenie typu antyflood (antiflood)</title><pubdate>Sat, 16 Jul 2011 12:55:55 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/zabezpieczenie-typu-antyflood-w-php/</link><comments>http://www.capaciouscore.pl/artykuly/zabezpieczenie-typu-antyflood-w-php/#komentarze</comments><description><![CDATA[Troszkę naszła mnie wena to pisze. Jakiś czas temu na forum pewna osoba zapytała mnie o rozwiązanie w tej sprawie. Powiedziała, że takich rzeczy nie ma necie. Skoro tak faktycznie jest to teraz jeden artykuł więcej będzie w tej materii. Dość dużo niedoświadczonych programistów nie zdaje sobie z tego sprawy, że takie zabezpieczenia są potrzebne. Chodzi głównie o to, aby ktoś nie spamował dajmy na to naszej skrzynki w przypadku, kiedy nie mamy innych zabezpieczeń typu <a href="http://pl.wikipedia.org/wiki/CAPTCHA" target="_blank" class="postlink">captcha</a>.
<br />
<a name="cookies_czyli_ciasteczka"></a><h2>Cookies czyli ciasteczka</h2>
Najbanalniejsza metoda, jaka przyszła mi do głowy to są właśnie ciasteczka. W momencie dajmy na to wysłania wiadomości przeglądarka jest częstowana ciasteczkiem. W przypadku, kiedy ktoś chce wysłać wiadomość i ciasteczko nadal istnieje informujemy o tym petenta, że musi troszeczkę poczekać.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'antyflood'</span><span style="color: #007700">][</span><span style="color: #DD0000">'time'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">30</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;Tutaj&nbsp;wyimaginowane&nbsp;części&nbsp;kodu</span><span style="color: #007700">if(</span><span style="color: #0000BB">$_COOKIE</span><span style="color: #007700">[</span><span style="color: #DD0000">'send_message'</span><span style="color: #007700">])&nbsp;</span><span style="color: #FF8000">//&nbsp;Dla&nbsp;rygorystycznych&nbsp;drani&nbsp;mamy&nbsp;oczywiście&nbsp;isset()</span><span style="color: #007700">{</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Wiadomość&nbsp;do&nbsp;użytkownika,&nbsp;że&nbsp;musi&nbsp;troszeczkę&nbsp;poczekać</span><span style="color: #007700">}else{</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$message&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">send</span><span style="color: #007700">(</span><span style="color: #FF8000">/*&nbsp;jakieś&nbsp;parametry&nbsp;*/</span><span style="color: #007700">))&nbsp;</span><span style="color: #FF8000">//&nbsp;Imitacja&nbsp;wysyłania&nbsp;wiadomości</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Mówimy&nbsp;użytkownikowi,&nbsp;że&nbsp;wysłał&nbsp;wiadomość&nbsp;i&nbsp;częstujemy&nbsp;przeglądarkę&nbsp;ciasteczkiem</span><span style="color: #0000BB"> &nbsp;setcookie</span><span style="color: #007700">(</span><span style="color: #DD0000">'send_message'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB"><em><span></span><span style="color: #DD0000">'bardzo_nieodpowiednia_treść'</span><span style="color: #0000BB"></span></em></span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">time</span><span style="color: #007700">()&nbsp;+&nbsp;</span><span style="color: #0000BB"><em><span>$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'antyflood'</span><span style="color: #007700">][</span><span style="color: #DD0000">'time'</span><span style="color: #007700">]</span><span style="color: #0000BB"></span></em></span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;30&nbsp;sekund</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Mówimy&nbsp;użytkownikowi,&nbsp;że&nbsp;nie&nbsp;udało&nbsp;się&nbsp;wysłać&nbsp;wiadomości</span><span style="color: #0000BB"> </span><span style="color: #007700">}}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Niestety ta metoda jest zawodna, bo część przeglądarek nie akceptuje ciastek bądź użytkownik nie życzy sobie tego papu.
<br />
<a name="sesje"></a><h2>Sesje</h2>
Lepszą formą zabezpieczenia są sesje jednak mają swoje wady, o których napisze poniżej listingu.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'antyflood'</span><span style="color: #007700">][</span><span style="color: #DD0000">'time'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">30</span><span style="color: #007700">;</span><span style="color: #0000BB">session_start</span><span style="color: #007700">();&nbsp;</span><span style="color: #FF8000">//&nbsp;Żelazna&nbsp;zasada&nbsp;pracy&nbsp;z&nbsp;sesjami//&nbsp;Usuwamy,&nbsp;jeżeli&nbsp;jest&nbsp;taka&nbsp;potrzeba</span><span style="color: #007700">if(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'send_message'</span><span style="color: #007700">]&nbsp;&amp;&amp;&nbsp;(</span><span style="color: #0000BB">time</span><span style="color: #007700">()&nbsp;-&nbsp;</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'send_message'</span><span style="color: #007700">])&nbsp;&gt;&nbsp;</span><span style="color: #0000BB"><em><span>$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'antyflood'</span><span style="color: #007700">][</span><span style="color: #DD0000">'time'</span><span style="color: #007700">]</span><span style="color: #0000BB"></span></em></span><span style="color: #007700">)&nbsp;</span><span style="color: #FF8000">//&nbsp;Dla&nbsp;rygorystycznych&nbsp;draniu&nbsp;mamy&nbsp;oczywiście&nbsp;isset()</span><span style="color: #007700">{</span><span style="color: #0000BB"> unset</span><span style="color: #007700">(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'send_message'</span><span style="color: #007700">]);}</span><span style="color: #FF8000">//&nbsp;Tutaj&nbsp;wyimaginowane&nbsp;części&nbsp;kodu</span><span style="color: #007700">if(!</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'send_message'</span><span style="color: #007700">]){</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$message&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">send</span><span style="color: #007700">(</span><span style="color: #FF8000">/*&nbsp;jakieś&nbsp;parametry&nbsp;*/</span><span style="color: #007700">))&nbsp;</span><span style="color: #FF8000">//&nbsp;Imitacja&nbsp;wysyłania&nbsp;wiadomości</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Mówimy&nbsp;użytkownikowi,&nbsp;że&nbsp;wysłał&nbsp;wiadomość&nbsp;i&nbsp;ładujemy&nbsp;informacje&nbsp;do&nbsp;sesji</span><span style="color: #0000BB"> &nbsp;$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'send_message'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">time</span><span style="color: #007700">();</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Mówimy&nbsp;użytkownikowi,&nbsp;że&nbsp;nie&nbsp;udało&nbsp;się&nbsp;wysłać&nbsp;wiadomości</span><span style="color: #0000BB"> </span><span style="color: #007700">}}else{</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Wiadomość&nbsp;do&nbsp;użytkownika,&nbsp;że&nbsp;musi&nbsp;troszeczkę&nbsp;poczekać</span><span style="color: #007700">}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Problem polega na tym, że przeglądarka niekoniecznie musi zaakceptować ciastko z <b>SID</b>. W takim przypadku zostaje przekazywany w url'u, który tez nie musi zostać zaakceptowany to znaczy nie musi zostać przekazany identyfikator do kolejnej strony. W takim przypadku zabezpieczenie staje się całkowicie bezużyteczne.
<br />
<a name="zapisywanie_ip"></a><h2>Zapisywanie IP</h2>
Moim zdaniem najbardziej efektywna metoda, bo zmiana IP trwa chwilkę i natrętowi może w tym czasie się znudzi resetować router czy co tam ma. Skrypt działa w ten sposób, ze tworzy plik, którego nazwą jest IP w formacie liczby. Operujemy na dacie pliku więc nie trzeba się bawić nawet w otwieranie w najprostszym wydaniu tego skryptu. Oczywiście można to rozbudować ale...
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir'</span><span style="color: #007700">][</span><span style="color: #DD0000">'antyflood'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'./antyflood/'</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'antyflood'</span><span style="color: #007700">][</span><span style="color: #DD0000">'time'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">30</span><span style="color: #007700">;</span><span style="color: #0000BB">$ip&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">ip2long</span><span style="color: #007700">(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'REMOTE_ADDR'</span><span style="color: #007700">]);&nbsp;</span><span style="color: #FF8000">//&nbsp;Jakaś&nbsp;metoda&nbsp;bądź&nbsp;funkcja&nbsp;do&nbsp;pobierania&nbsp;IP</span><span style="color: #0000BB">$path&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir'</span><span style="color: #007700">][</span><span style="color: #DD0000">'antyflood'</span><span style="color: #007700">].</span><span style="color: #0000BB">$ip</span><span style="color: #007700">;if(</span><span style="color: #0000BB">file_exists</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">)){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Niekoniecznie&nbsp;trzeba&nbsp;usuwać,&nbsp;może&nbsp;wystarczyć&nbsp;update&nbsp;daty&nbsp;pliku&nbsp;(ale&nbsp;moim&nbsp;zdaniem&nbsp;lepiej&nbsp;usuwać)</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">time</span><span style="color: #007700">()&nbsp;-&nbsp;</span><span style="color: #0000BB">filemtime</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">)&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'antyflood'</span><span style="color: #007700">][</span><span style="color: #DD0000">'time'</span><span style="color: #007700">])</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;unlink</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$catch&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}}if(</span><span style="color: #0000BB">$catch</span><span style="color: #007700">){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Wiadomość&nbsp;do&nbsp;użytkownika,&nbsp;że&nbsp;musi&nbsp;troszeczkę&nbsp;poczekać</span><span style="color: #007700">}else{</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$message&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">send</span><span style="color: #007700">(</span><span style="color: #FF8000">/*&nbsp;jakieś&nbsp;parametry&nbsp;*/</span><span style="color: #007700">))&nbsp;</span><span style="color: #FF8000">//&nbsp;Imitacja&nbsp;wysyłania&nbsp;wiadomości</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Mówimy&nbsp;użytkownikowi,&nbsp;że&nbsp;wysłał&nbsp;wiadomość&nbsp;i&nbsp;zapisujemy&nbsp;jego&nbsp;IP</span><span style="color: #0000BB"> &nbsp;touch</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;Mogą&nbsp;być&nbsp;inne&nbsp;funkcje</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Mówimy&nbsp;użytkownikowi,&nbsp;że&nbsp;nie&nbsp;udało&nbsp;się&nbsp;wysłać&nbsp;wiadomości</span><span style="color: #0000BB"> </span><span style="color: #007700">}}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
I teraz potrzebny worker, bo za każdym wywołaniem skryptu nie będziemy czyścić plików outdated. Najlepiej odpalić taki skrypt z poziomu CRON'a i nie martwic się, że folder z takimi danymi zostanie zasypany.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir'</span><span style="color: #007700">][</span><span style="color: #DD0000">'antyflood'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'./antyflood/'</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'antyflood'</span><span style="color: #007700">][</span><span style="color: #DD0000">'time'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">30</span><span style="color: #007700">;</span><span style="color: #0000BB">$list&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">glob</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir'</span><span style="color: #007700">][</span><span style="color: #DD0000">'antyflood'</span><span style="color: #007700">].</span><span style="color: #DD0000">'*'</span><span style="color: #007700">);if(!empty(</span><span style="color: #0000BB">$list</span><span style="color: #007700">)){</span><span style="color: #0000BB"> foreach</span><span style="color: #007700">(</span><span style="color: #0000BB">$list&nbsp;</span><span style="color: #007700">as&nbsp;</span><span style="color: #0000BB">$file</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">time</span><span style="color: #007700">()&nbsp;-&nbsp;</span><span style="color: #0000BB">filemtime</span><span style="color: #007700">(</span><span style="color: #0000BB">$file</span><span style="color: #007700">)&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'antyflood'</span><span style="color: #007700">][</span><span style="color: #DD0000">'time'</span><span style="color: #007700">])</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; unlink</span><span style="color: #007700">(</span><span style="color: #0000BB">$file</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #007700">}}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Cala sytuacja tyczy się gości, którzy nie maja możliwości rejestracji. Naturalnie rejestracja może ograniczać, ale co z multikontami? W takich wypadkach metoda IP konieczna. Oczywiście można stworzyć do tego klasę, ale to pozostawiam Waszej inwencji twórczej. Podsumowując powiem, że połączenie tych trzech metod może dać wymierne korzyści.]]></description></item><item><title>[PHP] Pobranie listy procesów i ubicie wybranych celów</title><pubdate>Sat, 02 Jul 2011 2:52:27 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/pobieranie-listy-procesow-i-ubicie-wybranych-celow-w-php/</link><comments>http://www.capaciouscore.pl/artykuly/pobieranie-listy-procesow-i-ubicie-wybranych-celow-w-php/#komentarze</comments><description><![CDATA[Skrypt umożliwia wyłączenie wybranych programów przy założeniu, że możemy wywoływać polecenia systemowe z poziomu PHP. Ponadto cała sytuacja dzieje się na Windowsie. Jeżeli będzie potrzeba zmodyfikowanie skryptu na inne OS'y to proszę o <i>request</i> wtedy pochylę się nad taką prośbą. Dodatkowym warunkiem, który musi zostać spełniony, aby skrypt działał jest włączona usługa <a href="http://pl.wikipedia.org/wiki/Zdalne_wywołanie_procedury" target="_blank" class="postlink">RPC</a> (domyślnie tak wlasnie jest) do wykonania zadania komendy systemowej <tt>tasklist</tt> oraz <tt>taskkill</tt>. Pierwsza z nich pobiera listę procesów na podstawie <tt>PROCESSENTRY32</tt> jak mniemam. Drugie polecenie służy do zabijania wybranego procesu. Czyli mniej więcej coś jak <tt>taskmgr</tt> tylko w wersji konsolowej. Nie sprawdzałem, ale zgaduje, że aplikacje &quot;ukryte&quot; nie zostaną ujawnione na liście. W taki wypadku trzeba będzie napisać sterownik i odwołać się do <tt>EPROCESS</tt>. Przykładem narzędzia slużącego do chowania procesow jest np. <b>HideToolz</b>. Nie zmienia to jednak faktu, że i <u>ukryte procesy da się wykryć</u>. Pamiętam jak jakiś czas temu kłuciłem się z jakimś gościem, który twierdził, że używajac wyżej wymienionego narzędzia aplikacja staje się niewykrywalna. Sprawa rozbijała się o pewien antycheat do gry. Na dowód swoich słów, że da się wykryć ukryte procesy daje mały filmik demonstrujący aplikacje slużącą do listowania <b>wszystkich procesów</b> w systemie. Co ciekawe Microsoft wypuściło kiedyś narzędzie, które zwie się <b>Process Explorer</b>. Taki mix <tt>taskmgr</tt> i paru innych rzeczy w tym narzedzia slużącego do pokazywania procesów. Niestety zawiodłem się bo nie wykrywa ukrytych procesów.
<br />
<a href="http://www.youtube.com/watch?v=i1x_EEPT7KE">http://www.youtube.com/watch\?v=i1x_EEPT7KE</a>
<br />
I teraz ulubiona część artykułu czyli sedno sprawy. W tablicy <tt>$slaughter_list</tt> definiujemy <a href="http://pl.wikipedia.org/wiki/PID_(informatyka)" target="_blank" class="postlink">PID</a>'y albo nazwy procesów, które mają być ubite.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;Lista&nbsp;procesów&nbsp;do&nbsp;ubicia</span><span style="color: #0000BB">$slaughter_list</span><span style="color: #007700">[</span><span style="color: #DD0000">'pid'</span><span style="color: #007700">]&nbsp;=&nbsp;array();</span><span style="color: #0000BB">$slaughter_list</span><span style="color: #007700">[</span><span style="color: #DD0000">'process_name'</span><span style="color: #007700">]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'notepad.exe'</span><span style="color: #007700">);</span><span style="color: #FF8000">//&nbsp;Działania&nbsp;pożądane</span><span style="color: #0000BB">$processes_list&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">trim</span><span style="color: #007700">(</span><span style="color: #0000BB">shell_exec</span><span style="color: #007700">(</span><span style="color: #DD0000">'tasklist&nbsp;/NH'</span><span style="color: #007700">));</span><span style="color: #0000BB">$processes_list&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">explode</span><span style="color: #007700">(</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$processes_list</span><span style="color: #007700">);if(empty(</span><span style="color: #0000BB">$slaughter_list</span><span style="color: #007700">[</span><span style="color: #DD0000">'pid'</span><span style="color: #007700">])&nbsp;&amp;&amp;&nbsp;empty(</span><span style="color: #0000BB">$slaughter_list</span><span style="color: #007700">[</span><span style="color: #DD0000">'process_name'</span><span style="color: #007700">])){</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'Nie&nbsp;podałeś&nbsp;celów&nbsp;do&nbsp;ubicia'</span><span style="color: #007700">;</span><span style="color: #0000BB"> exit</span><span style="color: #007700">;}</span><span style="color: #FF8000">//&nbsp;Dla&nbsp;czystości&nbsp;sumienia</span><span style="color: #007700">if(!empty(</span><span style="color: #0000BB">$processes_list</span><span style="color: #007700">)){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Przetwarzanie&nbsp;wyników&nbsp;i&nbsp;ubijanie&nbsp;celów,&nbsp;które&nbsp;w&nbsp;cale&nbsp;nie&nbsp;musi&nbsp;być&nbsp;w&nbsp;tym&nbsp;kawałku&nbsp;kodu</span><span style="color: #0000BB"> foreach</span><span style="color: #007700">(</span><span style="color: #0000BB">$processes_list&nbsp;</span><span style="color: #007700">as&nbsp;</span><span style="color: #0000BB">$key&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$value</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Niedoskonałe,&nbsp;dlatego&nbsp;trzeba&nbsp;nieco&nbsp;poprawić!</span><span style="color: #0000BB"> &nbsp;preg_match</span><span style="color: #007700">(</span><span style="color: #DD0000">"#([\s\w\.\-]+?)(\d+)#"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$value</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$sub_information</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;$processes_list</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'process_name'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">trim</span><span style="color: #007700">(</span><span style="color: #0000BB">$sub_information</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]),&nbsp;</span><span style="color: #DD0000">'pid'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;(int)</span><span style="color: #0000BB">$sub_information</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Sprawdzamy&nbsp;czy&nbsp;ten&nbsp;PID&nbsp;jest&nbsp;do&nbsp;ubicia</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">in_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$processes_list</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">][</span><span style="color: #DD0000">'pid'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$slaughter_list</span><span style="color: #007700">[</span><span style="color: #DD0000">'pid'</span><span style="color: #007700">]))</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #FF8000">//&nbsp;Można&nbsp;także&nbsp;użyć&nbsp;parametru&nbsp;/t&nbsp;odpowiedzialnego&nbsp;za&nbsp;zamkniecię&nbsp;procesów&nbsp;potomków</span><span style="color: #0000BB"> &nbsp; exec</span><span style="color: #007700">(</span><span style="color: #DD0000">'taskkill&nbsp;/pid&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$processes_list</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">][</span><span style="color: #DD0000">'pid'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$return</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$return_code</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #FF8000">//&nbsp;$return_code&nbsp;&gt;&nbsp;0&nbsp;=&nbsp;fail?&nbsp;$return_code&nbsp;=&nbsp;128&nbsp;oznacza&nbsp;nieudaną&nbsp;próbę&nbsp;ubicia&nbsp;procesu&nbsp;(nie&nbsp;znaleziono&nbsp;PID)&nbsp;-&nbsp;o&nbsp;ile&nbsp;dobrze&nbsp;pamiętam</span><span style="color: #0000BB"> &nbsp; echo&nbsp;$processes_list</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">][</span><span style="color: #DD0000">'process_name'</span><span style="color: #007700">].</span><span style="color: #DD0000">'&nbsp;('</span><span style="color: #007700">.</span><span style="color: #0000BB">$processes_list</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">][</span><span style="color: #DD0000">'pid'</span><span style="color: #007700">].</span><span style="color: #DD0000">')&nbsp;'</span><span style="color: #007700">.(</span><span style="color: #0000BB">$return_code&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">0&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #DD0000">''&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">'nie&nbsp;'</span><span style="color: #007700">).</span><span style="color: #DD0000">'został&nbsp;ubity&lt;br&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Dla&nbsp;czystości&nbsp;sumienia</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">unset(</span><span style="color: #0000BB">$return</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$return_code</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Sprawdzamy&nbsp;czy&nbsp;ta&nbsp;nazwa&nbsp;procesu&nbsp;jest&nbsp;do&nbsp;ubicia&nbsp;(uroki&nbsp;in_array()&nbsp;-&nbsp;wielkość&nbsp;liter&nbsp;nazwy&nbsp;procesu&nbsp;ma&nbsp;znaczenie!&nbsp;Rozwiązanie:&nbsp;array_map()&nbsp;+&nbsp;strtolower())</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">in_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$processes_list</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">][</span><span style="color: #DD0000">'process_name'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$slaughter_list</span><span style="color: #007700">[</span><span style="color: #DD0000">'process_name'</span><span style="color: #007700">]))</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #FF8000">//&nbsp;Można&nbsp;też&nbsp;użyć&nbsp;"taskkill&nbsp;/IM&nbsp;[nazwa&nbsp;procesu]"</span><span style="color: #0000BB"> &nbsp; exec</span><span style="color: #007700">(</span><span style="color: #DD0000">'taskkill&nbsp;/pid&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$processes_list</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">][</span><span style="color: #DD0000">'pid'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$return</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$return_code</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #FF8000">//&nbsp;To&nbsp;samo&nbsp;co&nbsp;powyżej</span><span style="color: #0000BB"> &nbsp; echo&nbsp;$processes_list</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">][</span><span style="color: #DD0000">'process_name'</span><span style="color: #007700">].</span><span style="color: #DD0000">'&nbsp;('</span><span style="color: #007700">.</span><span style="color: #0000BB">$processes_list</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">][</span><span style="color: #DD0000">'pid'</span><span style="color: #007700">].</span><span style="color: #DD0000">')&nbsp;'</span><span style="color: #007700">.(</span><span style="color: #0000BB">$return_code&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">0&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #DD0000">''&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">'nie&nbsp;'</span><span style="color: #007700">).</span><span style="color: #DD0000">'został&nbsp;ubity&lt;br&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Dla&nbsp;czystości&nbsp;sumienia</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">unset(</span><span style="color: #0000BB">$return</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$return_code</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #007700">}}else{</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'Lista&nbsp;procesów&nbsp;jest&nbsp;pusta'</span><span style="color: #007700">;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Przetwarzanie wyników i ubijanie celów niekoniecznie musi być w miejscu, które odpowiedzialne jest za listowanie procesów. Przykładowym wynikiem wykonania powyższego skryptu jest:
<br />
<p class="quote">Cytat:</p><blockquote>notepad.exe (1972) został ubity
<br />
notepad.exe (2860) został ubity</blockquote>
Zapytacie pewnie, po co to wszystko? W skrajnych przypadkach jest potrzeba zgaszenia aplikacji z poziomu strony WWW szczególnie jak się nie ma dostępu przez <a href="http://pl.wikipedia.org/wiki/Remote_Desktop_Protocol" target="_blank" class="postlink">RDP</a> (zdalny pulpit) albo inne badziewia.
<br />
<a name="alternatywa_dla_komendy_tasklist"></a><h2>Alternatywa dla komendy tasklist</h2>
Jeżeli nie znasz C++ i WinAPI to możesz na tym zakończyć czytanie artykułu. Troszkę kuriozalnie napisany jest ten <tt>tasklist</tt>, dlatego pomyślałem sobie, że lepiej samemu napisać program do listowania procesów. Głównie chodzi o filtrowanie potrzebnych informacji. Oczywiście można z poziomu poniższego aplikacji zabijać wybrany proces jednak pominąłem to.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">#include&nbsp;&lt;iostream&gt;#include&nbsp;&lt;windows.h&gt;#include&nbsp;&lt;tlhelp32.h&gt;using&nbsp;namespace&nbsp;std;int&nbsp;main(){ &nbsp; &nbsp;HANDLE&nbsp;h&nbsp;=&nbsp;CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,&nbsp;0); &nbsp; &nbsp;PROCESSENTRY32&nbsp;pe&nbsp;=&nbsp;{0}; &nbsp; &nbsp;pe.dwSize&nbsp;=&nbsp;sizeof(PROCESSENTRY32); &nbsp; &nbsp;if(Process32First(h,&nbsp;&amp;pe)) &nbsp; &nbsp;{ &nbsp; &nbsp; &nbsp; &nbsp;do &nbsp; &nbsp; &nbsp; &nbsp;{ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cout&nbsp;&lt;&lt;&nbsp;pe.szExeFile&nbsp;&lt;&lt;&nbsp;"&nbsp;"&nbsp;&lt;&lt;&nbsp;pe.th32ProcessID&nbsp;&lt;&lt;&nbsp;endl; &nbsp; &nbsp; &nbsp; &nbsp;} &nbsp; &nbsp; &nbsp; &nbsp;while(Process32Next(h,&nbsp;&amp;pe)); &nbsp; &nbsp;} &nbsp; &nbsp;CloseHandle(h); &nbsp; &nbsp;system("PAUSE"); &nbsp; &nbsp;return&nbsp;EXIT_SUCCESS;}</span></pre>]]></description></item><item><title>Nachalne instalatory oprogramowania</title><pubdate>Sat, 02 Jul 2011 7:44:32 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/nachalne-instalatory-oprogramowania/</link><comments>http://www.capaciouscore.pl/artykuly/nachalne-instalatory-oprogramowania/#komentarze</comments><description><![CDATA[Dzisiejszy wpis dedykuję autorom oprogramowania, którzy myślą, że użytkownik jest typowym idiotą. Według mnie duża część osób instaluje oprogramowanie schematycznie nie czytając ani licencji ani tego co zostanie za chwile doklejone przy wgrywaniu softu. Mam nadzieje, że zgodzicie się ze mną w tej kwestii. Dokładnie to rozchodzi się o to, że instalując różnego rodzaju aplikacje nierzadko widzimy, że niektóre podaplikacje są domyślnie zaznaczone. Mam na myśli np. toolbary.
<br />

<br />
Moim zdaniem prawidłowym rozwiązaniem jest zapytanie użytkownika czy chce aby zostały zainstalowane również dodatki. Część firm wypuszczających software rozumie ta kwestie i pozostawia wybór, jednak część z nich na sile próbuje wepchnąć jakiś badziew na komputery użytkowników. Chcę zaznaczyć, że na dokonanych zrzutach ekranu nie zostały dokonane żadne manipulacje to znaczy tak jak zastałem kolejna &quot;zakładkę&quot; tak zapisałem.
<br />
<a name="prawidłowo_rozwiazana_sprawa"></a><h2>Prawidłowo rozwiązana sprawa</h2>
Najmniej inwazyjnym rozwiązaniem jest to co prezentuje WinRar. Pomijam te nieszczęsne &quot;WinRar poleca&quot;.
<br />
<img src="http://www.capaciouscore.pl/download/other/instalator-winrara.png" alt="instalator-winrara.png" />
<br />
Takie rozwiązanie zmusza użytkownika do zatrzymania się na chwilkę w manii klikania magicznego przycisku <i>Dalej</i>.
<br />
<a name="wybor_z_sugestia"></a><h2>Wybór z sugestią</h2>
W poniższych przykładach widzimy sugestie wzrokowa oraz objętościową. Część z Was wybiera podświadomie to czego więcej i to co bardziej rzuca się w oczy.
<br />
<img src="http://www.capaciouscore.pl/download/other/instalator-cheat-engine.png" alt="instalator-cheat-engine.png" />
<br />
Nie pytajcie mnie dlaczego instalowałem Winampa ;) Wiem, że zamula i w ogóle jest toporny jednak mam sentyment do niego. Nie zmienia to faktu, że jego poinstalacyjna konfiguracja jest beznadziejnie skonfigurowana.
<br />
<img src="http://www.capaciouscore.pl/download/other/instalator-winampa.png" alt="instalator-winampa.png" />
<br />
Ponadto na podstronie, na której można wybrać wersje do ściągnięcia widnieje checkbox, który domyślnie jest odznaczony jednak z moich obserwacji wynika, że jest on tam dla picu. Rozchodzi się o opcje &quot;Z pakietem MP3 (Rozmiar pliku 22 MB)&quot;. Nie ma znaczenia czy jest zaznaczony czy tez nie. Tak czy tak ściąga instalacje z podprogramem, który jak dobrze pamiętam nazywa się 50 Free MP3 czy jakoś tak. We wcześniejszych wersjach nachalnie instalował się. Tak czy siak jest totalnie bezużyteczna.
<br />
<a name="sztandarowy_przyklad"></a><h2>Sztandarowy przykład</h2>
Poniżej znajduje się kilka zrzutów ekranu, które w opcji domyślnej maja zaznaczone rzeczy, które nie każdego interesują i są kwestia wyboru, opcji, a nie założenia, że ktoś cos potrzebuje bo inni to maja.
<br />
<img src="http://www.capaciouscore.pl/download/other/instalator-foxit-reader.png" alt="instalator-foxit-reader.png" />
<br />
I ukochany IrfanView:
<br />
<img src="http://www.capaciouscore.pl/download/other/instalator-irfanview.png" alt="instalator-irfanview.png" />
<br />
Najbardziej irytującym instalatorem moim zdaniem jest DivX. To co jest pokazane poniżej jest niczym z porównaniu do słyszenia co parę sekund dźwiękiem refreshu strony (kliknięcia). Ma to miejsce w chwili odświeżania obrazków podczas instalacji. Totalny idiotyzm!
<br />
<img src="http://www.capaciouscore.pl/download/other/instalator-divx.png" alt="instalator-divx.png" />
<br />
Najśmieszniejszy jest DAEMON Tools Lite, którego jeden z podprogramów jest uznawany za jakiś zainfekowany syf. Zaleca się nie instalowanie tego podprogramu no ale wiadomo jak to było wcześniej. Docelowo oczywiście był w standardzie zaznaczony.
<br />
<img src="http://www.capaciouscore.pl/download/other/instalator-deamon-tools-lite.png" alt="instalator-deamon-tools-lite.png" />
<br />
<a name="ciekawostka"></a><h2>Ciekawostka</h2>
Pewnie garstka z Was korzystała z bazy danych MSSQL 2005. Jednego się nie spodziewałem po produkcie Microsoftu. Mianowicie instalując silnik bazy danych nie ma problemu z wyznaczeniem ścieżki docelowej natomiast instalując Microsoft SQL Server Management Studio nie mamy takiego wyboru i na sile musimy go wepchnąć do Program Files na partycji, na której zainstalowaliśmy system.
<br />
<img src="http://www.capaciouscore.pl/download/other/instalator-sql-server-management-studio-express-2005.png" alt="instalator-sql-server-management-studio-express-2005.png" />
<br />
<a name="neostrada"></a><h2>Neostrada</h2>
Dawno, dawno temu korzystałem z usług żabojadów. Czy to bezpośrednio przez Neozdradę czy pośrednio korzystając z pewnej firmy sprzedającej dostęp do internetu przez radiówke. Totalna porażka ale kasa na POLPAK szła czyli dla de facto na TP. Dlaczego nie wybrałem czegoś innego? Bo w moim ukochanym małym mieście nie było innego wyboru w tamtych czasach. Pomijając znikoma wiedze konsultantów w biurze TP w Chełmie na ulicy [darujmy sobie wskazywanie palcem pracowników] działało bardzo stabilnie do okresu, w którym kończyła się umowa i ciągle można było usłyszeć od centrali dzwoniąc do nich, że modyfikują strukturę i takie tam. &quot;Jednym słowem&quot; nie możemy nic z tym zrobić. Czyli typowe zachowanie dla korporacji-masowek. Kompletny brak ogłady w wielu kwestiach no ale czemuż to się dziwić. Pamietam, że dostalem w zestawie modem USB ZXDSL 852. Wiekszego crapu nie widziałem w życiu. Połączenie z centrala zazwyczaj zajmowało około 1-2 minut. Rozłączenie na chwile nie stanowiło większego problemu natomiast jak się zrobiło większa przerwę to czas oczekiwania czasami był okropnie dłuższy. Najgorsze były sterowniki do tego crapu. Do sterowników był dołączany program, który był wymagany przy połączeniu. Na jaka cholerę?!? Wyłączałeś okno aplikacji i internet się rozłączał. Ani to schować ani co. Aplikacja zawsze widniała na pasku z innymi aplikacjami. Jeszcze jakby się chowało do tray'a to pól biedy. Tak czy siak długo u mnie nie zabawił. Po tygodniu kupiłem sobie router, który nie sprawiał mi żadnych problemów.
<br />
<a name="niefortunny_instalator"></a><h2>Niefortunny instalator</h2>
Jeżeli dobrze pamiętam to raz instalowałem jakąś stara wersje Medal of Honor i akurat musiałem wyjść to wyłączyłem system i się okazało się po ponownym włączeniu, że za każdym uruchomieniem systemu pojawia się instalator (mimo, że zainstalowałem grę). To jest dopiero geniusz!
<br />
<a name="podsumowanie"></a><h2>Podsumowanie</h2>
Jak dla mnie takie instalacje to &quot;żerowanie&quot; na nieświadomości użytkownika. Drugim aspektem jest fakt, że user klika na pale dalej nie patrząc co się dzieje.
<br />

<br />
PS
<br />
Dodałbym więcej screenshotów jednak szkoda mi transferu na takie bzdury.
<br />

<br />
Na dokładkę polecam artykuł <a href="http://bofh.jogger.pl/2009/08/16/firmy-htore-nie-powinny-pisac-oprogramowania/" target="_blank" class="postlink">Firmy, które nie powinny pisać oprogramowania</a>, który znalazłem przez przypadek szukając pewnych materiałów.]]></description></item><item><title>[PHP] Logowanie do phpBB by Przemo za pomocą cURL</title><pubdate>Tue, 21 Jun 2011 6:08:56 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/logowanie-do-phpbb-by-przemo-za-pomoca-curl-w-php/</link><comments>http://www.capaciouscore.pl/artykuly/logowanie-do-phpbb-by-przemo-za-pomoca-curl-w-php/#komentarze</comments><description><![CDATA[Jakiś czas temu zrobiłem logowanie do phpBB by Przemo. Po pewnym okresie czasu znowu zostałem poproszony, przez kolejnego znajomego, o zrobienie tego samego. Publikuje to banalne rozwiazanie, bo pomyślałem sobie, że komuś może się także przydać.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'address'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'http://adres.do/forum/'</span><span style="color: #007700">;</span><span style="color: #0000BB">$path</span><span style="color: #007700">[</span><span style="color: #DD0000">'cookie'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">dirname</span><span style="color: #007700">(</span><span style="color: #0000BB">__FILE__</span><span style="color: #007700">).</span><span style="color: #DD0000">'/cookies.txt'</span><span style="color: #007700">;</span><span style="color: #0000BB">$post</span><span style="color: #007700">[</span><span style="color: #DD0000">'username'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">;</span><span style="color: #0000BB">$post</span><span style="color: #007700">[</span><span style="color: #DD0000">'password'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">;</span><span style="color: #0000BB">$post</span><span style="color: #007700">[</span><span style="color: #DD0000">'redirect'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;Nie&nbsp;ruszaj</span><span style="color: #0000BB">$post</span><span style="color: #007700">[</span><span style="color: #DD0000">'login'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'Zaloguj'</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;Tego&nbsp;też&nbsp;nie&nbsp;<img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /></span><span style="color: #0000BB">$ch&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">curl_init</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'address'</span><span style="color: #007700">].</span><span style="color: #0000BB"><em><span></span><span style="color: #DD0000">'login.php'</span><span style="color: #0000BB"></span></em></span><span style="color: #007700">);</span><span style="color: #0000BB">curl_setopt</span><span style="color: #007700">(</span><span style="color: #0000BB">$ch</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">CURLOPT_RETURNTRANSFER</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB"><em><span>false</span></em></span><span style="color: #007700">);</span><span style="color: #0000BB">curl_setopt</span><span style="color: #007700">(</span><span style="color: #0000BB">$ch</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">CURLOPT_HEADER</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB"><em><span>true</span></em></span><span style="color: #007700">);</span><span style="color: #0000BB">curl_setopt</span><span style="color: #007700">(</span><span style="color: #0000BB">$ch</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">CURLOPT_COOKIEFILE</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$path</span><span style="color: #007700">[</span><span style="color: #DD0000">'cookie'</span><span style="color: #007700">]);</span><span style="color: #0000BB">curl_setopt</span><span style="color: #007700">(</span><span style="color: #0000BB">$ch</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">CURLOPT_COOKIEJAR</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$path</span><span style="color: #007700">[</span><span style="color: #DD0000">'cookie'</span><span style="color: #007700">]);</span><span style="color: #FF8000">//&nbsp;Ucięto&nbsp;wysyłanie&nbsp;nagłówków&nbsp;(browser,&nbsp;lang,&nbsp;etc.)</span><span style="color: #0000BB">curl_setopt</span><span style="color: #007700">(</span><span style="color: #0000BB">$ch</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">CURLOPT_POSTFIELDS</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">prepare_request</span><span style="color: #007700">(</span><span style="color: #0000BB">$post</span><span style="color: #007700">));</span><span style="color: #0000BB">curl_exec</span><span style="color: #007700">(</span><span style="color: #0000BB">$ch</span><span style="color: #007700">);</span><span style="color: #0000BB">curl_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$ch</span><span style="color: #007700">);</span><span style="color: #FF8000">//&nbsp;Funkcja&nbsp;pomocnicza</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">prepare_request</span><span style="color: #007700">(</span><span style="color: #0000BB">$query</span><span style="color: #007700">){</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">is_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$query</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;!empty(</span><span style="color: #0000BB">$query</span><span style="color: #007700">))&nbsp;</span><span style="color: #FF8000">//&nbsp;Nie&nbsp;zapomnij&nbsp;o&nbsp;isset()&nbsp;rygorystyczny&nbsp;draniu!</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">foreach(</span><span style="color: #0000BB">$query&nbsp;</span><span style="color: #007700">as&nbsp;</span><span style="color: #0000BB">$key&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$value</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $query</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">urlencode</span><span style="color: #007700">(</span><span style="color: #0000BB">$key</span><span style="color: #007700">).</span><span style="color: #DD0000">'='</span><span style="color: #007700">.</span><span style="color: #0000BB">urlencode</span><span style="color: #007700">(</span><span style="color: #0000BB">$value</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">implode</span><span style="color: #007700">(</span><span style="color: #DD0000">'&amp;'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$query</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Ogólnie skrypt jest na tyle banalny, że nie ma, co tłumaczyć. Całą konfigurację macie w kilku pierwszych linijkach. Przy sprawdzaniu odpowiedzi przeanalizujcie, nagłówki, które są zwracane przez serwer w przypadku powodzenia (<tt>HTTP/1.1 302 Found</tt> + <tt>Location</tt> + <tt>Set-Cookie</tt>) bądź niepowodzenia operacji. Gdy doszło już do załogowania to przeglądanie przykładowej strony (np. strony głównej) wygląda następująco:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'address'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'http://adres.do/forum/'</span><span style="color: #007700">;</span><span style="color: #0000BB">$path</span><span style="color: #007700">[</span><span style="color: #DD0000">'cookie'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">dirname</span><span style="color: #007700">(</span><span style="color: #0000BB">__FILE__</span><span style="color: #007700">).</span><span style="color: #DD0000">'/cookies.txt'</span><span style="color: #007700">;</span><span style="color: #0000BB">$ch&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">curl_init</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'address'</span><span style="color: #007700">].</span><span style="color: #0000BB"><em><span></span><span style="color: #DD0000">'index.php'</span><span style="color: #0000BB"></span></em></span><span style="color: #007700">);</span><span style="color: #0000BB">curl_setopt</span><span style="color: #007700">(</span><span style="color: #0000BB">$ch</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">CURLOPT_RETURNTRANSFER</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB"><em><span>false</span></em></span><span style="color: #007700">);</span><span style="color: #0000BB">curl_setopt</span><span style="color: #007700">(</span><span style="color: #0000BB">$ch</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">CURLOPT_HEADER</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">);</span><span style="color: #0000BB">curl_setopt</span><span style="color: #007700">(</span><span style="color: #0000BB">$ch</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">CURLOPT_COOKIEFILE</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$path</span><span style="color: #007700">[</span><span style="color: #DD0000">'cookie'</span><span style="color: #007700">]);</span><span style="color: #0000BB">curl_setopt</span><span style="color: #007700">(</span><span style="color: #0000BB">$ch</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">CURLOPT_COOKIEJAR</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$path</span><span style="color: #007700">[</span><span style="color: #DD0000">'cookie'</span><span style="color: #007700">]);</span><span style="color: #0000BB">curl_exec</span><span style="color: #007700">(</span><span style="color: #0000BB">$ch</span><span style="color: #007700">);</span><span style="color: #0000BB">curl_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$ch</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>]]></description></item><item><title>Take it easy</title><pubdate>Mon, 13 Jun 2011 12:36:33 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/take-it-easy/</link><comments>http://www.capaciouscore.pl/artykuly/take-it-easy/#komentarze</comments><description><![CDATA[Jak zwykle nie wiadomo od czego zacząć. Jeżeli jesteś hejterem to na poczekaniu daj sobie na wstrzymanie. Zacznę od tego, ze życie mam tylko jedno i wykorzystuję je najlepiej jak umiem. Mam nadzieje, ze większość z Was robi to, co chce, a nie to, co ktoś komuś karze. Jeżeli Wam się cos nie podoba to zmieńcie to zamiast płakać, że jest Wam źle i cos się nie podoba. Każdy ma swoje projekty i dąży do ich realizacji. Ponieważ jestem ambitny to tych projektów jest nieco więcej niż u typowego człowieka. Cyklicznie dostaje wiadomości z różnorakimi prośbami. Czasami osoby są mocno irytujące mówiąc, ze jest im cos potrzebne na wczoraj i pytają czy mógłbym im pomoc. Jak będę chciał to pomogę choć szczerze mówiąc nie wiem po co. Internet jest tak wielki, ze każdy znajdzie cos dla siebie w kwestii rozwiązania swoich problemów. Nikomu nie zmuszam do czytania moich dennych wypocin. Ostatnimi czasy ludzie się strasznie spinają zamiast wziąć chwile odpoczynku i dać po prostu na luz. Poziom frustracji u niektórych osobników osiągnął apogeum. Totalne fiku miku na patyku. Jeżeli cos Ci nie wychodzi to zamiast na sile próbować rozwiązać daj sobie dzień przerwy i wróć do problemu nazajutrz. <i>Przepalenie</i> mózgu nikomu nie służy. Wyciskasz 200% normy, ale i szybciej się wypalasz. Im bardziej jesteś osoba wypoczętą tym bardziej jesteś wydajniejszy. Ktoś kiedyś mnie zapytał, dlaczego w ciągu roku nie zapełniłem strony masa połączonych ze sobą literek. Odpowiedz jest banalnie prosta. Pisze się na jakość, a nie na ilość jak niektórzy robią. Byleby napisać, byle by było. Jakby się nad tym głębiej zastanowić to właśnie, dlatego na <a href="http://webkrytyk.pl" target="_blank" class="postlink">WebKrytyku</a> wpisy pojawia się w takiej a nie innej częstotliwości. Wole zrobić cos dokładniej niż potem kilka razy poprawiać. Denerwuje mnie... bardzo wiele rzeczy jednak nie warto się spinać. To samo radze Wam. Dajcie sobie na luz i pooglądajcie dla przykładu <a href="http://www.youtube.com/results?search_query=Remi+Gaillard" target="_blank" class="postlink">Remi'ego Gaillard'a</a>. Taki człowiek przydałby się w naszym czarno-białym kraju żeby trochę nauczyć ludzi dystansu do samych siebie. Ostatecznie pójdzie z dziewczyna/chłopakiem na spacer, do kina, na loda (bez zboczonych myśli .), na wycieczkę czy gdziekolwiek indziej gdzie zapomni się na chwile o swoich problemach. Cokolwiek!
<br />

<br />
Ten wpis możecie potraktować jako wolnostojący spis rad. <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />]]></description></item><item><title>[PHP] Konwerter plików KSC</title><pubdate>Sun, 29 May 2011 5:42:53 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/konwerter-plikow-ksc/</link><comments>http://www.capaciouscore.pl/artykuly/konwerter-plikow-ksc/#komentarze</comments><description><![CDATA[Jeżeli nie masz nic wspólnego z grą Knight Online (MMORPG) i/lub nie lubisz ciekawostek to możesz sobie darować czytanie tego wpisu. Na początku wyjaśnię czym jest format KSC. Owe rozszerzenie jest zakodowaną formą screenshota z gry. O ile się nie mylę, to jest on wykorzystywany w grach produkowanych przez korporacje MGame. Zasada działania tworzenia takiego ss'a jest banalnie prosta. Klikamy <tt>-</tt> czyli minus na klawiaturze numerycznej i w katalogu gdzie została uruchomiona gra pojawia się zrzut ekranu, który w nazwie ma datę i czas wykonania. W momencie wykonania screen capture klient gry pobiera aktualny obraz, dokonuje konwersji i zapisuje tam gdzie trzeba.
<br />

<br />
Jakiś czas temu wpadłem na pomysł, aby wszystkie swoje zrzuty ekranu z gry zapisać w formacie JPEG. Przed wykonaniem skryptu i programu, który zaprezentuje Wam poniżej nie wiedziałem, że z rąk deweloperów gry wyszedł nowszy KscViewer z funkcją zapisywania więcej niż jednego pliku KSC do postaci zwykłego obrazka. Dopiero po napisaniu aplikacji konwertera pewien znajomy z Egiptu uświadomił mnie, że takowy KscViewer został udostępniony. Kluczową sprawą tego formatu był fakt, że zrzut ekranu z rozszerzeniem KSC był wolny od manipulacji. No właśnie był wolny od manipulacji do czasu, kiedy K2Network zaczęło otrzymywać fake KSC. Od tego czasu korporacja przestała wymagać owych plików. Kolejne utrudnienie dla graczy, bo <abbr title="Game Master">GM</abbr> musiał od teraz złapać oszusta na gorącym uczynku. Nie było to takie łatwe, bo większość botów do tej gry automatycznie wylogowuje czitera, gdy ktoś z <i>wyższą rangą</i> wchodził na serwer. Z resztą nad polityką K2Network czy tam G1 jak to się teraz zwie nie będę się długo rozwodził, bo każdy, kto grał w tą grę wie jak traktuje się zwykłego gracza.
<br />

<br />
Na początku zaprezentuję Wam aplikacje, która została napisana w VC++ i posiada w sobie tylko implementacje metody konwersji plików KSC na JPEG. Program nazywa się <a href="http://www.capaciouscore.pl/download/other/KSC-Converter.exe" target="_blank" class="postlink">KSC-Converter</a> (<a href="http://www.virustotal.com/file-scan/report.html?id=62fb4acd6e8f44fe02726f92595259a7d6018a148eda4db805af9c496b5f744c-1306676815" target="_blank" class="postlink">skan</a>) i przyjmuje tylko jeden parametr (ścieżkę do pliku KSC). Przykładowo można go odpalić z konsoli DOS'owej albo z samego Uruchom.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">C:\ścieżka\do\konwertera\KSC-Converter.exe&nbsp;"C:\ścieżka\do\pliku\KSC\losowy.ksc"</span></pre>
Wynikiem działania tego programu będzie plik losowy.JPEG, który pojawi się w folderze, w którym znajdował się plik KSC. Mogłem dać dwa parametry do programu (input i input) jednak nie chciało mi się. Nikt mi za to nie płaci i nie ma, co się użalać nad rozlanym mlekiem. Gdybyście chcieli przekonwertować cały folder to wsadzacie w niego <b>KSC-Converter.exe</b> i tworzycie plik BAT o następującej zawartości:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">@echo&nbsp;offFOR&nbsp;%%i&nbsp;IN&nbsp;(*.ksc)&nbsp;DO&nbsp;KSC-Converter.exe&nbsp;"%%i"</span></pre>
Po jego zapisaniu odpalamy go i jeżeli nic nie popsuliście to w wyniku działania aplikacji w tym samym folderze, co pliki KSC powinny się pojawić pliki JPEG. Przy okazji powiem ciekawostkę. DOS nie akceptuje <tt>-</tt> albo <tt>_</tt> w nazwie programu. Bardziej to drugie. Jeżeli będziecie chcieli to możecie samemu sprawdzić. Myślę, że taka forma jest łatwiejsza niż zaznaczanie dużej ilości plików KSC z okna KscViewer'a.
<br />

<br />
W ramach uzupełnienia stworzyłem wersje PHP tego cuda. Tym razem istnieje także metoda zapisu do formatu KSC. Nie ma, co się rozwodzić nad metodami i polami klasy, bo osoba, która choć trochę zna PHP i OOP będzie wiedzieć, co jest grane. Pod koniec chce tylko zauważyć, że <tt>m_r</tt> musi być &quot;zerowane&quot; do wartości <tt>0x464</tt> za każdym razem przed konwersją do JPEG czy KSC. Jeżeli chcecie zrobić tak samo jak z <tt>FOR</tt> w DOS'ie to wystarczy, że użyjecie funkcji <tt>glob()</tt> i przekażecie parametr do odpowiedniej metody, a następnie odpowiednio zmienicie ścieżkę.
<br />

<br />
Wywołanie metod z klasy wygląda następująco:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">include(</span><span style="color: #DD0000">'./ksc.class.php'</span><span style="color: #007700">);</span><span style="color: #0000BB">$ksc&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">ksc</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;KSC&nbsp;to&nbsp;JPG</span><span style="color: #0000BB">$ksc&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">open</span><span style="color: #007700">(</span><span style="color: #DD0000">'./data/a.ksc'</span><span style="color: #007700">);</span><span style="color: #0000BB">$ksc&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">decrypt_ksc</span><span style="color: #007700">();</span><span style="color: #0000BB">$ksc&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">save</span><span style="color: #007700">(</span><span style="color: #DD0000">'./data/a.jpg'</span><span style="color: #007700">);</span><span style="color: #FF8000">//&nbsp;JPG&nbsp;to&nbsp;KSC</span><span style="color: #0000BB">$ksc&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">open</span><span style="color: #007700">(</span><span style="color: #DD0000">'./data/b.jpg'</span><span style="color: #007700">);</span><span style="color: #0000BB">$ksc&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">encrypt_jpg</span><span style="color: #007700">();</span><span style="color: #0000BB">$ksc&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">save</span><span style="color: #007700">(</span><span style="color: #DD0000">'./data/b.ksc'</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Tak wygląda <b>ksc.class.php</b>:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">/** *&nbsp;@author&nbsp;CapaciousCore *&nbsp;@version&nbsp;1.0 */</span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">ksc</span><span style="color: #007700">{</span><span style="color: #0000BB"> private&nbsp;$m_r&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0x464</span><span style="color: #007700">;</span><span style="color: #0000BB"> private&nbsp;$m_c1&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0xCE6D</span><span style="color: #007700">;</span><span style="color: #0000BB"> private&nbsp;$m_c2&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0x58BF</span><span style="color: #007700">;</span><span style="color: #0000BB"> private&nbsp;$data</span><span style="color: #007700">;</span><span style="color: #0000BB"> public&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">open</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$data&nbsp;</span><span style="color: #007700">=&nbsp;@</span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;$length&nbsp;</span><span style="color: #007700">=&nbsp;@</span><span style="color: #0000BB">filesize</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$data&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$length</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; <em><span>$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">m_r&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0x464</span><span style="color: #007700">;</span><span style="color: #0000BB"></span></em> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">data</span><span style="color: #007700">[</span><span style="color: #DD0000">'input'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$data</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">data</span><span style="color: #007700">[</span><span style="color: #DD0000">'length'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$length</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; return&nbsp;true</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">else</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; return&nbsp;false</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> public&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">save</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$result&nbsp;</span><span style="color: #007700">=&nbsp;(@</span><span style="color: #0000BB">file_put_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">data</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">])&nbsp;?&nbsp;</span><span style="color: #0000BB">true&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">unset(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">data</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">$result</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> public&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">decrypt_ksc</span><span style="color: #007700">()</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$destination_length&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">data</span><span style="color: #007700">[</span><span style="color: #DD0000">'length'</span><span style="color: #007700">]&nbsp;-&nbsp;</span><span style="color: #0000BB">8</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">8</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">decrypt</span><span style="color: #007700">(</span><span style="color: #0000BB">ord</span><span style="color: #007700">(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">data</span><span style="color: #007700">[</span><span style="color: #DD0000">'input'</span><span style="color: #007700">][</span><span style="color: #0000BB">$h</span><span style="color: #007700">]));</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">8</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$destination_length</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">data</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">][]&nbsp;=&nbsp;</span><span style="color: #0000BB">chr</span><span style="color: #007700">(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">decrypt</span><span style="color: #007700">(</span><span style="color: #0000BB">ord</span><span style="color: #007700">(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">data</span><span style="color: #007700">[</span><span style="color: #DD0000">'input'</span><span style="color: #007700">][</span><span style="color: #0000BB">$h</span><span style="color: #007700">])));</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> public&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">encrypt_jpg</span><span style="color: #007700">()</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$destination_length&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">data</span><span style="color: #007700">[</span><span style="color: #DD0000">'length'</span><span style="color: #007700">]&nbsp;+&nbsp;</span><span style="color: #0000BB">8</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;If&nbsp;PHP&nbsp;&lt;&nbsp;4.2.0&nbsp;then&nbsp;use&nbsp;srand(floor(time()&nbsp;/&nbsp;(60*60*24)))&nbsp;or&nbsp;mt_srand(/*&nbsp;whatever&nbsp;you&nbsp;want&nbsp;*/)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">4</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $header</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">rand</span><span style="color: #007700">()&nbsp;&amp;&nbsp;</span><span style="color: #0000BB">0xFF</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;$header</span><span style="color: #007700">[</span><span style="color: #0000BB">4</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">0x4B</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;$header</span><span style="color: #007700">[</span><span style="color: #0000BB">5</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">0x53</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;$header</span><span style="color: #007700">[</span><span style="color: #0000BB">6</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">0x43</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;$header</span><span style="color: #007700">[</span><span style="color: #0000BB">7</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;$header&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">array_map</span><span style="color: #007700">(</span><span style="color: #DD0000">'chr'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$header</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">8</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">data</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">][</span><span style="color: #0000BB">$h</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">chr</span><span style="color: #007700">(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">encrypt</span><span style="color: #007700">(</span><span style="color: #0000BB">ord</span><span style="color: #007700">(</span><span style="color: #0000BB">$header</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">])));</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$destination_length</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">data</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">][]&nbsp;=&nbsp;</span><span style="color: #0000BB">chr</span><span style="color: #007700">(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">encrypt</span><span style="color: #007700">(</span><span style="color: #0000BB">ord</span><span style="color: #007700">(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">data</span><span style="color: #007700">[</span><span style="color: #DD0000">'input'</span><span style="color: #007700">][</span><span style="color: #0000BB">$h</span><span style="color: #007700">])));</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> private&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">decrypt</span><span style="color: #007700">(</span><span style="color: #0000BB">$cipher</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$plain&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">$cipher&nbsp;</span><span style="color: #007700">^&nbsp;(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">m_r&nbsp;</span><span style="color: #007700">&gt;&gt;&nbsp;</span><span style="color: #0000BB">8</span><span style="color: #007700">));</span><span style="color: #0000BB"> &nbsp;$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">m_r&nbsp;</span><span style="color: #007700">=&nbsp;((</span><span style="color: #0000BB">$cipher&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">m_r</span><span style="color: #007700">)&nbsp;*&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">m_c1&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">m_c2</span><span style="color: #007700">)&nbsp;&amp;&nbsp;</span><span style="color: #0000BB">0xFFFF</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">$plain</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> private&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">encrypt</span><span style="color: #007700">(</span><span style="color: #0000BB">$plain</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$cipher&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">$plain&nbsp;</span><span style="color: #007700">^&nbsp;(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">m_r&nbsp;</span><span style="color: #007700">&gt;&gt;&nbsp;</span><span style="color: #0000BB">8</span><span style="color: #007700">));</span><span style="color: #0000BB"> &nbsp;$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">m_r&nbsp;</span><span style="color: #007700">=&nbsp;((</span><span style="color: #0000BB">$cipher&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">m_r</span><span style="color: #007700">)&nbsp;*&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">m_c1&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">m_c2</span><span style="color: #007700">)&nbsp;&amp;&nbsp;</span><span style="color: #0000BB">0xFFFF</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">$cipher</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Przykładem zmodyfikowanego formatu KSC jest plik <a href="http://www.capaciouscore.pl/download/other/fake.ksc" target="_blank" class="postlink">fake.ksc</a>.
<br />

<br />
Cały gotowy example można ściągnąć stad <a href="http://www.capaciouscore.pl/download/other/ksc.source.rar" target="_blank" class="postlink">ksc.source.rar</a>.
<br />
<a name="kscviewer-rozne-aplikacje"></a><h2>KscViewer - rożne aplikacje</h2>
<ul class="list">
<li><a href="http://www.capaciouscore.pl/download/other/KscViewer.exe" target="_blank" class="postlink">Nowszy KscViewer.exe</a> (<a href="http://www.virustotal.com/file-scan/reanalysis.html?id=e5e7c158a51c75c1adb6afc9714e8a8e11f4f14db869fc6050dc98767c05a36c-1306679862" target="_blank" class="postlink">skan</a> fałszywie pozytywny) z możliwością konwersji wielu plików KSC na raz</li>
<li><a href="http://www.capaciouscore.pl/download/other/older-KscViewer.exe" target="_blank" class="postlink">Starszy KscViewer.exe</a> (o dziwo <a href="http://www.virustotal.com/file-scan/report.html?id=eac4454531108401de4fb4a716db6fe69bca5035740819d265a2085dcfa333ca-1306680455" target="_blank" class="postlink">skan</a> czysty) bez możliwości konwersji wielu plików KSC na raz</li>
<li><a href="http://www.capaciouscore.pl/download/other/KscViewer_Debug.exe" target="_blank" class="postlink">Wersja Debug KscViewer.exe</a> (czysty <a href="http://www.virustotal.com/file-scan/reanalysis.html?id=cdbb129c9dda8122cf05de93cee73bddc7db2133b3ce20aefa7dcd690ef85ca2-1306680980" target="_blank" class="postlink">skan</a>) bez możliwości konwersji wielu plików KSC na raz ponieważ jest to aplikacja skompilowana z bardzo starych źródeł (zwróć uwagę na wielkość binarki - ile bajerów jest dodawanych do wersji debug)</li>
</ul>]]></description></item><item><title>Dzień bez prezerwatywy</title><pubdate>Sun, 29 May 2011 2:53:17 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/dzien-bez-prezerwatywy/</link><comments>http://www.capaciouscore.pl/artykuly/dzien-bez-prezerwatywy/#komentarze</comments><description><![CDATA[Wczoraj będąc na wyjeździe ze swoim skarbem coś mnie naszło, aby posłuchać radia. Ponownie doznałem oświecenia, gdy usłyszałem, że 28 maja jest dniem bez gumki. Głupszej rzeczy w swoim życiu nie słyszałem. Ktoś miał jakieś chore urojenia i ustanowił taki dzień? Głupota ludzka nie zna granic. Kogo to właściwie obchodzi? Ciekawe czy jakby był dzień bez oddychania to jakiś człek na świecie wziąłby to na serio? Reasumujac, jeżeli parka chce się pobawić w &quot;dzień bez prezerwatywy&quot;, to pomiziają się bez zabezpieczenia, jeżeli nie uznają innych form antykoncepcji albo będą jeden dzień pościć? Parodia na całego... Jak dla mnie jeszcze większym skandalem było zachowanie reportera, który zaczepiał przechodniów i nagabywał ich do zdradzenia niektórych tajemnic łóżkowych. Przykładowo dziennikarz chciał, aby przypadkowe kobitki pokazały jak się zakłada lateksa na jakieś warzywo, czy tam owoc. Pamiętam, że na odczepnego jedna powiedziała, że &quot;mąż zajmuje się takimi sprawami&quot;. Ciekawe czy jakby był dzień bez debili, to czy świat stałby się na jeden dzień normalniejszy?]]></description></item><item><title>[Rozwiązany] Traffic Giant - czarny ekran po włączeniu i zbyt szybko przewijająca się mapa</title><pubdate>Sun, 29 May 2011 1:51:00 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/traffic-giant-czarny-ekran-po-wlaczeniu-i-zbyt-szybko-przewijajaca-sie-mapa/</link><comments>http://www.capaciouscore.pl/artykuly/traffic-giant-czarny-ekran-po-wlaczeniu-i-zbyt-szybko-przewijajaca-sie-mapa/#komentarze</comments><description><![CDATA[Ostatnio coś mnie naszło, aby pograć sobie w starą klasyczną grę. Ponieważ lubię gry ekonomiczne, to padł wybór na Traffic Giant. Po chwili szukania znalazłem zakurzoną płytkę i zainstalowałem aplikacje. Odpalam i pojawił się pierwszy zonk. Wszędzie czarny ekran, jak wzrokiem sięgnąć. Zacząłem szukać rozwiązania na oficjalnym forum producenta softu. Niestety bardzo się rozczarowałem. Jedyne, co zalecają to zainstalowanie odpowiednich sterowników graficznych, najnowszego patcha oznaczonego cyferka 1.4 (niestety nie ma polskiej wersji) oraz <i>Video card patch</i>, który de facto nic nie daje. Aby rozwiązać problem czarnego ekranu wystarczy wejść do ustawień DirectX i wyłączyć &quot;przyspieszenie&quot;. Klikamy przycisk Startu, następnie Uruchom, potem wklepujemy <b>dxdiag</b>, klikamy OK, przechodzimy do zakładki Ekran i wyłączamy przyspieszenie. Od tego momentu wszystko powinno grać. Drugim zauważalnym problemem może być przewijanie mapy, gdy mamy dość szybki komputer. Obejściem tego problemu jest po prostu używanie prawego przycisku myszy, aby wolniej przewijać mapę. Innym (niepolecanym) sposobem jest spowolnienie gry np. przy użyciu BES. Więcej informacji znajdziecie w artykule pod tytułem <a href="http://www.capaciouscore.pl/artykuly/ograniczenie-uzycia-procesora-przez-konkretny-proces/" target="_blank" class="postlink">Ograniczenie użycia procesora przez konkretny proces</a>.
<br />

<br />
Swoją drogą gra jest źle napisana, bo jak sobie zagramy na dużym mieście z 3 konkurentami to przy dużej ilości linii, jakie zostaną stworzone, gra może trochę &quot;lagować&quot;, jeżeli oddalimy widok mapy.
<br />

<br />
Dla osób lubiących oszukiwać w grach i pytających jak nie wpisywać bez przerwy kodu na pieniądze polecam <a href="http://www.cheatengine.org/" target="_blank" class="postlink">Cheat Engine</a>, aby edytować stan konta w pamięci programu.]]></description></item><item><title>[PHP] Logger, czyli klasa do zapisywania niefortunnych zdarzeń</title><pubdate>Sat, 07 May 2011 2:42:54 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/logger-w-php-czyli-klasa-do-zapisywania-niefortunnych-zdarzen/</link><comments>http://www.capaciouscore.pl/artykuly/logger-w-php-czyli-klasa-do-zapisywania-niefortunnych-zdarzen/#komentarze</comments><description><![CDATA[W ostatnim komentarzu obiecałem, że napisze o loggerze i tak się stało. Dawno temu poszukiwałem rozwiązań godnych użycia jednak na takie się nie natknąłem. Wczoraj ponownie rozglądałem się w internecie pod tym kątem i znowu nic ciekawego nie znalazłem. Te poszukiwania nie wzięły się z niczego. Kiedy zacząłem pracować nad nowym silnikiem swojej strony jedną z pierwszych rzeczy których potrzebowałem był właśnie moduł loggera. O ile dobrze pamiętam to mój logger miał trzy lub cztery wcielania, wliczając w to te ostatnie, które zaprezentuje Wam poniżej. Niestety wcześniejsze wersje miały pewne ograniczenia. Pierwszy z nich mógł logować ID błędu, czas wystąpienia problemu, IP, browser. Jedynym mankamentem było to, że nie można było zapisywać tablic bądź obiektów. Dla przykładu, gdy przydarzyło się coś naprawdę ciekawego i chciałem zapisać np. tablice <tt>$_GET</tt> lub <tt>$_POST</tt> to fizycznie nie miałem takiej możliwości. W drugiej wersji loggera można było już zapisywać tablice i obiekty, jednak wystąpił inny problem. Format logów był tak skonstruowany, że napastnik znający znak rozdzielający logi mógł je zakrzaczyć. Zakrzaczyć to znaczy utrudnić ich odczytanie. Oczywiście tym znakiem nie był typowy <tt>\n</tt>, lecz zmyślnie wyrafinowany krzaczek z tablicy UTF-8 o ile dobrze pamiętam. Po jakimś czasie doszedłem do wniosku, że trzeba unormować zapis logów i zoptymalizować kod. Wczoraj ten cel został zrealizowany. Zanim przejdę do właściwego miejsca (podania kodu), to powinienem go troszeczkę opisać. Klasa logger składa się z następujących elementów:
<br />
<b>Pola:</b>
<br />
<ul class="list">
<li><tt>$config</tt> - pole jak sugeruje nazwa zawierające konfiguracje</li>
<li><tt>$log</tt> - pole zawierające logi</li>
<li><tt>$dumped</tt> - pole zawierające informację, mówiącą o tym czy doszło do zrzut logów</li>
<li><tt>$critical_error</tt> - pole zawierające informację, czy któraś z dodanych wiadomości była błędem krytycznym (<tt>$level</tt> &gt; 2)</li>
</ul>
<b>Metody:</b>
<br />
<ul class="list">
<li><tt>logger()</tt> - konstruktor pobierający jeden argument (<tt>$config</tt>)</li>
<li><tt>add_event()</tt> - metoda dodająca zdarzenie do listy logów</li>
<li><tt>is_critical_error()</tt> - metoda zwracająca informacje czy wystąpił błąd krytyczny</li>
<li><tt>dump()</tt> - metoda &quot;zrzucająca&quot; logi do pliku</li>
</ul>
W największym skrócie właśnie tak to wygląda. Teraz trochę więcej szczegółów. Konstruktor pobiera jeden parametr będący tablicą. Obiekt ten może przybrać następujące wartości:
<br />
<ul class="list">
<li><tt>$config['dir']</tt> - zawiera ścieżkę do folderu z logami</li>
<li><tt>$config['extension_file']</tt> - zawiera rozszerzenie pliku z logami</li>
<li><tt>$config['format_file']</tt> - zawiera format pliku logu, czyli ta wartość zostanie przepuszczona przez funkcje <tt>date()</tt> i dodane zostanie rozszerzenie, co w rezultacie da nam finalną nazwę pliku</li>
<li><tt>$config['format_time']</tt> - zmienna zawierająca informacje, w jakim formacie ma być przechowywana data ramki zdarzenia. Jeżeli nie zostanie zdeklarowana to czas zdarzenia będzie pochodził z funkcji <tt>time()</tt>.</li>
<li><tt>$config['ip2long']</tt> - jeżeli wartością tej zmiennej jest <tt>true</tt> i nie zdefiniowano <tt>$config['ip']</tt> to IP osoby, która uruchomiła dodanie zdarzenia będzie przepuszczone przez funkcje <tt>ip2long()</tt> natomiast w innym przypadku zostanie wrzucone po prostu <tt>$_SERVER['REMOTE_ADDR']</tt> bądź <tt>$config['ip']</tt>, jeżeli została zadeklarowana. Tą zmienną można zignorować przy deklaracji konfiguracji, jeżeli podajemy <tt>$config['ip']</tt>.</li>
<li><tt>$config['ip']</tt> - zmienna nie wymagająca deklaracji zawierająca IP odwiedzającego. W związku z tym, że IP odwiedzającego pobieram metodą <tt>get_ip()</tt> będącą elementem klasy silnika mojego nowego CMS'u to zwracana wartość po prostu przekazuje do poszczególnych modułów, jeżeli wymaga tego sytuacja. Głownie chodzi o to, aby nie powtarzać fragmentów kodu i o to, aby poszczególne klasy (moduły) były uniwersalne.</li>
</ul>
Najważniejszą metodą w całej klasie jest <tt>add_event()</tt>. To właśnie ona dodaje zdarzenie do ramki. Parametr <tt>$error_id</tt> odpowiada za kod błędu. Oczywiście musicie sobie wypracować jakąś tabelkę mówiącą, co dany ID oznacza. Dla przykładu <tt>1</tt> może oznaczać problem z połączeniem do bazy danych, <tt>2</tt> może oznaczać problem z wykonaniem zapytania, itd. Zmienna <tt>$level</tt> oznacza poziom błędu. Moja skala składa się z trzech elementów. Poziom pierwszy to błędy niskiego poziomu, bez których aplikacja może jeszcze funkcjonować. Poziom drugi oznacza błąd średniego szczebla, który jest już poważniejszy. Trzeci poziom błędu jest nazywany przeze mnie krytycznym. Jeżeli wystąpi taka sytuacja to kontynuacja wykonywania skryptu mija się z celem. Kolejną zmienną jest <tt>$file</tt> i powinna zawierać wartość stałej <tt>__FILE__</tt>. Następną zmienną jest <tt>$line</tt> i analogicznie jak do poprzedniej sytuacji jej zawartością powinna być stała <tt>__LINE__</tt>. Ostatnie dwie zmienne nie są wymagane i mogą służyć pomocą w celu ustalenia usterki. Dla przykładu do <tt>$extra_information</tt> możemy wrzucić wybrane przez nas tablice superglobalne takie jak <tt>$_POST</tt>, <tt>$_GET</tt>, <tt>$_COOKIE</tt>, <tt>$_SESSION</tt> i inne potrzebne informacje. Ostatnią zmienną jest <tt>$debug_backtrace</tt>, która zawiera wartość zwracaną przez funkcje <tt>debug_backtrace()</tt>, jeżeli jest taka konieczność.
<br />

<br />
Jak już wcześniej powiedziałem albo i nie ramka, to nic innego jak jeden przebieg skryptu. W ramce może znajdować się jedno lub więcej zdarzeń (eventów). Skonstruowałem taki a nie inny format &quot;bazy danych&#8221;, aby łatwiej było potem przeglądać dane. Wcześniejsza wersja loggera zapisywała zdarzenia do odpowiedniego pliku bądź plików na podstawie daty z loga bez uwzględnienia przebiegu skryptu. W efekcie tego trzeba było się domyślać czy ten błąd wystąpił po innym czy też to był osobny przypadek. <strike>Pamiętajcie, że <u>plik logu z konkretnego dnia nie może być pusty</u>. Jest to związane z miksowaniem danych. Konkretnie chodzi o to, że jeżeli spróbujemy wykonać operacje łączenia tablic, kiedy jedna z nich będzie pusta to w wyniku tego przedsięwzięcia otrzymamy stosowną informacje w postaci <i>błędu</i>.</strike> Przypadek ten został rozwiązany za pomocą zastosowania funkcji <tt>filesize()</tt>. Kolejną sprawą jest <i>dumpowanie</i>. Tą operacje można wykonać tylko raz przy obecnym stanie rzeczy. Chwile rozmyślałem nad tym, aby dodać ekstra pętle w przypadku, kiedy nastąpi niepowodzenie przy ładowaniu bądź zapisywaniu logu jednak zrezygnowałem z takiego rozwiązania. Jeżeli będziecie chcieli coś takiego dodać, to zmienną <tt>$path</tt> trzeba będzie wpakować do jakiegoś pola w klasie, wkleić pętle na kilka okrążeń (np. 3) i pod koniec skoku dodać jakiegoś małego <i>sleepa</i> jeżeli operacja nadal nie powiodła się natomiast jeżeli się powiodła to wyłamanie ze struktur przy pomocy <tt>break</tt> i tyle w tym temacie. Ponadto nie loguje takich pierdół jak ekstra dodatek do czasu, pochodzący z <tt>microtime,()</tt> bo i po co? Chyba nikomu nie przydadzą się takie informacje, w której milisekundzie dany kod popełnił faux pas. Inną kwestią jest, że takie pierdoły przydają się w klasach służących do testów jednostkowych i... 
<br />

<br />
Jeżeli chodzi o format zapisywania logów to jest on stosunkowo prosty. Każda następna ramka to po prostu kolejny ID z układanki. Czyli de facto coś jak <tt>auto_increment</tt> w bazach danych. Najnowsze wiadomości z danego dnia mają najwyższe ID w tablicy. Oczywiście można sobie to posortować w drugą stronę. Co kto lubi, serio. Wartościami uniwersalnymi dla każdej ramki są IP wywołującego zdarzenie, identyfikacja jego browsera oraz czas popełnienia zbrodni. Każde zdarzenie jest zapisywanie w tablicy i kluczem do tej tablicy jest ID. Czyli jeżeli zdarzeń jest kilka, to będą występowały na takiej samej zasadzie, jaka została opisana powyżej. Ażeby Wam to zobrazować możliwie klarownie proponuje przeanalizowanie poniższego listingu:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">Array( &nbsp; &nbsp;[0]&nbsp;=&gt;&nbsp;Array &nbsp; &nbsp; &nbsp; &nbsp;( &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[time]&nbsp;=&gt;&nbsp;2011-05-05&nbsp;019:46 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[ip]&nbsp;=&gt;&nbsp;127.0.0.1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[browser]&nbsp;=&gt;&nbsp;Opera/9.80&nbsp;(Windows&nbsp;NT&nbsp;5.1;&nbsp;U;&nbsp;pl)&nbsp;Presto/2.8.131&nbsp;Version/11.10 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[0]&nbsp;=&gt;&nbsp;Array &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;( &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[id]&nbsp;=&gt;&nbsp;1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[level]&nbsp;=&gt;&nbsp;2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[file]&nbsp;=&gt;&nbsp;D:\xampp\htdocs\test\index.php &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[line]&nbsp;=&gt;&nbsp;4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[extra_information]&nbsp;=&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[debug_backtrace]&nbsp;=&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;) &nbsp; &nbsp; &nbsp; &nbsp;) &nbsp; &nbsp;[1]&nbsp;=&gt;&nbsp;Array &nbsp; &nbsp; &nbsp; &nbsp;( &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[time]&nbsp;=&gt;&nbsp;2011-05-05&nbsp;01:10:13 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[ip]&nbsp;=&gt;&nbsp;127.0.0.1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[browser]&nbsp;=&gt;&nbsp;Opera/9.80&nbsp;(Windows&nbsp;NT&nbsp;5.1;&nbsp;U;&nbsp;pl)&nbsp;Presto/2.8.131&nbsp;Version/11.10 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[0]&nbsp;=&gt;&nbsp;Array &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;( &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[id]&nbsp;=&gt;&nbsp;1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[level]&nbsp;=&gt;&nbsp;2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[file]&nbsp;=&gt;&nbsp;D:\xampp\htdocs\test\index.php &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[line]&nbsp;=&gt;&nbsp;4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[extra_information]&nbsp;=&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[debug_backtrace]&nbsp;=&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[1]&nbsp;=&gt;&nbsp;Array &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;( &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[id]&nbsp;=&gt;&nbsp;2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[level]&nbsp;=&gt;&nbsp;2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[file]&nbsp;=&gt;&nbsp;D:\xampp\htdocs\test\index.php &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[line]&nbsp;=&gt;&nbsp;5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[extra_information]&nbsp;=&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[debug_backtrace]&nbsp;=&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;) &nbsp; &nbsp; &nbsp; &nbsp;) &nbsp; &nbsp;[2]&nbsp;=&gt;&nbsp;Array &nbsp; &nbsp; &nbsp; &nbsp;( &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[time]&nbsp;=&gt;&nbsp;2011-05-05&nbsp;01:11:20 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[ip]&nbsp;=&gt;&nbsp;127.0.0.1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[browser]&nbsp;=&gt;&nbsp;Opera/9.80&nbsp;(Windows&nbsp;NT&nbsp;5.1;&nbsp;U;&nbsp;pl)&nbsp;Presto/2.8.131&nbsp;Version/11.10 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[0]&nbsp;=&gt;&nbsp;Array &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;( &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[id]&nbsp;=&gt;&nbsp;1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[level]&nbsp;=&gt;&nbsp;2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[file]&nbsp;=&gt;&nbsp;D:\xampp\htdocs\test\index.php &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[line]&nbsp;=&gt;&nbsp;4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[extra_information]&nbsp;=&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[debug_backtrace]&nbsp;=&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;) &nbsp; &nbsp; &nbsp; &nbsp;))</span></pre>
Najprostszą formą użycia tego loggera jest format:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;Load&nbsp;the&nbsp;necessary&nbsp;things</span><span style="color: #007700">include(</span><span style="color: #DD0000">'./logger.class.php'</span><span style="color: #007700">);</span><span style="color: #0000BB">$logger&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">logger</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;Add&nbsp;an&nbsp;event</span><span style="color: #0000BB">$logger&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">add_event</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">__FILE__</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">__LINE__</span><span style="color: #007700">);</span><span style="color: #FF8000">//&nbsp;Save&nbsp;logs&nbsp;if&nbsp;they&nbsp;exist</span><span style="color: #0000BB">$logger&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">dump</span><span style="color: #007700">();</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
I teraz najbardziej oczekiwany fragment kodu, czyli sam rdzeń aplikacji:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">/** *&nbsp;@author&nbsp;CapaciousCore *&nbsp;@version&nbsp;1.00.00 */</span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">logger</span><span style="color: #007700">{</span><span style="color: #0000BB"> private&nbsp;$config</span><span style="color: #007700">;</span><span style="color: #0000BB"> private&nbsp;$log</span><span style="color: #007700">;</span><span style="color: #0000BB"> private&nbsp;$dumped</span><span style="color: #007700">;</span><span style="color: #0000BB"> private&nbsp;$critical_error</span><span style="color: #007700">;</span><span style="color: #0000BB"> public&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">logger</span><span style="color: #007700">(</span><span style="color: #0000BB">$config&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(!</span><span style="color: #0000BB">$config</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">config</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'./logs/'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">config</span><span style="color: #007700">[</span><span style="color: #DD0000">'extension_file'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'.log'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">config</span><span style="color: #007700">[</span><span style="color: #DD0000">'format_file'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'Y-m-d'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">config</span><span style="color: #007700">[</span><span style="color: #DD0000">'format_time'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'Y-m-d&nbsp;H:i:s'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">config</span><span style="color: #007700">[</span><span style="color: #DD0000">'ip2long'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">else</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">config&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">critical_error&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">dumped&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> public&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">add_event</span><span style="color: #007700">(</span><span style="color: #0000BB">$error_id</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$level</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$file</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$line</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$extra_information&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$debug_backtrace&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(!</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">dumped</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; if</span><span style="color: #007700">(!</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">log</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">log</span><span style="color: #007700">[]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'file_name'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">date</span><span style="color: #007700">(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">config</span><span style="color: #007700">[</span><span style="color: #DD0000">'format_file'</span><span style="color: #007700">]),&nbsp;</span><span style="color: #DD0000">'time'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">config</span><span style="color: #007700">[</span><span style="color: #DD0000">'format_time'</span><span style="color: #007700">]&nbsp;?&nbsp;</span><span style="color: #0000BB">date</span><span style="color: #007700">(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">config</span><span style="color: #007700">[</span><span style="color: #DD0000">'format_time'</span><span style="color: #007700">])&nbsp;:&nbsp;</span><span style="color: #0000BB">time</span><span style="color: #007700">()),&nbsp;</span><span style="color: #DD0000">'ip'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">config</span><span style="color: #007700">[</span><span style="color: #DD0000">'ip'</span><span style="color: #007700">]&nbsp;?&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">config</span><span style="color: #007700">[</span><span style="color: #DD0000">'ip'</span><span style="color: #007700">]&nbsp;:&nbsp;(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">config</span><span style="color: #007700">[</span><span style="color: #DD0000">'ip2long'</span><span style="color: #007700">]&nbsp;?&nbsp;</span><span style="color: #0000BB">ip2long</span><span style="color: #007700">(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'REMOTE_ADDR'</span><span style="color: #007700">])&nbsp;:&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'REMOTE_ADDR'</span><span style="color: #007700">])),&nbsp;</span><span style="color: #DD0000">'browser'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_USER_AGENT'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">log</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">][]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'id'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$error_id</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'level'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$level</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'file'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$file</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'line'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$line</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'extra_information'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$extra_information</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'debug_backtrace'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$debug_backtrace</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp; if</span><span style="color: #007700">(!</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">critical_error&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$level&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">critical_error&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> public&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">is_critical_error</span><span style="color: #007700">()</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">critical_error</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> public&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">dump</span><span style="color: #007700">()</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(!</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">dumped</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; if</span><span style="color: #007700">(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">log</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;$path&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">config</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir'</span><span style="color: #007700">].</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">log</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">][</span><span style="color: #DD0000">'file_name'</span><span style="color: #007700">].</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">config</span><span style="color: #007700">[</span><span style="color: #DD0000">'extension_file'</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">unset(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">log</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">][</span><span style="color: #DD0000">'file_name'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #FF8000">//&nbsp;If&nbsp;the&nbsp;log&nbsp;file&nbsp;exists&nbsp;then&nbsp;mix&nbsp;it!</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">file_exists</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;</span><span style="color: #0000BB">filesize</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">)&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; $old_logs&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">unserialize</span><span style="color: #007700">(@</span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">));</span><span style="color: #0000BB"> &nbsp; &nbsp; </span><span style="color: #FF8000">//&nbsp;Boom&nbsp;Headshot</span><span style="color: #0000BB"> &nbsp; &nbsp; if</span><span style="color: #007700">(!</span><span style="color: #0000BB">$old_logs</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">log&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">array_merge</span><span style="color: #007700">(</span><span style="color: #0000BB">$old_logs</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">log</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">if(@</span><span style="color: #0000BB">file_put_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">serialize</span><span style="color: #007700">(</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">log</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">LOCK_EX</span><span style="color: #007700">))</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; $this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">dumped&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; &nbsp; return&nbsp;true</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">else</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; </span><span style="color: #FF8000">//&nbsp;Shit&nbsp;happens</span><span style="color: #0000BB"> &nbsp; &nbsp; return&nbsp;false</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #007700">}}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Odnośnie wspomnianej metody <tt>get_ip()</tt> to jej konstrukcja wygląda nastepujaco:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">engine</span><span style="color: #007700">{</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;ciach</span><span style="color: #0000BB"> protected&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">get_ip</span><span style="color: #007700">(</span><span style="color: #0000BB">$ip2long&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_CLIENT_IP'</span><span style="color: #007700">])</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $ip&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_CLIENT_IP'</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">else&nbsp;if(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_X_FORWARDED_FOR'</span><span style="color: #007700">])</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $ip&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_X_FORWARDED_FOR'</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">else</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $ip&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'REMOTE_ADDR'</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$ip2long</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $ip&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">ip2long</span><span style="color: #007700">(</span><span style="color: #0000BB">$ip</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">$ip</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;ciach</span><span style="color: #007700">}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Wkrótce udostępnię obiektowy punkt widzenia odnośnie przetwarzania i wyświetlania logów.
<br />

<br />
Aktualna wersja kodu loggera będzie dostępna w tym artykule oraz w dziale <a href="http://www.capaciouscore.pl/skrypty/" target="_blank" class="postlink">skrypty</a>, do którego gorąco zapraszam.
<br />
<a name="inne_dodatki"></a><h2>Inne dodatki</h2>
<ul class="list">
<li><a href="http://php.net/manual/pl/function.syslog.php" target="_blank" class="postlink">syslog()</a> czyli ciekawa funkcja w PHP</li>
<li><a href="http://www.kielmas.com/2010/07/16/zend_log-pomoze-szybko-zlokalizowac-blad-w-aplikacji/" target="_blank" class="postlink">Zend_Log</a>, czyli logger w Zend Framework</li>
<li><a href="http://nospor.pl/wzorzec-obserwator.html" target="_blank" class="postlink">Wzorzec obserwatora</a> dla osób <i>ślepo</i> idących torem MVC</li>
<li><a href="http://blog.vokiel.com/log-class-klasa-loggera-zdarzen" target="_blank" class="postlink">Log class &#8211; klasa loggera zdarzeń</a></li>
</ul>]]></description></item><item><title>[MSSQL] Tworzenie kopii zapasowej bazy danych, czyli tzw. backupu</title><pubdate>Tue, 03 May 2011 2:42:09 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/tworzenie-kopii-zapasowej-bazy-danych-mssql-czyli-backupu/</link><comments>http://www.capaciouscore.pl/artykuly/tworzenie-kopii-zapasowej-bazy-danych-mssql-czyli-backupu/#komentarze</comments><description><![CDATA[Ostatnimi czasy zacząłem bawić się bazami danych MSSQL. Muszę przyznać, że są stanowczo wygodniejsze, aniżeli te MySQL'owe. Narzędzia oraz silnik są świetnie przemyślane i zaprojektowane. Kto by pomyślał, że w MSSQL wystarczy jedno proste zapytanie i możemy sobie wyeksportować cała bazę danych do pliku?
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">BACKUP&nbsp;DATABASE&nbsp;<em><span>nazwa_bazy_danych</span></em>&nbsp;TO&nbsp;DISK&nbsp;=&nbsp;'<em><span>c:\ścieżka\do\pliku\backup.bak</span></em>'</span></pre>
Zapytanie tak proste, że chyba nikomu nie trzeba tłumaczyć, które wartości trzeba podmienić? Ponadto zleceniodawca poprosił mnie, abym stworzył skrypt, który będzie tworzył backup'y o określonej porze, pakował je do archiwum i wysyłał na zewnętrzny serwer. Wystarczy odpowiednio skonfigurować i dodać zadanie do CRON'a aby wszystko grało jak trzeba. Aplikacja jest tak prosta, że każdy z Was może się pokusić o modyfikacje wedle swoich potrzeb.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;Prekonfiguracja</span><span style="color: #0000BB">set_time_limit</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">);</span><span style="color: #FF8000">//&nbsp;Konfiguracja</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'odbc'</span><span style="color: #007700">][</span><span style="color: #DD0000">'dns'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'odbc'</span><span style="color: #007700">][</span><span style="color: #DD0000">'login'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'odbc'</span><span style="color: #007700">][</span><span style="color: #DD0000">'password'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'odbc'</span><span style="color: #007700">][</span><span style="color: #DD0000">'database'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'ftp'</span><span style="color: #007700">][</span><span style="color: #DD0000">'host'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'ftp'</span><span style="color: #007700">][</span><span style="color: #DD0000">'login'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'ftp'</span><span style="color: #007700">][</span><span style="color: #DD0000">'password'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir'</span><span style="color: #007700">][</span><span style="color: #DD0000">'backups'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'backups'</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;Tworzenie&nbsp;kopii&nbsp;zapasowej</span><span style="color: #0000BB">$date&nbsp;</span><span style="color: #007700">=&nbsp;array(</span><span style="color: #0000BB">date</span><span style="color: #007700">(</span><span style="color: #DD0000">'Y-m-d'</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">date</span><span style="color: #007700">(</span><span style="color: #DD0000">'H-i'</span><span style="color: #007700">));</span><span style="color: #0000BB">$path</span><span style="color: #007700">[]&nbsp;=&nbsp;</span><span style="color: #0000BB">dirname</span><span style="color: #007700">(</span><span style="color: #0000BB">__FILE__</span><span style="color: #007700">).</span><span style="color: #DD0000">'\\'</span><span style="color: #007700">.</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir'</span><span style="color: #007700">][</span><span style="color: #DD0000">'backups'</span><span style="color: #007700">].</span><span style="color: #DD0000">'\\'</span><span style="color: #007700">.</span><span style="color: #0000BB">$date</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">].</span><span style="color: #DD0000">'\\'</span><span style="color: #007700">;</span><span style="color: #0000BB">$path</span><span style="color: #007700">[]&nbsp;=&nbsp;</span><span style="color: #0000BB">$date</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">].</span><span style="color: #DD0000">'.zip'</span><span style="color: #007700">;</span><span style="color: #0000BB">$path</span><span style="color: #007700">[]&nbsp;=&nbsp;</span><span style="color: #0000BB">$path</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">].</span><span style="color: #0000BB">$date</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">].</span><span style="color: #DD0000">'.bak'</span><span style="color: #007700">;</span><span style="color: #0000BB">$path</span><span style="color: #007700">[]&nbsp;=&nbsp;</span><span style="color: #0000BB">$path</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">].</span><span style="color: #0000BB">$path</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">];</span><span style="color: #0000BB">$path</span><span style="color: #007700">[]&nbsp;=&nbsp;</span><span style="color: #0000BB">$date</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">].</span><span style="color: #DD0000">'&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$date</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">].</span><span style="color: #DD0000">'.bak'</span><span style="color: #007700">;if(!</span><span style="color: #0000BB">file_exists</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">])){</span><span style="color: #0000BB"> mkdir</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]);}</span><span style="color: #0000BB">$odbc_connection_handle&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">odbc_connect</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'odbc'</span><span style="color: #007700">][</span><span style="color: #DD0000">'dns'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'odbc'</span><span style="color: #007700">][</span><span style="color: #DD0000">'login'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'odbc'</span><span style="color: #007700">][</span><span style="color: #DD0000">'password'</span><span style="color: #007700">]);</span><span style="color: #0000BB">odbc_exec</span><span style="color: #007700">(</span><span style="color: #0000BB">$odbc_connection_handle</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"BACKUP&nbsp;DATABASE&nbsp;"</span><span style="color: #007700">.</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'odbc'</span><span style="color: #007700">][</span><span style="color: #DD0000">'database'</span><span style="color: #007700">].</span><span style="color: #DD0000">"&nbsp;TO&nbsp;DISK&nbsp;=&nbsp;'"</span><span style="color: #007700">.</span><span style="color: #0000BB">$path</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">].</span><span style="color: #DD0000">"'"</span><span style="color: #007700">);</span><span style="color: #0000BB">odbc_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$odbc_connection_handle</span><span style="color: #007700">);</span><span style="color: #0000BB">$zip&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">ZipArchive</span><span style="color: #007700">;</span><span style="color: #0000BB">$zip&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">open</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">ZIPARCHIVE</span><span style="color: #007700">::</span><span style="color: #0000BB">CREATE</span><span style="color: #007700">);</span><span style="color: #0000BB">$zip&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">addFile</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$path</span><span style="color: #007700">[</span><span style="color: #0000BB">4</span><span style="color: #007700">]);</span><span style="color: #0000BB">$zip&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">close</span><span style="color: #007700">();</span><span style="color: #0000BB">unlink</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">]);</span><span style="color: #0000BB">$ftp_conneciton_handle&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">ftp_connect</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'ftp'</span><span style="color: #007700">][</span><span style="color: #DD0000">'host'</span><span style="color: #007700">]);</span><span style="color: #0000BB">ftp_login</span><span style="color: #007700">(</span><span style="color: #0000BB">$ftp_conneciton_handle</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'ftp'</span><span style="color: #007700">][</span><span style="color: #DD0000">'login'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'ftp'</span><span style="color: #007700">][</span><span style="color: #DD0000">'password'</span><span style="color: #007700">]);</span><span style="color: #0000BB">$dir_list&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">ftp_nlist</span><span style="color: #007700">(</span><span style="color: #0000BB">$ftp_conneciton_handle</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'.'</span><span style="color: #007700">);foreach(</span><span style="color: #0000BB">$dir_list&nbsp;</span><span style="color: #007700">as&nbsp;</span><span style="color: #0000BB">$file</span><span style="color: #007700">){</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$file&nbsp;</span><span style="color: #007700">!=&nbsp;</span><span style="color: #DD0000">'.'&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$file&nbsp;</span><span style="color: #007700">!=&nbsp;</span><span style="color: #DD0000">'..'&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$file&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #0000BB">$date</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">])</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$catch_dir&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">break;</span><span style="color: #0000BB"> </span><span style="color: #007700">}}if(!</span><span style="color: #0000BB">$catch_dir</span><span style="color: #007700">){</span><span style="color: #0000BB"> ftp_mkdir</span><span style="color: #007700">(</span><span style="color: #0000BB">$ftp_conneciton_handle</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$date</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]);}</span><span style="color: #0000BB">ftp_chdir</span><span style="color: #007700">(</span><span style="color: #0000BB">$ftp_conneciton_handle</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$date</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]);</span><span style="color: #0000BB">ftp_put</span><span style="color: #007700">(</span><span style="color: #0000BB">$ftp_conneciton_handle</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$path</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$path</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">FTP_BINARY</span><span style="color: #007700">);</span><span style="color: #0000BB">ftp_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$ftp_conneciton_handle</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Jeżeli chodzi o wykonanie skryptu, to miałem do dyspozycji tylko moduły FTP, ODBC i ZIP. Dla tych ludzi, co lubią komplikować sobie życie, proponuję zmianę ODBC na PDO albo mssql_*, użycie SSL podczas transferu plików przez FTP oraz zmienienie ZIP'a na RAR'a. Ponadto, jeżeli w głównym folderze na serwerze zewnętrznym mają znajdować się nie tylko foldery z backup'ami, to trzeba będzie nieco przeedytować pętle sprawdzającą czy dany folder istnieje już na serwerze. Jak już pewnie zauważyliście, pominąłem obsługę jakichkolwiek błędów w powyższym kodzie. Jeżeli lubicie logować wszystkie niepowodzenia to z łatwością podepniecie jakiś logger (obsługę nieoczekiwanych zdarzeń).
<br />
<a name="Zaplanowanie_zadania"></a><h2>Zaplanowanie zadania</h2>
Jeżeli chodzi o uruchamianie zadań cyklicznych przez CRON'a, to wystarczy odpowiednio zmienić poniższą linijkę (dostosować ścieżki) i wsadzić ją w tzw. element docelowy w oknie ustawiania zadania.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">d:\xampp\php\php.exe&nbsp;-f&nbsp;"d:\xampp\htdocs\mssql-backuper\index.php"</span></pre>]]></description></item><item><title>Kostka z zapałek bez użycia kleju</title><pubdate>Fri, 29 Apr 2011 2:11:14 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/kostka-z-zapalek-bez-uzycia-kleju/</link><comments>http://www.capaciouscore.pl/artykuly/kostka-z-zapalek-bez-uzycia-kleju/#komentarze</comments><description><![CDATA[Nie będę ukrywał, że pod koniec maja, kiedy nie miałem komputera w domu, troszeczkę nudziło mi się. Z tej okazji zbudowałem sobie kostkę z zapałek. Niby nic trudnego, jednak część z Was pewnie wymięknie przy wykonywaniu instrukcji, jeżeli pokusi się o stworzenie jednego egzemplarza. 
<br />
<a name="przygotowania"></a><h2>Przygotowania</h2>
Teoretycznie potrzebne są 3 paczki zapałek i trochę czasu (optymalnie 15 minut). W praktyce wygląda to nieco inaczej. Jeżeli nie posiadasz dużej precyzji i zręczności, to wykonanie obiektu może Ci zająć do 30 minut, o ile się do tego przyłożycie i nie rozsypie się Wam przy pierwszym podejściu. Drugą sprawą jest jakość zapałek. Jeżeli są złej jakości, to lepiej kupić zestaw 10 paczek zamiast 3 kartoników, tak jak na załączonym obrazku poniżej:
<br />
<img src="http://www.capaciouscore.pl/download/other/kostka-z-zapalek-1.jpg" alt="kostka-z-zapalek-1.jpg" />
<br />
Owe złe zapałki, to takie, które nie przypominają na całej długości w przekroju kwadratu bądź maja bardzo ubogą główkę. Przykładowy zestaw wadliwych egzemplarzy wygląda następująco:
<br />
<img src="http://www.capaciouscore.pl/download/other/kostka-z-zapalek-2.jpg" alt="kostka-z-zapalek-2.jpg" />
<br />
<a name="krok_1"></a><h2>Krok 1</h2>
W zależności od długości zapałek, układamy pierwszą warstwę składającą się z 7 lub 8 sztuk.
<br />
<img src="http://www.capaciouscore.pl/download/other/kostka-z-zapalek-3.jpg" alt="kostka-z-zapalek-3.jpg" />
<br />
<a name="krok_2"></a><h2>Krok 2</h2>
Gdy już mamy ułożoną pierwsza warstwę, kładziemy drugą prostopadle do tej pierwszej, tak jak na załączonym obrazku:
<br />
<img src="http://www.capaciouscore.pl/download/other/kostka-z-zapalek-4.jpg" alt="kostka-z-zapalek-4.jpg" />
<br />
<a name="krok_3"></a><h2>Krok 3</h2>
Następnym krokiem jest zmontowanie &quot;ścianki&quot; bocznej kostki.
<br />
<img src="http://www.capaciouscore.pl/download/other/kostka-z-zapalek-5.jpg" alt="kostka-z-zapalek-5.jpg" />
<br />
Z góry wygląda to następująco:
<br />
<img src="http://www.capaciouscore.pl/download/other/kostka-z-zapalek-6.jpg" alt="kostka-z-zapalek-6.jpg" />
<br />
<a name="krok_4"></a><h2>Krok 4</h2>
Kolejnym krokiem jest ułożenie dwóch górnych warstw. Po zarzuceniu pierwszej warstwy wygląda to następująco:
<br />
<img src="http://www.capaciouscore.pl/download/other/kostka-z-zapalek-7.jpg" alt="kostka-z-zapalek-7.jpg" />
<br />
a po drugiej jeszcze ładniej:
<br />
<img src="http://www.capaciouscore.pl/download/other/kostka-z-zapalek-8.jpg" alt="kostka-z-zapalek-8.jpg" />
<br />
<a name="krok_5"></a><h2>Krok 5</h2>
Krokiem piątym jest nadzianie owej kostki zapałkami od górnej strony:
<br />
<img src="http://www.capaciouscore.pl/download/other/kostka-z-zapalek-9.jpg" alt="kostka-z-zapalek-9.jpg" />
<br />
Jest to jeden z dwóch trudniejszych kroków. Ważne jest aby przy tej operacji nie rozwalić struktury kostki. Pamiętajcie, aby wkładać zapałki w to samo miejsce na dole, aby to miało ręce i nogi. W końcu symetria musi być z każdej strony.
<br />
<a name="krok_6"></a><h2>Krok 6</h2>
Mając przygotowaną kostkę trzeba wykonać drugi trudniejszy krok. Jeżeli wszystkie zapałki są włożone od góry do prawidłowych dziurek na dole, to wystarczy teraz kostkę odpowiednio ścisnąć. Łapiemy ją z czterech stron i ściskamy powoli. Efektem tego zabiegu jest taki oto potworek:
<br />
<img src="http://www.capaciouscore.pl/download/other/kostka-z-zapalek-9.jpg" alt="kostka-z-zapalek-9.jpg" />
<br />
<a name="krok_7"></a><h2>Krok 7</h2>
Jeżeli do tej pory gra gitara i nic Ci się w rączkach nie posypało, to teraz wystarczy uzupełnić kostkę o brakujące segmenty. Zanim jednak do tego dojdzie, trzeba docisnąć kostkę z każdej strony, aby się dość mocno trzymała tak jak na załączonych poniżej obrazkach:
<br />
<img src="http://www.capaciouscore.pl/download/other/kostka-z-zapalek-10.jpg" alt="kostka-z-zapalek-10.jpg" />
<br />
<img src="http://www.capaciouscore.pl/download/other/kostka-z-zapalek-11.jpg" alt="kostka-z-zapalek-11.jpg" />
<br />
Teraz z każdej z trzech stron musicie dobudowywać warstwy na zmianę, aby kostka była stabilna.
<br />
<img src="http://www.capaciouscore.pl/download/other/kostka-z-zapalek-12.jpg" alt="kostka-z-zapalek-12.jpg" />
<br />
Gdy już włożycie od którejś ze stron warstwę i dodacie z boku zapałkę podtrzymującą drugą oś, to wystarczy wyjąć zapałki, które znajdują się poziom niżej. Krok ten powtarzamy tak długo, aż zabudujemy kostkę ze wszystkich trzech stron.
<br />
<a name="krok_8"></a><h2>Krok 8</h2>
W finale całej tej zabawy wychodzi taki oto potworek:
<br />
<img src="http://www.capaciouscore.pl/download/other/kostka-z-zapalek-13.jpg" alt="kostka-z-zapalek-13.jpg" />
<br />
<img src="http://www.capaciouscore.pl/download/other/kostka-z-zapalek-14.jpg" alt="kostka-z-zapalek-14.jpg" />]]></description></item><item><title>Nowy piec</title><pubdate>Sun, 10 Apr 2011 7:12:52 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/nowy-piec/</link><comments>http://www.capaciouscore.pl/artykuly/nowy-piec/#komentarze</comments><description><![CDATA[Po bitym tygodniu przerwy od komputera nareszcie wracam z naładowaną baterią do legalnego ćpania internetu. Zacznijmy więc od początku. Około 4 klasy podstawówki dostałem swój pierwszy komputer. Wiadomo, że w tamtych czasach nie były to jakieś kosmiczne parametry, jednak jak na tamte czasy to był cud malina. Wtedy parametry, które podam poniżej powodowały <i>respect</i> na dzielni. Oczywiście żartuje <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Stare dobre czasy kiedy dzieciaki siedziały na ławce lub placu i bawiły się. Nie to, co teraz mamy w społeczeństwie. Fastfood, otyłość w młodym wieku spowodowana w większości przypadków brakiem ruchu oraz wszechogarniająca dysmózgią mentalną - ot uroki XXI wieku. Jeżeli nie wierzycie to cofnijcie zegar wspomnień! Jesteście za młodzi? Żaden problem! Zapytajcie rodziców czy za czasów PRL-owskich panowała osobliwa otyłość u dzieci. Wracając do tematu pieca. Jak dobrze pamiętam, to mój pierwszy komputer posiadał następujące parametry:
<br />
<ul class="list">
<li>Procesor: Pentium III MMX 600 MHz</li>
<li>RAM: 128 MB 133MHz (po upgradzie z 64MB jak dobrze pamiętam; co ciekawe płyta główna tak <i>cienka</i>, że nie czytała więcej niż 64 MB pamięci z jednej kości, przez co miałem 192MB, jednak widziało tylko 128 MB)</li>
<li>Płyta główna: GA-BX2000 - Gigabyte</li>
<li>Dysk: pamiętam, że jego pojemność wynosiła 15 GB i był firmy Fujitsu, jednak w tej chwili nie mogę powiedzieć jaki to był model. Pod koniec użytkowania tego sprzętu został kupiony inny dysk (WD800 80 GB).</li>
<li>Karta dźwiękowa: Sound Blaster 128 firmy Creative - chyba tego klasyka nikomu nie musze przedstawiać?</li>
<li>Karta graficzna: z początku Riva TNT2 32 MB - tego chyba też nie? Z czasem zacząłem używać GeForce FX 5500 128 MB <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /></li>
<li>Zasilacz: 300W nie markowy</li>
</ul>
Sprzęt jak na tamte czasy był kosmicznie dobry <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Można było sobie popykać w Age of Empires I albo nawet II. Optymalnie w Unreal Tournament 99, Quake II i tym podobne gierki służące do szkolenia amerykańskich terrorystów, czyt. dzieci. <i>Jednym słowem</i> szczyt marzeń niejednego dziecka tamtych czasów. Po paru latach katowania pierwszego sprzętu nadszedł czas na upgrade. Drugie pudło było bardziej złożone i jego zawartość przedstawiała się mniej więcej tak:
<br />
<ul class="list">
<li>Płyty główne: MSI K8N Neo na początku, potem Biostar 6100-M7, a na końcu ASRock K8NF4G-SATA2</li>
<li>Procesor: AMD Athlon 64 2800+</li>
<li>RAM: od 512 MB do 4 GB (różnych firm - markowych i nie)</li>
<li>Zasilacz: ten z pierwszego zestawu <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /></li>
<li>Dysk: WD800 80 GB z pierwszego zestawu</li>
<li>Karta dźwiękowa: zazwyczaj zintegrowana, jednak po małym wypadku z herbatą <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /> na ostatniej płycie głównej była zamontowana karta dźwiękowa z pierwszego zestawu</li>
<li>Karty graficzne: tutaj stanowczo trudno określić. Ze względu na to, że po zakupie drugiego zestawu skupiłem się na programowaniu, to nie miałem dużych wymagań względem grafiki. Poza tym lubię stare gry, wiec nie byłem wymagający. Nie zmienia to faktu, że przez tą płytę główna przewinęło się, co najmniej 15 różnych sztuk</li>
</ul>
Po jakichś 8 latach, a może i więcej, powyższy sprzęt skatowałem niemiłosiernie. Efektem tego było uszkodzenie:
<br />
<ul class="list">
<li>procesora,</li>
<li>trzech płyt głównych, które kilkukrotnie przeszły kilka ciekawych operacji (np. wymiany kondensatorów),</li>
<li>zasilacza, który przestał dawać stabilne napięcia,</li>
<li>nieszczęsnego chipsetu, odpowiedzialnego za zintegrowaną kartę dźwiękową, który został polany niedokończoną herbatką,</li> 
<li>banku pamięci na ostatniej płycie głównej.</li>
</ul>
To uszkodzenie przejawiało się dość dziwnym zachowaniem komputera. Np. uruchamiał się system, jednak przeleciały góra dwa paski i następnie zaczynał wisieć nad przepaścią. Po restarcie czasami się nie dawał sygnału do monitora (tzw. czerwona kropka). Dopiero po parunasto sekundowym przestoju zaczynał ponownie działać. Zazwyczaj po kilkunastu uruchomieniach system ładował się. Niestety to nie był koniec. Podczas pracy potrafił się zawiesić, a z głośników wydobywał się taki fajny pisk <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Po takim zwisie trzeba było znowu paręnaście minut próbować uruchomić system. Z początku myślałem, że jakiś ciekawy wirus. Potem myślałem, że dysk walnął. I tak w rzeczywistości było jednak to nie było przyczyna problemu. Przyczyna był uszkodzony procesor i płyta główna (ot takie kombo). Płyta główna była uszkodzona poniekąd z mojej winy. Szczególnie ostatnia niefachowa robota &quot;speców&quot; od RTV. Po pierwszej wymianie kondensatorów wszystko było cacy jednak do drugiej nie posiadałem sprzętu, co zmusiło mnie do skorzystania z usług pewnej firmy zajmującej się naprawa starych telewizorów. Pomijając już parę faktów to najbardziej uraczyła mnie sama usługa. Raptem jeden napuchnięty kondensator do wymiany jednak w ruch poszedł nóż (skrobanie lutu?) i gdyby nie moja interwencja (na szczęście mam blade pojecie o elektronice) to przy włączeniu płyty głównej wystrzeliłby mi kondensator, bo geniusz, który włożył go, zrobił to odwrotnie, czyli bieguny pozamieniane... Ogólnie troszkę za dużo rzeczy popsuło się i nie miałem nawet jak zrobić diagnostyki, bo nie miałem odpowiedniego sprzętu do testów. Byłem <i>zmuszony</i> oddać kompa do znajomego. Jakby tylko płyta główna była uszkodzona albo procesor to jeszcze lajt. Niestety sprawy się nawarstwiły i opłacalne było zakupienie nowego. I tak to się stało, że teraz posiadam piec o poniższych parametrach:
<br />
<ul class="list">
<li>Płyta główna: ASRock N68-GS3 UCC</li>
<li>Procesor: AMD Athlon II X2 255</li>
<li>RAM: GEIL 2 GB PC3-10660 CL=9-9-9-24 DDR3 (będzie wymienione na 4 GB)</li>
<li>Dysk: WD 5000 AAKS SATA 500GB</li>
<li>Karta graficzna: aktualnie zintegrowana, bo na chwile obecna mocniejsza mi nie potrzebna</li>
<li>Zasilacz: Aerocool VP-450 450W</li>
</ul>
Jako, że nie jestem maniakiem gier a nawet, jeżeli jestem to gram w stare gry wiec super ekstra wypasione komponenty nie są mi niepotrzebne. Sound Blaster 128 używałem czasami do przechwytywania dźwięku lecącego w systemie. Niestety nie każda zintegrowana karta dźwiękowa posiada taka funkcje. Nie jestem zwolennikiem używania wejścia liniowego wiec ta ewentualność odpada. Odnośnie monitorów, to mam raptem dwa, z czego jeden jest uszkodzony (Monitor Nec V520 15 calowy). Aktualnie korzystam z FLATRON'a  M1994D. Niefortunnie elektronika strzeliła parę lat temu. To dopiero były fajerwerki. Jak dobrze pamietam to klawiatur miałem trzy. Aktualnie używam klawiatury firmy ActiveJet i nie narzekam. Nigdy nie byłem zwolennikiem skomplikowanych sztuk i uważam, iż im prostsze bez zbędnych bajerów tym lepsze. Ważne żeby nie zacinały się przy wciśnięciu kilku klawiszy na raz. Myszek tez miałem kilka. Aktualnie używam jakiejś 4TECH. Pomijając Niechlubny epizod z myszka <a href="http://www.capaciouscore.pl/artykuly/mysz-tracer-trm-141-mustang-ps2/" target="_blank" class="postlink">Tracer TRM-141 Mustang</a> to ogólnie nie narzekałem. Średnio, co pół roku się wymieni, bo roleta siada od przewijania kilometrów kodu. Po za 4TECH'em jak dobrze pamiętam, to używałem jeszcze innych szczurów firmy Tracer. Co do systemu to jestem zwolennikiem XP. Nie akceptuję nowszych pochłaniających za dużo zasobów. Ogólnie sprzęt nie jest wieczny i płyty główne i inne elementy maja określoną żywotność, co nie zmienia faktu, że cieszy mnie, iż tak długo wytrzymały poprzednie komputery. Boje się pomyśleć, co będzie za parę lat ze sprzętem. W takim tempie zwiększania mocy obliczeniowej CPU szacuje się, że w 2050 roku będzie powstanie komputer z możliwościami ludzkiego mózgu. Po za tym istnieje coś takiego jak <a href="http://rdir.pl/1ccjse" target="_blank" class="postlink">prawo Moore'a</a> i <a href="http://pl.wikipedia.org/wiki/Technologiczna_osobliwość" target="_blank" class="postlink">technologiczna osobliwość</a>. Cieszę się, że sprzęt staniał. Najzabawniejszy jest fakt, że niektóre DDR2 są droższe od DDR 3. I jeszcze jedno mnie zastanawia. Obiło mi się o uszy, że sprzęt sprzedawany w Polsce musi mieć instrukcje w języku polskim. Większość instrukcji do płyt głównych takowego nie ma. Czy to przypadkiem nie lamie praw polskiego konsumenta?
<br />

<br />
PS
<br />
Karta dźwiękowa (Sound Blaster 128) także została skatowana. Dziwnym trafem nóżki elementów zostały w magiczny sposób wygięte w rożnych kierunkach. Prawdopodobnie wystąpiło zbyt wysokie napięcie na elementach.]]></description></item><item><title>Sezon 2011</title><pubdate>Wed, 16 Mar 2011 2:50:47 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/sezon-2011/</link><comments>http://www.capaciouscore.pl/artykuly/sezon-2011/#komentarze</comments><description><![CDATA[Wreszcie pierwsze podrygi wiosny! Ile można znieść tego zimnego chłodu, szczególnie wtedy, kiedy uniemożliwia wykonywanie hobby? Kwintesencją tego, co myślę na ten temat jest poniższa grafika:
<br />
<img src="http://www.capaciouscore.pl/download/other/zimo-wypierdalaj-1.jpg" alt="zimo-wypierdalaj-1.jpg" />
<br />
Co ciekawe niektórych zima najwyraźniej nie dotyczy. Przykładem jest chociażby @<a href="http://www.youtube.com/user/hardkorowybajker" target="_blank" class="postlink">hardkorowybajker</a> <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Gorąco zachęcam wszystkich do przestudiowania poniższego materiału jeżeli myślicie, że jazda w zimie na motocyklu to skrajny debilizm.
<br />
<a href="http://www.youtube.com/watch?v=dFd5Eav_Tjs">http://www.youtube.com/watch\?v=dFd5Eav_Tjs</a>
<br />
<a href="http://www.youtube.com/watch?v=LeMHJ-btoTU">http://www.youtube.com/watch\?v=LeMHJ-btoTU</a>
<br />
<a href="http://www.youtube.com/watch?v=wEW0vdWIqK0">http://www.youtube.com/watch\?v=wEW0vdWIqK0</a>]]></description></item><item><title>Sugestie polskiego Google na temat Europejczyków i nie tylko...</title><pubdate>Thu, 10 Mar 2011 11:01:26 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/sugestie-polskiego-google-na-temat-europejczykow-i-nie-tylko/</link><comments>http://www.capaciouscore.pl/artykuly/sugestie-polskiego-google-na-temat-europejczykow-i-nie-tylko/#komentarze</comments><description><![CDATA[A oto co polskie Google &quot;myśli&quot; i podpowiada innym aby przeczytali na temat niektórych narodowości.
<br />
<ul class="list">
<li>Albańczycy (brak sugestii)</li>
<li>Anglicy (brak sugestii)</li>
<li>Austriacy (brak sugestii)</li>
<li>Białorusini (brak sugestii)</li>
<li>Bośniacy (brak sugestii)</li>
<li>Bułgarzy (brak sugestii)</li>
<li>Chorwaci (brak sugestii)</li>
<li>Czesi (brak sugestii)</li>
<li>Duńczycy (brak sugestii)</li>
<li>Estończycy (brak sugestii)</li>
<li>Finowie (brak sugestii)</li>
<li>Francuzi to:
<br />
<img src="http://www.capaciouscore.pl/download/other/francuzi-to.png" alt="francuzi-to.png" /></li>
<li>Hiszpanie (brak sugestii)</li>
<li>Holendrzy (brak sugestii)</li>
<li>Irlandczycy (brak sugestii)</li>
<li>Islandczycy (brak sugestii)</li>
<li>Litwini (brak sugestii)</li>
<li>Luksemburczycy (brak sugestii)</li>
<li>Niemcy to: <img src="http://www.capaciouscore.pl/download/other/niemcy-to.png" alt="niemcy-to.png" /></li>
<li>Norwegowie (brak sugestii)</li>
<li>Polacy to:
<br />
<img src="http://www.capaciouscore.pl/download/other/polacy-to.png" alt="polacy-to.png" /></li>
<li>Portugalczycy (brak sugestii)</li>
<li>Rosjanie to:
<br />
<img src="http://www.capaciouscore.pl/download/other/rosjanie-to.png" alt="rosjanie-to.png" /></li>
<li>Rumuni to:
<br />
<img src="http://www.capaciouscore.pl/download/other/rumuni-to.png" alt="rumuni-to.png" /></li>
<li>Serbowie (brak sugestii)</li>
<li>Słowacy (brak sugestii)</li>
<li>Szkoci (brak sugestii)</li>
<li>Szwajcarzy (brak sugestii)</li>
<li>Szwedzi (brak sugestii)</li>
<li>Ukraińcy (brak sugestii)</li>
<li>Węgrzy (brak sugestii)</li>
<li>Włosi (brak sugestii)</li>
</ul>
<a name="bonus"></a><h2>Bonus</h2>
<ul class="list">
<li>Amerykanie to:
<br />
<img src="http://www.capaciouscore.pl/download/other/amerykanie-to.png" alt="amerykanie-to.png" /></li>
</ul>
Wnioski wyciągnijcie sami <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />]]></description></item><item><title>[PHP] Breadcrumbs czyli okruszki chleba</title><pubdate>Wed, 09 Mar 2011 5:35:45 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/breadcrumbs-czyli-okruszki-chleba-w-php/</link><comments>http://www.capaciouscore.pl/artykuly/breadcrumbs-czyli-okruszki-chleba-w-php/#komentarze</comments><description><![CDATA[Breadcrumbs, okruszki chleba, nawigacja okruszkowa lub ślad z okruszków - nazywajcie jak chcecie. Technika służąca do wskazywania miejsca, w którym aktualnie znajduje się użytkownik oraz śledzenia go celem dalszych statystyk. Zazwyczaj okruszki chleba umieszcza się w górnej części serwisu. Taka nawigacja przykładowo dla tego artykułu może wyglądać następująco:
<br />
Jesteś tutaj: Strona domowa &#8594; Artykuły &#8594; [PHP] Breadcrumbs czyli okruszki chleba
<br />
albo
<br />
Jesteś tutaj: Strona domowa &#8594; Artykuły &#8594; Kategoria: PHP &#8594; [PHP] Breadcrumbs czyli okruszki chleba
<br />
albo
<br />
Jesteś tutaj: CapaciousCore.pl &#8594; Artykuły &#8594; Dział PHP &#8594; [PHP] Breadcrumbs czyli okruszki chleba
<br />

<br />
Wszystko to kwestia uzgodnienia, jaka forma będzie najbardziej pożądana. Trzeba pamiętać, że tą technologie najlepiej wykorzystywać, kiedy serwis posiada ścisłą hierarchie. Innym przykładem nie związanym ze stronami WWW jest GPS, w którym to ślady Twoich ruchów na mapie są zapisywane i delikatnie wyświetlane w formie ścieżki. Najprostsza klasa służąca do stosowania tej techniki wygląda następująco:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">breadcrumbs</span><span style="color: #007700">{</span><span style="color: #0000BB"> private&nbsp;$core</span><span style="color: #007700">;</span><span style="color: #0000BB"> public&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">add</span><span style="color: #007700">(</span><span style="color: #0000BB">$anchor</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$url</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$title&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">core</span><span style="color: #007700">[</span><span style="color: #DD0000">'list'</span><span style="color: #007700">][]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'anchor'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$anchor</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'url'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$url</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'title'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$title</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> public&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">throw_list</span><span style="color: #007700">()</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">$this&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">core</span><span style="color: #007700">[</span><span style="color: #DD0000">'list'</span><span style="color: #007700">];</span><span style="color: #0000BB"> </span><span style="color: #007700">}}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Oczywiście można ją rozbudować o dodatkowe elementy jednak to już pozostawiam Wam. Jak już zauważyliście klasa jest bardzo prosta i opiera się jedynie o metodę dodawania poszczególnych leveli oraz wyrzucania kompletnej listy. Stosowanie tej techniki zmusza nas do wywołania metody dodawania w odpowiednich miejscach w kodzie podstron. W końcu samo z siebie nie będzie wiedzieć gdzie aktualnie się znajduje <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Drugą oczywistością jest fakt, że musimy przekazać tablice elementów do miejsca, w którym będzie wyświetlana. Mam na myśli <i>nośnik danych</i> (czyt. zmienna/tablica) np. w systemie szablonów.]]></description></item><item><title>Pati</title><pubdate>Wed, 09 Mar 2011 10:43:10 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/pati/</link><comments>http://www.capaciouscore.pl/artykuly/pati/#komentarze</comments><description><![CDATA[Miałem nie pisać i publikować tego wpisu jednak jak zwykle coś mi odbiło i zmieniłem zdanie. Teraz aż nie wiem, od czego zacząć. Może wystartuje od tego, że zawsze będę miło wspominał wspólnie spędzony czas. W szczególności fikuśne całusy, &quot;pieszczoty&quot; i towarzystwo podczas spacerów, których teraz mi brakuje. Szkoda, że to, co dzieje się w <i>wirtualu</i> jest obrucone o 180° w <i>realu</i>. No może różnica nie jest aż tak diametralna jednak występuje. Fajnie było poświęcić tyle czasu na wszystkie rozmowy i spotkania. Nie chce dać do zrozumienia, że to była strata czasu gdyż ta znajomość dała mi wiele do myślenia i za to serdecznie Ci dziękuje. Wyciągnąłem wnioski z tej lekcji. Myślę sobie teraz, że wstydliwość nie istnieje i jest niczym lep na muchy. Może faktycznie z początku występuje jednak jak się kogoś głębiej pozna to znika i to dość szybko. <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Szkoda, że wszystko potoczyło się inaczej niż można było przewidzieć. Moim zdaniem jak ma się wątpliwości to powinno starać się je rozwiać rozmawiając. Gdybym wiedział, że powstaną takie problemy to na poczekaniu wrzuciłbym skany i zdjęcia pewnych rzeczy, aby potwierdzić pewne fakty i rozwiać wszelkie wątpliwości. Można rzec, że pod koniec było czuć, że coś jest nie tak. Może właśnie, dlatego powiedziałem &quot;dobranoc&quot;. Diametralna zmiana zachowania mówi sama za siebie. Swoją drogą odniosłem także wrażenie, że grało się na dwa fronty. Sam nie wiem, dlaczego. Może wyglądam niepozornie, ale idiotą nie jestem. Jak dla mnie miłość przez internet to w większości przypadków bzdura. Tak czy siak uszy do góry, bo trzeba iść naprzód. Aha i korzystając jeszcze z okazji chciałbym także podziękować Twoim koleżankom za mile spędzony czas. Wiem, że tego nie przeczytają jednak to i tak teraz już różnicy nie robi. Podsumuję to tak: życie.]]></description></item><item><title>Druga rocznica mojej strony</title><pubdate>Wed, 09 Mar 2011 7:28:12 +0100</pubdate><link>http://www.capaciouscore.pl/aktualnosci/druga-rocznica-mojej-strony/</link><comments>http://www.capaciouscore.pl/aktualnosci/druga-rocznica-mojej-strony/#komentarze</comments><description><![CDATA[Kto by pomyślał, że to już dwa lata minęły od momentu zarejestrowania domeny i uruchomienia witryny? Sam byłem zdziwiony, bo żyłem w mylnym przekonaniu, że to dopiero rok miną. Co by tu powiedzieć więcej? Może to, że prace nad nowym silnikiem strony pełzają powoli. Nie, nie to stanowczo nie to, co powinienem powiedzieć. Nie mam pomysłów z samego rana jak zwykle &#8211; zaspana morda. <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />]]></description></item><item><title>Realny uptime serwerów hostingowych</title><pubdate>Tue, 22 Feb 2011 8:17:53 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/realny-uptime-serwerow-hostingowych/</link><comments>http://www.capaciouscore.pl/artykuly/realny-uptime-serwerow-hostingowych/#komentarze</comments><description><![CDATA[Dawno, dawno temu miałem okazje posiadać konto w firmie hostingowej <a href="http://www.hekko.pl/" target="_blank" class="postlink">HEKKONET</a>. Mimo kilku <i>śmiesznych</i> awarii stwierdzono, że nic nie zostało zgłaszane. Ciekawe podejście firmy. Niby serwer opowiadał, wszystkie usługi działały pomijając ukochany httpd. Ta sytuacja zmusiła mnie do refleksji.
<br />

<br />
Faktycznie uptime serwera może i był wysoki jednak dostępność poszczególnych usług wahała się pomiędzy 95 a 99%. Bardzo ważnym jest, aby firma posiadała rzetelny monitor poszczególnych usług dla każdej ze swoich maszyn. Co z tego, że usługa MySQL i FTP działa skoro np. Apache zawiesił się? Statystyka, statystyką jednak normalny uptime nie odzwierciedla rzeczywistości. Port może być otwarty i w ten sposób nabijać błędne statystyki. Odnośnie HEKKO, którego się tak mocno <i>czepiłem</i>. Sytuacja na nim wygląda dość dziwnie. Co jakiś czas na serwerze oznaczonym pechowym numerem 3 można było zaobserwować cykliczne &quot;przeładowania&quot; demona, które na kilkanaście sekund wstrzymywały ruch na stronie. Oczywiście skrypt sprawdzający uptime z zewnętrznego serwera ma małe szanse na trafienie właśnie w momencie braku odpowiedzi ze strony serwera. Dlatego tak ważnym jest dowiedzenie się przed zakupem, na jakiej podstawie oblicza się uptime maszyny. Ta informacja może być kluczowa przy jakichkolwiek reklamacjach. Osobiście uważam, ze każdy szanujący się hosting powinien udostępniać w panelu klienta wykres uptime dla poszczególnych miesięcy, kwartałów i lat.]]></description></item><item><title>Limity hostingowe na CPU = bzdura</title><pubdate>Mon, 21 Feb 2011 4:08:39 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/limity-hostingowe-na-cpu-czyli-procesor-sa-totalna-bzdura/</link><comments>http://www.capaciouscore.pl/artykuly/limity-hostingowe-na-cpu-czyli-procesor-sa-totalna-bzdura/#komentarze</comments><description><![CDATA[Artykuł dedykuje wszystkim tym, którzy w najbliższym czasie kupują hosting bądź zmieniają go na inny ze względu na limity CPU. Dawno, dawno temu korzystałem z usług firmy hostingowej <a href="http://www.hekko.pl/" target="_blank" class="postlink">HEKKONET</a>. Niestety będzie to negatywna reklama, ale takie jest życie. Wszystko było spoko do czasu, kiedy wystąpiły przekroczenia limitu na procesor. Naturalnie zaciekawiony sytuacją starałem się optymalizować skrypty. Zacząłem się dziwić, kiedy miałem zużycie ~2% na dzień przy ruchu około 300-500 wejść. Coś mi ewidentnie nie grało. Nie mogłem napisać aplikacji aż tak niewydajnej. Ta sytuacja zmusiła mnie do małego testu. Zostały zakupione dwa konta o identycznych parametrach. Ruch z zewnątrz został wycięty. Na obu kontach zostały cyklicznie uruchomione skrypty za pomocą CRON'a. Kod pierwszego skryptu wyglądał następująco:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?phpsleep</span><span style="color: #007700">(</span><span style="color: #0000BB">5</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Natomiast kod drugiego tak:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$start&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">time</span><span style="color: #007700">();while(</span><span style="color: #0000BB">time</span><span style="color: #007700">()&nbsp;-&nbsp;</span><span style="color: #0000BB">$start&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">5</span><span style="color: #007700">){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Jakiekolwiek&nbsp;obciążenie&nbsp;procesora</span><span style="color: #0000BB"> $data&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">rand</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">65536</span><span style="color: #007700">);}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Oba skrypty wykonywały się w tym samym czasie, aby ograniczyć czynniki wpływające na przebieg testu. Pierwszy kod praktycznie nie generuje jakiegokolwiek obciążenia dla procesora. Drugi natomiast logicznie generuje stałe i znaczące obciążenie dla procesora, bo wykonuje dużo operacji losowania liczby. Po miesiącu czasu okazało się, że oba konta mają wręcz identyczne zużycie procesora. Jak się potem dowiedziałem naliczanie bazowało na czasie wykonywania skryptu, a nie na faktycznym obciążeniu procesora. Takie naliczanie można o kant dupy potłuc. Dlatego tak ważnym jest, aby przed kupieniem np. hostingu <u>sprawdzić, na jakiej zasadzie liczony jest limit CPU</u>. Rozmawiając z kilkoma administratorami hostingów dochodzę do wniosku, że bardzo ciężko jest im zbudować mechanizm, który faktycznie zliczałby ile dane konto pożera zasobów. Według mnie powinno to być przydzielane na zasadzie panującej przy VPS'ach, czyli mamy gwarantowany CPU, powyżej, którego możemy, ale nie musimy dostać ekstra moc w zależności od tego czy maszyna jest obciążona czy też nie. Kolejną sprawą jest po prostu kolejkowanie wątków. Jeżeli mamy obciążony procesor na przysłowiowe 100% to kolejne zdarzenia czekają, aż zwolnią się zasoby i tyle w tym temacie.
<br />
<a name="procesor_procesorowi_nierowny"></a><h2>Procesor procesorowi nierówny</h2>
Żeby długo nie rozwodzić się nad architekturą procesora i jego budową to powiem tylko tyle, ze w zależności od typu jednostki obliczeniowej niektóre procesy/obliczenia mogą wykonywać się szybciej bądź wolniej. O ile się nie mylę to rozchodzi się o to ile określonych operacji np. zmiennoprzecinkowych może wykonać jednostka w tej samej chwili.
<br />

<br />
Do czego zmierzam? Otóż ten sam skrypt może rożnie zachowywać się i tym samym zżerać procesor na rożnych maszynach. Na jednej będzie się wykonywał szybciej a na drugiej wolniej. Warto przed transakcją sprawdzić czy odpowiedni <i>czas reakcji</i> odpowiada nam. Jeżeli na hostingu, który kupujemy występują limity na CPU koniecznie powinniśmy się dowiedzieć, na jakiej zasadzie są liczone. W przypadku &quot;braku limitów&quot; warto zapytać się ile faktycznie możemy wycisnąć z danej maszyny.]]></description></item><item><title>[PHP] Zaawansowana wyszukiwarka z funkcją wyświetlania i zamieniania wyników</title><pubdate>Sun, 20 Feb 2011 11:52:21 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/zaawansowana-wyszukiwarka-z-funkcjami-wyswietlania-zamieniania-podmieniania-wynikow-napisana-w-php/</link><comments>http://www.capaciouscore.pl/artykuly/zaawansowana-wyszukiwarka-z-funkcjami-wyswietlania-zamieniania-podmieniania-wynikow-napisana-w-php/#komentarze</comments><description><![CDATA[Na początku wyleje swoje żale do internetu. Mój kochaniutki dysk parę dni temu, po raz pierwszy, poważnie odmówił mi posłuszeństwa. Poleciała mi partycja systemowa zawierająca 10GB ważnych danych, które przepadły bezpowrotnie. Bardzo ładny gest ze strony twardziela. Niestety odzew musiał być adekwatny do sytuacji. Pięć minut sam na sam w piekarniku dało do myślenia opornym talerzom dysku. Po tym zdarzeniu o dziwo zaczął działać prawidłowo. Oczywiście z piekarnikiem żartuje ale kusiło mnie <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> W końcu trzeba iść do przodu, a nie cofać się.
<br />

<br />
Wracając do wątku, który będę redagował ponownie. Jakiś czas temu pewna osoba zainspirowała mnie do napisania, a raczej przyspieszenia prac nad skryptem, którego zadaniem było przeszukiwanie, wyświetlanie i podmienianie odpowiednich fraz ze zwróconych wyników. W związku z tym siadłem sobie na parę godzin przy edytorze i klepnąłem ową wyszukiwarkę plików. Zacznę od omówienia konfiguracji skryptu, która wygląda następująco:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;Konfiguracja</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'step'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'glob_path'</span><span style="color: #007700">]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'D:\xampp\htdocs\search'</span><span style="color: #007700">);</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'glob_flags'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">null</span><span style="color: #007700">;</span><span style="color: #0000BB">$conifg</span><span style="color: #007700">[</span><span style="color: #DD0000">'glob_pattern'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'*.txt'</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'search_file'</span><span style="color: #007700">]&nbsp;=&nbsp;array();</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'search_term'</span><span style="color: #007700">]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'#(test)#'</span><span style="color: #007700">);</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'remove_floppy_from_disks_list'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'show_source'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'show_empty_results'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'str_replace'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">null</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'preg_replace'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">null</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Pierwsza zmienna, czyli <tt>$config['step']</tt> oznacza krok, który ma zostać wykonany przez aplikację.
<br />

<br />
Lista kroków jest następująca:
<ol class="list list_1">
<li>Wyszukiwanie plików</li>
<li>Wyświetlanie wyników</li>
<li>Zamienianie określonych fraz w określonych wynikach</li>
</ol>

<br />
Zmienna <tt>$config['glob_path']</tt> odpowiedzialna jest za ścieżkę lub ścieżki, w których ma zacząć wyszukiwanie określonych plików. Wyszukiwanie opiera się na użyciu funkcji <tt>glob()</tt>, stąd też można zdefiniować flagi dla tej funkcji, podając je w zmiennej <tt>$config['glob_flags']</tt>. Następna zmienna (<tt>$conifg['glob_pattern']</tt>) jest bardzo istotna i mówi funkcji <tt>glob()</tt>, jakie pliki maja zostać znalezione. Oczywiście format powinien być zgodny z tym, jaki używa się w wyżej wymienionej funkcji. Jeżeli życzymy sobie bardziej zaawansowanego przeszukiwania po nazwach pliku, wtedy możemy wrzucić wzorce wyrażeń regularnych do tablicy <tt>$config['search_file']</tt>. Połączenie odpowiedniej konfiguracji <tt>$conifg['glob_pattern']</tt> oraz <tt>$config['search_file']</tt> może stanowczo przyspieszyć prace wyszukiwania. Następne 4 zmienne odpowiedzialne są za wyświetlanie wyników. Przypuśćmy, że chcemy, aby wyświetlało wyniki (zawartości plików) z szukaną przez nas frazą. W takim przypadku analogicznie tworzymy kolejne elementy tablicy <tt>$config['search_term']</tt> z odpowiednimi wartościami. Jeżeli posiadamy system Windows i chcemy, aby przeszukało wszystkie dyski z wyjątkiem stacji dyskietek, wtedy ustawiamy <tt>$config['remove_floppy_from_disks_list']</tt> na <tt>true</tt> i ustawiamy <tt>$config['glob_path']</tt> na puste, czyli <tt>null</tt>. Jeżeli życzymy sobie wyświetlania zawartości znalezionych plików, wtedy zmienna <tt>$config['show_source']</tt> powinna mieć wartość <tt>true</tt>. Gdyby zależało nam tylko i wyłącznie na wydobyciu nazw plików wtedy ustawiamy wyżej wymieniona zmienną na <tt>false</tt>. Ponadto wyniki zapisane są w pliku <b>results.txt</b> więc można nimi łatwo <i>manipulować</i>. Następna zmienna <tt>$config['show_empty_results']</tt> odpowiedzialna jest za wyświetlanie zawartości plików nie pasujących do wzorca. Czyli jeżeli plik nie jest pusty i zmienna ma wartość <tt>true</tt>, to i tak zostanie wyświetlony, mimo, że może się tak zdarzyć, że szukanej frazy w nim nie ma. Trzecia część konfiguracji odpowiedzialna jest za kod, który zamienia odpowiednie fragmenty kodu na inne fragmenty kodu. Brzmi ciężko, ale jest łatwe. Zmienna <tt>$config['str_replace']</tt> odpowiada, za podmianę przy pomocy funkcji <tt>str_replace()</tt> natomiast zmienna <tt>$config['preg_replace']</tt> jak jej nazwa wskazuje służy do wstawienia wzorców wyrażeń regularnych do funkcji <tt>preg_replace()</tt>. Owa funkcjonalność ma tą przewagę nad innymi edytorami, że pozwala na wstawienie np. <tt>\n</tt> i innych <i>dziwnych</i> znaków, których normalnie pole typu <tt>TextBox</tt> w edytorze nie zezwala. Właśnie ta funkcja była pożądana przez osobę, która inspirowała mnie do napisania tego skryptu. Pozwala ona na masową zmianę określonych plików, z zachowaniem odpowiednich reguł. Przykładowy wygląd tablic dla zamieniania metoda <tt>str_replace()</tt> i <tt>preg_replace()</tt> wygląda następująco:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'str_replace'</span><span style="color: #007700">]&nbsp;=&nbsp;array(array(</span><span style="color: #DD0000">'test'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">),&nbsp;array(</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'bar'</span><span style="color: #007700">));</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'preg_replace'</span><span style="color: #007700">]&nbsp;=&nbsp;array(array(</span><span style="color: #DD0000">'#(bar)#'</span><span style="color: #007700">),&nbsp;array(</span><span style="color: #DD0000">'\\1&nbsp;jest&nbsp;emo&nbsp;'</span><span style="color: #007700">));&nbsp;</span><span style="color: #FF8000">//&nbsp;Nie,&nbsp;nie&nbsp;mam&nbsp;nic&nbsp;do&nbsp;emo&nbsp;;)</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Powyższy przykład zamienia najpierw ciąg <i>test</i> na <i>foo</i>, a następnie <i>foo</i> na <i>bar</i>. W rezultacie tam gdzie wystąpiła fraza <i>test</i> pojawi się <i>magiczny bar</i>. Używanie <tt>preg_replace()</tt> ma o tyle wyższość nad innymi metodami, że możemy wrzucać dość zawiłe wzorce, nawet z odwołaniem się do innych funkcji PHP. Skala i możliwości użycia regex są na tyle duże, że nie sposób zliczyć, w jakich celach mogą zostać użyte. Pamiętajcie tylko, że w pierwszej tablicy mamy szukane elementy, a w drugiej ich zamienniki. Oczywiście możecie sobie rozszerzyć to o wiele wariatów tworząc tablice zagnieżdżone.
<br />

<br />
Swoją drogą starałem się jak najbardziej zoptymalizować skrypt, dlatego też powinien być wystarczająco szybki, aby przelecieć dysk szybciej aniżeli defaultowa wyszukiwarka windowsowska. Oczywiście dopuszczam do głowy myśl, że gdzieś mogłem popełnić błąd, stad prośba do osób wykorzystujących skrypt, aby znalezione bugi raportowali. Najlepiej w komentarzu pod artykułem bądź via private message. Moim zdaniem skrypt jest rozwojowy i można go rozszerzyć o kilka potrzebnych funkcjonalności. Kwestia czasu i chęci. Możliwe, że sam będę chętny, aby to zrobić, o ile pomysły na jego rozbudowę będą dostatecznie dobre.
<br />

<br />
Ponadto starałem się, aby skrypt był uniwersalny, dlatego też powinien działać na Window'sie, Linux'ie, Mac'u oraz systemach typu UNIX. Zapewne nie będzie on szybszy niż polecenia/aplikacje konsolowo-systemowe, jednak jego działanie powinno zadowolić nie jedna osobę. Przykładowy rezultat wyszukiwania:
<br />
<a href="http://www.capaciouscore.pl/download/other/search-results.png" target="_blank" class="postlink"><img src="http://www.capaciouscore.pl/download/other/miniatura-search-results.png" alt="miniatura-search-results.png" /></a>
<br />
Cały skrypt z plikami <i>testowymi</i> znajduje się w dziale <a href="http://www.capaciouscore.pl/skrypty/" target="_blank" class="postlink">skrypty</a> pod tytułem <a href="http://www.capaciouscore.pl/skrypty/zaawansowana-wyszukiwarka-plikow/" target="_blank" class="postlink">Zaawansowana wyszukiwarka plików</a>. Jeżeli wybierasz opcje numer dwa, to możesz skopiować całość z poniższego listingu:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">&lt;style&nbsp;type="text/css"&gt;body&nbsp;{&nbsp;width:&nbsp;98%;&nbsp;font-family:&nbsp;"Lucida&nbsp;Console";&nbsp;font-size:&nbsp;12px&nbsp;}code&nbsp;{&nbsp;width:&nbsp;100%;&nbsp;margin:&nbsp;10px&nbsp;0;&nbsp;padding:&nbsp;5px;&nbsp;overflow:&nbsp;auto;&nbsp;display:&nbsp;block;&nbsp;border:&nbsp;1px&nbsp;solid&nbsp;red&nbsp;}em.search&nbsp;{&nbsp;background:&nbsp;#CEC&nbsp;}&lt;/style&gt;<span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">/** *&nbsp;@version:&nbsp;1.00.00 *&nbsp;@author:&nbsp;CapaciousCore *///&nbsp;Konfiguracja</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'step'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'glob_path'</span><span style="color: #007700">]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'D:\xampp\htdocs\search'</span><span style="color: #007700">);</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'glob_flags'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">null</span><span style="color: #007700">;</span><span style="color: #0000BB">$conifg</span><span style="color: #007700">[</span><span style="color: #DD0000">'glob_pattern'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'*.txt'</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'search_file'</span><span style="color: #007700">]&nbsp;=&nbsp;array();</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'search_term'</span><span style="color: #007700">]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'#(test)#'</span><span style="color: #007700">);</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'remove_floppy_from_disks_list'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'show_source'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'show_empty_results'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'str_replace'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">null</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'preg_replace'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">null</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;Mała&nbsp;zmiana&nbsp;ustawień</span><span style="color: #007700">if(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'step'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">1&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'step'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">2&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'step'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">){</span><span style="color: #0000BB"> set_time_limit</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">);</span><span style="color: #0000BB"> ini_set</span><span style="color: #007700">(</span><span style="color: #DD0000">'memory_limit'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'32M'</span><span style="color: #007700">);}</span><span style="color: #FF8000">//&nbsp;Wyszukiwanie</span><span style="color: #007700">if(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'step'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">){</span><span style="color: #0000BB"> $start_time&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">get_time</span><span style="color: #007700">();</span><span style="color: #0000BB"> $files&nbsp;</span><span style="color: #007700">=&nbsp;array();</span><span style="color: #0000BB"> $targets&nbsp;</span><span style="color: #007700">=&nbsp;(!empty(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'glob_path'</span><span style="color: #007700">])&nbsp;?&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'glob_path'</span><span style="color: #007700">]&nbsp;:&nbsp;</span><span style="color: #0000BB">get_disks</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'remove_floppy_from_disks_list'</span><span style="color: #007700">]));</span><span style="color: #0000BB"> if</span><span style="color: #007700">(!empty(</span><span style="color: #0000BB">$targets</span><span style="color: #007700">))</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(!empty(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'search_file'</span><span style="color: #007700">]))</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $counter_filters_for_file_names&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'search_file'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$how&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$targets</span><span style="color: #007700">);&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$how</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $files&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">array_merge</span><span style="color: #007700">(</span><span style="color: #0000BB">$files</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">search_files</span><span style="color: #007700">(</span><span style="color: #0000BB">$targets</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">],&nbsp;(</span><span style="color: #0000BB">$conifg</span><span style="color: #007700">[</span><span style="color: #DD0000">'glob_pattern'</span><span style="color: #007700">]&nbsp;?&nbsp;</span><span style="color: #0000BB">$conifg</span><span style="color: #007700">[</span><span style="color: #DD0000">'glob_pattern'</span><span style="color: #007700">]&nbsp;:&nbsp;</span><span style="color: #DD0000">'*'</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'search_file'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$counter_filters_for_file_names</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'glob_flags'</span><span style="color: #007700">]));</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(@</span><span style="color: #0000BB">file_put_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'results.txt'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">serialize</span><span style="color: #007700">(</span><span style="color: #0000BB">$files</span><span style="color: #007700">)))</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; echo&nbsp;</span><span style="color: #DD0000">'Zapisano&nbsp;wyniki&nbsp;wyszukiwania&nbsp;(znaleziono:&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$files</span><span style="color: #007700">).</span><span style="color: #DD0000">'&nbsp;plików,&nbsp;szukano&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">round</span><span style="color: #007700">((</span><span style="color: #0000BB">get_time</span><span style="color: #007700">()&nbsp;-&nbsp;</span><span style="color: #0000BB">$start_time</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">8</span><span style="color: #007700">).</span><span style="color: #DD0000">'&nbsp;sekund)'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">else</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; echo&nbsp;</span><span style="color: #DD0000">'Nie&nbsp;udało&nbsp;się&nbsp;zapisać&nbsp;wyników&nbsp;wyszukiwania'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'Brak&nbsp;punktu&nbsp;lub&nbsp;punktów&nbsp;wejścia'</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}}</span><span style="color: #FF8000">//&nbsp;Wyświetlanie&nbsp;wyników</span><span style="color: #007700">else&nbsp;if(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'step'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">){</span><span style="color: #0000BB"> $data&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">unserialize</span><span style="color: #007700">(@</span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'results.txt'</span><span style="color: #007700">));</span><span style="color: #0000BB"> if</span><span style="color: #007700">(!empty(</span><span style="color: #0000BB">$data</span><span style="color: #007700">))</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$counter_search_terms&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'search_term'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$how&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">);&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$how</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $content&nbsp;</span><span style="color: #007700">=&nbsp;@</span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp; if</span><span style="color: #007700">(</span><span style="color: #0000BB">$content&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'show_source'</span><span style="color: #007700">])</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;b&gt;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">].</span><span style="color: #DD0000">'&lt;/b&gt;&lt;br&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'show_source'</span><span style="color: #007700">]&nbsp;&amp;&amp;&nbsp;!empty(</span><span style="color: #0000BB">$content</span><span style="color: #007700">))</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; if</span><span style="color: #007700">(</span><span style="color: #0000BB">$counter_search_terms&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">for(</span><span style="color: #0000BB">$i&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$i&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$counter_search_terms</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$i</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; $content&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">preg_replace</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'search_term'</span><span style="color: #007700">],&nbsp;</span><span style="color: #DD0000">"&lt;em&gt;\\1&lt;/em&gt;"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$content</span><span style="color: #007700">,&nbsp;-</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$counter_replaced</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$counter_replaced&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">0&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'show_empty_results'</span><span style="color: #007700">])</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; echo&nbsp;</span><span style="color: #DD0000">'&lt;pre&gt;&lt;code&gt;'</span><span style="color: #007700">.</span><span style="color: #0000BB">str_replace</span><span style="color: #007700">(array(</span><span style="color: #DD0000">'&amp;lt;em&amp;gt;'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'&amp;lt;/em&amp;gt;'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'&lt;/em&gt;&lt;em&gt;'</span><span style="color: #007700">),&nbsp;array(</span><span style="color: #DD0000">'&lt;em&nbsp;class="search"&gt;'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'&lt;/em&gt;'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">htmlspecialchars</span><span style="color: #007700">(</span><span style="color: #0000BB">$content</span><span style="color: #007700">)).</span><span style="color: #DD0000">'&lt;/code&gt;&lt;/pre&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">unset(</span><span style="color: #0000BB">$counter_replaced</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp; &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; &nbsp; else &nbsp; &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;pre&gt;&lt;code&gt;'</span><span style="color: #007700">.</span><span style="color: #0000BB">htmlspecialchars</span><span style="color: #007700">(</span><span style="color: #0000BB">$content</span><span style="color: #007700">).</span><span style="color: #DD0000">'&lt;/code&gt;&lt;/pre&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'Problem&nbsp;z&nbsp;odczytem&nbsp;wyników&nbsp;wyszukiwania'</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}}</span><span style="color: #FF8000">//&nbsp;Zastąpienie&nbsp;tresci</span><span style="color: #007700">else&nbsp;if(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'step'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">){</span><span style="color: #0000BB"> $data&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">unserialize</span><span style="color: #007700">(@</span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'results.txt'</span><span style="color: #007700">));</span><span style="color: #0000BB"> if</span><span style="color: #007700">(!empty(</span><span style="color: #0000BB">$data</span><span style="color: #007700">))</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$how_changed&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;$how&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$how</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $content&nbsp;</span><span style="color: #007700">=&nbsp;@</span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp; if</span><span style="color: #007700">(</span><span style="color: #0000BB">$content</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">if(!</span><span style="color: #0000BB">is_null</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'str_replace'</span><span style="color: #007700">]))</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; $new_content&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">str_replace</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'str_replace'</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'str_replace'</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$content</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">if(!</span><span style="color: #0000BB">is_null</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'preg_replace'</span><span style="color: #007700">])&nbsp;||&nbsp;(!empty(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'preg_replace'</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">])&nbsp;&amp;&amp;&nbsp;!empty(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'preg_replace'</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">])))</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; $new_content&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">preg_replace</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'preg_replace'</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'preg_replace'</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">],&nbsp;(!</span><span style="color: #0000BB">is_null</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'str_replace'</span><span style="color: #007700">])&nbsp;?&nbsp;</span><span style="color: #0000BB">$new_content&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">$content</span><span style="color: #007700">));</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">if((!</span><span style="color: #0000BB">is_null</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'str_replace'</span><span style="color: #007700">])&nbsp;||&nbsp;!</span><span style="color: #0000BB">is_null</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'preg_replace'</span><span style="color: #007700">]))&nbsp;&amp;&amp;&nbsp;</span><span style="color: #0000BB">$new_content&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">$content</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; if</span><span style="color: #007700">(@</span><span style="color: #0000BB">file_put_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$new_content</span><span style="color: #007700">))</span><span style="color: #0000BB"> &nbsp; &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">++</span><span style="color: #0000BB">$how_changed</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'Spośród&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$how</span><span style="color: #007700">.</span><span style="color: #DD0000">'&nbsp;plików&nbsp;przetworzono&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$how_changed</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'Problem&nbsp;z&nbsp;odczytem&nbsp;wyników&nbsp;wyszukiwania'</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}}else{</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'Nieznany&nbsp;krok'</span><span style="color: #007700">;}</span><span style="color: #FF8000">//&nbsp;Funkcje&nbsp;pomocnicze</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">search_files</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$pattern</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$search_file_names</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$counter_filters_for_file_names</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$flags&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">null</span><span style="color: #007700">){</span><span style="color: #0000BB"> $files&nbsp;</span><span style="color: #007700">=&nbsp;array();</span><span style="color: #0000BB"> $path&nbsp;</span><span style="color: #007700">.=&nbsp;(</span><span style="color: #0000BB">substr</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">,&nbsp;-</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;!=&nbsp;</span><span style="color: #0000BB">DIRECTORY_SEPARATOR&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #0000BB">DIRECTORY_SEPARATOR&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">);</span><span style="color: #0000BB"> $objects&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">glob</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">.(</span><span style="color: #0000BB">$pattern&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #0000BB">$pattern&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">'*'</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">$flags</span><span style="color: #007700">);</span><span style="color: #0000BB"> foreach</span><span style="color: #007700">(</span><span style="color: #0000BB">$objects&nbsp;</span><span style="color: #007700">as&nbsp;</span><span style="color: #0000BB">$object</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Plik</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">is_file</span><span style="color: #007700">(</span><span style="color: #0000BB">$object</span><span style="color: #007700">))</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; if</span><span style="color: #007700">(</span><span style="color: #0000BB">$counter_filters_for_file_names</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$counter_filters_for_file_names</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; if</span><span style="color: #007700">(</span><span style="color: #0000BB">preg_match</span><span style="color: #007700">(</span><span style="color: #0000BB">$search_file_names</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">basename</span><span style="color: #007700">(</span><span style="color: #0000BB">$object</span><span style="color: #007700">)))</span><span style="color: #0000BB"> &nbsp; &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;$files</span><span style="color: #007700">[]&nbsp;=&nbsp;</span><span style="color: #0000BB">$object</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">break;</span><span style="color: #0000BB"> &nbsp; &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; else &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;$files</span><span style="color: #007700">[]&nbsp;=&nbsp;</span><span style="color: #0000BB">$object</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">/* &nbsp;//&nbsp;Folder &nbsp;else&nbsp;if($pattern&nbsp;!=&nbsp;'*') &nbsp;{ &nbsp; //&nbsp;@todo:&nbsp;Tutaj&nbsp;powinien&nbsp;być&nbsp;segment&nbsp;odpowiedzialny&nbsp;za&nbsp;filtrowanie&nbsp;nazw&nbsp;folderów&nbsp;lub&nbsp;ścieżek&nbsp;-&nbsp;jak&nbsp;kto&nbsp;woli&nbsp;<img src="http://www.capaciouscore.pl/smiles/icon_razz.gif" class="emoticon" alt="Razz" /> &nbsp; $new_files&nbsp;=&nbsp;search_files($object,&nbsp;$pattern,&nbsp;$search_file_names,&nbsp;$counter_filters_for_file_names,&nbsp;$flags); &nbsp; if(!empty($new_files)) &nbsp; { &nbsp; &nbsp;$files&nbsp;=&nbsp;array_merge($files,&nbsp;$new_files); &nbsp; } &nbsp;} &nbsp;*/</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Przeszukiwanie&nbsp;folderu&nbsp;głównego&nbsp;i&nbsp;podfolderów</span><span style="color: #0000BB"> foreach</span><span style="color: #007700">(</span><span style="color: #0000BB">glob</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">.</span><span style="color: #DD0000">'*'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">GLOB_ONLYDIR</span><span style="color: #007700">)&nbsp;as&nbsp;</span><span style="color: #0000BB">$subdir</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$new_files&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">search_files</span><span style="color: #007700">(</span><span style="color: #0000BB">$subdir</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$pattern</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$search_file_names</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$counter_filters_for_file_names</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$flags</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;$files&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">array_merge</span><span style="color: #007700">(</span><span style="color: #0000BB">$files</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$new_files</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> return&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">is_array</span><span style="color: #007700">(</span><span style="color: #0000BB">$files</span><span style="color: #007700">)&nbsp;?&nbsp;</span><span style="color: #0000BB">$files&nbsp;</span><span style="color: #007700">:&nbsp;array());}function&nbsp;</span><span style="color: #0000BB">get_disks</span><span style="color: #007700">(</span><span style="color: #0000BB">$remove_floppy&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Windows</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">php_uname</span><span style="color: #007700">(</span><span style="color: #DD0000">'s'</span><span style="color: #007700">)&nbsp;==&nbsp;</span><span style="color: #DD0000">'Windows&nbsp;NT'</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$disks&nbsp;</span><span style="color: #007700">=&nbsp;`</span><span style="color: #0000BB">fsutil&nbsp;fsinfo&nbsp;drives</span><span style="color: #007700">`;</span><span style="color: #0000BB"> &nbsp;$disks&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">str_word_count</span><span style="color: #007700">(</span><span style="color: #0000BB">$disks</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$disks</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]&nbsp;!=&nbsp;</span><span style="color: #DD0000">'Drives'&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$disks</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]&nbsp;!=&nbsp;</span><span style="color: #DD0000">'Dyski'</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; return&nbsp;false</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">unset(</span><span style="color: #0000BB">$disks</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]);&nbsp;</span><span style="color: #0000BB">$disks</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'A'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$remove_floppy</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $catch</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">array_search</span><span style="color: #007700">(</span><span style="color: #DD0000">'A'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$disks</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp; $catch</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">array_search</span><span style="color: #007700">(</span><span style="color: #DD0000">'B'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$disks</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp; if</span><span style="color: #007700">(</span><span style="color: #0000BB">is_int</span><span style="color: #007700">(</span><span style="color: #0000BB">$catch</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]))</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">unset(</span><span style="color: #0000BB">$disks</span><span style="color: #007700">[</span><span style="color: #0000BB">$catch</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]]);</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; if</span><span style="color: #007700">(</span><span style="color: #0000BB">is_int</span><span style="color: #007700">(</span><span style="color: #0000BB">$catch</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]))</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">unset(</span><span style="color: #0000BB">$disks</span><span style="color: #007700">[</span><span style="color: #0000BB">$catch</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]]);</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;$disks&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">array_values</span><span style="color: #007700">(</span><span style="color: #0000BB">$disks</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(!empty(</span><span style="color: #0000BB">$disks</span><span style="color: #007700">))</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; foreach</span><span style="color: #007700">(</span><span style="color: #0000BB">$disks&nbsp;</span><span style="color: #007700">as&nbsp;</span><span style="color: #0000BB">$key&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$disk</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;$disks</span><span style="color: #007700">[</span><span style="color: #0000BB">$key</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$disk</span><span style="color: #007700">.</span><span style="color: #DD0000">':\\'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Mac,&nbsp;Linux,&nbsp;Unix</span><span style="color: #0000BB"> else&nbsp;</span><span style="color: #FF8000">//&nbsp;if(php_uname('s')&nbsp;==&nbsp;'Darwin'&nbsp;||&nbsp;php_uname('s')&nbsp;==&nbsp;'Linux'&nbsp;||&nbsp;php_uname('s')&nbsp;==&nbsp;'Unix')</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$disks&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">glob</span><span style="color: #007700">(</span><span style="color: #DD0000">'/*'</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> return&nbsp;$disks</span><span style="color: #007700">;}function&nbsp;</span><span style="color: #0000BB">get_time</span><span style="color: #007700">(){</span><span style="color: #0000BB"> list</span><span style="color: #007700">(</span><span style="color: #0000BB">$usec</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$sec</span><span style="color: #007700">)&nbsp;=&nbsp;</span><span style="color: #0000BB">explode</span><span style="color: #007700">(</span><span style="color: #DD0000">'&nbsp;'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">microtime</span><span style="color: #007700">());</span><span style="color: #0000BB"> return&nbsp;</span><span style="color: #007700">((float)</span><span style="color: #0000BB">$usec&nbsp;</span><span style="color: #007700">+&nbsp;(float)</span><span style="color: #0000BB">$sec</span><span style="color: #007700">);}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<a name="lista_rzeczy_do_zrobienia"></a><h2>Lista rzeczy do zrobienia</h2>
<ul class="list">
<li>Przyjazny interface</li>
<li>Nazwy wyszukanych plików mogą być linkami do nich</li>
<li>Możliwość wyłączenia przeszukiwania podfolderów (z uwzględnieniem ukrytych i systemowych)</li>
<li>Uwzględnienie daty stworzenia i modyfikacji pliku przy wyszukiwaniu</li>
<li>Uwzględnienie rozmiaru pliku</li>
<li>Przeszukiwanie archiwów</li>
<li>Inne, których teraz nie pamiętam i mi poleciały z partycją</li>
</ul>]]></description></item><item><title>[PHP][GD] Centrowanie napisu w poziomie i pionie</title><pubdate>Sun, 16 Jan 2011 10:40:57 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/centrowanie-napisu-w-poziomie-i-pionie-przy-pomocy-php-i-biblioteki-gd/</link><comments>http://www.capaciouscore.pl/artykuly/centrowanie-napisu-w-poziomie-i-pionie-przy-pomocy-php-i-biblioteki-gd/#komentarze</comments><description><![CDATA[Na prośbę pewnego internauty, zamieszczam poniżej rozwiązanie, jak centrować napis w poziomie i pionie, przy pomocy PHP i biblioteki GD. Wynik działania kodu wygląda następująco: <a href="http://www.capaciouscore.pl/download/other/center-text-on-image-using-gd.php" target="_blank" class="postlink"><img src="http://www.capaciouscore.pl/download/other/center-text-on-image-using-gd.php" alt="center-text-on-image-using-gd.php" /></a>
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;Config</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'width'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">559</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'height'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">50</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'font_size'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'text'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'CapaciousCore'</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;Create&nbsp;a&nbsp;image</span><span style="color: #0000BB">$im&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">imagecreate</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'width'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'height'</span><span style="color: #007700">]);</span><span style="color: #FF8000">//&nbsp;Colors</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'background'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">imagecolorallocate</span><span style="color: #007700">(</span><span style="color: #0000BB">$im</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">255</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">255</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">255</span><span style="color: #007700">);</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'border'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">imagecolorallocate</span><span style="color: #007700">(</span><span style="color: #0000BB">$im</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">238</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">241</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">242</span><span style="color: #007700">);</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'text'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">imagecolorallocate</span><span style="color: #007700">(</span><span style="color: #0000BB">$im</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">255</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">);</span><span style="color: #FF8000">//&nbsp;Draw&nbsp;the&nbsp;border</span><span style="color: #0000BB">imagerectangle</span><span style="color: #007700">(</span><span style="color: #0000BB">$im</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'width'</span><span style="color: #007700">]&nbsp;-&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'height'</span><span style="color: #007700">]&nbsp;-&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'border'</span><span style="color: #007700">]);</span><span style="color: #FF8000">//&nbsp;Calculate&nbsp;the&nbsp;font&nbsp;size</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'font'</span><span style="color: #007700">][</span><span style="color: #DD0000">'width'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">imagefontwidth</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'font_size'</span><span style="color: #007700">]);</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'font'</span><span style="color: #007700">][</span><span style="color: #DD0000">'height'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">imagefontheight</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'font_size'</span><span style="color: #007700">]);</span><span style="color: #FF8000">//&nbsp;Calculate&nbsp;the&nbsp;position</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'position'</span><span style="color: #007700">][</span><span style="color: #DD0000">'center'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">ceil</span><span style="color: #007700">((</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'width'</span><span style="color: #007700">]&nbsp;-&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'font'</span><span style="color: #007700">][</span><span style="color: #DD0000">'width'</span><span style="color: #007700">]&nbsp;*&nbsp;</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'text'</span><span style="color: #007700">]))&nbsp;/&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">);</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'position'</span><span style="color: #007700">][</span><span style="color: #DD0000">'middle'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">ceil</span><span style="color: #007700">((</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'height'</span><span style="color: #007700">]&nbsp;-&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'font'</span><span style="color: #007700">][</span><span style="color: #DD0000">'height'</span><span style="color: #007700">])&nbsp;/&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">);</span><span style="color: #FF8000">//&nbsp;Write&nbsp;the&nbsp;string</span><span style="color: #0000BB">imagestring</span><span style="color: #007700">(</span><span style="color: #0000BB">$im</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'font_size'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'position'</span><span style="color: #007700">][</span><span style="color: #DD0000">'center'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'position'</span><span style="color: #007700">][</span><span style="color: #DD0000">'middle'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'text'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'text'</span><span style="color: #007700">]);</span><span style="color: #FF8000">//&nbsp;Output&nbsp;image</span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">'Content-type:&nbsp;image/png'</span><span style="color: #007700">);</span><span style="color: #0000BB">imagepng</span><span style="color: #007700">(</span><span style="color: #0000BB">$im</span><span style="color: #007700">);</span><span style="color: #0000BB">imagedestroy</span><span style="color: #007700">(</span><span style="color: #0000BB">$im</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>]]></description></item><item><title>Budowanie mostów - gra</title><pubdate>Sun, 16 Jan 2011 12:45:41 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/gra-umozliwiajaca-budowanie-mostow/</link><comments>http://www.capaciouscore.pl/artykuly/gra-umozliwiajaca-budowanie-mostow/#komentarze</comments><description><![CDATA[Pamiętam, że dawno temu grałem sobie właśnie w gry, których celem było zbudowanie trwałego mostu i puszczenie przez niego pociągu lub innych pojazdów. Jako, że jestem programistą to oznacza, że obcuję na co dzień z logiką. Oznacza to (nie mniej, nie więcej), że muszę ją lubić i mieć na wysokim poziomie. W końcu nieprawidłowy warunek lub blok kodu i mamy błąd w aplikacji. <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Uważam, że większość programistów powinna sobie pograć, choć raz w życiu w tą grę, aby poćwiczyć szare komórki. W związku z tym parę tygodni temu znów mnie wzięło na pogranie w tą gierkę. Chwila googlowania i Voila! Udało mi się znaleźć nazwę, której nie pamiętałem. Po krótkiej analizie doszedłem do wniosku, że pojawiło się kilka nowych pozycji, związanych z tematyką gier umożliwiających budowanie mostów. Poniżej zamieszczam wszystkie znane mi tytuły gier z tej kategorii:
<br />
<ul class="list">
<li><a href="http://www.google.pl/images?q=Bridge+Builder" target="_blank" class="postlink">Bridge Builder</a></li>
<li><a href="http://www.google.pl/images?q=pontifex" target="_blank" class="postlink">Pontifex</a></li>
<li><a href="http://www.google.pl/images?q=pontifex+2" target="_blank" class="postlink">Pontifex 2</a></li>
<li><a href="http://www.google.pl/images?q=Bridge+Construction+Set" target="_blank" class="postlink">Bridge Construction Set</a></li>
<li><a href="http://www.google.pl/images?q=Bridge+It" target="_blank" class="postlink">Bridge It</a></li>
</ul>]]></description></item><item><title>Ograniczenie użycia procesora przez konkretny proces</title><pubdate>Sat, 15 Jan 2011 11:25:08 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/ograniczenie-uzycia-procesora-przez-konkretny-proces/</link><comments>http://www.capaciouscore.pl/artykuly/ograniczenie-uzycia-procesora-przez-konkretny-proces/#komentarze</comments><description><![CDATA[Jeżeli interesuje Cię, tylko i wyłącznie rozwiązanie, jak limitować użycie procesora przez wybrany proces/aplikacje, to <a href="http://www.capaciouscore.pl/artykuly/ograniczenie-uzycia-procesora-przez-konkretny-proces/#link" target="_blank" class="postlink">przeskocz niżej</a>, aż natrafisz na link. W innym przypadku deklarujesz chwilkę wolnego czasu i chęci do przeczytania artykułu, w którym dowiesz się, jak wpadłem na ten program. Zaczęło się to od tego, że kiedyś (dawno, dawno temu) grałem sobie w <a href="http://pl.wikipedia.org/wiki/MMORPG" target="_blank" class="postlink">MMORPG</a>'a o nazwie <a href="http://www.google.pl/images?q=knight%20online" target="_blank" class="postlink">Knight Online</a>. Ze względu na to, że mam komputer starszej generacji, to nie posiadam dwóch lub więcej rdzeni. Co za tym idzie, większość <i>super extra</i> napisanych gier, zazwyczaj żre blisko 100% CPU. Pewnego razu zadzwonił znajomy na <i>Skrzypie</i> (Skype) - chętnie pogadałbym na TeamSpeak'u, albo Vencie, jednak znajomy nie był powiązany z grą więc został Skype. Niby nic dziwnego się nie działo, gdyby nie fakt, że co parę minut rozmowa ucichała na kilkanaście sekund. Szybko doszedłem do wniosku, że to &quot;wina&quot; Skype. Pamiętałem, że jakiś czas temu, jakiś Gość na pewnym forum linkował do aplikacji, umożliwiającej ograniczenie użycia procesora względem wybranej aplikacji. Po chwili szukania znalazłem wątek, wszedłem na oficjalną stronę programu <a name="link"></a><a href="http://mion.faireal.net/BES/" target="_blank" class="postlink">BES - Battle Encoder Shirase</a> i tak oto zlimitowałem aplikację. Z ciekawości próbowałem szukać pod różnymi frazami, w tym kombinacji z &quot;limit&quot; i niestety Google niezbyt potrafiło mnie naprowadzić. Większość wątków dotyczyła Linux'a. Tak czy siak macie program i proponuje zapoznać się z instrukcją. Swoją drogą pamiętam, że rozmawiałem ze znajomym o tym programie i po przejrzeniu kodu źródłowego stwierdził, że nie jest to super extra rozwiązanie i może nie działać na niektórych systemach... Ogólnie rzecz biorąc, jeżeli chodzi o sam kod to, spełnia swoją role, choć powinno być inaczej napisane.]]></description></item><item><title>[PHP] Wyświetlanie reklamy na stronie co określony cykliczny czas</title><pubdate>Tue, 11 Jan 2011 11:49:01 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/wyswietlanie-reklamy-na-stronie-co-okreslony-cykliczny-czas/</link><comments>http://www.capaciouscore.pl/artykuly/wyswietlanie-reklamy-na-stronie-co-okreslony-cykliczny-czas/#komentarze</comments><description><![CDATA[Specjalnie na prośbę kolegi przedstawiam kod podobny do ostatniego artykułu lecz z <i>drobną</i> wzmianką. Być może komuś się przyda.
<br />

<br />
Poniższy skrypt wyświetla reklamy co określony, zdefiniowany czas. Dla przykładu ustawiamy wartość <tt>30</tt> dla zmiennej <tt>$config['advertising_interval_time']</tt> i jeżeli ktoś przeglądać stronę przekroczy czas 30 sekund od dostatniego odświeżenia to pojawi mu się reklama. Kolega @ivek wspomniał o zabezpieczeniu antyrefreshowym. Oznacza to, że trzeba sprawdzać czy ktoś w momencie wyświetlenia reklamy nie odświeżył ponownie strony aby spróbować przeskoczyć/ominąć reklamę. Wystarczy wygenerować odpowiedni link i sprawdzić czy został kliknięty. Ponadto reklama dla robotów sieciowych powinna być wyłączona (aby nie została zaindeksowana) stad metoda <tt>is_webcrawler()</tt>, która sprawdza czy odwiedzający nie jest botem. W najbliższym czasie postaram się napisać artykuł opisujący metody detekcji robotów sieciowych.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?phpsession_start</span><span style="color: #007700">();</span><span style="color: #FF8000">//&nbsp;Load&nbsp;the&nbsp;necessary&nbsp;things//&nbsp;include('./config.php');</span><span style="color: #007700">if(!isset(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'advertising_time'</span><span style="color: #007700">])){</span><span style="color: #0000BB"> $_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'advertising_time'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">time</span><span style="color: #007700">();}if(</span><span style="color: #0000BB">time</span><span style="color: #007700">()&nbsp;-&nbsp;</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'advertising_time'</span><span style="color: #007700">]&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'advertising_interval_time'</span><span style="color: #007700">]){</span><span style="color: #0000BB"> $_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'advertising_time'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">time</span><span style="color: #007700">();</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Show&nbsp;the&nbsp;ads</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'Pokaż&nbsp;reklamy'</span><span style="color: #007700">;}else{</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Show&nbsp;the&nbsp;page</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'Pokaż&nbsp;stronę'</span><span style="color: #007700">;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>]]></description></item><item><title>Luka w panelu klienta LinuxPL.com</title><pubdate>Sun, 09 Jan 2011 6:27:18 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/luka-w-panelu-klienta-linuxpl-com/</link><comments>http://www.capaciouscore.pl/artykuly/luka-w-panelu-klienta-linuxpl-com/#komentarze</comments><description><![CDATA[W sumie to dość banalny błąd. Najpierw source, a potem objaśnienie <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;Kod&nbsp;został&nbsp;wycięty&nbsp;z&nbsp;powodu&nbsp;dojścia&nbsp;do&nbsp;porozumienia&nbsp;miedzy&nbsp;stronami</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Jak widać kod jest prosty jak drut, a może wyrządzić dość nie chude szkody. Funkcje <tt>set_time_limit()</tt>, chyba każdy programista PHP zna i wie do czego służy. Gdyby lista e-maili i/lub loginów była długa, no to wiadomo, że skrypt przekroczyłby limit wykonywania. Dalej ustawiamy lokalizacje, gdzie ma znajdować się ciasteczko. Poniżej tego mamy ładowanie danych do tablicy. Oczywiście ja nie posiadam takiej bazy danych jednak z łatwością można ją zdobyć przez zripowanie loginów i e-maili (o ile ktoś podał) z tzw. <i>memberlist</i> na forach webmasterskich typu webhostingtalk.pl, forum.optymalizacja.com, forum.php.pl, forum.webhelp.pl, forumweb.pl. Jeżeli choć jedna baza danych z wyżej wymienionych for dyskusyjnych wyciekłaby, to szkody byłyby znacznie większe, gdyż posiadalibyśmy pełną listę mailingową. Dalej mamy pobieranie i zapisywanie ciasteczka. Bez wypieku nie &quot;przypomnimy&quot; sobie hasełka. Super mocne zabezpieczenie ;)
<br />

<br />
Część kulminacyjna, czyli pętelka. Deklarujemy sobie adresik do wysłania żądania. W parametrze GET wkładamy mail albo login i &quot;kodujemy&quot; do formatu URL. Dalej to już formalność. Ciasteczko i voila! Funkcja <tt>sleep()</tt>, została umieszczona po to, aby request nie szedł jeden za drugim za szybko. Przy braku limitu maile nie dochodziły ;) Dałem 3 sekundy miedzy requestami, choć uważam, że jedna lub dwie sekundy starczy.
<br />
<a name="demo"></a><h2>Demo</h2>
<a href="http://www.youtube.com/watch?v=5vKK5B6s3Yc">http://www.youtube.com/watch\?v=5vKK5B6s3Yc</a>
<br />
<a name="podstawowe_bledy"></a><h2>Podstawowe błędy</h2>
<img src="http://www.capaciouscore.pl/smiles/icon_point.gif" class="emoticon" alt="Point" /> Brak zabezpieczenia antyfloodowego
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_point.gif" class="emoticon" alt="Point" /> Brak np. captchy lub innego mechanizmu sprawdzającego, czy to nie robot wysyła zapytania
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_point.gif" class="emoticon" alt="Point" /> Brak linku potwierdzającego, że faktycznie właściciel konta chce zresetować hasło
<br />

<br />
Powinno znajdować się tam zabezpieczenie limitujące (per IP?) częstotliwość i ilość wysyłanych requestów. Uniemożliwi to potencjalnym osobom na wykonanie ataku podchodzącego nawet pod DoS. Drugą sprawą jest fakt, że nie zostanie zanotowany chaos komunikacyjny.
<br />

<br />
<b>Nota do refleksji:</b>
<br />
&quot;Nie można przełamać czegoś, co nie istnieje&quot; - sygn. akt VI K 849/07
<br />
<a name="problematyka"></a><h2>Problematyka</h2>
Nie miałem na celu atakowanie firmy, tylko wywołanie określonych reakcji (dyskusji) w sprawie blogera posługującego się nickiem @kubofonista. Cała sprawa została opisana na jego blogu we wpisie <a href="http://kubofonista.net/o-tym-jak-linuxpl-com-mnie-zalatwil" target="_blank" class="postlink">O tym jak LinuxPL.com mnie załatwił</a>. Dyskusja wywiązała się w komentarzach w wyżej wymienionym wpisie oraz na forum webhostingtalk.pl (<a href="http://www.webhostingtalk.pl/topic/66-opinia-linuxplcom/" target="_blank" class="postlink">watek z opiniami na temat  hostingu LinuxPL</a>).
<br />
<a name="napisali_o_nas_oraz_inne_linki"></a><h2>Napisali o nas oraz inne linki</h2>
Żeby się nie powtarzać, to powiem tylko, że resztę informacji znajdziecie tutaj:
<br />
<ul class="list">
<li><a href="http://kubofonista.net/o-tym-jak-linuxpl-com-mnie-zalatwil" target="_blank" class="postlink">O tym jak LinuxPL.com mnie załatwił</a> - Kubofonista HomePage</li>
<li><a href="http://www.youtube.com/watch?v=5vKK5B6s3Yc" target="_blank" class="postlink">Bug panelu klienta LinuxPL.com</a> - YouTube</li>
<li><a href="http://www.heise-online.pl/newsticker/news/item/Luka-w-panelu-klienta-Linuxpl-com-1165840.html" target="_blank" class="postlink">Luka w panelu klienta Linuxpl.com [Uzupełnienie]</a> - heise-online.pl</li>
<li><a href="http://www.wykop.pl/link/579049/bug-panelu-klienta-linuxpl-com/" target="_blank" class="postlink">Bug panelu klienta LinuxPL.com</a> - wykop.pl</li>
<li><a href="http://www.wykop.pl/link/579471/o-tym-jak-linuxpl-com-mnie-zalatwil-kubofonista-homepage/" target="_blank" class="postlink">O tym jak LinuxPL.com mnie załatwił | Kubofonista HomePage</a> - wykop.pl (ciekawa dyskusja)</li>
<li><a href="http://niebezpiecznik.pl/post/blad-w-panelu-klienta-linuxpl-com-pozwala-resetowac-hasla-klientom/" target="_blank" class="postlink">Błąd w panelu klienta Linuxpl.com pozwala resetować hasła wszystkim klientom</a> - obiecany niebezpiecznik.pl <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /></li>
<li>I inne (patrz -&gt; lista for dyskusyjnych powyżej)</li>
</ul>]]></description></item><item><title>[PHP] Wyświetlanie reklamy co kilka odświeżeń strony</title><pubdate>Wed, 29 Dec 2010 10:31:14 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/wyswietlanie-reklamy-co-kilka-odswiezen-strony/</link><comments>http://www.capaciouscore.pl/artykuly/wyswietlanie-reklamy-co-kilka-odswiezen-strony/#komentarze</comments><description><![CDATA[Parę dni temu zostałem poproszony o zrobienie małej modyfikacji na pewnej stronie. Jej celem było wprowadzenie mechanizmu wyświetlania reklam co kilka odświeżeń strony. Małe cudeńko, a jak cieszy wydawców. Kod prosty jak drut i chyba nie powinien wymagać tłumaczenia. W pierwszym <tt>if</tt> widzimy zakomentowany fragment odpowiedzialny za detekcje robotów sieciowych. Jest to temat na inny artykuł. Głównie chodzi o to, aby robot indeksujący stronę nie zaindeksował reklamy, która pojawia się co kilka skoków na stronie. Jeżeli zmienna <tt>$config['advertising_counter']</tt> posiada wartość <tt>3</tt> to reklamy będą wyświetlać się co piąte odświeżenie.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?phpsession_start</span><span style="color: #007700">();</span><span style="color: #FF8000">//&nbsp;Load&nbsp;the&nbsp;necessary&nbsp;things//&nbsp;include('./config.php');</span><span style="color: #007700">if(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'advertising_counter'</span><span style="color: #007700">]&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'advertising_counter'</span><span style="color: #007700">]&nbsp;</span><span style="color: #FF8000">/*&nbsp;&amp;&amp;&nbsp;!self::is_webcrawler()&nbsp;*/</span><span style="color: #007700">){</span><span style="color: #0000BB"> $_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'advertising_counter'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Show&nbsp;the&nbsp;ads</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'Pokaż&nbsp;reklamy'</span><span style="color: #007700">;}else{</span><span style="color: #0000BB"> </span><span style="color: #007700">++</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'advertising_counter'</span><span style="color: #007700">];</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Show&nbsp;the&nbsp;page</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'Pokaż&nbsp;stronę'</span><span style="color: #007700">;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Oczywiście fragment kodu umieszczamy w odpowiednim miejscu <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />]]></description></item><item><title>Kanał RSS</title><pubdate>Tue, 28 Dec 2010 10:17:07 +0100</pubdate><link>http://www.capaciouscore.pl/aktualnosci/kanal-rss/</link><comments>http://www.capaciouscore.pl/aktualnosci/kanal-rss/#komentarze</comments><description><![CDATA[Parę naście minut temu stworzyłem prowizoryczny <a href="http://www.capaciouscore.pl/rss/" target="_blank" class="postlink">kanał RSS</a>. Z tego co zdążyłem zauważyć jest on mocno niedopracowany, jednak co ważne, działa. Do momentu wypuszczenia nowego silniku strony nie mam w planach innych modyfikacji na stronie. Z tego co zauważyłem wyświetlanie kodu na kanale jest nieco upośledzone jednak daję radę. Innym znanym mi bugiem jest motyw w Operze, która za pierwszym razem wyświetla błąd parsowania XML. No cóż, braknie mi sił na takie pierdoły, dlatego też odwaliłem fuszerkę do której się przyznaje <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />]]></description></item><item><title>Ciekawe zachowanie phpMyAdmin'a w Operze</title><pubdate>Wed, 15 Dec 2010 8:05:27 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/ciekawe-zachowanie-phpmyadmina-w-operze/</link><comments>http://www.capaciouscore.pl/artykuly/ciekawe-zachowanie-phpmyadmina-w-operze/#komentarze</comments><description><![CDATA[<a href="http://www.youtube.com/watch?v=sU_uqiyzoaM">http://www.youtube.com/watch\?v=sU_uqiyzoaM</a>
<br />
Jeżeli ktoś wie czym spowodowane jest takie zachowanie Opery to może mi na ucho dyskretnie wyszeptać <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Napisałem na <a href="http://my.opera.com/polski/forums/topic.dml?id=839252" target="_blank" class="postlink">forum Opery</a> i jestem ciekawe czy uzyskam odpowiedź <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />
<br />

<br />
PS
<br />
Testowałem na Operze 10 i 11 beta - rezultat taki sam.]]></description></item><item><title>Recenzja edytora EdHTML</title><pubdate>Tue, 14 Dec 2010 11:04:17 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/recenzja-edytora-edhtml/</link><comments>http://www.capaciouscore.pl/artykuly/recenzja-edytora-edhtml/#komentarze</comments><description><![CDATA[<b>Zalety:</b>
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_plus.gif" class="emoticon" alt="Plus" /> Najszybciej uruchamiający się edytor
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_plus.gif" class="emoticon" alt="Plus" /> Nie jest przepakowany tysiącem okienek na starcie
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_plus.gif" class="emoticon" alt="Plus" /> Bardziej przyjazny po kilku zmianach (usuniecie splash logo, dźwięku i paru innych bajerów)
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_plus.gif" class="emoticon" alt="Plus" /> Szybkie pisanie stron (krojenie i szatkowanie layoutów)
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_plus.gif" class="emoticon" alt="Plus" /> Automatyczne zamykanie znaczników (<tt>&lt;/</tt> za otwartym tagiem)
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_plus.gif" class="emoticon" alt="Plus" /> Intuicyjne podpowiedzi atrybutów w formie listy (HTML)
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_plus.gif" class="emoticon" alt="Plus" /> Menu nie jest przepakowane bajerami
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_plus.gif" class="emoticon" alt="Plus" /> Prawidłowe przeskoki do następnego wiersza po wciśnięciu entera
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_plus.gif" class="emoticon" alt="Plus" /> Jedno z lepszych kolorowań składni (odnośnie HTML, PHP)
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_plus.gif" class="emoticon" alt="Plus" /> Dużo dodatków (szablony, podpowiedzi - nawet te PHP, dokumentacje)
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_plus.gif" class="emoticon" alt="Plus" /> Możliwość ustawienia tagów z małych bądź dużych liter
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_plus.gif" class="emoticon" alt="Plus" /> Szybkie sortowanie
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_plus.gif" class="emoticon" alt="Plus" /> Tworzenie kopii zapasowych. (W wypadku spadku napięcia, kopia jest w plikach tymczasowych)
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_plus.gif" class="emoticon" alt="Plus" /> Automatyczne usuwanie białych znaków
<br />

<br />
<b>Wady:</b>
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Brak skrótu klawiszowego pod opcje &quot;Zamknij wszystkie&quot;
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Funkcja zastąp nie posiada opcji <i>multireplace</i> (zastępowanie fraz we wszystkich otwartych plikach)
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Zakładki, podgląd i design całkowicie nietrafione.
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Niektóre rzeczy problematyczne w implementacji (interpreter PHP)
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Bardzo słaby kreator WWW
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Stare doctype i ustawienia stylów CSS.
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Bardzo ubogi mechanizm projektów
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Brak SVN lub podobnych
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Brak wsparcia/podpowiedzi w CSS
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Kolorowanie składni w CSS/PHP czasami się gubi (szczególnie z nawiasami klamrowymi)
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Przy ogromnym dokumencie licznik linijek potrafi być błędny
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Lista znaczników bardzo nieaktualna
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Ciężko zrozumieć niektóre narzędzia (np. kompresor HTML)
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Brak obsługi UTF-8
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Bardzo niedopracowany i ciężki w stosowaniu mechanizm sprawdzania pisowni
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Na sztywno ustawiona paleta kolorów (uboga)
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Ogromne wycieki pamięci i problemy z dostępem do pamięci przez program.
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Przy dłuższej pracy może się zdarzyć, że po wciśnięciu CTRL + Z, przywrócenie poprzedniego stanu nie jest możliwe tj. mogą wystąpić bardzo dziwne zachowania podczas cofania edycji.
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> <a href="http://www.capaciouscore.pl/artykuly/nie-wlaczajacy-sie-edhtml/" target="_blank" class="postlink">EdHTML ma problem z włączaniem się</a>.
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Brak wsparcia (podpowiedzi) dla JavaScript.
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Podstawowe polecenia MySQL z poziomu menu.
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Cienkie wsparcie dla reszty języków (patrz Dokument -&gt; Rodzaje dokumentu).
<br />
<img src="http://www.capaciouscore.pl/smiles/icon_minus.gif" class="emoticon" alt="Minus" /> Brak możliwości używania wyrażeń regularnych podczas zastąpiania
<br />

<br />
Ocena koncowa -4.]]></description></item><item><title>Test przeglądarek przedstawiający mechanizm dopasowania obrazka</title><pubdate>Sat, 11 Dec 2010 8:25:51 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/test-przegladarek-przedstawiajacy-mechanizm-dopasowania-obrazka/</link><comments>http://www.capaciouscore.pl/artykuly/test-przegladarek-przedstawiajacy-mechanizm-dopasowania-obrazka/#komentarze</comments><description><![CDATA[<a href="http://www.youtube.com/watch?v=j50FryD5flQ">http://www.youtube.com/watch\?v=j50FryD5flQ</a><a name="analiza"></a><h2>Analiza</h2>
Zacznę od tego, że jestem bardzo rozczarowany Operą. Gdyby nie mój fanatyzm i poświęcenie dla tej przeglądarki, to z pewnością bym ją rzucił. Bardzo smuci mnie fakt, że wszystkie bardziej znane, bądź używane przeglądarki na rynku, posiadają mechanizm dopasowywania obrazka do rozmiarów okna, a nieszczęsna Opera niestety nie. Nawet głupie IE6 robi <i>resize</i>!
<br />
<a name="lista_przegladarek_uzytyk_do_testu"></a><h2>Lista przeglądarek użytych do testu</h2>
Do testu użyto najnowszych stabilnych wersji przeglądarek (z wyjątkiem IE6, aby było trochę kontrastu).
<br />
<ul class="list">
<li>Google Chrome 8.0.552.215</li>
<li>Apple Safari 5.0.3 (7533.19.4)</li>
<li>Mozilla Firefox 3.6.12</li>
<li>Internet Explorer 6.0.2900.2180.xpsp_sp2_rtm.040803-2158</li>
<li>Opera 10.63 (kompilacja 3516)</li>
</ul>
Kolejność wystąpienia na liście jest taka sama jak na filmie.
<br />

<br />
Myślę, że kolejne wersje IE także maja zaimplementowany mechanizm dopasowywania obrazka. Jeżeli się mylę, to proszę mnie poprawić. Niestety nie mogłem zaktualizować IE z wiadomych powodów (nie, nie chodzi o pirackie). Po prostu jako webdeveloper czasami przydaje się wersja oznaczona cyferka 6, prawda?]]></description></item><item><title>Standardowe rozmiary bannerów reklamowych</title><pubdate>Fri, 10 Dec 2010 11:59:15 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/standardowe-rozmiary-bannerow-reklamowych/</link><comments>http://www.capaciouscore.pl/artykuly/standardowe-rozmiary-bannerow-reklamowych/#komentarze</comments><description><![CDATA[Banner (z ang. sztandar, transparent) jest jedną z form reklamy używanych na stronach internetowych. Celem banneru jest skuteczne przekazanie określonej treści odbiorcy. W związku z tym, bardzo istotną czynnością jest, zastanowienie się na etapie projektowania layoutu, jakie formy reklamy będą dostępne dla naszych reklamodawców. Podczas podejmowania decyzji w tym kierunku, musimy się zastanowić, jakie reklamy będą najbardziej efektywne dla nas. Istotna rzeczą jest to, aby <i>ogłoszenia</i> były czytelne i nie nachalne. 
<br />

<br />
Bannery dzielimy na dwie grupy: statyczne i dynamiczne. Do statycznych zaliczamy formy reklam zapisane w formacie JPEG, PNG i GIF (bez animacji). Do grupy dynamicznej zaliczamy pliki SWF oraz GIF (animowane).
<br />
<a name="cechy_charakterystyczne_dla_skutecznego_bannera_internetowego"></a><h2>Cechy charakterystyczne dla skutecznego bannera internetowego</h2>
Dobrze zaprojektowany banner, powinien charakteryzować się następującymi cechami:
<br />
<ul class="list">
<li>Po pierwsze musi potrafić <i>przyciągając oko</i> swoim oryginalnym wyglądem, wyróżniający się w jakiś sposób z całej strony.</li>
<li>Po drugie powinien zawierać esencje treści i klarowny przekaz. Zupełnie nie na miejscu jest umieszczanie zbędnych informacji.</li>
<li>Po trzecie banner powinien wchodzić w interakcję z odbiorcą, wymuszać określoną reakcję.</li>
<li>Po czwarte jeżeli banner jest animowany, to łączna długość animacji nie powinna przekraczać 15 sekund. Im dłuższa animacja tym większe prawdopodobieństwo, że znudzi odbiorcę.</li>
<li>Po piątek banner w większości przypadków nie powinien przekraczać wagi 40kB. Jest to optymalna waga dla polskich internautów.</li>
<li>Po szóste <i>sztandar</i> powinien posiadać odpowiednie wymiary, spełniające odpowiednie standardy.</li>
</ul>
<a name="cechy_charakteryzujace_zly_banner_reklamowy"></a><h2>Cechy charakteryzujące zły banner reklamowy</h2>
Źle zaprojektowany banner to taki, którego:
<br />
<ul class="list">
<li>Nie daje się zamknąć. Ostatnio spotkałem się z reklama, w której to był X i na prawo od X'sa był napis zamknij. Klikałem zamknij i zero reakcji, dopiero jak kliknęło się na X'sa, to reklama znikała.</li>
<li>Element zamykający jest umiejscowiony w taki sposób, aby trudno było go znaleźć. Bardzo często spotykane na rożnego rodzaju portalach internetowych  (onet.pl, wp.pl, interia.pl, o2.pl).</li>
<li>Link zamykający (albo X), fruwa po najechaniu na niego. Przykładem takiego działania jest często występująca reklama koksu na forum katalogi.pl.</li>
<li>Dźwięk ogłusza zamiast przyciągać w pierwszej sekundzie po jego załadowaniu. Bardzo nielubianą formą reklam jest właśnie <a href="http://www.wykop.pl/link/292153/stop-reklamom-z-autouruchamianym-dzwiekiem-to-nie-dziala/" target="_blank" class="postlink">banner z automatycznie włączającym się dźwiękiem</a>.</li>
<li>Efekt kalejdoskopu (szybko zmieniające się jaskrawe kolory na bannerze) razi w oczy internaute przeglądającego stronę.</li>
<li>Zawartość wylewa się na cały ekran i jakby mogła to by się wylała poza monitor.</li>
<li>Zawartość przypomina rożne elementy strony (np. inputy formularza).</li>
<li>Treść sugeruje, iż jesteś wygranym. Przykłady takich bannerów można znaleźć np. na imageshack.us</li>
<li>Pewnie znajdzie się jeszcze kilka, które dopisze później, bo teraz nie pamiętam <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /></li>
</ul>
Czasami odnoszę wrażenie, że wydawcy reklam myślą, iż w momencie kiedy użytkownik ustalił za cel, wyłączenie bądź wyciszenie reklamy, to wykonując tą operacje mimowolnie, siłą rzeczy, choć trochę kątem oka zwróci uwagę na treść reklamy. Przy kilkakrotnym powtórzeniu  takiej operacji, być może coś w głowię pozostaje, choć mam co do tego mieszane uczucia. A odnośnie reklam nie dających się zamknąć, to działają one bardziej na niekorzyść reklamodawcy, zrażając do siebie potencjalnych klientów.
<br />
<a name="inne_informacje"></a><h2>Inne informacje</h2>
Trzeba pamiętać, że <a href="http://www.ranking.pl/pl/rankings/flash-versions.html" target="_blank" class="postlink">czesc użytkowników nie ma zainstalowanego Flash Playera</a>, a część używa AdBlockera lub podobnych narzędzi, celem blokowania poniekąd natrętnych reklam. Według moich szacunków, około 10-15% użytkowników nie używa JavaScript. W wyniku takich restrykcji niektóre reklamy nie będą działać (np. AdSense).
<br />
<a name="standardowe_rozmiary_bannerow"></a><h2>Standardowe rozmiary bannerów</h2>
Wikipedia podaje, że istnieje wiele standardów rozmiarów bannerów. Ja osobiście nie spotkałem się z innymi, niż te podane przez <abbr title="European Interactive Advertising Association">EIAA</abbr>, oraz <abbr title="Interactive Advertising Bureau">IAB</abbr>. Żeby nie było niedomówień, to powinienem (chyba) powiedzieć, że za jednostkę miary przyjmuje się piksel. Dla mnie jest to oczywiste i mam nadzieje, że dla Was także. 
<br />
<a name="rozmiary_bannerow_reklamowych"></a><h3>Rozmiary bannerów reklamowych</h3>
Europejskie Stowarzyszenie Reklamy Interaktywnej (EIAA) oraz Biuro Reklamy Interaktywnej w Europie (IAB Europe) ustaliły następujące formaty bannerów (pogrubiono formaty najbardziej popularne):
<br />
<a name="prostokaty_oraz_pop_upy"></a><h4>Prostokąty oraz pop-upy</h4>
<ul class="list">
<li>180 × 150 (Prostokąt)</li>
<li>240 × 400 (Pionowy prostokąt)</li>
<li>250 × 250 (Kwadratowy pop-up)</li>
<li>300 × 250 (Średni prostokąt)</li>
<li>336 × 280 (Duży prostokąt) </li>
</ul>
<a name="bannery_i_buttony"></a><h4>Bannery i Buttony</h4>
<ul class="list">
<li><b>88 × 31</b> (Micro Bar)</li>
<li><b>120 × 90</b> (Button 1)</li>
<li><b>120 × 60</b> (Button 2)</li>
<li>120 × 240 (Pionowy banner)</li>
<li><b>125 × 125</b> (Kwadratowy button)</li>
<li>234 × 60 (Połowiczny banner)</li>
<li><b>468 × 60</b> (Pełny banner)</li>
<li><b>728 × 90</b> (Leaderboard/Super Banner)</li>
</ul>
<a name="wiezowce_skyscrapers"></a><h4>Wieżowce (Skyscrapers)</h4>
<ul class="list">
<li><b>120 × 600</b> (Wieżowiec, Skyscraper)</li>
<li><b>160 × 600</b> (Szeroki wieżowiec, Wide Skyscraper)</li>
<li>300 × 600 (Półstronicowa reklama)</li>
</ul>
<a name="inne_formaty"></a><h4>Inne formaty</h4>
<ul class="list">
<li>80 × 15 (<a href="http://pl.wikipedia.org/wiki/Antipixel" target="_blank" class="postlink">Antipixel</a>)</li>
<li>350 × 19 (<a href="http://pl.wikipedia.org/wiki/Userbar" target="_blank" class="postlink">Userbar</a>)</li>
</ul>
Swoja droga pamiętam, że kiedyś dużo stron umożliwiało wstawienie bannera o wymiarach 400 × 50.
<br />
<a name="strony_ktore_warto_przejrzec"></a><h2>Strony, które warto przejrzeć</h2>
<a href="http://www.iab.net/iab_products_and_industry_services/1421/1443/1452" target="_blank" class="postlink">Standardowe rozmiary bannerów według IAB</a>
<br />
<a href="http://pl.wikipedia.org/wiki/Banner" target="_blank" class="postlink">http://pl.wikipedia.org/wiki/Banner</a>
<br />
<a href="http://en.wikipedia.org/wiki/Web_banner" target="_blank" class="postlink">http://en.wikipedia.org/wiki/Web_banner</a>
<br />
<a href="http://pl.wikipedia.org/wiki/Reklama_internetowa" target="_blank" class="postlink">http://pl.wikipedia.org/wiki/Reklama_internetowa</a>
<br />
<a href="http://en.wikipedia.org/wiki/Online_Advertising" target="_blank" class="postlink">http://en.wikipedia.org/wiki/Online_Advertising</a>
<br />
<a href="https://www.google.com/adsense/static/pl/AdFormats.html" target="_blank" class="postlink">https://www.google.com/adsense/static/pl/AdFormats.html</a>
<br />
<a href="http://reklama.onet.pl/pobierz/reklama2/_i/Reklama_w_portalu_Onet_pl_specyfikacja_techniczna_01092010.pdf" target="_blank" class="postlink">http://reklama.onet.pl/pobierz/reklama2/_i/Reklama_w_portalu_Onet_pl_specyfikacja_techniczna_01092010.pdf</a>
<br />
<a href="http://i.reklama.wp.pl/document/specyfikacja_produktow_reklamowych_23092010.pdf" target="_blank" class="postlink">http://i.reklama.wp.pl/document/specyfikacja_produktow_reklamowych_23092010.pdf</a>
<br />
<a href="http://data.interia.pl/reklama/SpecyfikacjaReklam_101018.pdf" target="_blank" class="postlink">http://data.interia.pl/reklama/SpecyfikacjaReklam_101018.pdf</a>
<br />
<a href="http://reklama.o2.pl/docs/Specyfikacja.pdf" target="_blank" class="postlink">http://reklama.o2.pl/docs/Specyfikacja.pdf</a>
<br />
<a href="http://adv.gazeta.pl/pub/inb/reklama/specyfikacja.pdf" target="_blank" class="postlink">http://adv.gazeta.pl/pub/inb/reklama/specyfikacja.pdf</a>]]></description></item><item><title>Przerwa w działaniu serwisu</title><pubdate>Tue, 07 Dec 2010 8:51:42 +0100</pubdate><link>http://www.capaciouscore.pl/aktualnosci/przerwa-w-dzialaniu-serwisu/</link><comments>http://www.capaciouscore.pl/aktualnosci/przerwa-w-dzialaniu-serwisu/#komentarze</comments><description><![CDATA[Kilka dni temu dostałem maila z informacją, że dziś od godziny 24 do 6-7 rano nastąpi przerwa w działaniu serwisów znajdujących się na serwerze (s60.linuxpl.com), która spowodowana jest fizycznym przeniesieniem maszyny do innej szafy. Jedynie osoby myszkujące w sieci po nocy odczują tą przeprowadzkę i mam nadzieje, że będzie ich bardzo mało <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />]]></description></item><item><title>Internet Explorer 9 Beta</title><pubdate>Tue, 30 Nov 2010 1:00:46 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/internet-explorer-9-beta/</link><comments>http://www.capaciouscore.pl/artykuly/internet-explorer-9-beta/#komentarze</comments><description><![CDATA[Tydzień temu przypadkowo wpadłem na reklamówkę beta testów IE9:
<br />
<a href="http://ie9beta.idg.pl/" target="_blank" class="postlink"><img src="http://www.capaciouscore.pl/download/other/ie9.png" alt="ie9.png" /></a>
<br />
Podobno super ekstra wypas tylko niestety ja jako użytkownik Windowsa XP nie mam możliwości przetestowania. No cóż nie moja strata. Ciekawi mnie ile znajdą błędów krytycznych w aplikacji i ile zerżnięto pomysłów z innych przeglądarek <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />
<br />

<br />
Mam nadzieję, że Polscy webmasterzy i crackerzy dadzą do pieca Microsoftowi  aby udoskonalić nowe IE.]]></description></item><item><title>Atak zimy</title><pubdate>Mon, 29 Nov 2010 8:24:17 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/atak-zimy/</link><comments>http://www.capaciouscore.pl/artykuly/atak-zimy/#komentarze</comments><description><![CDATA[No i się zaczęło. Ładna zamieć od rana leci, śniegu w pył. Tylko dzieci się cieszą bo bałwana mogą ulepić. Kierowcy już nie <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Atak zimy oznacza wcześniejsze wstawanie i odśnieżanie autka. No przynajmniej Ci co parkują na parkingu zamiast w garażu. No ale nie każdy ma takie możliwości. Jak co roku zima zaskoczyła drogowców, a miski zbierają plony na tych co nie odśnieżyli auta na dachu.]]></description></item><item><title>Komunikator idealny - mały wywód</title><pubdate>Mon, 29 Nov 2010 8:08:58 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/komunikator-idealny-czyli-moj-maly-wywod/</link><comments>http://www.capaciouscore.pl/artykuly/komunikator-idealny-czyli-moj-maly-wywod/#komentarze</comments><description><![CDATA[We wpisie przedstawię moją wizję i przemyślenia dotyczące tego jak powinien wyglądać komunikator idealny albo co najmniej dobry. Swoje słowa kieruje głownie do osób choć trochę zorientowanych w dziedzinie informatyki. Jeżeli jesteś fanatycznym użytkownikiem Padu-Padu w wersji większej niż 7 i jesteś dumny z tego faktu to możesz od razu opuścić stronę, gdyż z góry jesteś skazany na wymarcie.
<br />

<br />
Jako internauta, programista i obserwator miałem dużo czasu aby przetestować rożne kanały komunikacji. Przez około 10 lat sprawdziłem większość komunikatorów dostępnych na rynku i doszedłem do wniosku, że żaden z nich nie zasługuję na miano dobrego. Zawsze znajdzie się mankament, który dyskwalifikuje aplikacje. Zacznijmy od prostej teorii. Komunikator idealny powinien charakteryzować się takimi rzeczami:
<ol class="list list_1">
<li>Po pierwsze <b>uniwersalny</b> protokół komunikacji niezależny od używanej aplikacji. W ten oto sposób to użytkownik będzie wybierał najlepsza dla niego aplikacje, a nie tak jak jest do tej pory, że wypromowany został jako pierwszy komunikator/standard komunikacji i większość ludzi została do niego przyzwyczajona choć z czasem się to zmienia. Zdaję sobie sprawę, że ta wizja jest nierealna gdyż w grę wchodzą duże profity i posiadanie monopolu na daną opcję to priorytetowa sprawa.</li>
<li>Po drugie powinien cechować się <b>kompatybilnością wsteczną</b>. Zespół inżynierów zwany dalej programistami powinien tak projektować swój twór aby nie było problemów z funkcjonowaniem projektu. Dla przykładu jakiś czasu temu Gadu-Gadu zmieniło sposób transferowania plików co w rezultacie powoduje np. w Tlenie (wersji oznaczonej cyferka 6) zawieszanie się programu w momencie zaakceptowania przesłania pliku. Sytuacja zawieszenia aplikacji ma miejsce do czasu kiedy użytkownik nie anuluje transferowania danych. Geniusz nie ma granic bo przy okazji można odkryć brak ogarnięcia ze strony programistów Tlenu. Mianowicie przesyłanie plików powinno odbywać się w oddzielnym wątku.</li>
<li>Po trzecie protokół powinien być tak skonstruowany, żeby powyżej 17 milionów użytkowników nadal można było się komunikować ze wszystkimi, a nie tak jak to ma miejsce teraz, że są straszne zgrzyty i wiadomości nie dochodzą albo dochodzą przez jakiś numer zwany dalej bramka... Jakby nie można było normalnie wysyłać wiadomości?!? Oczywiście mowa o sytuacji związanej z Gadu-Gadu.</li>
<li>Po czwarte przesyłanie plików powinno być zrobione na wzór tego, które występuję w komunikatorze Windows Live Messenger (MSN). Mówiąc wprost, chodzi o mechanizm <i>przeciągnij i upuść</i> (ang. drag and drop) czyli przeciągamy plik w okno rozmowy i odbiorca ma dwie możliwości manewru. Może zaakceptować transfer albo anulować. Limit przesyłanych plików powinien być rozegrany tak samo jak w MSN czyli jego wysokość powinna być zależna od prędkości wysyłania nadawcy. Im większy transfer posiadamy tym więcej plików możemy wysyłać w jednym czasie. Warto tutaj zastanowić się także nad kwestią tego ile taki transfer może trwać. Najlepiej byłoby gdyby pliki o znacznej wadze były przesyłane pojedynczo. W ten sposób można uniknąć problemów z błędami transferu. Im większy ruch w sieci (z/do komputera) tym większe prawdopodobieństwo, że pakiet urwie się. Dlatego też w trakcie wysyłania danych powinna być sprawdzania suma kontrolna zawartości co jakiś czas aby nie dopuścić do sytuacji, w której przesłano plik z błędami. Ważną cechą takiego przesyłania powinna być możliwość kontynuacji przesyłania po przerwaniu transferu. Taka sytuacja czasami ma miejsce w chwili np. odnawiania IP przez routera bądź chwilowych problemów z swoim <abbr title="Internet Service Provider">ISP</abbr>.</li>
<li>Po piąte nie znam lepszego komunikatora aniżeli Skype odnośnie rozmów głosowych. Myślę, że wykorzystanie technologii rodem z wyżej wymienionej aplikacji nie będzie grzechem.</li>
<li>Po szóste protokół komunikacji powinien umożliwiać sprawdzanie statusu wiadomości dzięki czemu już nigdy nie zaginie nam wiadomość i nie będziemy musieli się potem tłumaczyć, że coś nam nie doszło bo niefortunnie zerwało połączenie.</li>
<li>Po siódme dobrym pomysłem moim zdaniem jest umożliwienie użytkownikom stosowanie avataru. W ten sposób w ułamku sekundy skojarzymy odbiorcę bez czytania pseudonimu pod którym zapisaliśmy ofiarę.</li>
<li>Po ósme lista kontaktów powinna być aktualizowana na bieżąco co oznacza sytuacje, w której dodanie, modyfikacja bądź usuniecie kogoś z listy kontaktów odzwierciedla się tym samym stanem na serwerze. Przykładowym miejscem występowania takiego bajeru jest MSN.</li>
<li>Po dziewiąte autoryzacja. Jeżeli użytkownik życzy sobie aby dostawać wiadomości tylko od użytkowników z listy to trzeba uszanować jego wolę. W ten sposób stawiamy krzyżyk na drogę spamerom i innym dziwnym tworom (np. botom).</li>
<li>Po dziesiąte filtracja ruchu i wiadomości. Nie mam tutaj na myśli łamania prawa do prywatności korespondencji lecz implementacje filtrów antyspamowych. Oczywiście nic nie jest doskonale i zawsze można przechytrzyć regułę jednak trzeba budować mechanizmy aby były jak najtrudniejsze do złamania. Rozchodzi się o wysyłanie tej samej wiadomości do dużej ilości numerów. Taki ruch powinien być karany bo zazwyczaj wiążę się z nim wysyłanie reklam.</li>
<li>Po jedenaste to użytkownik decyduje o tym czy link jest bezpieczny bądź nie. Nie ma tu racji bytu decydowanie, a zarazem filtrowanie linków przesyłanych pomiędzy stronami.</li>
<li>Po dwunaste komunikator powinien ułatwiać tworzenie konferencji. I tutaj pojawia się zgrzyt. Najlepiej byłoby gdyby istniały dwie formy konferencji. Jedna to typ z operatorem dyskusji, która decyduje kogo dodać do konferencji, natomiast drugi typ to konferencja otwarta i dowolna osoba dołączona może dołączać kolejne. Z drugim typem wiążę się pewne zagrożenie dlatego prędkość dodawania nowych osób powinna być limitowana bądź odbiorca powinien akceptować fakt czy chce zostać dodany do konferencji. Innym sposobem zapobiegania problemów może być akceptowanie zaproszeń do konferencji jedynie od użytkowników z listy.</li>
<li>Po trzynaste komunikator powinien umożliwiać multisend. Termin wymyślony specjalnie na tą okazję. Oznacza nic innego jak możliwość wysyłania plików do wszystkich zgromadzonych na konferencji. Według mnie zasada powinna być prosta. Źródło pierwotne wysyła plik(i) do odbiorców zgodnie ze swoimi możliwościami. W praktyce może to oznaczać np. wysłanie pliku do jednej osoby, a następnie gdy ta osoba odbierze plik to ona również staje się źródłem czyli coś na zasadzie sieci <abbr title="peer-to-peer">P2P</abbr>.</li>
<li>Dobrym pomysłem będzie otwarty kod źródłowy aplikacji. Dzięki temu dowolna osoba znająca się na programowaniu będzie mogła modyfikować klienta według własnego uznania. Minimalnym rozwiązaniem, a zarazem furtką będzie udostępnienie <abbr title="Application Programming Interface">API</abbr> i możliwości pisania/uruchamiania własnych wtyczek.</li>
<li>Innym dobrym pomysłem może być zaczerpnięcie mechanizmu udostępniania fotografii z MSN'a. Wystarczy przeciągnąć i po chwili odbiorca widzi obraz w oknie rozmowy. Co najważniejsze nie w miejscu gdzie tekst się pojawia tylko w osobnym fragmencie dzięki czemu będzie można zminimalizować udostępnioną fotografię. W ten sposób nie trzeba będzie przewijać rozmowy aby zobaczyć jakąś grafikę.</li>
<li>Niedawno czytałem blog gadu gadu i ktoś rzucił pomysłem aby identyfikatory były w formie numeru_bądź_nicku@gg.pl. Moim zdaniem taki pomysł nie jest głupi gdyż ułatwi zapamiętywanie swojego loginu.</li>
<li>Cztery podstawowe statusy powinny w zupełności wystarczyć przeciętnemu pożeraczowi internetu.</li>
<li>Zastanawiam się nad brzęczykiem rodem z MSN'a. Możliwe, że jest to dobry pomysł o ile nie będzie nadużywany. Kwestia ustawień?</li>
<li>Opisowy status powinien mieścić się w 255 znakach przy czym komunikator powinien mieć możliwość usuwania znaku nowej linii w opisie.</li>
<li>Czasami zdarzają się nam osoby na liście, które maja problemy ze swoim ISP. Komunikator powinien umożliwiać czasowe mutowanie. Mam na myśli wyciszanie dźwięku dla konkretnej osoby gdy ta cyklicznie pojawia się i znika.</li>
<li>Moim zdaniem zakazane powinno być szybkie zmienianie stanu dostępności. Przez chwile pomyślałem o takim bajerze, który pokazywałbym mniej więcej aktywność danego użytkownika. Niestety ma to swoją wadę, gdyż można byłoby kogoś szpiegować i pilnować czy siedzi przy komputerze i rusza myszą <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Tak więc odpada.</li>
<li>Inną priorytetową cechą charakterystyczną powinna być prawidłowa <b>optymalizacja</b>. W czasach kiedy komputery były słabe programista walczył o każdy bajt zajmowany przez program w pamięci komputera. Dzisiaj w świecie przekokszonych pieców optymalizacja zeszła na dalszy plan. Przykładem jest oficjalny klient Gadu-Gadu, który zajmuje dużo ponad <a href="http://www.wykop.pl/link/515307/gg10-potrzebuje-wiecej-pamieci-niz-windows-xp/" target="_blank" class="postlink">200 <i>koła bajtów</i></a> O_o Takie rzeczy są chore i powinny być leczone na psychiatryku przez wybitnych specjalistów aby żaden programista nie myślał, że to normalne dla programu, który ma umożliwiać tylko rozmowę z drugą osobą!</li>
<li>Tutaj coś co wyleciało mi z głowy <img src="http://www.capaciouscore.pl/smiles/icon_sad.gif" class="emoticon" alt="Sad" /></li>
<li>Jedna rzecz mi się przypomniała ale to nie ta co wyleciała piętro wyżej. Niedopuszczalnym zjawiskiem jest sytuacja, w której wysyłane są reklamy pomiędzy naszymi wypowiedziami. Tak karygodna sytuacja powinna być iskrą zapalną dla wszystkich użytkowników, że czas najwyższy zmienić platformę komunikacyjną!</li>
<li>Nieaktywne identyfikatory pozostawione przez dłuższy czas powinny być wrzucane do puli, z której ktoś inny mógłby z nich skorzystać. W ten sposób zostanie zachowana naturalna kolej rzeczy, a nie sztucznie podbijana statystyka.</li>
<li>Komunikator powinien mieć także możliwość udostępniania tego co widzi nadawca czyli coś ala TeamViewer bądź dzielnie się ekranu rodem ze skrzypa (Skypa).</li>
<li>Nie wolno zapominać o obsłudze kamerki internetowej.</li>
<li>Odnośnie funkcjonalności to komunikator powinien być tak napisany aby nie było możliwości podglądania danych profilu jak to jest w przypadku <b>config.dat</b></li>
<li>Dobry komunikator powinien się także charakteryzować dobrą obsługą archiwum. Oczywiście po stronie klienta bo strona serwera to już inna bajka. Plik archiwum powinien być tak skonstruowany aby osoba postronna nie mogła go po prostu skopiować i odczytać. Z drugiej zaś strony przy przyzwoleniu właściciela archiwum powinno dać się eksportować do  formatu XML.</li>
<li>Naturalna rzeczą jest utrzymanie projektu w ryzach. Mam na myśli kwestie finansowe czyli mówiąc wprost opłacalność przedsięwzięcie. Żeby nie było jak z Gadu-Gadu czyli pazerność na mamonę. Jedną kwestią jest baner w oknie rozmowy, który można zrozumieć. Te 50 czy 100 tysięcy złotych na dobę można zrozumieć ale nie ekstra migające flashe i gify obok listy kontaktów. Poza tym reklama w głównym oknie reklamy powinna w zupełności wystarczyć na utrzymanie serwerów, opłacenie ludzi i zaspokojenie swoich poniekąd chorych potrzeb.</li>
<li>Dobry team zajmujący się komunikatorem powinien cechować się także reakcją na pomysły ze strony użytkowników. Najlepszym przykładem jest blog Gadu-Gadu, w którym pracownicy korporacji nigdy nie odpowiadają. Ludzkim zachowaniem powinna być interakcja ze swoimi podopiecznymi.</li>
<li>Prawidłowo zbudowany komunikator powinien być także <b>elastyczny</b> i przy pomocy jak najmniejszego wysiłku dawać się dostosowywać do potrzeb użytkownika. Głównie chodzi mi o wygląd.</li>
<li>Ponadto interfejs powinien być <b>intuicyjny</b> dzięki czemu użytkownik nie będzie tracił zbędnego czasu na szukanie funkcji X z działu Y.</li>
<li>I chyba najważniejszy punkt z listy. Komunikator to komunikator, a nie stacja radiowa, telewizyjna i bóg wie co jeszcze... Wszelkie dodatki typu gry, chaty, sklepy internetowe, niusy z pierwszej ręki są stanowczo nie na miejscu!!!</li>
</ol>

<br />
Jeżeli macie jakiekolwiek sugestie odnośnie listy, zgadzacie się bądź nie zgadzacie z którymś z punktów byłbym wdzięczny gdybyście zamieścili takie uwagi w komentarzach poniżej artykułu <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Myślę, że wspólnymi siłami można zawsze dojść do konsensusu.]]></description></item><item><title>Genialna konferencja z nieznanymi numerami na Gadu-Gadu</title><pubdate>Sun, 28 Nov 2010 7:41:06 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/genialna-konferencja-z-nieznanymi-numerami-na-gadu-gadu/</link><comments>http://www.capaciouscore.pl/artykuly/genialna-konferencja-z-nieznanymi-numerami-na-gadu-gadu/#komentarze</comments><description><![CDATA[Od jakiegoś czasu część z Was zaobserwowała dziwne konferencje przesyłane przez protokół Gadu-Gadu. Wygląda to zazwyczaj tak, że jedna osoba napisze np. znak zapytania, a potem cała spirala już się sama nakręca. Przykładowo wygląda to tak:
<br />
<a href="http://www.capaciouscore.pl/download/other/slepa-konferencja.png" target="_blank" class="postlink"><img src="http://www.capaciouscore.pl/download/other/mini-slepa-konferencja.png" alt="mini-slepa-konferencja.png" /></a>
<br />
Podejrzewam, że ktoś <i>wybitnie zdolny</i> znalazł kolejną dziurę albo jak wolicie błąd w protokole gg. Wystarczy pierwszy lepszy bot, który może używać protokółu gg i tworzenie takich konferencji na podstawie losowych numerów idzie w tysiące jeżeli nie setki tysięcy. Ciekawe jaki odsetek ruchu na serwerach Gadu-Gadu stanowią te <i>ślepe konferencję</i>.
<br />

<br />
Najgorsze w tym wszystkim jest to, że co jakiś czas ktoś z konferencji przeczyta wiadomości i odpiszę co w rezultacie powoduję ponowne rozesłanie wiadomości do wszystkich i ponowne pojawianie się okienka... Ponadto zdarzają się nie tak rzadko przypadki, w których osoba się nas pyta osobiście <i>kim jesteśmy</i> albo <i>co to za konferencja</i>.
<br />

<br />
Moja rada jest taka aby po prostu ignorować wiadomości przychodzące z konferencji jak i nieznajomych numerów. Mam nadzieje, że ekipa GG naprawi szybko swój błąd.
<br />

<br />
Przez ten bajzel pracuję właśnie nad małą wtyczka do Tlenu aby nie otwierał okienek konferencji jeżeli któryś z numerów jest z poza listy kontaktów.]]></description></item><item><title>Po wyborach...</title><pubdate>Thu, 25 Nov 2010 3:17:18 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/po-woborach-samorzadowych-2010/</link><comments>http://www.capaciouscore.pl/artykuly/po-woborach-samorzadowych-2010/#komentarze</comments><description><![CDATA[Miałem się nie pchać w stronę polityki jednak... to nie ja przyszedłem do polityki lecz polityka przyszła do mnie. Dosłownie! Stos ulotek od PO i kilka z innych partii. Dziennie serwowano po 5-6 zbędnych kolorowych papierków przez tydzień co daje dość spora liczbę. Teraz na spokojnie można ocenić wybory chłodnym okiem. Jak zwykle nie obyło się bez incydentów i sprzedaży głosów ale kto się tym przejmuje <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> W większości województw została wybrana Platforma Obywatelska co daję do myślenia. Najlepsze jest to, że w niektórych województwach partie lokalne osiągnęły dość dobre wyniki. Za tydzień z hakiem w niektórych miejscach odbędzie się druga tura wyborów. Czas pokaże czy decyzje podjęte przez ludzi były dobre. Szkoda tylko, że z roku na rok ludzi coraz mniej interesuję te małe <i>bagienko</i> co odzwierciedla się we frekwencji.]]></description></item><item><title>Genialny pomysł PKP Intercity</title><pubdate>Tue, 23 Nov 2010 1:20:20 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/genialny-pomysl-pkp-intercity/</link><comments>http://www.capaciouscore.pl/artykuly/genialny-pomysl-pkp-intercity/#komentarze</comments><description><![CDATA[Parę dni temu usłyszałem o genialnym <a href="http://www.intercity.pl/?page=strona_glowna&amp;ph_center_start=show&amp;cmn_id=1896" target="_blank" class="postlink">pomyśle</a> PKP Intercity. Nie było nic w tym dziwnego gdyby nie fakt, że opinie i stan kolejnictwa w Polsce powinien być dobrze znany osobom odpowiedzialnym za infrastrukturę. Jest to praktycznie stwierdzanie oczywistej oczywistości więc nie wiem co oni chcą jeszcze wiedzieć? Poza tym ładnie wysługują się swoimi klientami. Zamiast pytać o takie rzeczy to powinni już dawno działać bo euro 2012 tuż, tuż... Swoją drogą, chyba większość z Was nie zna osoby, która byłaby zadowolona z ich usług.
<br />

<br />
PS
<br />
Swoje przeżycia odnośnie korzystania z usług PKP (regionalnych i Intercity) zostały przeze mnie opisane we wpisie <a href="http://www.capaciouscore.pl/artykuly/polskie-koleje-panstwowe-czyli-smrod-brud-i-ubostwo/" target="_blank" class="postlink">Polskie Koleje Państwowe</a>.]]></description></item><item><title>Parę technicznych zmian</title><pubdate>Wed, 17 Nov 2010 8:09:50 +0100</pubdate><link>http://www.capaciouscore.pl/aktualnosci/pare-technicznych-zmian/</link><comments>http://www.capaciouscore.pl/aktualnosci/pare-technicznych-zmian/#komentarze</comments><description><![CDATA[Lista zmodyfikowanych rzeczy:
<br />
<ul class="list">
<li>poprawiono <i>niedziałający BBCode</i>*, który pojawiał się obok pola przepisz token,</li>
<li>poprawiono parę literówek w kodzie,</li>
<li>zmieniono formę wyświetlania linka do strony autora komentarza; teraz nick jest automatycznie linkiem do strony oczywiście jeżeli takowa została podana.</li>
</ul>
Ponadto muszę także zająć się <tt>target=&quot;_blank&quot;</tt> bo to użytkownik powinien decydować kiedy otworzyć linka w nowym oknie, a nie webmaster <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" />
<br />

<br />
Mam nadzieje, że tą modyfikacją linkowania zachęcę choć trochę do komentowania wpisów.
<br />

<br />
* Taki niedziałający kod można jeszcze znaleźć w miejscu komunikatu gdy dane komentarza zostaną wypełnione nieprawidłowo <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />]]></description></item><item><title>Ustawa antynikotynowa</title><pubdate>Mon, 15 Nov 2010 7:28:18 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/ustawa-antynikotynowa/</link><comments>http://www.capaciouscore.pl/artykuly/ustawa-antynikotynowa/#komentarze</comments><description><![CDATA[Od dziś czyli 15 listopada 2010 roku wchodzi w życie ustawa antynikotynowa. W rezultacie w większości lokalów palacze maja popalone. Dlaczego? Bo nie wszystkie właściciele lokalów dadzą radę wydzielić miejsce do palenia. Aby zobrazować Wam co się stało poniżej zamieszczam taki oto znajomy znaczek.
<br />
<img src="http://www.capaciouscore.pl/download/other/zakaz-palenia.jpg" alt="zakaz-palenia.jpg" />
<br />
Z jednej strony to dobrze bo może więcej niepalących będzie teraz po lokalach przesiadywać, a z drugiej to prawdopodobnie z początku właściciele lokalów odnotują straty. Część palaczy nie ma nic przeciwko takiej akcji, a część jest po prostu na nie. Czas pokaże czy to była właściwa decyzja ze strony rządzących.
<br />

<br />
Zainteresowanych tematyką odsyłam do artykułów:
<br />
<ul class="list">
<li><a href="http://www.fajka.net.pl/problemy/fajczarskie-problemy/ustawa-antyfajczarska-calosc/" target="_blank" class="postlink">Ustawa antyfajczarska *całość</a></li>
<li><a href="http://www.strefabiznesu.nto.pl/artykul/od-15-listopada-zakaz-palenia-w-miejscach-publicznych-w-calej-polsce-42365.html" target="_blank" class="postlink">Od 15 listopada zakaz palenia w miejscach publicznych w całej Polsce</a>
</ul>
oraz strony <a href="http://zakaz-palenia.pl/" target="_blank" class="postlink">zakaz-palenia.pl</a>.
<br />

<br />
A Wy co sadzicie o tym przedsięwzięciu?]]></description></item><item><title>AdSense</title><pubdate>Sun, 07 Nov 2010 6:02:56 +0100</pubdate><link>http://www.capaciouscore.pl/aktualnosci/adsense/</link><comments>http://www.capaciouscore.pl/aktualnosci/adsense/#komentarze</comments><description><![CDATA[Zapewne część z Was zauważyła, że w górnej części kontenera z treścią umieściłem reklamy AdSense. Na razie zysk niewielki ale nie od razu Rzym zbudowano <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Miałem zamiar umieścić jeszcze jeden kontener z reklama pod treścią jednak błędy konstrukcyjne serwisu skutecznie uniemożliwiły mi ten cel. Nie tracąc czasu na poprawki starej strony coraz bardziej pochłaniam się w tworzeniu nowego silnika strony i modułów potrzebnych do jego działania.]]></description></item><item><title>1 listopada</title><pubdate>Sat, 06 Nov 2010 2:55:40 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/1-listopada/</link><comments>http://www.capaciouscore.pl/artykuly/1-listopada/#komentarze</comments><description><![CDATA[Czas zbiera żniwa. Parę dni w sieci mnie nie było, a tu już takie zaległości <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Najpierw pokażę <i>piękny obrazek</i>, a potem już nie będzie tak kolorowo.
<br />
<img src="http://www.capaciouscore.pl/download/other/cmentarz.jpg" alt="cmentarz.jpg" />
<br />
Statystyki jak co roku pokazują, że pomimo próśb, gróźb i starań polskie drogi są bezpieczne inaczej. W tym roku 39 osób zostało zabitych, 532 rannych i złapano 1880 pijanych kierowców, czyli praktycznie co roku to samo. Akcja &quot;Znicz&quot; pełną gębą, prawda?
<br />

<br />
Poza tym można było poczuć ten specyficzny klimat. Masa ludzi na drogach i cmentarzach. Jak co roku nie było gdzie zaparkować w większych miastach. Można było za to usłyszeć bardzo klimatyczną muzykę z głośników na cmentarzu <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Ciekawe po co taki zabieg? Zastanawia mnie o ile wzrosły obroty sklepów z kwiatami <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Dodajmy do tego unikalne polecenia wydawane przez starszych, które część z Was na pewno usłyszała i mamy prawdziwy urok <a href="http://demotywatory.pl/325393/1-listopada" target="_blank" class="postlink">1 listopada</a>.
<br />

<br />
Na deser załączę taki oto film pokazany jak dobrze pamiętam w TVN. Sam już nie wiem czy ludzie żyjący w USA są aż tak przestraszeni, a może po prostu potrafią ładnie symulować.
<br />
<a href="http://www.youtube.com/watch?v=yO-Ryd0MRIE">http://www.youtube.com/watch\?v=yO-Ryd0MRIE</a>]]></description></item><item><title>Wypompowany</title><pubdate>Wed, 27 Oct 2010 10:20:15 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/wypompowany/</link><comments>http://www.capaciouscore.pl/artykuly/wypompowany/#komentarze</comments><description><![CDATA[Powoli kładąc się spać pomyślałem, że zanim to zrobię zostawię małą notkę. Otóż parę godzin temu porobiłem sobie za tragarza i już teraz odczuwam fajne sensacje na rękach, plecach i nogach. Zakwasy na jutro mam jak w banku, a wszystko to po to, aby osoba oglądająca telewizornie pokój obok nie [tutaj cenzura] <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />. I tak oto, zrobiłem jakieś 12-15 kursów na drugie piętro z obciążeniami rzędu 10 i 35 kilogramów. Miło, prawda? ]]></description></item><item><title>Euroskrzynki</title><pubdate>Tue, 26 Oct 2010 6:50:03 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/euroskrzynki/</link><comments>http://www.capaciouscore.pl/artykuly/euroskrzynki/#komentarze</comments><description><![CDATA[Do dnia 24 sierpnia 2008 roku każdy właściciel lub współwłaściciel nieruchomości miał  obowiązek wymiany skrzynki pocztowej na tak zwany model euro. Od tego czasu euroskrzynki zagościły u nas na dobre. Niby ładnie prezentują się na klatkach schodowych jednak jest kilka &quot;ale&quot;. Dzięki takiej modyfikacji listonosz nie musi otwierać całego segmentu tylko wrzuca do odpowiedniego numerka i już. Prawda, że banalne? Niestety ma to też swój minus. Ulotki reklamowe z taką samą łatwością wpadają do skrzynek. Parę bloków od mojego miejsca zamieszkania zauważyłem specjalna skrzynkę na reklamy. Jestem ciekaw czy takie rozwiązanie sprawdza się w praktyce. Jak udowodnił jeden z internautów nowe skrzynki dają dość spore możliwości. Zainteresowanych odesłałbym do filmu jednak po sprawdzeniu linka stwierdzam iż autor (<a href="http://www.google.pl/search?q=BrzydkiBurak" target="_blank" class="postlink">BrzydkiBurak</a>) oznaczył <a href="http://www.youtube.com/watch?v=xPl7aMIUXuw" target="_blank" class="postlink">film</a> jako prywatny. Myślę, że przy lekkich wysiłkach znajdziecie instrukcje jak wyjmować listy z nowych euroskrzynek. Po zapoznaniu się z nimi dojdziecie szybko do wniosku, że z łatwością można podawać się za kogoś innego i czuć się bezkarnie. Wystarczy tylko znać czas roznoszenia paczek przez listonosza. Dzięki <i>nowej</i> tożsamości można wiele nabroić, a to chyba niedobrze, prawda? Najśmieszniejsze jest to, że każdy z nas zapłacił za tą głupotę około 50 złotych.
<br />

<br />
Zastanawia mnie co zrobi listonosz kiedy obok czyjegoś numerka zauważy naklejkę informującą, iż nie życzymy sobie jakichkolwiek ofert handlowych. Ciekawe jak to jest uwarunkowane prawnie. Musze sprawdzić ten sposób <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />
<br />

<br />
I pomyśleć, że wszystko dzięki europosłom i konkurencji na rynku. Konkurencje popieram bo ten moloch znany dalej jako Poczta Polska powinna przejść szereg reform. Przede wszystkim listonosz to listonosz, a nie sprzedawca artykułów. A po drugie to jak mnie pamięć nie myli listonosze także roznoszą ulotki reklamowe, a to chyba nie powinno mieć miejsca. No i rzecz najważniejsza - obsługa, czyli w gruncie rzeczy ilość otwartych okienek na poczcie powinna się <i>dramatycznie</i> zwiększyć. No właśnie i jeszcze jedna śmieszna rzecz mi się przypomniała. Do każdej przesyłki doklejana jest nie chuda blaszka. Ciekawe ile można byłoby zrobić placów zabaw z tego sprasowanego metalu?]]></description></item><item><title>Centrum Zarządzania Kryzysowego</title><pubdate>Mon, 25 Oct 2010 7:15:17 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/centrum-zarzadzania-kryzysowego/</link><comments>http://www.capaciouscore.pl/artykuly/centrum-zarzadzania-kryzysowego/#komentarze</comments><description><![CDATA[Po ostatnich wydarzeniach coś skłoniło mnie do refleksji. Zacznijmy od początku. Dnia 12 października tego roku wyemitowano film katastroficzny pod tytułem <i>Piekło nad Berlinem</i>. Niby nic takiego jednak jakoś połączyło mi się w głowię z ostatnimi wydarzeniami w Niemczech. Mam na myśli ten wypadek autokaru, którego sprawczynią jak dobrze pamiętam była policjantka prowadząca czerwonego mercedesa. Te zdarzenie pokazało wyższość sąsiadów w sprawach organizacji służb. Jak potem komentowały polskie media, gdyby takie zdarzenie miało miejsce w naszym kraju to osoby poszkodowane nie mógłby liczyć na tak szybka pomoc jaką udzielono u naszych sąsiadów.
<br />

<br />
Może przypominacie sobie także ostatnie zdarzenia z Paryża jak pewna osoba straszyła kilkukrotnie, że na Wieży Eiffla umieszczono ładunki? Służby specjalne Stanów Zjednoczonych ostrzegały inne państwa europejskie przed atakami terrorystycznymi. Ciekawi mnie co by się stało gdyby takie ataki przeprowadzono w Polsce. Co by z nich wyniknęło? Totalny paraliż, a może zachowanie zimnej krwi i pełne opanowanie? Jak myślicie?
<br />

<br />
Trzeba przypomnieć, że dzwoniąc np. na 112 bądź 997 bez numeru kierunkowego załapiemy się na pierwsza wolna linie. W takim przypadku może zdarzyć się, że dodzwonimy się do komendy odległej od nas o 500 i więcej kilometrów. Jak myślicie ile czasu zajmie przekazanie informacji właściwej jednostce? Ile na przyjazd służb? Trzeba pamiętać, że zanim niebiescy wyślą mundurowych na miejsce zdarzenia zostanie przeprowadzona analiza sytuacji co w rezultacie daje kolejne stracone minuty. Właśnie dlatego polecam dzwonienie na 999 bądź 998 jeżeli istnieje taka możliwość. Te służby nie czekają i zaraz po zgłoszeniu wysyłają jednostki na miejsce zdarzenia. Ponadto informują inne służby jeżeli jest potrzeba. Wracając do tematu myślę, że Polsce, kraju jakże cywilizowanym nie powinno zabraknąć czegoś takiego jak Centrum Zarządzania Kryzysowego wszystkich służb. Zapewne jest to jakiś wydatek dla państwa lecz w przyszłości z pewnością zwrócą się koszty i poziom bezpieczeństwa w naszym kraju choć trochę poszybuję w górę.
<br />

<br />
A Wy co myślicie o tej sprawie?]]></description></item><item><title>[PHP] Rotator</title><pubdate>Wed, 13 Oct 2010 2:32:35 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/rotator-w-php/</link><comments>http://www.capaciouscore.pl/artykuly/rotator-w-php/#komentarze</comments><description><![CDATA[Parę dni temu zostałem poproszony o pomoc w stworzeniu rotatora, który będzie wyświetlał <i>obiekty</i> w kolejności. Oczywiście nie przywykłem do dawania gotowców, dlatego też przygotowałem prosty example. Chodzi mi głównie o przedstawienie mechanizmu działania. Naturalnie dobra koleją rzeczy może być rozbudowanie tego prostego kodu do postaci jakiejś prostej klasy <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Struktura danych została przedstawiona w poniższym fragmencie.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$data</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">][</span><span style="color: #DD0000">'id'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">][</span><span style="color: #DD0000">'done'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">][</span><span style="color: #DD0000">'id'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">;</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">][</span><span style="color: #DD0000">'done'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">][</span><span style="color: #DD0000">'id'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">;</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">][</span><span style="color: #DD0000">'done'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;</span><span style="color: #0000BB">$file&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'data.txt'</span><span style="color: #007700">;</span><span style="color: #0000BB">file_put_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$file</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">serialize</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">));</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Sama rotacja jest prosta. Lista zadań jest następująca:
<ol class="list list_1">
<li>Pobranie listy</li>
<li>Wybranie elementu celem wyświetlenia. Jeżeli takowy element nie zostanie wybrany tj. wszystkie elementy zostały już użyte wtedy zostanie wybrany pierwszy element z listy.</li>
<li>Oznaczenie wybranego elementu jako użytego oraz reszty jako gotowych do użycia.</li>
<li>Zapisanie wyniku operacji</li>
</ol>
To w największym skrócie. Oczywiście można się pokusić o drobna optymalizacje i <i>zerowanie listy</i> może odbyć się od drugiego elementu gdyż wiemy, że w momencie rozpoczęcia nowej kolejki będzie wybrany pierwszy element i oznaczony jako wykorzystany. Przykład jest łopatologiczny aby nie zasady działania <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Całość kodu rotatora wygląda mniej więcej tak:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$file&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'data.txt'</span><span style="color: #007700">;</span><span style="color: #0000BB">$data&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">unserialize</span><span style="color: #007700">(</span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$file</span><span style="color: #007700">));</span><span style="color: #0000BB">$how&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">);for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$how</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">){</span><span style="color: #0000BB"> if</span><span style="color: #007700">(!</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #DD0000">'done'</span><span style="color: #007700">])</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$data</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #DD0000">'done'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;$catch&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$h</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">break;</span><span style="color: #0000BB"> </span><span style="color: #007700">}}if(!isset(</span><span style="color: #0000BB">$catch</span><span style="color: #007700">)){</span><span style="color: #0000BB"> for</span><span style="color: #007700">(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$how</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$data</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #DD0000">'done'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> $data</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">][</span><span style="color: #DD0000">'done'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;</span><span style="color: #0000BB"> $catch&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;}echo&nbsp;</span><span style="color: #0000BB">$data</span><span style="color: #007700">[</span><span style="color: #0000BB">$catch</span><span style="color: #007700">][</span><span style="color: #DD0000">'id'</span><span style="color: #007700">];</span><span style="color: #0000BB">file_put_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$file</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">serialize</span><span style="color: #007700">(</span><span style="color: #0000BB">$data</span><span style="color: #007700">));</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Przykładowy plik <b>data.txt</b> wygląda mniej więcej tak:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">a:3:{i;a:2:{s:2:"id";i:1;s:4:"done";i:1;}i:1;a:2:{s:2:"id";i:2;s:4:"done";i;}i:2;a:2:{s:2:"id";i:3;s:4:"done";i;}}</span></pre>
Gotowy example można pobrać klękając <a href="http://www.capaciouscore.pl/download/other/rotator.rar" target="_blank" class="postlink">tutaj</a>.]]></description></item><item><title>Resetowanie hasła na Windows 7 - niecodzienne zadanie</title><pubdate>Tue, 12 Oct 2010 11:42:42 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/resetowanie-hasla-na-windows-7-czyli-dosc-niecodzienne-zadanie/</link><comments>http://www.capaciouscore.pl/artykuly/resetowanie-hasla-na-windows-7-czyli-dosc-niecodzienne-zadanie/#komentarze</comments><description><![CDATA[Nie byłoby nic w tym dziwnego gdyby nie fakt, że nigdy wcześniej tego nie robiłem <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /> Dajecie wiarę? Och ironio losu. Zacznijmy więc od początku. <i>Szefowa</i> poinformowała, że ma dla mnie małą robótkę. Tydzień temu odebrałem laptopa. Diagnoza była prosta. Pewna osoba zapomniała hasełka i trzeba było dostać się do systemu. Po rozpakowaniu sprzętu i podłączeniu do sieci odpaliłem opiekacza. Szybko przystąpiłem do potwierdzenia diagnozy. I oto moim oczom ukazał się cukierkowy W7. Szkoda, że pojawił się malutki mankament. Mianowicie, system był w języku ukraińskim z możliwością przeskoczenia na rosyjski. To mi dopiero wybór. Ponieważ nie obcuje z tym systemem na co dzień więc niezbyt reflektowałem. Pomyślałem sobie, że wbije do awaryjnego albo chociaż konsoli i uruchomię konto administratora. Szkoda tylko, że bez odpowiedniej płyty jest to niemożliwe. Dowiedziałem się o tym po fakcie marnując parę minut na walkę z menu (F8) ozdobionymi fajnymi krzaczkami <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /> Zapomniałem wspomnieć, że w pakiecie dostałem także kabel od internetu. Zapewne miał służyć do wieszania się gdyby nie udało się wykonać zadania <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Ok, ok, spoko ale nie czas się poddawać. Naturalnie skorzystałem z wiedzy dostępnych ekspertów tj. kolegów informatyków po fachu. Odpowiedź była prosta. Nie mając płytki <i>recovery</i> nie masz opcji aby dostać się do systemu - tak właśnie powiedział jeden ze studentów renomowanej uczelni. Oczywiście ja lekki niedowiarek jak zwykle. Odpalam mojego sprzymierzeńca, Google. Wpadłem na jakiś motyw z <i>Windows Password Unlocker</i>. Ściągam, wypalam krążek, zapodaję do bagażnika, resetuję hasła dla każdego napotkanego usera jednak po restarcie wciąż to samo. Zaczynam drapać się po głowie. Myślę, że znowu trafiłem na jakiś szajski program. Szukam dalej u wuja G. Wpadam na <a href="http://pogostick.net/~pnh/ntpasswd/" target="_blank" class="postlink">The Offline NT Password Editor</a>. Nie zastanawiam się ani chwili dłużej i ściągam obraz płyty. Po zbombardowaniu plastiku promieniami lasera wkładam obwarzanka do pieca. Chwile czekam aż się przybootuje. Pojawia się menu wyboru. Darując Wam szczegóły techniczne coś wcisnąłem i poszło. Reboot i voila. Uruchomił się system w parę sekund. Moje zadanie wykonane. Eureka. Dzień potem sprzęt oddany i znów uśmiechnięta mina klienta.]]></description></item><item><title>Najlepsza ocena kodu strony jaką widziałem</title><pubdate>Tue, 05 Oct 2010 8:51:54 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/najlepsza-ocena-kodu-strony-jaka-widzialem/</link><comments>http://www.capaciouscore.pl/artykuly/najlepsza-ocena-kodu-strony-jaka-widzialem/#komentarze</comments><description><![CDATA[Zostałem poproszony przez kolegę climerx abym ocenił stronę <a href="http://cad-soft.org/" target="_blank" class="postlink">cad-soft.org</a>. Ostatnimi czasy zaniedbałem ocenianie stron na <a href="http://www.forumweb.pl/" target="_blank" class="postlink">forumweb.pl</a>. Pomyślałem sobie, że odbiję na chwilkę od rzeczywistości i przeprowadzę analizę strony. Zanim do tego doszło przeczytałem opinie poprzedników i natchnąłem się na opinie kolegi xerifa, która przeszła moje najśmielsze oczekiwania. Recenzja była błyskotliwa, nowoczesna i zabawna. Żeby co druga tak wyglądała to świat byłby bardziej kolorowy.
<br />

<br />
Nie zostaje mi nic innego jak zaproszenie do obejrzenia materiału.
<br />
<a href="http://www.youtube.com/watch?v=4BJkgDiHX7M">http://www.youtube.com/watch\?v=4BJkgDiHX7M</a>]]></description></item><item><title>Łazienkowy hit w polskich szkołach </title><pubdate>Sat, 02 Oct 2010 11:40:20 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/lazienkowy-hit-w-polskich-szkolach/</link><comments>http://www.capaciouscore.pl/artykuly/lazienkowy-hit-w-polskich-szkolach/#komentarze</comments><description><![CDATA[Wczoraj moje oczy usłyszały o pomyśle Ministerstwa Edukacji Narodowej. Mają <i>plan</i> aby do końca 2011 roku wyremontować wszystkie łazienki w szkołach. Tak, tak! To nie żart primaaprilisowy. Nie zmienia to faktu, że można wybuchnąć śmiechem i wrócić do wspomnień, jakie kojarzą się nam z łazienkami w polskiej szkole. Podrapane, stare, zniszczone, ... oto typowy widok łazienki, do której miałem okazje zachodzić celem <i>wymoczenia gąbki</i>. Zapewne wielu z Was ma podobne wspomnienia. Szkoda, że ja nie doczekałem się tych remontów. Dziwne, że akurat teraz wpadli na pomysł remontu. Przecież od dawna było wiadomo jaki bajzel jest w szkole. Na szczęście z czasem się to zmienia. Mydło, ciepła woda i papier toaletowy - takie rarytasy chce zafundować MEN. Chodząc tyle lat do szkoły ani razu nie widziałem żadnej z tych rzeczy. Czyż to nie skandal, że w szkołach była tylko lodowata woda w kranach? Szukając więcej informacji na ten temat natchnąłem się na inny ciekawy artykuł opowiadający o jeszcze innym pomyśle Ministerstwa Edukacji Narodowej; mianowicie, według &quot;badań&quot; wynika, że ~30% wszelkiego rodzaju wybryków ma miejsce w łazience, toteż chcą zainstalować tam kamery. Już teraz szkoły w Polsce to jeden wielki Big Brother show. Dorzućmy do tego <i>nauczycieli</i> i mamy istny cyrk.
<br />

<br />
Zachęcam wszystkich do komentowania wpisu i opowiadania wrażeń z Waszych lat szkolnych.]]></description></item><item><title>Ile pozostało do końca reklam</title><pubdate>Fri, 01 Oct 2010 3:08:26 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/ile-pozostalo-do-konca-reklam/</link><comments>http://www.capaciouscore.pl/artykuly/ile-pozostalo-do-konca-reklam/#komentarze</comments><description><![CDATA[Wczoraj pstrykam sobie po kanałach i akurat trafiłem w emitowane pasmo reklam na stacji VH1. Zerkam w lewy górny róg, a tam odliczanie czasu. Super sprawa. Jakby wprowadzili taki myk na każdej stacji to nie trzeba byłoby pstrykać co chwilę pomiędzy kanałami podczas emisji reklam. Z drugiej zaś strony gdy taki scenariusz stałby się realność to częstotliwość pojawiania się reklam gwałtownie zwiększyłaby się. Przykładów nie trzeba szukać daleko. Wystarczy spojrzeć na TVN24.
<br />

<br />
Korzystając z okazji ponarzekam sobie na głośniejsze reklamy. Chyba pomysł KRRiT na niewiele się zdał gdyż w tym kierunku nic się nie zmieniło.]]></description></item><item><title>[PHP] Backdoor czyli otwarta furtka przeciwko nieuczciwym klientom</title><pubdate>Fri, 24 Sep 2010 2:21:28 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/backdoor-w-php-czyli-otwarta-furtka-przeciwko-nieuczciwym-klientom/</link><comments>http://www.capaciouscore.pl/artykuly/backdoor-w-php-czyli-otwarta-furtka-przeciwko-nieuczciwym-klientom/#komentarze</comments><description><![CDATA[Zacznijmy od tego czym jest backdoor. Tylne drzwi bądź furtka to nic innego jak luka w oprogramowaniu umożliwiająca w przyszłości przejęcie kontroli nad zainfekowanym obiektem. Rozróżniamy dwa źródła ataku. Pierwszym możliwym źródłem jest <a href="http://pl.wikipedia.org/wiki/Cracker" target="_blank" class="postlink">cracker</a>, który np. włamał się na serwer bądź przełamał zabezpieczenia oprogramowania celem późniejszego wykorzystania uprawnień. Drugim możliwym źródłem jest twórca oprogramowania, który umyślnie pozostawił furtkę. My omówimy tą drugą opcję. Zapewne w myślach żądaliście sobie już pytanie dlaczego właściwie twórca oprogramowania miałbym umyślnie umieszczać w oprogramowaniu lukę. Motywy takiego zachowania są proste. Jeżeli autor miał nieczyste intencję, wtedy w grę wchodzą korzyści majątkowe. W przeciwnym wypadku backdoor jest zaimplementowany przeciwko nieuczciwym klientom. 
<br />

<br />
Bardzo rzadko jednak zdarzają się przypadki, w których klient dostaję produkt końcowy np. sklep internetowy, serwis, ... i nie zamierza za niego zapłacić. W takich właśnie wypadkach przydaje się wkomponowany z finezją backdoor, który z pewnością w niedługim czasie da o sobie znać nieuczciwemu klientowi.
<br />

<br />
Zanim przejdziemy do wątku właściwego opowiem o dobrych nawykach, które powinny towarzyszyć przy prezentowaniu prac klientowi. Jeżeli chodzi o przedstawianiu layoutu to najlepiej jest pokazywać go pomniejszonego o 10-20% z zamieszczonym znakiem wodnym. Odnośnie pociętej strony (HTML i CSS) nie ma już tak dobrego rozwiązania. Jeżeli tylko mamy możliwość to pokazujemy wyniki naszych prac w obecności klienta. Niestety nie zawsze są ku temu możliwości, dlatego też czasami musimy umieścić pocięta już grafikę na serwerze firmowym. Pierwszą bariera może być jednorazowy adres, który po odświeżeniu strony staje się nieaktywny. Części klientom taka forma <i>zabezpieczenia</i> może się nie spodobać gdyż chcą mieć nielimitowany wgląd w postęp prac. Pokazywanie strony z małym znakiem wodnym dla każdej grafiki może być rozwiązaniem pośrednim. Inną metodą zabezpieczenia przed kopiowaniem będzie zakrzaczenie HTML i CSS. Jednak co się stanie gdy ktoś z zewnątrz będzie chciał ocenić jakość kodu? Wtedy takie rozwiązanie nie ma właściwie sensu. Kończąc ten wywód chcę zwrócić uwagę, że w momencie umieszczenia strony w sieci nie mamy już praktycznie kontroli nad tym czy prawa autorskie zostaną dotrzymane. Pamiętajmy, że większość przeglądarek posiada <a href="http://pl.wikipedia.org/wiki/Cache" target="_blank" class="postlink">cache</a> i obejrzenie strony zazwyczaj wiążę się z zapisaniem jej na dysku odwiedzającego.
<br />

<br />
Odnośnie skryptów wykowanych po stronie serwera napisanych np. w PHP sprawa ma się nieco inaczej. Wyniki prac aplikacji możemy udostępniać z własnego serwera tak więc poniekąd mamy kontrolę. W przypadku kiedy klient korzysta po raz pierwszy z usług firmy bądź zlecenie opiewa na dużą kwotę i pragnię aby serwis był wprowadzony szybko do sieci wtedy warto zastanowić się nad jakimś <i>zabezpieczeniem</i> aby kontrahent nie zapomniał zapłacić za usługi.
<br />

<br />
W przypadku trafienia na nieuczciwego klienta, który odmawia zapłacenia za naszą pracę powinniśmy wprowadzić modyfikacje, które mocno go zabolą. Najlepiej wprowadzić modyfikacje w czasie, w którym wyrządzą największe szkody. 
<br />

<br />
Inspiracją do napisania artykułu było przeczytanie jakiś czas temu wpisów nt. backdoora:
<br />
<ul class="list">
<li>w systemie <abbr title="Content Management System">CMS</abbr> <a href="http://e107.org/" target="_blank" class="postlink">e107</a> w wersji 0.7.17</li>
<li>w paczce zawierającej <a href="http://www.phpbb.com/" target="_blank" class="postlink">phpBB</a> w wersji 2.0.23 umieszczonej na <a href="http://www.phpbbhelp.pl/" target="_blank" class="postlink">phpbbhelp.pl</a></li>
<li><b>c99.php</b> aka c99shell
</ul>

<br />
Najprostszy backdoor powinien umożliwiać programiście np. wykonywanie przesłanego kodu podchodzącego z superglobalnej <tt>$_POST</tt> bądź <tt>$_GET</tt> z użyciem funkcji <tt>eval()</tt>. Inną możliwością jaką może udostępniać backdoor może być np. dostęp do panelu administratora, konta FTP, plików umieszczonych na serwerze i tym podobnych rzeczy. Jeżeli skrypt jest bardzo rozbudowany wtedy nie będzie większego problemu z umiejscowieniem backdoora. Z moich obserwacji wynika, że część serwerów nie zapisuje żądań (ang. request) nadanych droga <tt>POST</tt>, dlatego też polecam jej stosowanie. Ponadto aby utrudnić życie osobie szukającej dziury warto odbierać polecenia np. w formie zakodowanej bądź skompresowanej.]]></description></item><item><title>Do końca roku szkolnego 2011 pozostało</title><pubdate>Thu, 16 Sep 2010 12:33:59 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/do-konca-roku-szkolnego-2011-pozostalo/</link><comments>http://www.capaciouscore.pl/artykuly/do-konca-roku-szkolnego-2011-pozostalo/#komentarze</comments><description><![CDATA[Dla tych co rozpoczęli rok szkolny 1 września mam bardzo dobrą wiadomość. Od dziś możecie odliczać online ile dni pozostało do końca roku szkolnego 2010/2011.
<br />
<img src="http://www.capaciouscore.pl/do-konca-roku-szkolnego-2011-pozostalo.php" alt="do-konca-roku-szkolnego-2011-pozostalo.php" />]]></description></item><item><title>Bugi w NetBeans</title><pubdate>Wed, 15 Sep 2010 6:45:16 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/bugi-w-netbeans/</link><comments>http://www.capaciouscore.pl/artykuly/bugi-w-netbeans/#komentarze</comments><description><![CDATA[Jeżeli zauważę jakieś nowe błędy to z pewnością wrzucę je na listę w miarę swoich możliwości. Naturalnie wysłałem zapytanie gdyż mogę się mylić. Zobaczymy co z tego wyjdzie.
<br />
<ul class="list">
<li>Zastanawia mnie jaka jest różnica pomiędzy <tt>@todo</tt> a <tt>@TODO</tt>?
<br />
<img src="http://www.capaciouscore.pl/download/other/netbeans-todo-vs-todo.png" alt="netbeans-todo-vs-todo.png" /></li>
<li>Otwieramy plik napakowany kodem PHP. Wchodzimy kolejno w <b>Tools</b> -&gt; <b>Options</b> -&gt; <b>Editor</b> -&gt; wybieramy zakładkę <b>Formatting</b> i zwiększamy <b>Right Margin</b>. Okazuje się, że po wprowadzeniu zmian linia stoi w tym samym miejscu, a po wprowadzeniu jakiegoś tekstu bądź znaku nowej linii margines zachowuje się dziwnie.</li>
<li>Czy to można zaliczyć do błędu kolorowania składni?
<br />
<img src="http://capaciouscore.pl/download/other/netbeans-syntax-highlighting.png" alt="netbeans-syntax-highlighting.png" />
<br />
Albo to?
<br />
<img src="http://capaciouscore.pl/download/other/netbeans-syntax-highlighting-3.png" alt="netbeans-syntax-highlighting-3.png" />
<br />
Jeżeli nie to może to?
<br />
<img src="http://capaciouscore.pl/download/other/netbeans-syntax-highlighting-2.png" alt="netbeans-syntax-highlighting-2.png" />
</li>
<li><strike>Próba otworzenia pliku z polskimi literami w ścieżce (np. C:\Documents and Settings\Użytkownik\Pulpit\test.php) spowoduje wyrzucenie informacji o tym, że nie można otworzyć pliku.</strike></li>
<li>Ostatnio całkiem przypadkiem odkryłem kolejny bug. Tworzymy nowy plik, następnie klikamy Insert, Enter, wracamy do pierwszej linii i wciskamy Delete. W efekcie możemy zobaczyć uciętą linie wskazującą.</li>
</ul>]]></description></item><item><title>[PHP] Wyciąganie linków i obrazków ze źródła przy pomocy wyrażeń regularnych</title><pubdate>Fri, 03 Sep 2010 9:11:10 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/wyciaganie-linkow-i-obrazkow-ze-zrodla-przy-pomocy-wyrazen-regularnych-w-php/</link><comments>http://www.capaciouscore.pl/artykuly/wyciaganie-linkow-i-obrazkow-ze-zrodla-przy-pomocy-wyrazen-regularnych-w-php/#komentarze</comments><description><![CDATA[Właściwie jest to wyciąganie adresów i anchorów ze źródła strony. Najlepiej pobrać stronę przy pomocy <tt>file_get_contents()</tt> lub funkcji o podobnym działaniu. Następnie trzeba odpowiednio obrobić <i>źródło</i> i wyłuskać to co nas interesuje. Najpierw powinniśmy obrobić tag <tt>&lt;a&gt;</tt>, a następnie anchor. Dlaczego tak, a nie inaczej? Bo w źródle mogą znaleźć się obrazki, które są linkiem.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;Zabawa&nbsp;z&nbsp;tagiem&nbsp;&lt;a&gt;</span><span style="color: #0000BB">$content&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'http://www.capaciouscore.pl/index.php'</span><span style="color: #007700">);</span><span style="color: #0000BB">preg_match_all</span><span style="color: #007700">(</span><span style="color: #DD0000">'<em><span>/&lt;a.*href=\"([^\"]*)\".*&gt;(.*)&lt;\/a&gt;/iU</span></em>'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$content</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$links</span><span style="color: #007700">);</span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$links</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;Zabawa&nbsp;z&nbsp;tagiem&nbsp;&lt;img&gt;</span><span style="color: #0000BB">$content&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'http://www.capaciouscore.pl/index.php'</span><span style="color: #007700">);</span><span style="color: #0000BB">preg_match_all</span><span style="color: #007700">(</span><span style="color: #DD0000">'<em><span>/&lt;img.*src=\"(.*)\".*&gt;/iU</span></em>'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$content</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$images</span><span style="color: #007700">);</span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$images</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Alternatywa dla tej metody jest inspekcja strony przy pomocy funkcji parsujących <abbr title="Document Object Model">DOM</abbr>.
<br />

<br />
Naturalnie powyższe wyrażenia regularne można nieco zmodyfikować aby wyciągnąć nie tylko zawartość <tt>href</tt> i <tt>src</tt> ale także, <tt>title</tt>, <tt>alt</tt> i innych atrybutów <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> A no i bym zapomniał jak zwykle na koniec. Wyrażenia nie są doskonale i trzeba je nieco dopieścić. Mam na myśli pobieranie zawartości z  pojedynczych i podwójnych cudzysłowu.]]></description></item><item><title>Pytania zadawane klientom przy budowie strony WWW</title><pubdate>Fri, 03 Sep 2010 9:48:07 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/pytania-zadawane-klientom-przy-budowie-strony-www/</link><comments>http://www.capaciouscore.pl/artykuly/pytania-zadawane-klientom-przy-budowie-strony-www/#komentarze</comments><description><![CDATA[Poniżej przedstawiam zestaw pytań mogących być przydatnymi podczas rozmowy z klientem. Szczególnie przydatne w sytuacjach kiedy klient nie potrafi opisać tego czego potrzebuje. Oczywiście nie jest to kompletna lista więc powinniście ją uzupełnić wedle własnego uznania. Podobny kwestionariusz najlepiej mieć zawieszony blisko telefonu albo stanowiska obsługującego klientów. Ogólnie zestaw pytań zależy od tego czy klient posiada już stronę i chce coś na niej zmienić lub czy jej nie ma i chce zlecić jej wykonanie. Mam nadzieje, że podbijasz do drugiej opcji.
<br />
<a name="pytania"></a><h2>Pytania</h2>
<ul class="list">
<li>Czy macie wizję jak to wyglądać?</li>
<li>Co ma znajdować się na stronie?</li>
<li>Co sprzedajecie, jakie usługi świadczycie?</li>
<li>Jaka jest grupa docelowa czyli kto jest odbiorcą strony?</li>
<li>Kim są Wasi konkurenci? Czy mają strony internetowe? Jeżeli tak to proszę podać kilka adresów.</li>
<li>Jaka jest Państwa ulubiona forma kontaktu z klientami? (np. telefon, e-mail, czat, blog, forum dyskusyjne, listy mailingowe, broszury, czasopisma)</li>
<li>Czy firma ma określoną kolorystykę?</li>
<li>Czy zostaną dostarczone treści do umieszczenia na stronie?</li>
<li>Jakie jest przesłanie firmy?</li>
<li>Jakie jest motto firmy?</li>
<li>Czy posiadacie blankiety firmowe?</li>
<li>Czy możecie pokazać projekt wizytówki oraz ulotkę jeżeli takowe posiadacie?</li>
<li>Czy macie pracownika odpowiedzialnego za grafikę komputerową i obróbkę zdjęć?</li>
<li>Czy macie jakieś preferencje odnośnie wyglądu szkieletu strony?</li>
<li>Czy są jakieś zalecenia odnośnie kolorów, czcionek lub styli?</li>
<li>Co koniecznie musi znajdować się na stronie? (np. formularz kontaktowy, galeria, miejsce reklamowe, czytnik RSS, wyszukiwarka)</li>
<li>Jeżeli na stronie mają pojawić się reklamy to w jakich miejscach?</li>
<li>Czy maja państwo ulubione strony? Jeżeli tak to proszę wymienić kilka.</li>
<li>Co nie jest tolerowane przez Was na stronach?</li>
<li>Jakich technologii mamy użyć przy tworzeniu strony? [np. xHTML, HTML, CSS, JS (Dojo, jQuery, MooTools, Prototype, YUI), PHP (jakie biblioteki koniecznie musza zostać użyte), ASP, SQL (jaka jest preferowana baza danych czyli czy to ma być MSSQL, MySQL, Oracle, PostgreSQL, SQLite czy cos innego), ...]</li>
<li>Czy będzie potrzeba użycia <abbr title="System zarządzania treścią">CMS</abbr> (zadając to pytanie możemy bazować na powyższych odpowiedziach klienta) i jeżeli tak to jakiego? A do wyboru mamy np. Drupal, eZ publish, Joomla!, WordPress, ...</li>
<li>Czy będzie potrzeba stworzenia projektu graficznego?</li>
<li>Czy macie dla nas grafikę, którą trzeba użyć na stronie?</li>
<li>Posiadacie logo firmy? Jeżeli tak to w jakim formacie?</li>
<li>Macie dla nas jakieś pliki pomocnicze? (np. logo, projekt graficzny, szkice?)</li>
<li>Ile mniej więcej będzie podstron?</li>
<li>Ilu poziomowa będzie strona?</li>
<li>Czy na stronie znajdą się obszary wymagające autoryzacji?</li>
<li>Czy mamy stworzyć stronę dla urządzeń mobilnych?</li>
<li>Czy będzie potrzebny newsletter?</li>
<li>Czy pozycja w wyszukiwarce jest dla Państwa ważna? Jeżeli tak to na jakie frazy?</li>
<li>Co musi być widoczne na stronie cały czas?</li>
<li>Czy na stronie ma znajdować się blog?
<br />
<ul class="list">
<li>Czy będzie wielu autorów?</li>
<li>Czy będzie potrzeba rozdzielenia uprawnień?</li>
<li>Czy na blogu mają znajdować się reklamy i jeżeli tak to jakie?</li>
<li>Jakie moduły musza się koniecznie znaleźć? (np. lista zaprzyjaźnionych blogów, kategorie)</li>
<li>Czy na blogu ma znajdować się moduł archiwum?</li>
<li>Czy na blogu ma znajdować się wyszukiwarka?</li>
<li>Czy będzie potrzeba prezentowania kodu we wpisach?</li>
<li>Czy są inne zapotrzebowania?</li>
</ul>
</li>
<li>Czy będzie potrzebna uruchomienia sklepu internetowego?
<br />
<ul class="list">
<li>Jakie będą metody płatności? Czy strona ma umożliwiać płatności kartą kredytowa?</li>
<li>Czy konsument musi być zalogowany aby dokonywać zakupów? Jeżeli tak to jakie dane musi podać przy rejestracji?</li>
<li>Podczas jakich operacji ma wysyłać e-maila? (np. rejestracja, zamówienie)</li>
<li>Czy są inne wymagania?</li>
</ul>
</li>
<li>Czy będziecie używać narzędzi typu Twitter, Blip, Facebooku?</li>
<li>Czy będzie potrzeba wstawiania multimediów tj. filmow video, zdjęć na stronę?</li>
<li>Czy potrzebny będzie mechanizm &quot;Dodaj do zakładek&quot;?</li>
<li>Czy strona będzie wymagać wielu poziomów dostępu?</li>
<li>Czy strona ma być wielojęzyczna?</li>
<li>Czy będzie potrzeba zatwierdzania wpisów przed pojawieniem się na stronie przez administracje?</li>
<li>Czy będzie potrzeba udostępnienia panelu sterowania i edytora treści?</li>
<li>Czy osoba odpowiedzialna za treści ma podstawową znajomość znaczników HTML?</li>
<li>Czy może zdarzyć się sytuacja, w której dojdzie do edycji strony przez wiele osób w tym samym czasie?</li>
<li>Czy mamy zająć się także pilnowaniem i aktualizacją strony? Jeżeli tak to jaka będzie częstotliwość aktualizacji?</li>
<li>Czy mamy zająć się wykupieniem domeny, hostingu i umieszczeniem strony w sieci?</li>
<li>Czy mamy zająć się reklamą strony w sieci?</li>
<li>Ile mamy czasu na wykonanie strony?</li>
<li>Jaki jest przewidziany budżet?</li>
<li>Czy maja Państwo inne uwagi i oczekiwania?</li>
</ul>

<br />
Pamiętajcie, że każdy jest inny i ma inny proces wyobrażania sobie rzeczy dlatego pojawia się tyle pomysłów ile głów. Tworzenie szkiców strony jest bardzo kreatywnym procesem i podczas tej burzy mózgów może wpaść Wam do głowy wiele ciekawych pomysłów. Jeżeli klient zleca nam prace przez sieć to najlepiej przedstawić mu kwestionariusz, który sam na relaksie uzupełni. W pośpiechu wiele rzeczy ucieka z głowy dlatego wywiad należy zrobić na spokojnie, bez zbędnych emocji i ciśnień.
<br />
<a name="spotkanie"></a><h2>Spotkanie</h2>
Po pierwsze na spotkanie musimy wysłać osobę kompetentną, poruszającą się swobodnie w zagadnieniach związanych z WWW. Na pewno nie może to być kurier firmy rozwożący <i>pocztę</i>.
<br />

<br />
Na spotkanie najlepiej wziąć kilka kartek papieru, długopis, ołówek, pędraka (dysk przenośny) i oczywiście nóź żeby w razie czego gdy spotkanie będzie szło nie po myśli pociąć się żywcem <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Odnośnie pendrive nie popełniajcie gafy takiej, że obiekt jest zainfekowany bo to świadczy o braku profesjonalności, prawda? Broszury firmowe mile wskazane. Folder wcześniej wykonanych prac owszem. Rozmawiając z klientem i przedstawiając portfolio można na wiele ciekawych rzeczy wpaść. Niewskazany jest laptop, który będzie rozpraszać. Ponadto przed spotkaniem najlepiej wyciszyć telefon no bo po co ma dzwonić co pięć minut <i>żona</i>.]]></description></item><item><title>[PHP] Walidacja adresu YouTube</title><pubdate>Tue, 31 Aug 2010 12:42:55 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/walidacja-adresu-youtube-w-php/</link><comments>http://www.capaciouscore.pl/artykuly/walidacja-adresu-youtube-w-php/#komentarze</comments><description><![CDATA[W celu walidacji poprawności adresu YouTube posłużymy się wyrażeniem regularnym.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">is_valid_address</span><span style="color: #007700">(</span><span style="color: #0000BB">$address</span><span style="color: #007700">){</span><span style="color: #0000BB"> return&nbsp;preg_match</span><span style="color: #007700">(</span><span style="color: #DD0000">'<em><span>#(?:http://)?(?:www\.)?youtube.com/watch\?v=([0-9A-Za-z-_]{11})#</span></em>'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$address</span><span style="color: #007700">);}</span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">is_valid_address</span><span style="color: #007700">(</span><span style="color: #DD0000">'http://www.youtube.com/watch?v=klmexsRqw0w'</span><span style="color: #007700">));</span><span style="color: #0000BB">?&gt;</span>
</span></pre>]]></description></item><item><title>Przerwany sen</title><pubdate>Sun, 29 Aug 2010 4:45:19 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/przerwany-sen/</link><comments>http://www.capaciouscore.pl/artykuly/przerwany-sen/#komentarze</comments><description><![CDATA[To było tak. Kładę się spać około 3 godziny nad ranem i zasypiam. Niestety niecałą godzinę później spokój mojego snu zostaje zakłócony. Budzę się o 4 z hakiem. Nakierowuje głowę w stronę okna. Jest już stosunkowo jasno. Słyszę dziwne, szeleszczące odgłosy i zastanawiam się co to może być. Wyglądam przez okno i to co zobaczyłem przeszło moje najśmielsze oczekiwania. Pacjent w nocy wyrzuca puszki ze śmietnika i je <i>kompresuje</i> nogą <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Wszystko byłoby ok. gdyby nie fakt, że robił to z pół godziny! Zrozumiałbym gdyby to wydarzyło się 10 lat temu kiedy to ludzie kryli się z tym ale teraz? Kiedy nie przejdziesz się obok śmietnika to widać ludzi którzy dokonują recyklingu.]]></description></item><item><title>Kobiety nie wiedzą kiedy się uciszyć, prawda?</title><pubdate>Sun, 29 Aug 2010 2:39:51 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/kobiety-nie-wiedza-kiedy-sie-uciszyc-prawda/</link><comments>http://www.capaciouscore.pl/artykuly/kobiety-nie-wiedza-kiedy-sie-uciszyc-prawda/#komentarze</comments><description><![CDATA[<h2>Po pierwsze obowiązkowe, wykład moralny</h2>
<a href="http://www.youtube.com/watch?v=UgWHIguqnGg">http://www.youtube.com/watch\?v=UgWHIguqnGg</a>
<br />
<h2>Udowodnienie tezy</h2>
Dlaczego kobiety prawie zawsze psują przyjemność z jazdy? Dlaczego choć raz nie wyłączą się?
<br />
<a href="http://www.youtube.com/watch?v=xqUsrNIKzFo">http://www.youtube.com/watch\?v=xqUsrNIKzFo</a>
<br />
Ciekawe czy się czegoś nauczyła po tej przejażdżce <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" />
<br />

<br />
PS
<br />
Tak, tak, jak ktoś mi zaraz zwróci uwagę to bardzo perfidnie wylałem żale na wszystkie kobiety <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />]]></description></item><item><title>[CSS] Efekt rollover</title><pubdate>Fri, 20 Aug 2010 3:22:53 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/efekt-rollover-w-css/</link><comments>http://www.capaciouscore.pl/artykuly/efekt-rollover-w-css/#komentarze</comments><description><![CDATA[Efekt rollover jest niczym innym jak zmianą obrazka bez przeładowania strony. Kiedyś takie efekty można było uzyskać dzięki zdarzeniom z JavaScript (<tt>onmouseover</tt> i <tt>onmouseout</tt>). Teraz wystarczy chwila pracy z obrazkiem i odpowiedni kod CSS.
<br />

<br />
Aby można było korzystać z efektu rollover musimy odpowiednio przygotować grafikę. Przykładowa grafika powinna wyglądać tak:
<br />
<img src="http://www.capaciouscore.pl/examples/efekt-rollover-w-css/images/efekt-rollover.jpg" alt="efekt-rollover.jpg" />
<br />
Kierunek nie ma znaczenia gdyż jest to zależne od właściwości <tt>background-position</tt>. 
<br />

<br />
Przykładowy kod CSS powinien wyglądać tak:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">a#avatar&nbsp;{&nbsp;width:&nbsp;100px;&nbsp;height:&nbsp;100px;&nbsp;display:&nbsp;block;&nbsp;background:&nbsp;url('images/efekt-rollover.jpg')&nbsp;no-repeat;&nbsp;}a#avatar:hover&nbsp;{&nbsp;background-position:&nbsp;0&nbsp;-100px;&nbsp;}</span></pre>
natomiast kod HTML w ten sposób:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">&lt;a&nbsp;href="http://www.capaciouscore.pl/"&nbsp;id="avatar"&gt;&lt;/a&gt;</span></pre>
Przykład online można zobaczyć na podstronie <a href="http://www.capaciouscore.pl/examples/efekt-rollover-w-css/index.html" target="_blank" class="postlink">Efekt rollover w CSS</a>.]]></description></item><item><title>Polskie Koleje Państwowe</title><pubdate>Wed, 18 Aug 2010 5:14:33 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/polskie-koleje-panstwowe-czyli-smrod-brud-i-ubostwo/</link><comments>http://www.capaciouscore.pl/artykuly/polskie-koleje-panstwowe-czyli-smrod-brud-i-ubostwo/#komentarze</comments><description><![CDATA[Pamiętam, że jakiś czas temu w planach miałem napisanie tego artykułu. Ostatnio czytałem ciekawy wpis <a href="http://lucasinengland.blogspot.com/2009/07/smrod-brud-i-ubostwo.html" target="_blank" class="postlink">Smród, brud i ubóstwo</a>, który mnie dodatkowo zmotywował. Myślę, że nadszedł już czas na uwolnienie moich myśli związanych z <abbr title="Polskie Koleje Państwowe">PKP</abbr>.
<br />

<br />
W swoim życiu troszeczkę podróżowałem pociągami i zapewne mam takie same wspomnienia jak większość podróżnych. Pozwolę sobie na krótką opowieść o dwóch ostatnich podróżach. Pierwszą odbyłem z Chełma do Katowic i z powrotem. Jak dobrze pamiętam odbyłem tą podróż w maju kiedy to pojawiły się problemy z niektórymi połączeniami. Pamiętam, że kupując bilet pytałem czy nie będzie problemu z połączeniem. Naturalnie rano wsiadłem do pociągu i wszystko było w porządku aż do Warszawy. Wsiadłem i zauważyłem <i>drugi standard</i>. Pociąg wyglądał o wiele lepiej niż te, którymi jeździłem wcześniej. Otóż <i>PKP Intercity</i> najwyraźniej posiada dwa standardy: stary i nowy. W starym przedziale jest osiem miejsc siedzących natomiast w nowym tylko sześć. Drugą zasadniczą różnicą jest wykończenie przedziału. Nie trudno się domyśleć, że nowsze wyglądają o wiele lepiej. Zabawne jest to, że w stary przedział klasy A wygląda praktycznie jak B z ta różnicą, że ma 6 miejsc natomiast nowszy tylko 4 <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Zapewne składy starego typu jeżdżą tam gdzie jest mniejszy ruch bo jak zwykle nie opłaca się remontować/udostępniać nowych składów na <i>nierentownych</i> bądź mniej uczęszczanych trasach. Kolejną zabawną rzeczą jest fakt, że za bilet do Katowic zapłaciłem około 70zł natomiast w drugą stronę prawie dwa razy tyle! Najśmieszniejsze jest to, że jechałem tymi samymi składami w obie strony <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Ciekawe na jakiej podstawie policzyli tą cenę. Przemieszczając się pociągiem zazwyczaj kierowałem się w stronę Warszawy i w północne części Polski. Tym razem jednak było inaczej. Pojechałem centralnie na Katowice. Pamiętam, że w Warszawie miałem 5 minut na przesiadkę. Potem aż się zdziwiłem, że zdarzyłem. Dlaczego? Jadąc już z Warszawy do Katowic dowiedziałem się super opóźnieniach na ów połączeniu. Godzinne opóźnienia to już żelazny standard. Każdy o nim wie. Najlepsze jest to, że dojeżdżając do punktu docelowego słyszymy w głośnikach &quot;przepraszamy za małe opóźnienia&quot;. Jeżeli półtorej godziny jest małym opóźnieniem to gratuluje poczucia humoru. Minęło parę dni i nastał czas powrotu. Stoję przy kasie i kupuje bilet do Warszawy. Odszedłem od kasy z biletem i po chwili zastanowiłem się, a może od razu kupie resztę biletów. Poszedłem do drugiej kasy i mówie, że taki i taki bilet potrzebuje. Pierwsze pytanie jakie usłyszałem to z jakiej to firmy? No jakbym miał pamiętać wszystko. Mówię o tej o i tej godzinie do tego i tego punktu, a stara babka mówi, że nie wie o jaki chodzi... Przecież mogła sprawdzić w komputerze, który miała obok. Najwyraźniej zysk dla swojej firmy był ważniejszy niż klient. Zdenerwowałem się, nie ukrywam tego <img src="http://www.capaciouscore.pl/smiles/icon_confused.gif" class="emoticon" alt="Confused" /> Ostatnia rzecz, która mnie uraczyła zdarzyła się na peronie. Podjechał pociąg i wszyscy jak stado bydła rzucili się do pociągu. Po co? Żeby zająć miejsca! No bo pewne było, że nie wszyscy będą mieli miejsca siedzące mimo, że zapłacili za bilecik <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Nie brzmi znajomo? Zapłać więcej, a będzie rezerwacja miejsca. Dokładnie tak, bo po co dostawiać więcej składów? Lepiej upchać wszystkich w to co mamy. Na dodatek zostawić zamknięte przedziały dla matek z dzieckiem, niech ludzie postoją sobie w korytarzu blokując ruch.
<br />

<br />
I ostatnia sytuacja, która mnie urzekła. Wracam od znajomej mniej więcej od Legionowa do Warszawy. Ranny kurs więc ludzi w pył. Ledwo się zmieściłem Pełno ludzi wszędzie. Nie było nawet możliwości sprawdzenia biletu przez konduktorów. Szyby zaparowane, duszno, nic nie widać, która to stacja. Po prostu wymarzone warunki do podroży. Podobno codziennie tak jest, a nikt nie pomyślał, żeby dodać jeden albo dwa wagony.
<br />

<br />
Reasumując myślę, że lepiej jest podróżować swoim samochodem i potem stękać na polskie drogi aniżeli jechać taniej ale z mniejszym komfortem.]]></description></item><item><title>[PHP] Pobieranie rozszerzenia pliku z podanej ścieżki</title><pubdate>Tue, 17 Aug 2010 6:47:21 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/pobieranie-rozszerzenia-pliku-z-podanej-sciezki/</link><comments>http://www.capaciouscore.pl/artykuly/pobieranie-rozszerzenia-pliku-z-podanej-sciezki/#komentarze</comments><description><![CDATA[Zapewne metod jest o wiele więcej <img src="http://www.capaciouscore.pl/smiles/icon_razz.gif" class="emoticon" alt="Razz" /> ja wyłuskałem tylko pare. Liczę na Wasza inwencję.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">first_method</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">){</span><span style="color: #0000BB"> return&nbsp;substr</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">,&nbsp;(</span><span style="color: #0000BB">strrpos</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'.'&nbsp;</span><span style="color: #007700">)&nbsp;+&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">));}function&nbsp;</span><span style="color: #0000BB">second_method</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">){</span><span style="color: #0000BB"> return&nbsp;substr</span><span style="color: #007700">(</span><span style="color: #0000BB">strrchr</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'.'</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">);}function&nbsp;</span><span style="color: #0000BB">third_method</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">){</span><span style="color: #0000BB"> return&nbsp;end</span><span style="color: #007700">(</span><span style="color: #0000BB">explode</span><span style="color: #007700">(</span><span style="color: #DD0000">'.'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$path</span><span style="color: #007700">));}function&nbsp;</span><span style="color: #0000BB">fourth_method</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">){</span><span style="color: #0000BB"> return&nbsp;pathinfo</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">PATHINFO_EXTENSION</span><span style="color: #007700">);}function&nbsp;</span><span style="color: #0000BB">fifth_method</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">){</span><span style="color: #0000BB"> return&nbsp;basename</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">);}function&nbsp;</span><span style="color: #0000BB">sixth_method</span><span style="color: #007700">(</span><span style="color: #0000BB">$path</span><span style="color: #007700">){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Imperfectly,&nbsp;but&nbsp;works&nbsp;sometimes&nbsp;<img src="http://www.capaciouscore.pl/smiles/icon_razz.gif" class="emoticon" alt="Razz" /></span><span style="color: #0000BB"> preg_match</span><span style="color: #007700">(</span><span style="color: #DD0000">'#^(?:.+?)(?:\.([^\.]*))?$#'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$path</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$matches</span><span style="color: #007700">);</span><span style="color: #0000BB"> return&nbsp;$matches</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">];}</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'http://www.example.com/path/test.ext'</span><span style="color: #007700">;</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'http://www.example.com/path/test.ext.ext2'</span><span style="color: #007700">;</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'http://www.example.com/path/.htaccess'</span><span style="color: #007700">;</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'http://www.example.com/path/test'</span><span style="color: #007700">;</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">4</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'http://www.example.com/path/test.'</span><span style="color: #007700">;</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">5</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'./test.ext'</span><span style="color: #007700">;</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">6</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'/test.ext'</span><span style="color: #007700">;</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">7</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'test.ext.ext2'</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;Oczywiście&nbsp;jest&nbsp;więcej&nbsp;kombinacji&nbsp;dlatego&nbsp;proponuje&nbsp;przetestować&nbsp;je&nbsp;osobiście&nbsp;<img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;pre&gt;'</span><span style="color: #007700">;for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$how&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">);&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$how</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">){</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'&lt;div&nbsp;style="color:&nbsp;red"&gt;first_method(\''</span><span style="color: #007700">.</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">].</span><span style="color: #DD0000">'\')&nbsp;-&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">first_method</span><span style="color: #007700">(</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">]).</span><span style="color: #DD0000">'&lt;/div&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'&lt;div&nbsp;style="color:&nbsp;orange"&gt;second_method(\''</span><span style="color: #007700">.</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">].</span><span style="color: #DD0000">'\')&nbsp;-&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">second_method</span><span style="color: #007700">(</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">]).</span><span style="color: #DD0000">'&lt;/div&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'&lt;div&nbsp;style="color:&nbsp;green"&gt;third_method(\''</span><span style="color: #007700">.</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">].</span><span style="color: #DD0000">'\')&nbsp;-&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">third_method</span><span style="color: #007700">(</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">]).</span><span style="color: #DD0000">'&lt;/div&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'&lt;div&nbsp;style="color:&nbsp;blue"&gt;fourth_method(\''</span><span style="color: #007700">.</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">].</span><span style="color: #DD0000">'\')&nbsp;-&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">fourth_method</span><span style="color: #007700">(</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">]).</span><span style="color: #DD0000">'&lt;/div&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'&lt;div&nbsp;style="color:&nbsp;navy"&gt;fifth_method(\''</span><span style="color: #007700">.</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">].</span><span style="color: #DD0000">'\')&nbsp;-&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">fifth_method</span><span style="color: #007700">(</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">]).</span><span style="color: #DD0000">'&lt;/div&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'&lt;div&nbsp;style="color:&nbsp;purple;&nbsp;border-bottom:&nbsp;1px&nbsp;solid&nbsp;black"&gt;sixth_method(\''</span><span style="color: #007700">.</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">].</span><span style="color: #DD0000">'\')&nbsp;-&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">sixth_method</span><span style="color: #007700">(</span><span style="color: #0000BB">$some_address</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">]).</span><span style="color: #DD0000">'&lt;/div&gt;'</span><span style="color: #007700">;}echo&nbsp;</span><span style="color: #DD0000">'&lt;/pre&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Użyte w kodzie wyrażenie regularne nie jest perfekcyjne dlatego proponuje poprawić je <img src="http://www.capaciouscore.pl/smiles/icon_razz.gif" class="emoticon" alt="Razz" />
<br />

<br />
Odnośnie większości metod to najlepiej jest po prostu wrzucać nazwę pliku jako parametr. Przypominam, że w Linuxie możemy znaleźć pliki bez rozszerzenia (np. <b>/etc/init.d/README</b>). Jeżeli zamierzasz zezwalać na takie rzeczy to musisz zrobić odpowiednią filtracje. Być może w czasie czytania tego artykułu budujesz upload. Jeżeli tak jest to proponuje także sprawdzanie nagłówku pliku, który bardzo pomaga w detekcji rodzaju zawartości.]]></description></item><item><title>[PHP] Ripper grafiki czyli jak ściągnąć obrazki z dowolnej strony</title><pubdate>Sat, 14 Aug 2010 10:16:12 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/ripper-grafiki-czyli-jak-sciagnac-obrazki-z-dowolnej-strony/</link><comments>http://www.capaciouscore.pl/artykuly/ripper-grafiki-czyli-jak-sciagnac-obrazki-z-dowolnej-strony/#komentarze</comments><description><![CDATA[Ten artykuł jest swojego rodzaju kontynuacją wpisu <a href="http://www.capaciouscore.pl/artykuly/sciaganie-demotywatorow-na-dysk/" target="_blank" class="postlink">Ściąganie demotywatorów na dysk</a>.
<br />
<a name="informacje_ogolne"></a><h2>Informacje ogólne</h2>
Aktualna wersja oznaczona jest cyferką: <b>1.00.00</b>. Changelog znajduje się w paczce ze skryptem. Paczkę ze skryptem można ściągnąć <a href="http://www.capaciouscore.pl/skrypty/ripper-grafiki/" target="_blank" class="postlink">stąd</a>.
<br />
<a name="konfiguracja"></a><h2>Konfiguracja</h2>
Konfiguracja jest prosta i ogranicza się wyłącznie do edycji pliku <b>config.php</b>. Poniżej znajduje się lista zmiennych wraz z tym za co one odpowiadają.
<br />
<ul class="list">
<li><tt>$config['domain']</tt> - adres strony, z której maja zostać ściągnięte obrazki (koniecznie bez <tt>http://</tt> na początku oraz <tt>/</tt> na końcu. Jeżeli witryna posiada mechanizm redirect np. z <tt>www.example.com</tt> na <tt>example.com</tt> to należy wpisać adres <tt>example.com</tt> i vice versa</li>
<li><tt>$config['change_file_naming']</tt> - zmienna mówiąca skryptowi czy przy zapisie obrazków ma zmieniać ich nazwę. Nowa nazwa jest wynikiem funkcji <tt>md5()</tt> pełnego adresu czyli np. 
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php&nbsp;md5</span><span style="color: #007700">(</span><span style="color: #DD0000">'http://www.example.com/path/file_name.ext'</span><span style="color: #007700">);&nbsp;</span><span style="color: #0000BB">?&gt;</span>
</span></pre></li>
<li><tt>$config['overwrite_protection']</tt> - jeżeli wartość tej zmiennej wynosi <tt>true</tt> wtedy skrypt nie dopuści do nadpisania plików w folderze z grafika</li>
<li><tt>$config['dir']</tt> - tutaj chyba wiadomo o co chodzi, prawda? <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> </li>
<li><tt>$config['permitted_path']</tt> - jest to tablica z zasadami mówiącą, które adresy mogą być indeksowane. Reguły odnoszą się do tzw. <i>path</i> czyli ścieżki. Jeżeli chcecie aby robot przeszukał cala stronę wtedy pozostawcie pustą tablicę.</li>
</ul>
<a name="wymagania"></a><h2>Wymagania</h2>
Udostępniony skrypt powinien działać na każdej wersji PHP 5. W poprzedniej wersji wymagałem od Was troszkę manipulacji w kodzie. Tym razem jedyną rzecz jaka musicie ruszać jest konfiguracja <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Takie bajery jak <tt>max_execution_time</tt> czy <tt>allow_url_fopen</tt> ustawia skrypt w metodzie <tt>crawl()</tt>.
<br />
<a name="metody"></a><h2>Dostępne metody</h2>
<ul class="list">
<li><tt>add_image_to_list()</tt> - metoda dodaje adres grafiki do listy</li>
<li><tt>add_link_to_list()</tt> - metoda dodaje link do listy</li>
<li><tt>crawl()</tt> - metoda główna uruchamiająca robota indeksującego</li>
<li><tt>download_images()</tt> - metoda pobierająca grafikę z listy</li>
<li><tt>dump_core()</tt> - metoda wyrzucająca pole <tt>core</tt> z rezultatami indeksowania</li>
<li><tt>get_domain()</tt> - pobiera domenę z adresu (np. z adresu <tt>www.test1.test2.domena.pl</tt> zwróci <tt>domena.pl</tt>)</li>
<li><tt>get_extension()</tt> - pobiera rozszerzenie pliku z adresu</li>
<li><tt>get_file_name()</tt> &#8211; pobiera nazwę pliku z adresu</li>
<li><tt>get_image()</tt> - wyłuskuję adres grafiki ze znacznika <tt>&lt;img&gt;</tt></li>
<li><tt>get_links()</tt> - wyłuskuję linki ze znacznika <tt>&lt;a&gt;</tt></li>
<li><tt>is_address_exists()</tt> - metoda sprawdza czy podany adres istnieje na liście</li>
<li><tt>is_correct_path()</tt> - metoda sprawdza czy podana ścieżka jest prawidłowa</li>
<li><tt>is_link()</tt> &#8211; sprawdza czy podany ciąg jest linkiem</li>
<li><tt>ripper()</tt> - konstruktor, jako argument przyjmuje konfiguracje</li>
<li><tt>stat()</tt> - zwraca statystyki indeksowania</li>
</ul>
<a name="jak_uruchomic"></a><h2>Jak uruchomić</h2>
<ol class="list list_1">
<li>Wrzucamy do odpowiedniego folderu</li>
<li>Upewniamy się, że mamy wystarczająco miejsca</li>
<li>Konfigurujemy skrypt</li>
<li>Uruchamiamy i czekamy cierpliwie na wyniki</li>
</ol>
<a name="rezultat_dzialan_skryptu"></a><h2>Rezultat działań skryptu</h2>
Po zakończeniu działań indeksowania i ściągania wywołana metoda <tt>stat()</tt> wyrzuci tablice, która będzie wyglądać mniej więcej tak:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">Array&nbsp;(&nbsp;[downloaded]&nbsp;=&gt;&nbsp;Array&nbsp;(&nbsp;[images]&nbsp;=&gt;&nbsp;1058&nbsp;)&nbsp;[indexed]&nbsp;=&gt;&nbsp;Array&nbsp;(&nbsp;[images]&nbsp;=&gt;&nbsp;1058&nbsp;[links]&nbsp;=&gt;&nbsp;106&nbsp;)&nbsp;)</span></pre>
Jeżeli macie potrzebę zapisania wyników indeksowania wtedy wywołajcie metodę <tt>dump_core()</tt> i obrabiacie wyniki. Ów metoda zwróci pole <tt>core</tt>, które zawiera linki i adresy grafiki w kluczach. W wartości tablic są boolowskie. Jeżeli jest <tt>true</tt> oznacza to, że ściągnięto grafikę bądź zaindeksowano stronę.
<br />
<a name="todo_list"></a><h2>Lista rzeczy do zrobienia</h2>
<ul class="list">
<li>Możliwość skanowania wielu stron na raz (wielowątkowość)</li>
<li>Możliwość zapisywania wyników do plików/baz danych</li>
<li>Możliwość zapisywania obrazków z określonej podstrony do podfolderu</li>
<li>Możliwość definiowania własnych reguł dla metody <tt>get_image()</tt></li>
<li>Możliwość definiowania z zewnątrz adresów do zindeksowania</li>
</ul>]]></description></item><item><title>[PHP] Kolorowanie składni</title><pubdate>Thu, 12 Aug 2010 11:01:05 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/kolorowanie-skladni-w-php/</link><comments>http://www.capaciouscore.pl/artykuly/kolorowanie-skladni-w-php/#komentarze</comments><description><![CDATA[Zapewne czasami widzicie na stronach pokolorowany kod PHP i zastanawiacie się jak to jest zrobione. Rozwiązanie jest bardzo proste i naturalnie można zobaczyć je poniżej <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Chce przestrzedz wszystkich przed nierozważnym używaniem ów funkcji. Jeżeli zamierzacie pokazywać pokolorowany kod to upewnijcie się, że nie zagraża on bezpieczeństwu aplikacji. Chodzi oczywiście o pokazywanie źródeł ważnych plików stron. Takie rzeczy powinny być pod ścisłą kontrolą. 
<br />
<a name="kolorowanie_kodu_pochodzacego_z_pliku"></a><h2>Kolorowanie kodu pochodzącego z pliku</h2>
Pierwszy kod wrzuca pokolorowany kod do zmiennej, a następnie ją echuje.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$file_name&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'nazwa_pliku.php'</span><span style="color: #007700">;</span><span style="color: #0000BB">$source&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">highlight_file</span><span style="color: #007700">(</span><span style="color: #0000BB">$file_name</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB"><em><span>true</span></em></span><span style="color: #007700">);echo&nbsp;</span><span style="color: #0000BB">$source</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Jeżeli w funkcji <tt>highlight_file()</tt> nie będzie drugiego parametru lub będzie wynosił <tt>false</tt> wtedy pokolorowana składnia zostanie wyrzucona w miejscu wywołania funkcji.
<br />
<a name="kolorowanie_kodu_pochodzacego_ze_stringu"></a><h2>Kolorowanie kodu pochodzącego ze stringu</h2>
Funkcja <tt>highlight_string()</tt> także posiada drugi parametr i ma takie samo zastosowanie jak w funkcji <tt>highlight_file()</tt>. Oznacza to, że jeżeli chcemy wyrzucać kod w miejscu wywołania funkcji to dajemy jako drugi parametr <tt>false</tt> albo nie dajemy go wcale w przeciwnym wypadku podajemy wartość <tt>true</tt>.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$code&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'&lt;?php&nbsp;echo&nbsp;\'test\';&nbsp;?&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB">highlight_string</span><span style="color: #007700">(</span><span style="color: #0000BB">$code</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Naturalnie taki ciąg może pochodzić z pola z bazy danych. Możemy także ładować kod za pomocą np. <tt>file_get_contents()</tt>, a następnie wrzucać wynik do <tt>highlight_string()</tt>.
<br />

<br />
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.highlight-file.php" target="_blank" class="postlink">http://php.net/manual/pl/function.highlight-file.php</a>
<br />
<a href="http://php.net/manual/pl/function.highlight-string.php" target="_blank" class="postlink">http://php.net/manual/pl/function.highlight-string.php</a>]]></description></item><item><title>[PHP] Blokowanie includowania</title><pubdate>Mon, 02 Aug 2010 5:06:17 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/blokowanie-includowania-w-php/</link><comments>http://www.capaciouscore.pl/artykuly/blokowanie-includowania-w-php/#komentarze</comments><description><![CDATA[Czasami istnieje potrzeba zablokowania możliwości pobierania części serwisu bądź plików php z zewnętrznego serwera. Tu z pomocą przychodzi nam nic innego jak stała. Zasada jest bardzo prosta i brzmi następująco: stałą wstawiamy w miejsca (pliki), które będą includować inne pliku potrzebne do działania strony, natomiast pliki includowane musza zawierać instrukcje warunkowa sprawdzająca czy została zdefiniowana stała. W praktyce wygląda to mniej więcej tak jak na poniższym listingu.
<br />
<b>index.php</b>
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?phpdefine</span><span style="color: #007700">(</span><span style="color: #DD0000">'PAGE'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">);include(</span><span style="color: #DD0000">'./test.php'</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>test.php</b>
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">if(!</span><span style="color: #0000BB">defined</span><span style="color: #007700">(</span><span style="color: #DD0000">'PAGE'</span><span style="color: #007700">))&nbsp;die(</span><span style="color: #DD0000">'Catch&nbsp;hacking&nbsp;attempt'</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Przy próbie załączenia pliku <b>test.php</b> z innego serwera wyrzuci odpowiedni komunikat. Zjawisko takie ma miejsce ponieważ zdefiniowane stale są widoczne tylko na serwerze, na którym uruchomiono skrypt.]]></description></item><item><title>GamersFirst i wspaniała subskrypcja</title><pubdate>Thu, 22 Jul 2010 6:57:42 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/gamersfirst-i-wspaniala-subskrypcja/</link><comments>http://www.capaciouscore.pl/artykuly/gamersfirst-i-wspaniala-subskrypcja/#komentarze</comments><description><![CDATA[Jakiś czas temu znajomy nakłonił mnie abym pograł z nim w <a href="http://pl.wikipedia.org/wiki/Knight-Online" target="_blank" class="postlink">Knight Online</a>. Od tamtego czasu minęło pół roku jednak ostatnio zdenerwowała mnie korporacja GamersFirst czyli <i>stara dobra</i> <a href="http://pl.wikipedia.org/wiki/K2_Network" target="_blank" class="postlink">K2 Network</a>. Ów przejęta korporacja wysyła co parę dni maila z informacją, że dawno mnie widziała w grze. No jasne, że dawno mnie widziała w grze skoro KO jest teraz praktycznie nastawione jedynie na zarobienie jak największej ilości pieniędzy. Pomijam fakt, że ~90% graczy używa <a href="http://pl.wikipedia.org/wiki/Cheat" target="_blank" class="postlink">cheatów</a>. W każdym bądź razie wszedłem na stronę Unsubscribe, podałem swojego maila i dostałem informacje, że zadanie zostanie zrealizowane do 48 godzin. Było to dawno temu jednak jak się okazuje nic się nie zmieniło i nadal dostaje e-maile od nich. Spróbowałem ponownie jednak dostaję informację, że żądanie nie może zostać zrealizowane. No cóż w ten oto sposób zostałem zmuszony zapodać bana na całą ich domenę.]]></description></item><item><title>Nie włączający się EdHTML</title><pubdate>Thu, 22 Jul 2010 1:59:41 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/nie-wlaczajacy-sie-edhtml/</link><comments>http://www.capaciouscore.pl/artykuly/nie-wlaczajacy-sie-edhtml/#komentarze</comments><description><![CDATA[Wiem, że program jest stary jednak czasami mam potrzebę użycia go. Ma tam swoje wady (np. wycieki pamięci) jednak mi nie przeszkadzają. Wiem, że ma swojego młodszego brata CoreEditor'a lecz on strasznie muli przy otwieraniu dużej ilości plików. Idąc do sedna sprawy informuje, że nie mam rozwiązania sytuacji, o której już wspomniałem w tytule. Otóż zawsze kiedy nie włącza się EdHTML to przed tym faktem, zainstalowaliśmy go i nie uruchomiliśmy, następnie restartowaliśmy komputer. Po tym fakcie przy uruchamianiu pojawia się <a href="http://pl.wikipedia.org/wiki/Splash_screen" target="_blank" class="postlink">splash screen</a> i po chwili znika. Czyszczenie rejestru nic nie pomaga. Tak samo czyszczenie folderu, w którym to zainstalował się edytor. Podejrzewam, że chodzi o jakiś plik, który jest tworzony za pierwszym uruchomieniem. Gdy znajdę trochę czasu to poobserwuje aplikacje i zobaczę jakie operacje wykonuje za pierwszym uruchomieniem. Być może wtedy dowiem się dlaczego pojawia się taka anomalia. Jedynym znanym mi rozwiązaniem jest zreinstalowanie systemu i ponowna instalacja edytora wraz z jego uruchomieniem zaraz po instalacji.]]></description></item><item><title>Bug paginacji na kanale YouTube</title><pubdate>Wed, 14 Jul 2010 5:25:40 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/bug-paginacji-na-kanale-youtube/</link><comments>http://www.capaciouscore.pl/artykuly/bug-paginacji-na-kanale-youtube/#komentarze</comments><description><![CDATA[Parę miesięcy temu oglądałem kanał użytkownika <a href="http://www.youtube.com/user/BrzydkiBurak" target="_blank" class="postlink">BrzydkiBurak</a>. Podczas przeglądania <i>komentarzy na temat kanału</i> zauważyłem, że mechanizm nieprawidłowo zlicza ilość komentarzy. Podejrzewam, że jest to związane z liczeniem wpisów, które zostały usunięte. Myślałem, że przez 4 miesiące ktoś zdarzy naprawić tak błahy problem. Najwyraźniej pracownicy YouTube strasznie się obijają. Na dowód zaistniałej sytuacji poniżej załączam film.
<br />
<a href="http://www.youtube.com/watch?v=8cAOKlVrCYw">http://www.youtube.com/watch\?v=8cAOKlVrCYw</a>]]></description></item><item><title>[PHP] Czas generowania strony</title><pubdate>Wed, 14 Jul 2010 3:08:15 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/czas-generowania-strony/</link><comments>http://www.capaciouscore.pl/artykuly/czas-generowania-strony/#komentarze</comments><description><![CDATA[Pamiętam jak byłem niedoświadczonym webmasterem zastanawiałem się jak wyświetlić czas generowania strony. Ot taki nikomu niepotrzebny pierdolnik bo czymś niestety trzeba było zapchać pustą przestrzeń w stopce <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Jeżeli zamierzasz umieścić na stronie taki nikomu niepotrzebny bajer to daruj sobie. Co innego jeżeli zamierzasz przeprowadzać bardzo proste testy wydajności.
<br />

<br />
Na poniższym listingu zostanie przedstawiona funkcja <tt>get_time()</tt>, która zwraca bardzo dokładny czas. Gdybyśmy chcieli użyć funkcji <tt>time()</tt> to nie uzyskalibyśmy dokładnych wyników pomiaru. Pamiętajmy aby odpowiednio obciążać operacjami testujący kod. Najgłupszym z pomysłów jaki widziałem było liczenie przebiegu pustej pętli. Nie dość, że ktoś niepotrzebnie marnuje prąd to jeszcze pokazuje jaki to jest fajny. Czyż to nie cudne? <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />
<br />

<br />
Wracając na ziemie... Pętla wywoła się milion razy i za każdym razem wylosuje liczbę, która zostanie zapisana do zmiennej. Prawda, ze proste? <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" />
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">get_time</span><span style="color: #007700">(){</span><span style="color: #0000BB"> list</span><span style="color: #007700">(</span><span style="color: #0000BB">$usec</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$sec</span><span style="color: #007700">)&nbsp;=&nbsp;</span><span style="color: #0000BB">explode</span><span style="color: #007700">(</span><span style="color: #DD0000">'&nbsp;'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">microtime</span><span style="color: #007700">());</span><span style="color: #0000BB"> return&nbsp;</span><span style="color: #007700">((float)</span><span style="color: #0000BB">$usec&nbsp;</span><span style="color: #007700">+&nbsp;(float)</span><span style="color: #0000BB">$sec</span><span style="color: #007700">);}</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'start'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">get_time</span><span style="color: #007700">();for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">1000000</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">){</span><span style="color: #0000BB"> $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'random_number'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">rand</span><span style="color: #007700">();}echo&nbsp;</span><span style="color: #0000BB">round</span><span style="color: #007700">((</span><span style="color: #0000BB">get_time</span><span style="color: #007700">()&nbsp;-&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'start'</span><span style="color: #007700">]),&nbsp;</span><span style="color: #0000BB">8</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Na koniec wspomnę o precyzji. Jak widzimy końcowy wynik zaokrągla się do ósmego miejsca po przecinku. Jeżeli uznacie, że potrzebujecie więcej wtedy zmieńcie 2 parametr funkcji <tt>round()</tt>.
<br />

<br />
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.explode.php" target="_blank" class="postlink">http://php.net/manual/pl/function.explode.php</a>
<br />
<a href="http://php.net/manual/pl/function.list.php" target="_blank" class="postlink">http://php.net/manual/pl/function.list.php</a>
<br />
<a href="http://php.net/manual/pl/function.microtime.php" target="_blank" class="postlink">http://php.net/manual/pl/function.microtime.php</a>
<br />
<a href="http://php.net/manual/pl/function.round.php" target="_blank" class="postlink">http://php.net/manual/pl/function.round.php</a>]]></description></item><item><title>Omijanie sprawdzania wieku na YouTube</title><pubdate>Wed, 14 Jul 2010 12:06:31 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/omijanie-sprawdzania-wieku-na-youtube/</link><comments>http://www.capaciouscore.pl/artykuly/omijanie-sprawdzania-wieku-na-youtube/#komentarze</comments><description><![CDATA[Pamiętam kiedyś przeglądałem strony amerykańskie i natrafiłem na witrynę umożliwiającą <i>obejście</i> sprawdzania wieku przez YouTube. Pewnie ktoś zapyta, <i>po co to komu?</i> Odpowiadam wiec, że nie wszyscy oglądający filmy posiadają konto i nie każdemu chce się logować (tak jak np. mi). Dlatego zrobiłem małą podstronę umożliwiającą obchodzenie limitu wiekowego. Zabawne jest to, że jeżeli umieścimy film na stronie wtedy nie jest już istotne czy film został oflagowany jako <i>szkodliwy</i> dla niepełnoletnich. Jedynym mankamentem tego rozwiązania jest to, że jeżeli zabroniono wyświetlać filmu na innych stronach wtedy będziemy zmuszeni zrobić konto na YouTube z data sugerującą, że jesteśmy pełnoletni <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Założę się, że odsetek tych filmów jest bardzo mały gdyż docelowo ustawienia filmu zezwalają na oglądanie go na innych witrynach.
<br />

<br />
Pisząc skrypt do którego zaraz podlinkuje musze przyznać, że strasznie trudno było mi znaleźć przykład filmu oflagowanego +18. Jednym z takich filmów jest np. <a href="http://www.youtube.com/watch?v=Dw_zdwNZ1aE" target="_blank" class="postlink">10 drugs not to take before driving</a>. Aby obejść blokadę wystarczy wejść na <a href="http://youtube-bypass.capaciouscore.pl/" target="_blank" class="postlink">YouTube bypass - omijanie blokady wieku</a> i wkleić adres, a następnie cieszyć się filmem <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />]]></description></item><item><title>[PHP] Jak odliczać czas do określonej daty?</title><pubdate>Thu, 08 Jul 2010 5:11:39 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/jak-odliczac-czas-do-okreslonej-daty-w-php/</link><comments>http://www.capaciouscore.pl/artykuly/jak-odliczac-czas-do-okreslonej-daty-w-php/#komentarze</comments><description><![CDATA[Poniżej znajduje się prosty kod na odliczanie czasu do określonej daty.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$date&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"2012-01-01"</span><span style="color: #007700">;</span><span style="color: #0000BB">$remained&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">ceil</span><span style="color: #007700">((</span><span style="color: #0000BB">strtotime</span><span style="color: #007700">(</span><span style="color: #0000BB">$date</span><span style="color: #007700">)&nbsp;-&nbsp;</span><span style="color: #0000BB">time</span><span style="color: #007700">())&nbsp;/&nbsp;(</span><span style="color: #0000BB">60&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">60&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">24</span><span style="color: #007700">));echo&nbsp;(</span><span style="color: #0000BB">$remained&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">0&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #DD0000">'Do&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$date</span><span style="color: #007700">.</span><span style="color: #DD0000">'&nbsp;pozostało&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$remained</span><span style="color: #007700">.</span><span style="color: #DD0000">'&nbsp;dni'&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">'Podany&nbsp;termin&nbsp;już&nbsp;miną'</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.ceil.php" target="_blank" class="postlink">http://php.net/manual/pl/function.ceil.php</a>
<br />
<a href="http://php.net/manual/pl/function.strtotime.php" target="_blank" class="postlink">http://php.net/manual/pl/function.strtotime.php</a>
<br />
<a href="http://php.net/manual/pl/function.time.php" target="_blank" class="postlink">http://php.net/manual/pl/function.time.php</a>]]></description></item><item><title>Do końca wakacji zostało</title><pubdate>Mon, 05 Jul 2010 8:45:44 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/do-konca-wakacji-zostalo/</link><comments>http://www.capaciouscore.pl/artykuly/do-konca-wakacji-zostalo/#komentarze</comments><description><![CDATA[Dla tych co wakacje kojarzą się z błogo spędzonym czasem mam niespodziankę. Tym razem na celu są uczniowie średniego i niższego szczebla. Jeżeli macie ochotę zrobić komuś na złość i przypomnieć ile czasu im zostało to nie krepujcie się i prześlijcie mu linka do poniższego obrazka. <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />
<br />
<a href="http://www.capaciouscore.pl/do-konca-wakacji-zostalo.php" target="_blank" class="postlink"><img src="http://www.capaciouscore.pl/do-konca-wakacji-zostalo.php" alt="do-konca-wakacji-zostalo.php" /></a>]]></description></item><item><title>[PHP] Jak używać PHP w plikach o rozszerzeniu .html</title><pubdate>Mon, 05 Jul 2010 4:27:06 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/jak-uzywac-php-w-plikach-o-rozszerzeniu-html/</link><comments>http://www.capaciouscore.pl/artykuly/jak-uzywac-php-w-plikach-o-rozszerzeniu-html/#komentarze</comments><description><![CDATA[Jeżeli mamy możliwość edytowania <b>httpd.conf</b> wtedy otwieramy go i szukamy linijki:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">AddType&nbsp;application/x-httpd-php&nbsp;.php</span></pre>
następnie dopisujemy na końcu <tt>.html</tt>. Linijka po edycji powinna wyglądać mniej więcej tak:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">AddType&nbsp;application/x-httpd-php&nbsp;.php&nbsp;.html</span></pre>
W przypadku braku możliwości edycji <b>httpd.conf</b> możemy powyższą dyrektywę zastosować także w pliku <b>.htaccess</b>. Jeżeli wystąpi jakiś problem z dodaniem uchwytu być może trzeba użyć dyrektywy <tt>RemoveHandler</tt> w sposób jaki pokazano na poniższym listingu:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">RemoveHandler&nbsp;.htmlAddType&nbsp;application/x-httpd-php&nbsp;.html</span></pre>
<h2>Rozwiązanie przy pomocy mod_rewrite</h2>
Jeżeli chcemy przekierować ruch z plików o rozszerzeniu <tt>.html</tt> na pliki z rozszerzeniem <tt>.php</tt> wtedy w <b>.htaccess</b> umieszczamy poniższy wpis. Proszę zwrócić uwagę na zaznaczone wyrażenie. Pliki tylko o takim wzorcu będą przekierowywane na inne rozszerzenie.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">DirectoryIndex&nbsp;index.phpRewriteEngine&nbsp;onRewriteRule&nbsp;^([<em><span>a-zA-Z0-9_\-</span></em>]+)\.html$&nbsp;$1.php&nbsp;[L]</span></pre>]]></description></item><item><title>[PHP] Różnica między require() i include()</title><pubdate>Mon, 05 Jul 2010 3:19:04 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/roznica-miedzy-require-i-include/</link><comments>http://www.capaciouscore.pl/artykuly/roznica-miedzy-require-i-include/#komentarze</comments><description><![CDATA[Są trzy zasadnicze różnice miedzy funkcjami <tt>include()</tt> i <tt>require()</tt>.
<br />

<br />
Pierwsza różnica polega na tym, że funkcja <tt>require()</tt> dołącza do parsowania kod niezależnie od tego czy spełnione zostały warunki w instrukcjach warunkowych.
<br />

<br />
Druga różnica polega na tym, że funkcja <tt>include()</tt> wstawia zawsze aktualna zawartość pliku, natomiast <tt>require()</tt> przy kolejnych wywołaniach w cyklu wstawia dane z pierwszego przebiegu.
<br />

<br />
Trzecia różnica polega na tym, że funkcja <tt>include()</tt> podczas próby załączenia pliku, który nie istnieje wystosuje ostrzeżenie, natomiast <tt>require()</tt> wyrzuci <tt>fatal error</tt> i działanie skryptu zostanie przerwane.]]></description></item><item><title>Garść newsów</title><pubdate>Wed, 30 Jun 2010 1:54:14 +0200</pubdate><link>http://www.capaciouscore.pl/aktualnosci/garsc-newsow/</link><comments>http://www.capaciouscore.pl/aktualnosci/garsc-newsow/#komentarze</comments><description><![CDATA[Troszkę pozmieniało się od ostatniego newsa. Po pierwsze znalazłem chętnego, który zmotywuje mnie i pomoże z projektem webkrytyki. Po drugie zacząłem prace nad nowa wersja CMS'a, który miedzy innymi wykorzystuje na swojej stronie. Postaram się jak najszybciej uwinąć z tym zadaniem <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Przewiduję duże zmiany w tym miedzy innymi dodanie galerii, stosu narzędzi online, ułatwienia związane z  poruszaniem się po stronie oraz wymianę layoutu. Ponadto zagęszczam ruchy związane z produkowaniem artykułów oraz kursu PHP. No i co najważniejsze to staram się jak mogę wykorzystać wolne chwile do spotkań ze znajomymi w wakacje <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />]]></description></item><item><title>[PHP] Różnica między self i this</title><pubdate>Wed, 30 Jun 2010 1:35:58 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/roznica-miedzy-self-i-this/</link><comments>http://www.capaciouscore.pl/artykuly/roznica-miedzy-self-i-this/#komentarze</comments><description><![CDATA[<tt>$this</tt> używamy w celu odniesienia się do danej instancji obiektu. Oznacza to, że chcąc odwołać się do niestatecznego pola używamy właśnie <tt>$this -&gt; pole</tt> natomiast jeżeli chcemy odwołać się do statycznego pola klasy to wtedy używamy <tt>self::pole</tt>.]]></description></item><item><title>[PHP] Jak sprawdzić czy liczba jest parzysta bądź nieparzysta?</title><pubdate>Wed, 30 Jun 2010 1:21:53 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/jak-sprawdzic-czy-liczba-jest-parzysta-badz-nieparzysta/</link><comments>http://www.capaciouscore.pl/artykuly/jak-sprawdzic-czy-liczba-jest-parzysta-badz-nieparzysta/#komentarze</comments><description><![CDATA[Najprostszym sposobem na sprawdzenie czy liczba jest parzysta bądź nieparzysta jest sprawdzenie wyniku z dzielenia przez dwa. Do tego celu używamy modulo.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">is_odd</span><span style="color: #007700">(</span><span style="color: #0000BB">$number</span><span style="color: #007700">){</span><span style="color: #0000BB"> return&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB"><em><span>$number&nbsp;</span><span style="color: #007700">%&nbsp;</span><span style="color: #0000BB">2</span></em>&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #0000BB">true&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">);}</span><span style="color: #0000BB">$x&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">22</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #DD0000">'Liczba&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$x</span><span style="color: #007700">.</span><span style="color: #DD0000">'&nbsp;jest&nbsp;'</span><span style="color: #007700">.(</span><span style="color: #0000BB">is_odd</span><span style="color: #007700">(</span><span style="color: #0000BB">$x</span><span style="color: #007700">)&nbsp;?&nbsp;</span><span style="color: #DD0000">'nieparzysta'&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">'parzysta'</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Funkcja <tt>is_odd()</tt> zwraca <tt>true</tt> jeżeli liczba jest nieparzysta lub <tt>false</tt> jeżeli liczba jest parzysta.
<br />

<br />
Jest też druga metoda sprawdzająca parzystość bądź nieparzystość liczby. Polega ona na wykonaniu operacji bitowego AND.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">is_odd</span><span style="color: #007700">(</span><span style="color: #0000BB">$number</span><span style="color: #007700">){</span><span style="color: #0000BB"> return&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB"><em><span>$number&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">1</span></em>&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #0000BB">true&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">);}</span><span style="color: #0000BB">$x&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">22</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #DD0000">'Liczba&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$x</span><span style="color: #007700">.</span><span style="color: #DD0000">'&nbsp;jest&nbsp;'</span><span style="color: #007700">.(</span><span style="color: #0000BB">is_odd</span><span style="color: #007700">(</span><span style="color: #0000BB">$x</span><span style="color: #007700">)&nbsp;?&nbsp;</span><span style="color: #DD0000">'nieparzysta'&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">'parzysta'</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Poniżej zamieszczam także skrypt kolorujący na zmianę kolejne przykładowe wpisy.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;ul&gt;'</span><span style="color: #007700">;for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">9</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">){</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'&lt;li&nbsp;style="background:&nbsp;#'</span><span style="color: #007700">.(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">1&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #0000BB">333&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">666</span><span style="color: #007700">).</span><span style="color: #DD0000">'"&gt;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$h</span><span style="color: #007700">.</span><span style="color: #DD0000">'&lt;/li&gt;'</span><span style="color: #007700">;}echo&nbsp;</span><span style="color: #DD0000">'&lt;/ul&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>]]></description></item><item><title>Patrycja</title><pubdate>Thu, 17 Jun 2010 11:15:38 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/patrycja/</link><comments>http://www.capaciouscore.pl/artykuly/patrycja/#komentarze</comments><description><![CDATA[Tak wiem, bardzo ale to bardzo długo zwlekałem z tą notką <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /> Miałem ku temu określone powody i obawy przed konsekwencjami swoich czynów. Po pierwsze to te zabawki zwane dalej kijami hokejowymi, a po drugie to te piękne ręce, które mogą przypadkowo zapętlić się na mojej szyi. Tak więc idąc do meritum sprawy muszę powiedzieć, że jakiś czas temu poznałem fajna dziewczynę, która sponiewierała mnie, związała i wykorzystała <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Miło będę wspominał tamte chwile. Liczę, że skusisz się na rewanż w sierpniu.]]></description></item><item><title>Skype i begin_of_the_skype_highlighting end_of_the_skype_highlighting</title><pubdate>Thu, 17 Jun 2010 10:43:57 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/skype-i-begin-of-the-skype-highlighting-end-of-the-skype-highlighting/</link><comments>http://www.capaciouscore.pl/artykuly/skype-i-begin-of-the-skype-highlighting-end-of-the-skype-highlighting/#komentarze</comments><description><![CDATA[Pewnej ciepłej nocy wzięło mnie na edytowanie szablonu WordPress. Otwieram pliki do edycji w edytorze plików udostępnionym przez Wordpress i ku mojemu zdziwieniu widzę <tt>begin_of_the_skype_highlighting</tt> i <tt>end_of_the_skype_highlighting</tt> obok nazwy znajomego na liście kontaktów w polu textarea.
<br />

<br />
Załóżmy, że na liście kontaktów figuruje osoba o loginie pan_xyz. Następnie otwieramy stronę zawierającą słowo pan_xyz i widzimy, że ów zapis zamienia się na link do dzwonienia. Szkoda tylko, że ten mechanizm nie ma związku z opcja linkowania <tt>callto:</tt>. Dodatkowo ma miejsce podmiana loginu na nazwę figurującą na naszej liście kontaktów. Wystarczy popularna fraza we wpisie paręnaście razy oraz taki sam login na Skype, a porządek mamy gwarantowany. Niestety aby pozbyc się podmieniania zmuszeni jesteśmy do wyłączenia Skypa. Po prostu genialne bo pracując nie mogę przy okazji pogadać, ze znajomymi...]]></description></item><item><title>[PHP] Różnica między public, private i protected</title><pubdate>Thu, 03 Jun 2010 3:37:17 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/roznica-miedzy-public-private-i-protected/</link><comments>http://www.capaciouscore.pl/artykuly/roznica-miedzy-public-private-i-protected/#komentarze</comments><description><![CDATA[Modyfikator <tt>public</tt> oznacza, że atrybut lub metoda jest widoczna zarówno ze środka klasy, klas dziedziczonych jak i z zewnątrz klasy. 
<br />

<br />
Modyfikator <tt>private</tt> oznacza, że atrybut lub metoda nie jest widoczna na zewnątrz  klasy i nie może być dziedziczona.
<br />

<br />
Modyfikator <tt>protected</tt> oznacza, że atrybut lub metoda nie jest widoczna na zewnątrz  klasy i może być dziedziczona.]]></description></item><item><title>Zapętlenie filmów na YouTube</title><pubdate>Thu, 03 Jun 2010 1:42:12 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/zapetlenie-filmow-na-youtube/</link><comments>http://www.capaciouscore.pl/artykuly/zapetlenie-filmow-na-youtube/#komentarze</comments><description><![CDATA[Zastanawiam się dlaczego do tej pory nie udostępniono w odtwarzaczu opcji zapętlenia się filmów. Nie trzeba byłoby co kilka minut ponownie klikać przycisk Play <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> lub ściągać film na dysk i odtwarzać. Na szczęście jest proste rozwiązanie. Wystarczy zainstalować <a href="https://addons.mozilla.org/pl/firefox/addon/748/" target="_blank" class="postlink">Greasemonkey</a> dla Firefox i użyć tego skryptu <a href="http://userscripts.org/scripts/show/28832" target="_blank" class="postlink">Loopy for YouTube</a>.]]></description></item><item><title>Wyszukiwarka w panelu poczty komunikatora Tlen.pl</title><pubdate>Thu, 03 Jun 2010 12:57:47 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/wyszukiwarka-w-panelu-poczty-komunikatora-tlenpl/</link><comments>http://www.capaciouscore.pl/artykuly/wyszukiwarka-w-panelu-poczty-komunikatora-tlenpl/#komentarze</comments><description><![CDATA[Jakiś czas temu Grupa o2 Sp. z o.o. odrestaurowała panel poczty na stronie jednak ten w komunikatorze nie uległ zmianie. Tak sobie myślę, że przydałaby się wyszukiwarka. Stanowczo ułatwiłaby przeszukiwanie poczty przez gąszcz spamu.]]></description></item><item><title>Alior Bank i Wyższa Kultura Bankowości</title><pubdate>Thu, 03 Jun 2010 12:06:45 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/alior-bank-i-wyzsza-kultura-bankowosci/</link><comments>http://www.capaciouscore.pl/artykuly/alior-bank-i-wyzsza-kultura-bankowosci/#komentarze</comments><description><![CDATA[Dziś wzięło mnie na chwile refleksji i przypomniał mi się moment kiedy odebrałem kwit do uiszczenia opłaty za prawo jazdy. Poszedłem wpierw do sklepu zrobić małe zakupy, a następnie wracając widzę obok mnie Alior. Myślę sobie spoko, od razu załatwię sprawę zapłaty za dokument. Wchodzę i pytam się czy możliwy jest przelew z takim papierkiem (otrzymanym z Wydziału Komunikacji). Pani mówi, że tak jednak będzie dopłata. Ja zapytałem się ile i uzyskałem odpowiedź. 15 złotych z hakiem. I oto właśnie jest wyższa kultura bankowości. Najśmieszniejsze jest to, że po tym zdarzeniu przeszedłem się po wszystkich bankach w okolicy i żaden nie żądał takich pieniędzy za <i>niestandardowy druczek</i>. Zresztą jeżeli chodzi o Alior Bank to wystarczy <a href="http://www.google.pl/search?q=wyzsza+kultura+bankowosci" target="_blank" class="postlink">zapytać wujka Google</a> co o nim sadzi i dowiemy się ciekawych rzeczy.]]></description></item><item><title>Bug w menu Opera.com</title><pubdate>Thu, 03 Jun 2010 1:07:07 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/bug-w-menu-opera-com/</link><comments>http://www.capaciouscore.pl/artykuly/bug-w-menu-opera-com/#komentarze</comments><description><![CDATA[Tak jak zwykle po reinstalacji systemu ściągam najnowszą wersje Opery i dziwnym trafem ruszyłem myszka w kierunku menu. Wielkim rozczarowaniem był dla mnie fakt, że zmusili do działania praktycznie całe menu jednak nie zadbali o jeden szczegół. Chodzi mi dokładnie o niecałkowite rozciąganie się tła w jednej z kategorii menu. Myślałem, że jak strony wykonują pracownicy Opera Software ASA to dbają o najdrobniejsze szczegóły. Cóż za rozczarowanie. Poniżej zamieszczam zrzut ekranu jak wygląda wadliwy element menu w przeglądarce IE6. Zdaje sobie sprawę, że jest praktycznie na wymarciu jednak na dzień dzisiejszy to nadal 10% rynku w Polsce i trzeba robić witryny internetowe tak aby działały prawie identycznie na wszystkich przeglądarkach.
<br />
<img src="http://www.capaciouscore.pl/download/other/opera-com-bug-menu.jpg" alt="opera-com-bug-menu.jpg" />]]></description></item><item><title>[PHP] Standardy kodowania</title><pubdate>Thu, 27 May 2010 1:35:50 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/standardy-kodowania-w-php/</link><comments>http://www.capaciouscore.pl/artykuly/standardy-kodowania-w-php/#komentarze</comments><description><![CDATA[Zacznę swoją wypowiedź od tego samego co napisałem w innym artykule dotyczącym <a href="http://www.capaciouscore.pl/artykuly/standardy-kodowania-arkuszu-stylu-css/" target="_blank" class="postlink">standardów kodowania arkuszy stylu CSS</a>. Jak wiemy budowanie aplikacji WWW opiera się na ustalonych wcześniej zasadach. Każdy z nas pisząc jakikolwiek skrypt używa standardów własnych bądź wymuszonych odgórnie. Swoje standardy wypracowaliśmy w pierwszym kontakcie z tym językiem. Zapewne w czasie ulegały one zmianom. Te reguły gry pełnia ważną rolę w pracy grupowej. To dzięki tym zasadom kod jest czytelny dla każdego z uczestników projektu. Jest to także bardzo istotne w momencie pisania kolejnych linijek kodu jak i szukaniu bądź poprawianiu istniejących. Poniżej zostaną przedstawione przykłady w jaki sposób kod powinno się pisać, a w jaki nie. Naturalnie przedstawię swoje własne standardy oraz inne najczęściej spotykane. Liczę na to, że bazując na tym artykule przeanalizujecie i wypracujecie własne zasady pisania kodu.
<br />
<a name="nota"></a><h2>Nota</h2>
Na początku wypadałoby wskazać listę źródeł, z których to czerpało się inspiracje, prawda? Oto i ona:
<br />
<ul class="list">
<li><a href="https://pear.php.net/manual/en/standards.php" target="_blank" class="postlink">Specyfikacja standardów kodowania PEAR</a></li>
<li><a href="http://manual.phpdoc.org/HTMLframesConverter/default/" target="_blank" class="postlink">Specyfikacja standardów kodowania phpDocumentor</a></li>
<li><a href="http://area51.phpbb.com/docs/coding-guidelines.html" target="_blank" class="postlink">Starsza specyfikacja standardów kodowania phpBB3</a></li>
<li><a href="http://wiki.phpbb.com/display/DEV/Coding+guidelines" target="_blank" class="postlink">Aktualna specyfikacja standardów kodowania phpBB</a></li>
<li><a href="http://framework.zend.com/wiki/display/ZFDEV/PHP+Coding+Standard+(draft)" target="_blank" class="postlink">Specyfikacja standardów kodowania Zend Framework</a></li>
<li><a href="http://book.cakephp.org/view/509/Coding-Standards" target="_blank" class="postlink">Specyfikacja standardów kodowania CakePHP</a></li>
<li>i inne mniej znane źródła znalezione u wujka Google <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /></li>
</ul>
<a name="nazewnictwo_plikow"></a><h2>Nazewnictwo plików</h2>
W gąszczu katalogów i plików nazewnictwo jest bardzo istotne gdyż w znacznym stopniu ułatwia odnajdywania poszukiwanej rzeczy. Pamiętajmy aby nazywać pliki zgodnie z ich przeznaczeniem czyli np. klasa z mechanizmem pamięci podręcznej powinna nosić nazwę  <b>cache.class.php</b>. Ponadto do oznaczania plików powinno się używać znaków z zakresu <tt>a-z</tt> i <tt>_</tt> czyli znaku podkreślenia. Naturalnie wszystkie nazwy piszemy z małych liter. Rozszerzenia powinny być używane zgodnie z ich przeznaczeniem. Często można spotkać także pliki z końcówką <tt>inc.php</tt>, które są przeznaczone do includowania. Innym przykładem są pliki z rozszerzeniem <tt>tpl</tt> odpowiedzialne niejako za szablon strony. Czasami można się także natchnąć na końcówkę <tt>test.php</tt> oznaczającą klasę testową określonego modułu.
<br />
<a name="zachowanie_spojnosci_nazwy_klasy_i_jej_pliku"></a><h3>Zachowanie spójności nazwy klasy i jej pliku</h3>
Staraj się zachować spójność miedzy nazwa klasy i zawartością pliku. Oznacza to, że pakujemy do pliku tylko rzeczy niezbędne do działania określonej klasy i nic poza tym.
<br />
<a name="znaczniki_php"></a><h2>Znaczniki PHP</h2>
Pamiętajmy aby używać znaczników PHP w stylu <abbr title="Extensible Markup Language">XML</abbr> czyli <tt>&lt;?php</tt> na początek i <tt>?&gt;</tt> na koniec. W przyszłości zapobiegnie to marnowaniu czasu na zbędne edycje plików. Dlaczego właściwie styl XML? Chociażby dlatego, że działa on zawsze, a styl krótki czyli <tt>&lt;? ?&gt;</tt> działa tylko gdy w dyrektywa <tt>short_open_tag</tt> ma wartość <tt>1</tt>. W przyszłości prawdopodobnie styl krótki nie będzie obsługiwany.
<br />
<a name="nagłówek_pliku"></a><h2>Nagłówek pliku</h2>
Bazując na narzędziach typu <a href="http://pl.wikipedia.org/wiki/PHPDocumentor" target="_blank" class="postlink">PHPDocumentor</a>, <a href="http://pl.wikipedia.org/wiki/Doxygen" target="_blank" class="postlink">Doxygen</a> bądź <a href="http://pl.wikipedia.org/wiki/Javadoc" target="_blank" class="postlink">Javadoc</a> nagłówek pliku powinien wyglądać mniej więcej tak:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">/****&nbsp;@author&nbsp;Pierwszy&nbsp;autor&nbsp;persona1@example.com*&nbsp;@author&nbsp;Drugi&nbsp;autor&nbsp;persona2@example.com**&nbsp;@package&nbsp;Nazwa&nbsp;paczki*&nbsp;@version&nbsp;$Id:$*&nbsp;@copyright&nbsp;(c)&nbsp;2009&nbsp;Nazwa&nbsp;Twojej&nbsp;grupy/projektu*&nbsp;@license&nbsp;http://creativecommons.org/licenses/by-sa/3.0/pl/**/</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Powyższy zapis pomoże w zorientowaniu się z czym tak naprawdę mamy doczynienia.
<br />
<a name="definicje_wstepne"></a><h2>Definicje wstępne</h2>
Czasami zdarza się, że musimy zdefiniować parę stałych na początku pliku zaraz po nagłówku. Według mojego standardu wyglądać to powinno tak:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">/***&nbsp;{HEADER}*//***&nbsp;@ignore*/</span><span style="color: #0000BB">define</span><span style="color: #007700">(</span><span style="color: #DD0000">"PIERWSZA"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">);</span><span style="color: #0000BB">define</span><span style="color: #007700">(</span><span style="color: #DD0000">"DRUGA"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<a name="stale"></a><h2>Stałe</h2>
Przy definiowaniu stałych starajcie się nie używać <tt>__</tt> na początku i końcu aby nie spowodować <i>kolizji</i> z innymi stałymi np. <tt>__FILE__</tt>, <tt>__LINE__</tt> etc.
<br />
<a name="apostrof_vs_cudzyslow"></a><h2>Apostrof VS cudzysłów</h2>
Jeżeli tylko macie możliwość to używajcie apostrofów zamiast cudzysłowu ponieważ jest szybsze. Oczywiście są przypadki, w których nie ma wyjścia i trzeba wykorzystać <tt>&quot;</tt> jednak starajcie się aby apostrof był priorytetem. 
<br />
<a name="nazewnictwo_zmiennych"></a><h2>Nazewnictwo zmiennych</h2>
Nazewnictwo zmiennych odgrywa bardzo ważną rolę w pisaniu kolejnych linijek jak i szukaniu bądź poprawianiu istniejących. Ze względu na to, że bardzo często współpracuję z ludźmi z różnych zakątków świata dlatego też dobrym pomysłem jest pisanie aplikacji WWW w języku angielskim włącznie z dokumentacją. Praktycznie każdy język programowania opiera się na języku angielskim. Mam tutaj na myśli chociażby nazwy funkcji, które stworzono ze skróconych nazw określonych operacji. Najprostszym przykładem będzie chociażby taki <tt>strrev()</tt> czyli <i>string reverse</i> (odwrócenie ciągu). Oczywiście głównym powodem stosowania się do tej zasady jest uniwersalność. Jak wiemy prawdziwy programista cechuje się <i>dobra</i> znajomością angielskiego. Moim zdaniem każdy piszący skrypty winien pisać po angielsku. Dzięki takiemu zabiegowi nikt nie będzie musiał tłumaczyć kodu na inny język.
<br />

<br />
Sensowne nazewnictwo jest bardzo ważne. To dzięki niemu szybko zorientujemy się w kodzie i tym co zawierają poszczególne zmienne. Poniżej znajdują się pzykłady złego nazewnictwa zmiennych.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$currentuser</span><span style="color: #007700">;</span><span style="color: #0000BB">$currenttime</span><span style="color: #007700">;</span><span style="color: #0000BB">$externalvariable</span><span style="color: #007700">;</span><span style="color: #0000BB">$CurrentUser</span><span style="color: #007700">;</span><span style="color: #0000BB">$CurrentTime</span><span style="color: #007700">;</span><span style="color: #0000BB">$ExternalVariable</span><span style="color: #007700">;</span><span style="color: #0000BB">$Current_User</span><span style="color: #007700">;</span><span style="color: #0000BB">$Current_Time</span><span style="color: #007700">;</span><span style="color: #0000BB">$External_Variable</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
A teraz zestaw, który jest poprawny i buduje mój standard:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$current_user</span><span style="color: #007700">;</span><span style="color: #0000BB">$current_time</span><span style="color: #007700">;</span><span style="color: #0000BB">$external_variable</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Odpowiednie nazwy <i>nośników danych</i> gwarantują ergonomiczne poruszanie się po stosie linijek. Dla przykładu taka zmienna jest źle nazwana:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$current_date_and_time</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
a ta dobrze:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$now</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Czasami można się spotkać także ze szkołą mówiącą, że z wielkiej litery zaczynamy kolejne słowa w zmiennej czyli w praktyce np. <tt>$external_variable</tt> powinno być napisane tak: <tt>$external_Variable</tt>. Moim zdaniem tym więcej optymalizacji tym lepiej dla wszystkich. Mnie zawsze uczono aby pisać wszystko z małej i tak mi zostało. Przynajmniej palców nie mecze nerwowym sięganiem co chwile do shifta <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Drugim powodem stosowania zasady pisania wszystkiego z małych liter jest fakt, że <tt>$zmienna</tt> nie jest tym samym co <tt>$Zmienna</tt> oraz nie jest równoznaczne z <tt>$ZMIENNA</tt>.
<br />
<a name="pascalcase"></a><h3>PascalCase</h3>
<b>PascalCase</b> jest zasada mówiącą o tym, że każdą pierwszą literę słowa piszemy dużą literą czyli np. <b>ButterflyStatus</b>.
<br />
<a name="CamelCase"></a><h3>CamelCase</h3>
<b>CamelCase</b> jest zasadą mówiącą o tym, że pierwszą literę słowa piszemy małą literą oraz pierwsze litery kolejnych słów dużymi literami. W praktyce wygląda to np. tak: <b>listCursors</b>.
<br />
<a name="mieszanie_jezykow"></a><h3>Mieszanie języków</h3>
Jeżeli już ustaliliście język w który będzie stosowany przy nazewnictwie funkcji, klas i metod oraz komentarzy to trzymajcie się go. Potem przynajmniej nie powstaną kwiatki typu <tt>GetMotylStyle()</tt>.
<br />
<a name="notacja_wegierska"></a><h3>Notacja węgierska</h3>
Pewien programista z Microsoft wymyślił <a href="http://pl.wikipedia.org/wiki/Notacja_węgierska" target="_blank" class="postlink">notacje węgierską</a>, która narzuca nijako sposób nazewnictwa obiektów i zmiennych. W PHP bardzo rzadko spotykane. Istniała także zasada mówiąca, że pola prywatne klasy winny zostać oznaczone przedrostkiem <tt>_</tt>. Czasami można także spotkać się z zasada, która mówi, że przed nazwa jakiegokolwiek pola klasy należy użyć <tt>_</tt> niezależnie od <i>operatora widoczności</i>. Jestem w stanie zrozumieć ową notacje przy pisaniu programów w C++ jednak w PHP nie ma najmniejszej potrzeby jej stosowania dlatego też odradzam używanie.
<br />
<a name="litery_podobne_do_cyfr_i_odwrotnie"></a><h3>Litery podobne do cyfr i odwrotnie</h3>
Starajcie się unikać sytuacji, która została przedstawiona poniżej. Przy takiej konfiguracji łatwo o omyłkę związanej ze złym rozpoznaniem znaku.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$lO1&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"1I"</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<a name="uzywamy_skrotow_z_glowa"></a><h3>Używamy skrótów z głową</h3>
Jeżeli macie możliwość stosowania skrótów starajcie się z niej korzystać. Taki zabieg ułatwia poruszanie się po pliku oraz nieco zmniejsza jego objętość. Przykładem takiego skrótu może być np. <tt>ShowUI</tt> czyli <i>Show UserInterface</i>.
<br />
<a name="zmienne_i_odstepy"></a><h2>Zmienne i odstępy</h2>
Kiedyś spotkałem się z kodem, w którym to zastosowano zasadę wyrównywania do znaku równa się. Niby wszystko pięknie wygląda jednak na dłuższą metę gdy mamy ze 100 zmiennych i nagle pojawia się zmienna dłuższa od najdłuższej obowiązującej to trzeba <i>powkładać</i> nowe odstępy.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$x &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #007700">=&nbsp;array(</span><span style="color: #DD0000">"a"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"b"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"c"</span><span style="color: #007700">);</span><span style="color: #0000BB">$bardzo_bardzo_dluga_zmienna&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">array_flip</span><span style="color: #007700">(</span><span style="color: #0000BB">$x</span><span style="color: #007700">);</span><span style="color: #0000BB">$krotka_zmienna &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"whatever"</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<a name="nazewnictwo_funkcji_klas_i_metod"></a><h2>Nazewnictwo funkcji, klas i metod</h2>
Nazwy klas powinny odzwierciedlać to czym się zajmują. To samo tyczy się nazw funkcji oraz metod. Tak więc metodę pobierającą status osoby nazywamy <tt>get_status()</tt>, a nie <tt>show_member_status()</tt> (skrajne rozwiązanie dla psychopatów <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> ).
<br />

<br />
Dodatkowo przy nazewnictwie klas powinniśmy używać rzeczownika w liczbie pojedynczej. W praktyce oznacza to, że klasa opisująca członków powinna nazywać się <tt>Member</tt>, nie <tt>Members</tt>.
<br />
<a name="tablice_i_odstepy"></a><h2>Tablice i odstępy</h2>
Zasadniczo mam 2 style definiowania tablic. Jednoliniowy stosowany w momencie gdy elementów w tablicy nie jest dużo.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$dziwne_cyferki&nbsp;</span><span style="color: #007700">=&nbsp;array(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">6</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">9</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">4</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">5</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
I drugi styl używany gdy tablica zawiera dużo elementów.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$krzywe_bity&nbsp;</span><span style="color: #007700">=&nbsp;array(</span><span style="color: #DD0000">"pierwszy"&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">"lewy"</span><span style="color: #007700">,</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #DD0000">"drugi"&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">"płaski"</span><span style="color: #007700">,</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #DD0000">"trzeci"&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">"długi"</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<a name="definiowanie_funkcji_klas_i_metod"></a><h2>Definiowanie funkcji, klas i metod</h2>
Odnośnie definiowania funkcji nie ma żadnych kruczków prawnych. Jeżeli jest potrzeba użycia dyrektywy <tt>global</tt> wtedy robimy to na początku funkcji lub po określonym <tt>if</tt>'ie jeżeli zmienna która ma być globalna ma zostać wykorzystana tylko w określonym fragmencie funkcji/metody. Jak widać na poniższym listingu miedzy <tt>global</tt>, a instrukcją warunkową jest odstęp. Taki sam odstęp miąłby miejsce gdyby pojawiła się tam <i>definicja</i> zmienna tablica.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">udziwnij_ciag</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">)&nbsp;</span><span style="color: #FF8000">//&nbsp;nie&nbsp;miałem&nbsp;pomysłu&nbsp;na&nbsp;nazwę&nbsp;<img src="http://www.capaciouscore.pl/smiles/icon_razz.gif" class="emoticon" alt="Razz" /></span><span style="color: #007700">{</span><span style="color: #0000BB"> global&nbsp;$config</span><span style="color: #007700">;</span><span style="color: #0000BB">  if</span><span style="color: #007700">(</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">)&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">/***&nbsp;ciach,&nbsp;tu&nbsp;cos&nbsp;kiedyś&nbsp;było,&nbsp;chyba?&nbsp;***/</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">"hash"</span><span style="color: #007700">].</span><span style="color: #0000BB">$str</span><span style="color: #007700">.</span><span style="color: #0000BB">date</span><span style="color: #007700">(</span><span style="color: #DD0000">"H"</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">null</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Wiem, że mogłem to rozwiązać za pomocą operatora trójkowego lecz nie miałem dobrego pomysłu na przykład i ... Chce także napomknąć, że wartości typu <tt>null</tt>, <tt>false</tt>, <tt>true</tt> piszemy zawsze z małych liter.
<br />

<br />
Odnośnie definiowania metod to zasada jest taka sama tylko z tą różnicą, że stosujemy <tt>public</tt>, <tt>private</tt> i <tt>protected</tt> zgodnie z ich przeznaczeniem. Dodatkowo jeżeli korzystamy z metod magicznych to starajmy się je definiować na początku klasy. Ja mam swoją zasadę, że pierw definiuje pola. Następnie oczywiście metody według operatora widoczności. Moja kolejność wygląda tak:
<ol class="list list_1">
<li><tt>public</tt></li>
<li><tt>protected </tt></li>
<li><tt>private</tt></li>
</ol>
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">example</span><span style="color: #007700">{</span><span style="color: #0000BB"> $memory&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">null</span><span style="color: #007700">;</span><span style="color: #0000BB">  public&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">calc</span><span style="color: #007700">()&nbsp;{&nbsp;</span><span style="color: #FF8000">/*&nbsp;Ciało&nbsp;metody&nbsp;*/&nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB">  protected&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">load_config</span><span style="color: #007700">()&nbsp;{&nbsp;</span><span style="color: #FF8000">/*&nbsp;Ciało&nbsp;metody&nbsp;*/&nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB">  private&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">add_event</span><span style="color: #007700">()&nbsp;{&nbsp;</span><span style="color: #FF8000">/*&nbsp;Ciało&nbsp;metody&nbsp;*/&nbsp;</span><span style="color: #007700">}}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<a name="nazewnictwo_argumentacji_funkcji_i_metod"></a><h2>Nazewnictwo argumentacji funkcji i metod</h2>
Nazewnictwo te winno odzwierciedlać to co do danej funkcji zostaje przekazane. Oznacza to, że argumenty powinny wyglądać tak:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">auth</span><span style="color: #007700">(</span><span style="color: #0000BB">$username</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$password</span><span style="color: #007700">)&nbsp;{&nbsp;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
a nie tak:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">auth</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">)&nbsp;{&nbsp;}</span><span style="color: #FF8000">//&nbsp;lub</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">auth</span><span style="color: #007700">(</span><span style="color: #0000BB">$name</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$pass</span><span style="color: #007700">)&nbsp;{&nbsp;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<a name="komentarze"></a><h2>Komentarze</h2>
Odnośnie komentarzy to preferuje używanie wielo-liniowego <tt>/* */</tt> oraz jednoliniowego <tt>//</tt>. Czasami zdarza mi się używać <tt>#</tt> jako elementu grupującego na przykład w konfiguracji skryptu.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">#&nbsp;MySQL</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">"mysql"</span><span style="color: #007700">][</span><span style="color: #DD0000">"host"</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">"localhost"</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">"mysql"</span><span style="color: #007700">][</span><span style="color: #DD0000">"database"</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">"database"</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">"mysql"</span><span style="color: #007700">][</span><span style="color: #DD0000">"login"</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">"prosty_login"</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">"mysql"</span><span style="color: #007700">][</span><span style="color: #DD0000">"password"</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">"trudne_haslo"</span><span style="color: #007700">;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">"mysql"</span><span style="color: #007700">][</span><span style="color: #DD0000">"prefix"</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">"no_i_prefiks_"</span><span style="color: #007700">;</span><span style="color: #FF8000">#&nbsp;Dir&nbsp;config</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">"dir"</span><span style="color: #007700">][</span><span style="color: #DD0000">"langs"</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">"langs"</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;Folder&nbsp;with&nbsp;langs&nbsp;files</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">"dir"</span><span style="color: #007700">][</span><span style="color: #DD0000">"logs"</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">"logs"</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;Folder&nbsp;with&nbsp;any&nbsp;logs</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<a name="wciecia_i_tabulacja"></a><h2>Wcięcia i tabulacja</h2>
Standardowo programiści powinni używać 4 spacji jako wcięć czyli jak na poniższym listingu. 
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php &nbsp; &nbsp;</span><span style="color: #FF8000">//&nbsp;początek&nbsp;wcięcia&nbsp;podstawowego</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #FF8000">//&nbsp;początek&nbsp;wcięcia&nbsp;poziomu&nbsp;pierwszego</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #FF8000">//&nbsp;początek&nbsp;wcięcia&nbsp;poziomu&nbsp;drugiego</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;do_something</span><span style="color: #007700">();</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #FF8000">//&nbsp;koniec&nbsp;wcięcia&nbsp;poziomu&nbsp;drugiego</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #FF8000">//&nbsp;koniec&nbsp;wcięcia&nbsp;poziomu&nbsp;pierwszego</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #FF8000">//&nbsp;koniec&nbsp;wcięcia&nbsp;podstawowego</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Osobiście preferuje wcięcia składające się z jednej spacji. Przynajmniej nie trzeba machać na lewo i prawo wzrokiem. W czasach kiedy rozdzielczości były mniejsze duże wcięcia powodowały problemy z poruszaniem się po kodzie. Poniżej znajduję się moja wersja standardu wcięć. 
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php </span><span style="color: #FF8000">//&nbsp;początek&nbsp;wcięcia&nbsp;podstawowego</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;początek&nbsp;wcięcia&nbsp;poziomu&nbsp;pierwszego</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #FF8000">//&nbsp;początek&nbsp;wcięcia&nbsp;poziomu&nbsp;drugiego</span><span style="color: #0000BB"> &nbsp; do_something</span><span style="color: #007700">();</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #FF8000">//&nbsp;koniec&nbsp;wcięcia&nbsp;poziomu&nbsp;drugiego</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;koniec&nbsp;wcięcia&nbsp;poziomu&nbsp;pierwszego</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;koniec&nbsp;wcięcia&nbsp;podstawowego</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<a name="wywolanie_funkcji_i_metod"></a><h2>Wywołanie funkcji i metod</h2>
Poniżej przedstawiam w jaki sposób powinno się wywoływać funkcje i metody zgodnie z moim standardem.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$result&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">foo</span><span style="color: #007700">(</span><span style="color: #0000BB">$bar</span><span style="color: #007700">);</span><span style="color: #0000BB">$result&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">do_something</span><span style="color: #007700">(</span><span style="color: #0000BB">$foo</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$bar</span><span style="color: #007700">);</span><span style="color: #0000BB">$post_office&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">send_msg</span><span style="color: #007700">(</span><span style="color: #0000BB">$to</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$message</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
A na poniższym listingu jak nie powinno się tego robić:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$result&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">foo</span><span style="color: #007700">(&nbsp;</span><span style="color: #0000BB">$bar&nbsp;</span><span style="color: #007700">);</span><span style="color: #0000BB">$result&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">do_something</span><span style="color: #007700">(&nbsp;</span><span style="color: #0000BB">$foo</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$bar&nbsp;</span><span style="color: #007700">);</span><span style="color: #0000BB">$result&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">do_something</span><span style="color: #007700">(&nbsp;</span><span style="color: #0000BB">$foo&nbsp;</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$bar&nbsp;</span><span style="color: #007700">);</span><span style="color: #0000BB">$result&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">do_something</span><span style="color: #007700">(</span><span style="color: #0000BB">$foo</span><span style="color: #007700">,</span><span style="color: #0000BB">$bar</span><span style="color: #007700">);</span><span style="color: #0000BB">$result</span><span style="color: #007700">=</span><span style="color: #0000BB">do_something</span><span style="color: #007700">(</span><span style="color: #0000BB">$foo</span><span style="color: #007700">,</span><span style="color: #0000BB">$bar</span><span style="color: #007700">);</span><span style="color: #0000BB">$post_office&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">send_msg</span><span style="color: #007700">(&nbsp;</span><span style="color: #0000BB">$to</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$message&nbsp;</span><span style="color: #007700">);</span><span style="color: #0000BB">$post_office&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">send_msg</span><span style="color: #007700">(&nbsp;</span><span style="color: #0000BB">$to&nbsp;</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$message&nbsp;</span><span style="color: #007700">);</span><span style="color: #0000BB">$post_office&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">send_msg</span><span style="color: #007700">(</span><span style="color: #0000BB">$to</span><span style="color: #007700">,</span><span style="color: #0000BB">$message</span><span style="color: #007700">);</span><span style="color: #0000BB">$post_office</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">send_msg</span><span style="color: #007700">(</span><span style="color: #0000BB">$to</span><span style="color: #007700">,</span><span style="color: #0000BB">$message</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<a name="wyglad_struktur_kontrolnych"></a><h2>Wygląd struktur kontrolnych</h2>
Do struktur kontrolnych zaliczamy instrukcje warunkowe <tt>if</tt> oraz inne szmery bajery typu <tt>for</tt>, <tt>while</tt>, <tt>switch</tt> itp. Poniżej znajduje się najprostszy przykład jak powinny wyglądać poprawnie. Chce także wspomnieć, że według mojego standardu lepiej pisać <tt>else if</tt> aniżeli <tt>elseif</tt>.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">if(</span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">){}else&nbsp;if(!</span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">){}else{</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;default</span><span style="color: #007700">}if(</span><span style="color: #0000BB">$c</span><span style="color: #007700">){</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$d</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> </span><span style="color: #007700">}}switch(</span><span style="color: #0000BB">$condition</span><span style="color: #007700">){</span><span style="color: #0000BB"> case&nbsp;</span><span style="color: #DD0000">"one"</span><span style="color: #007700">:</span><span style="color: #0000BB"> &nbsp;do_something</span><span style="color: #007700">();</span><span style="color: #0000BB"> &nbsp;do_something_else</span><span style="color: #007700">();</span><span style="color: #0000BB"> break</span><span style="color: #007700">;</span><span style="color: #0000BB">  case&nbsp;</span><span style="color: #DD0000">"two"</span><span style="color: #007700">:</span><span style="color: #0000BB"> case&nbsp;</span><span style="color: #DD0000">"three"</span><span style="color: #007700">:</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">exit;</span><span style="color: #0000BB"> break</span><span style="color: #007700">;</span><span style="color: #0000BB">  default</span><span style="color: #007700">:</span><span style="color: #0000BB">  break</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;Dla&nbsp;czystości&nbsp;sumienia&nbsp;można&nbsp;dodać&nbsp;<img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /></span><span style="color: #007700">}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
I znów listing w którym tym razem pokazuje jak nie powinien wyglądać kod.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">)&nbsp;</span><span style="color: #FF8000">//&nbsp;Niepotrzebnie&nbsp;zrobiony&nbsp;odstęp</span><span style="color: #007700">{}else&nbsp;if(!(</span><span style="color: #0000BB">$a</span><span style="color: #007700">)&nbsp;||&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">)&nbsp;</span><span style="color: #FF8000">//&nbsp;Niepotrzebnie&nbsp;użyty&nbsp;nawiasy</span><span style="color: #007700">{}if(</span><span style="color: #0000BB">$c</span><span style="color: #007700">){</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$d</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">do_something</span><span style="color: #007700">();&nbsp;</span><span style="color: #FF8000">//&nbsp;Brak&nbsp;klamer</span><span style="color: #007700">}switch(</span><span style="color: #0000BB">$condition</span><span style="color: #007700">){</span><span style="color: #0000BB"> case&nbsp;</span><span style="color: #DD0000">"one"</span><span style="color: #007700">:</span><span style="color: #0000BB"> do_something</span><span style="color: #007700">();&nbsp;</span><span style="color: #FF8000">//&nbsp;Brak&nbsp;wcięcia</span><span style="color: #0000BB"> do_something_else</span><span style="color: #007700">();&nbsp;</span><span style="color: #FF8000">//&nbsp;Jak&nbsp;wyżej</span><span style="color: #0000BB"> break</span><span style="color: #007700">;</span><span style="color: #0000BB">  case&nbsp;</span><span style="color: #DD0000">"two"</span><span style="color: #007700">:&nbsp;case&nbsp;</span><span style="color: #DD0000">"three"</span><span style="color: #007700">:&nbsp;</span><span style="color: #FF8000">//&nbsp;Warunki&nbsp;w&nbsp;tej&nbsp;samej&nbsp;linijce</span><span style="color: #0000BB"> exit</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;Brak&nbsp;wcięcia</span><span style="color: #0000BB"> break</span><span style="color: #007700">;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<a name="Nawiasy_klamrowe_w_instrukcjach_sterujacych"></a><h3>Nawiasy klamrowe w instrukcjach sterujących</h3>
Jest kilka stylów programowania odnoszących się do zapisu nawiasów klamrowych w instrukcjach warunkowych, klasach, funkcjach, pętlach itp. Za chwile przedstawię Wam najpopularniejsze z nich. Styl pisania nawiasów klamrowych wchodzący w mój standard został przedstawiony powyżej.
<br />
<a name="styl_bsd"></a><h4>Styl BSD</h4>
Styl ten charakteryzuje się tym, że nawias otwierający jest umieszczony w wierszu po warunku i oba nawiasy są wyrównane do lewej strony słowa kluczowego. 
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">$condition</span><span style="color: #007700">){</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #FF8000">//&nbsp;Instructions</span><span style="color: #007700">}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<a name="styl_gnu"></a><h4>Styl GNU</h4>
Styl w którym nawias otwierający jest umieszczony w następnym wierszu oraz jest wcięty o połowę poziomu wcięcia.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">$condition</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #FF8000">//&nbsp;Instructions</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB">?&gt;</span>&nbsp;</span></pre>
<a name="styl_k_and_r"></a><h4>Styl K&amp;R</h4>
Nazwa tego pochodzi od nazwisk Kerninghan oraz Ritchie. Są oni autorami książki &quot;Programowanie w języku C&quot;, w której stosowany jest właśnie ten styl.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">$condition</span><span style="color: #007700">)&nbsp;{</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #FF8000">//&nbsp;Instructions</span><span style="color: #007700">}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<a name="styl_wishart"></a><h4>Styl Wishart (Whitesmiths)</h4>
Styl ten pochodzi od firmy Whitesmiths, która jest autorem pierwszego komercyjnego kompilatora języka C. Pierwszym miejscem, w którym zastosowano ten styl była dokumentacja kompilatora.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">$condition</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp;do_something</span><span style="color: #007700">();&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<a name="grupowanie_wyrazow"></a><h3>Grupowanie wyrazów</h3>
Aby zwiększyć czytelność kodu powinniśmy umiejętnie grupować wyrażenia.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">if(!(</span><span style="color: #0000BB">$object&nbsp;</span><span style="color: #007700">instanceof&nbsp;</span><span style="color: #0000BB">class_name</span><span style="color: #007700">)){}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">if((!</span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">)&nbsp;||&nbsp;(</span><span style="color: #0000BB">$c&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;!</span><span style="color: #0000BB">$d</span><span style="color: #007700">)){}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Nie używajcie nawiasów przed każdym wykrzyknikiem. To tylko zmniejsza czytelność kodu. Dodatkowo nie róbcie odstępów miedzy nawiasami tak jak na poniższym listingu:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">if(&nbsp;!(&nbsp;</span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;</span><span style="color: #0000BB">$b&nbsp;</span><span style="color: #007700">){}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Z pewnością kod w ten sposób nie staje się bardziej czytelny.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB"><em><span></span><span style="color: #007700">(</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$random_array</span><span style="color: #007700">)&nbsp;-&nbsp;</span><span style="color: #0000BB">69</span><span style="color: #007700">)</span><span style="color: #0000BB"></span></em></span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">];&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">){}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Dzięki użyciu nawiasów wiemy gdzie kończy się przypisanie wartości do tablicy.
<br />
<a name="typ_zmiennej_i_rzutowanie"></a><h3>Typ zmiennej i rzutowanie</h3>
Przypominam, że PHP rzutuje dane niejawnie więc powinniśmy odpowiednio dobierać operatory porównania.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$boolean_var&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;</span><span style="color: #0000BB">$string_var&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"true"</span><span style="color: #007700">;</span><span style="color: #0000BB">$other_var&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">null</span><span style="color: #007700">;if(</span><span style="color: #0000BB">$boolean_var</span><span style="color: #007700">){</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$string_var&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$other_var&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; echo&nbsp;</span><span style="color: #DD0000">"O&nbsp;really?"</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #007700">}}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Tym przykładem chce tylko wskazać różnicę miedzy <tt>===</tt>, <tt>==</tt>, <tt>!==</tt>, <tt>!=</tt>, <tt>null</tt>, <tt>false</tt>, <tt>true</tt> i tym podobnych <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" />
<br />
<a name="operator_trojkowy"></a><h3>Operator trójkowy</h3>
Poniżej przykład z użyciem operatora trójkowego.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">some_inline_function</span><span style="color: #007700">(</span><span style="color: #0000BB">$param</span><span style="color: #007700">){</span><span style="color: #0000BB"> return&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">$param&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">999&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #0000BB">true&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">);}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<a name="petle"></a><h2>Pętle</h2>
Znam trzy szkoły odnośnie pętli. Wszystkie z nich rozbijają się o nazewnictwo kursora elementu. Pierwsza mówi o tym aby zaczynać od <tt>$h</tt> i iść dalej. Inna szkoła mówi o tym aby zaczynać literki <tt>$i</tt> i przemieszczać się do przodu. Trzecia szkola  <i>nakazuje</i> zaś nam zaczynanie od literki <tt>$a</tt>. Osobiście używam tej pierwszej i według mnie jest najbardziej racjonalna i wygodna.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$first_size</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">){</span><span style="color: #0000BB"> for</span><span style="color: #007700">(</span><span style="color: #0000BB">$i&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$i&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$second_size</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$i</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">for(</span><span style="color: #0000BB">$j&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$j&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$third_size</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$j</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #FF8000">//&nbsp;Do&nbsp;something!</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #007700">}}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Przypominam także aby stosować preinkrementację, która jest nieco szybsza aniżeli postinkrementacja.
<br />

<br />
Korzystając z okazji napomknę także jak powinna wyglądać pętla <tt>foreach()</tt> oraz <tt>while()</tt>.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">foreach(</span><span style="color: #0000BB">$some_array&nbsp;</span><span style="color: #007700">as&nbsp;</span><span style="color: #0000BB">$key&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$value</span><span style="color: #007700">){}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;while(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">10</span><span style="color: #007700">){</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #007700">++</span><span style="color: #0000BB">$h</span><span style="color: #007700">;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Jeszcze raz przypominam, że stosowanie się do standardów pomaga w pracy zespołowej. Powyżej zostały przedstawione własne standardy kodowania i liczę na to, że na podstawie tego artykułu wypracujecie własne.
<br />

<br />
PS
<br />
Nie robiłem zrzutów ekranów odnośnie wyglądu kodu ze względu na to, że sami możecie je zrobić bądź po prostu oddalić się od monitora i ocenić czy kod jest czytelny.]]></description></item><item><title>[PHP] Tasowanie tablicy</title><pubdate>Wed, 28 Apr 2010 1:54:23 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/tasowanie-tablicy/</link><comments>http://www.capaciouscore.pl/artykuly/tasowanie-tablicy/#komentarze</comments><description><![CDATA[Zdarzają się sytuacje, w których to musimy przetasować elementy tablicy. Poniżej znajduje się najprostsza metoda.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;Tworzymy&nbsp;tablice</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'array'</span><span style="color: #007700">]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'a'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'b'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'c'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'d'</span><span style="color: #007700">);</span><span style="color: #FF8000">//&nbsp;Tasowanie&nbsp;tablicy</span><span style="color: #0000BB">shuffle</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'array'</span><span style="color: #007700">]);foreach(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'array'</span><span style="color: #007700">]&nbsp;as&nbsp;</span><span style="color: #0000BB">$value</span><span style="color: #007700">){</span><span style="color: #0000BB"> echo&nbsp;$value</span><span style="color: #007700">.</span><span style="color: #DD0000">'&lt;br&gt;'</span><span style="color: #007700">;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.shuffle.php" target="_blank" class="postlink">http://php.net/manual/pl/function.shuffle.php</a>]]></description></item><item><title>Port 25 zablokowany przez TPSA</title><pubdate>Mon, 08 Mar 2010 3:26:36 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/port-25-zablokowany-przez-tpsa/</link><comments>http://www.capaciouscore.pl/artykuly/port-25-zablokowany-przez-tpsa/#komentarze</comments><description><![CDATA[Na <a href="http://www.tp.pl/prt/pl/tpcert/aktualnosci/wiadomosci/zabezpiecz/?_a=685898" target="_blank" class="postlink">stronie TPSA</a> czytamy, że nastąpi zmiana portów po 1 grudnia 2009 roku. Dlaczego tak? 
<br />
<p class="quote">Cytat:</p><blockquote>Te działania pomogą zmniejszyć problemy wynikające z nieświadomego wysyłania dużych ilości poczty, m.in. negatywny wpływ na wydajność komputera i przeciążenie domowego łącza internetowego.</blockquote>
Bzdura.
<br />

<br />
Wystarczy przestawić ustawienia serwera poczty wychodzącej <b>SMTP</b> z portu 25 na <b>587</b> i działamy ponownie.
<br />

<br />
<p class="quote"><cite>ojejej na swoim <a href="http://ojejej.blogspot.com/2009/12/blokada-portu-25-w-tpsa.html" target="_blank" class="postlink">blogu</a></cite> napisał(a):</p> <blockquote><p>Ponieważ ta &quot;troska o dobro&quot; klientów&quot; jest obowiązkowa, odebrana została jako kolejny atak wymierzony przeciwko wolnemu Internetowi. W TPSA Internet nie jest pełny, stał się teraz częściowy, filtrowany. Może to być podstawą do zerwania umowy - nawet promocyjnej, ponieważ TPSA nie wywiązuje się ze zobowiązała dostarczania Internetu, dostarcza jedynie jego część.</blockquote>
+1
<br />

<br />
Tak czy siak niedługo osoby piszące aplikacje złośliwe zmodyfikują swoje <i>produkty</i> tak ażeby działały na nowym porcie. Polska jest wielkim rynkiem i szybko zostanie wypełniona luka w <i>biznesie</i>. Moim zdaniem <i>producenci</i> sparzeni tym zdarzeniem dopiszą moduł skanujący porty i kolejne zmiany portu przestaną być skuteczne.
<br />

<br />
Jakby ktoś pytał o wyłączenie tego <i>filtru </i> to odpowiadam, że jest na niego prosta metoda. Mianowicie wystarczy w konfiguracji routera/programu łączącego z internetem dodać przed loginem: <tt>BEZ_OCHRONY-</tt> lub <tt>bez_ochrony-</tt>.
<br />

<br />
<b>Polecam także:</b>
<br />
<a href="http://www.money.pl/gospodarka/ngospodarka/ebiznes/artykul/polska;potega;w;produkcji;spamu,96,0,351072.html" target="_blank" class="postlink">http://www.money.pl/gospodarka/ngospodarka/ebiznes/artykul/polska;potega;w;produkcji;spamu,96,0,351072.html</a>
<br />
<a href="http://www.tp.pl/prt/pl/tpcert/aktualnosci/wiadomosci/zabezpiecz/?_a=685898" target="_blank" class="postlink">http://www.tp.pl/prt/pl/tpcert/aktualnosci/wiadomosci/zabezpiecz/?_a=685898</a>
<br />
<a href="http://rozie.blox.pl/2009/09/Niebawem-koniec-wysylki-maili-na-port-25.html" target="_blank" class="postlink">http://rozie.blox.pl/2009/09/Niebawem-koniec-wysylki-maili-na-port-25.html</a>
<br />
<a href="http://ojejej.blogspot.com/2009/12/blokada-portu-25-w-tpsa.html" target="_blank" class="postlink">http://ojejej.blogspot.com/2009/12/blokada-portu-25-w-tpsa.html</a>]]></description></item><item><title>Dobry żart</title><pubdate>Mon, 08 Mar 2010 2:27:05 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/dobry-zart/</link><comments>http://www.capaciouscore.pl/artykuly/dobry-zart/#komentarze</comments><description><![CDATA[Oto dlaczego koledzy maniakalnych <i>programistów</i> nie powinni zostawiać ich sam na sam z własnymi komputerami <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />
<br />
<a href="http://www.capaciouscore.pl/download/other/pointery.jpg" target="_blank" class="postlink"><img src="http://www.capaciouscore.pl/download/other/miniatura-pointery.jpg" alt="miniatura-pointery.jpg" /></a>
<br />

<br />
I pomyśleć, że napisanie aplikacji która zrobi taki efekt zajęło 2 minuty. Stanowczo warto było.
<br />

<br />
PS
<br />
Zgadnijcie który kursor jest prawdziwy <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />]]></description></item><item><title>[CSS] Standardy kodowania arkuszu stylu</title><pubdate>Mon, 08 Mar 2010 12:52:53 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/standardy-kodowania-arkuszu-stylu-css/</link><comments>http://www.capaciouscore.pl/artykuly/standardy-kodowania-arkuszu-stylu-css/#komentarze</comments><description><![CDATA[Jak wszyscy wiemy przy pisaniu aplikacji WWW bazujemy na standardach ustalonych wcześniej. Nie wiem czy wiecie ale praktycznie każdy z nas używa swoich lub wymuszonych standardów kodowania. Swoje stosujemy przede wszystkim gdy tworzymy stronę samodzielnie bez pomocy innych. Standardy wymuszone to nic innego jak <i>reguły gry</i> narzucone przez grupę, w której pracujemy. Często firmy produkujące strony internetowe mają swoje standardy jak pisać dane fragmenty kodu. Za chwilę zapoznam Was z moimi. Zanim jednak to zrobię chce jeszcze chwilkę pomówić o tym. Co nam dają z góry ustalone standardy? Otóż przede wszystkim to, że w momencie edycji wiemy dokładnie gdzie powinniśmy się spodziewać danego fragmentu kodu. Oto prosty przykład. Przypuśćmy, że ułożyliśmy na biurku książki w kolejności alfabetycznej od lewej do prawej. Następnie piękna koleżanka chciała z nami zagrać w prosta grę. Zasady gry są banalne. Ona mówi tytuł książki, a Twoim zdaniem jest jak najszybsze podanie ów książki koleżance. Proste prawda? Znając regułę, według której rozłożyliśmy książki z łatwością odnajdujemy to czego szukamy. Proszę sobie teraz wyobrazić co się dzieje gdy książki zostały ułożone losowo. W takim przypadku będziemy np. przeglądać tytuły od lewej do prawej. Właśnie dlatego powinniśmy stosować standardy kodowania. One pozwolą nam na szybsze znajdywanie elementów. W pracy grupowej zazwyczaj mamy z góry założone reguły gry dlatego też powinniśmy się do nich stosować. Takie działanie z pewnością <u>zwiększy wydajność pracy</u> grupy. 
<br />
<h2>Style kodowania</h2>
<h3>Pierwszy typ</h3>
W swoim życiu spotkałem się z kilkoma rodzajami pisania stylów. Pierwszy z nich wygląda następująco:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">*{ &nbsp; &nbsp;margin:&nbsp;0;&nbsp; &nbsp; &nbsp;padding:&nbsp;0;}body{ &nbsp; &nbsp;background:&nbsp;#FAF;}</span></pre>
Powyższy styl jest bardzo <b>czytelny</b> lecz przy większych stronach pasek w edytorze może stać się maciupki. Przeszukiwanie i edytowanie CSS napisanego w ten sposób może stać się nie lada problemem.
<br />
<h3>Drugi typ</h3>
Ja nazywam to stylem pośrednim. Jest to coś pomiędzy typem pierwszym, a trzecim. Jest stanowczo wygodniejszy jeżeli chodzi o przeszukiwanie i edytowanie aniżeli pierwszy.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">*{ &nbsp; &nbsp;margin:&nbsp;0;&nbsp;padding:&nbsp;0;&nbsp;font-size:&nbsp;14px;}body{ &nbsp; &nbsp;background:&nbsp;#FAF;}</span></pre>
<h3>Trzeci typ</h3>
Trzeci rodzaj stylu przewiduje jedną linijkę na jeden bądź kilka elementów.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">*&nbsp;{&nbsp;margin:&nbsp;0;&nbsp;padding:&nbsp;0;&nbsp;font-size:&nbsp;14px;&nbsp;}body,&nbsp;p&nbsp;{&nbsp;background:&nbsp;#FAF;&nbsp;}div&nbsp;{&nbsp;margin:&nbsp;0&nbsp;auto;&nbsp;width:&nbsp;600px;&nbsp;background:&nbsp;#FFF;&nbsp;}</span></pre>
Ten styl jest prosty, przejrzysty (o ile zna się reguły pisania takiego stylu), łatwo w nim przeszukiwać i <i>optymalnie</i> jest dość szeroki. Szerokość w erze 21 calowych monitorów nie powinna powodować większych problemów, prawda? To nie to samo co kiedyś jak mięliśmy do dyspozycji rozdzielczość 800x600 <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />
<br />

<br />
Pamiętajmy, że tych styli jest o wiele więcej. Ja pokazałem tylko trzy, które musiał mi posłużyć jako przykład.
<br />
<h2>Detale</h2>
Cała sztuka polega na detalach dlatego też czasami warto być pedantem. Co mam na myśli? Po pierwsze zachowanie spacje przed <tt>{</tt> oraz wewnątrz nawiasów klamrowych. Naturalnie aby zaoszczędzić parę znaków możemy usunąć spacje oraz zbędny <tt>;</tt> na końcu lecz taki kod powoli staje się nieczytelny. Gra nie warta świeczki w małych i średnich serwisach. W większych projektach można się pokusić o dwustronna konwersje stylu. To jednak temat na inny artykuł. Tak samo ludzie oszczędzają na znakach <tt>'</tt> w miejscu definiowania adresu do tła obrazkowego. Moim zdaniem te dodatkowe dwa bajty jedynie dodają większa czytelność kodu.
<br />

<br />
Druga rzeczą na którą zwracam uwagę jest wielkość liter w podawaniu koloru. Zawsze podaję kolory z dużych liter jeżeli takowe występują w zapisie heksagonalnym. Oznacza to, że nie <tt>#f0f</tt> lecz <tt>#F0F</tt>.
<br />
<h2>Różnica miedzy class a id</h2>
Różnica jest bardzo prosta tzn. <tt>class</tt> stosować możemy wielokrotnie natomiast <tt>id</tt> tylko raz w całym dokumencie. Proszę pamiętać, że czasami tworzenie klasy jest zbędne i <tt>id</tt> wystarczy <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />
<br />
<h2>Optymalizacja</h2>
Pamiętajmy także, że czasami zdarza się spotkać kolor <tt>#FFAABB</tt>, który to można skrócić do zapisu <tt>#FAB</tt>. Jeżeli mamy taka możliwość to korzystajmy z niej.
<br />

<br />
Pamiętajcie także aby dokonywać modyfikacji pliku stylu tak ażeby wielkość jego była jak najmniejsza. Czasami nie warto łączyć stylów przy długich nazwach. Poniżej zaprezentuje prosty przykład.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">#bardzo_dluga_cecha_raz&nbsp;{&nbsp;color:&nbsp;#012;&nbsp;background:&nbsp;yellow;&nbsp;}#bardzo_dluga_cecha_dwa&nbsp;{&nbsp;color:&nbsp;#345;&nbsp;background:&nbsp;yellow;&nbsp;}</span></pre>
Ten kod składa się z <b>122 znaków</b>.
<br />

<br />
A teraz <i>optymalizacja</i>:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">#bardzo_dluga_cecha_raz,&nbsp;#bardzo_dluga_cecha_dwa&nbsp;{&nbsp;background:&nbsp;yellow;&nbsp;}#bardzo_dluga_cecha_raz&nbsp;{&nbsp;color:&nbsp;#012;&nbsp;}#bardzo_dluga_cecha_dwa&nbsp;{&nbsp;color:&nbsp;#345;&nbsp;}</span></pre>
Po optymalizacji mamy <b>156 znaki</b>. Warto było?
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">#a,&nbsp;#b&nbsp;{&nbsp;background:&nbsp;yellow;&nbsp;}#a&nbsp;{&nbsp;color:&nbsp;#012;&nbsp;}#b&nbsp;{&nbsp;color:&nbsp;#345;&nbsp;}</span></pre>
Teraz mamy <b>72 znaki</b> i znowu pytanie brzmi czy warto było?
<br />

<br />
Zapis powyższego kodu bez optymalizacji:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">#a&nbsp;{&nbsp;color:&nbsp;#012;&nbsp;background:&nbsp;yellow;&nbsp;}#b&nbsp;{&nbsp;color:&nbsp;#345;&nbsp;background:&nbsp;yellow;&nbsp;}</span></pre>
Odpowiedz na pytanie brzmi tak, warto było ponieważ gdybyśmy nie zoptymalizowali to powyższy kod miałby <b>80 znaków</b> <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Im krótsza nazwa tym lepiej. Niestety <u>nie możemy kosztem czytelności kodu optymalizować</u>. Pamiętajmy o tym.
<br />
<h2>Nazewnicwtwo</h2>
Bardzo ważne jest także nazewnictwo <tt>id</tt> oraz <tt>class</tt>. Ja np. często współpracuję z paroma grafikami z rożnych części globu, dlatego też wszelkie nazwy musza być po angielsku. Naturalnie nazwa musi odzwierciedlać obiekt, który <i>opisujemy</i>.
<br />
<h2>Powtarzanie właściwości</h2>
W momencie gdy nastąpi powtórzenie się jakiejś cechy lepiej jest zapisać ja dla kilku elementów. Miejscem w którym ja to robię jest napotkanie pierwszej deklaracji elementu w którym cecha się powtarza.
<br />
<h2>Kolejność cech</h2>
Najważniejsze w tej sztuce to wypracować i znać swoja kolejność używania <i>argumentów</i>. Poniżej zaprezentuje Wam swoja kolejność. Naturalnie na tej podstawie możecie stworzyć własny standard, który ułatwi Wam w przyszłości prace z Kaskadowymi Arkuszami Stylów.
<br />
<h2>Kolejność cech - lista</h2>
<ol class="list list_1">
<li><tt>margin</tt></li>
<li><tt>padding</tt></li>
<li><tt>float</tt></li>
<li><tt>clear</tt></li>
<li><tt>display</tt></li>
<li><tt>width</tt></li>
<li><tt>height</tt></li>
<li><tt>line-height</tt></li>
<li><tt>background</tt></li>
<li>ostylowanie tekstu
<ol class="list list_1">
<li><tt>color</tt></li>
<li><tt>font-size</tt></li>
<li><tt>font-weight</tt></li>
<li><tt>font-family</tt></li>
<li><tt>text-align</tt></li>
<li><tt>text-decoration</tt></li>
<li><tt>text-transform</tt></li>
<li><tt>white-space</tt></li>
<li><tt>text-indent</tt></li>
<li><tt>text-shadow</tt></li>
<li><tt>word-spacing</tt></li>
<li><tt>letter-spacing</tt></li>
</ol>
</li>
<li>ostylowanie obramowania (jeżeli mamy przypadek, w którym musimy przypisać rożne style dla poszczególnych elementów obramowania to kolejność jest następująca: <tt>top</tt>, <tt>right</tt>, <tt>bottom</tt>, <tt>left</tt>)</li>
</ol>
<h2>Przykładowy style.css używając mojego standardu</h2>
<b>Kod:</b><pre class="code"><span style="color: #000000">*&nbsp;{&nbsp;margin:&nbsp;0;&nbsp;padding:&nbsp;0&nbsp;}img,&nbsp;img&nbsp;a&nbsp;{&nbsp;border:&nbsp;0&nbsp;}body&nbsp;{&nbsp;background:&nbsp;#FDFDFD;&nbsp;font-size:&nbsp;12px;&nbsp;font-family:&nbsp;"Trebuchet&nbsp;MS",&nbsp;Georgia,&nbsp;Times,&nbsp;"Times&nbsp;New&nbsp;Roman",&nbsp;Verdana,&nbsp;Geneva,&nbsp;Arial,&nbsp;Helvetica,&nbsp;serif,&nbsp;sans-serif&nbsp;}#top&nbsp;{&nbsp;background:&nbsp;#8E0608&nbsp;}#top_frame&nbsp;{&nbsp;height:&nbsp;105px;&nbsp;background:&nbsp;url('images/top.jpg')&nbsp;repeat-x&nbsp;}#ie&nbsp;{&nbsp;padding:&nbsp;0px&nbsp;10px&nbsp;5px&nbsp;90px;&nbsp;background:&nbsp;#FFF&nbsp;url('images/warning.png')&nbsp;no-repeat&nbsp;4px&nbsp;0px&nbsp;}#ie,&nbsp;#banner&nbsp;{&nbsp;border:&nbsp;2px&nbsp;solid&nbsp;#EA080A&nbsp;}.page_container&nbsp;{&nbsp;margin:&nbsp;0&nbsp;auto;&nbsp;width:&nbsp;778px&nbsp;}.page_container_space,&nbsp;#ie,&nbsp;#text,&nbsp;#text_main,&nbsp;#menu,&nbsp;#adds&nbsp;{&nbsp;margin-top:&nbsp;10px&nbsp;}#page_name,&nbsp;#page_description&nbsp;{&nbsp;float:&nbsp;left;&nbsp;width:&nbsp;302px;&nbsp;color:&nbsp;#FFF&nbsp;}#page_name&nbsp;{&nbsp;margin-top:&nbsp;22px;&nbsp;height:&nbsp;20px;&nbsp;line-height:&nbsp;20px;&nbsp;font-size:&nbsp;20px;&nbsp;font-weight:&nbsp;bold&nbsp;}#page_description&nbsp;{&nbsp;height:&nbsp;16px;&nbsp;line-height:&nbsp;16px;&nbsp;font-size:&nbsp;12px&nbsp;}#banner&nbsp;{&nbsp;margin-top:&nbsp;6px;&nbsp;float:&nbsp;right;&nbsp;width:&nbsp;472px;&nbsp;}#banner_frame&nbsp;{&nbsp;width:&nbsp;468px;&nbsp;height:&nbsp;60px;&nbsp;border:&nbsp;2px&nbsp;solid&nbsp;#9B0707&nbsp;}#banner_frame&nbsp;img&nbsp;{&nbsp;float:&nbsp;left&nbsp;}#top_line&nbsp;{&nbsp;margin-top:&nbsp;6px;&nbsp;float:&nbsp;left;&nbsp;height:&nbsp;25px;&nbsp;line-height:&nbsp;25px&nbsp;}#random_article&nbsp;{&nbsp;width:&nbsp;560px;&nbsp;float:&nbsp;left;&nbsp;font-weight:&nbsp;bold&nbsp;}#site_options&nbsp;{&nbsp;width:&nbsp;218px;&nbsp;float:&nbsp;right&nbsp;}#random_article&nbsp;a,&nbsp;#site_options&nbsp;a&nbsp;{&nbsp;color:&nbsp;#000;&nbsp;font-weight:&nbsp;normal&nbsp;}#text&nbsp;{&nbsp;padding-right:&nbsp;9px;&nbsp;width:&nbsp;559px;&nbsp;float:&nbsp;left&nbsp;}#text_main&nbsp;pre.code&nbsp;{&nbsp;width:&nbsp;532px&nbsp;}#text_main,&nbsp;dd&nbsp;a&nbsp;{&nbsp;color:&nbsp;#626B70&nbsp;}#text_main&nbsp;h1,&nbsp;#text_main&nbsp;h2,&nbsp;#text_main&nbsp;h3,&nbsp;#text_main&nbsp;h4,&nbsp;#text_main&nbsp;h5,&nbsp;#text_main&nbsp;h6&nbsp;{&nbsp;border-bottom:&nbsp;#EEF1F2&nbsp;solid&nbsp;1px&nbsp;}#menu&nbsp;{&nbsp;padding-left:&nbsp;10px;&nbsp;float:&nbsp;right;&nbsp;width:&nbsp;200px;&nbsp;background:&nbsp;url('images/menu_dotted.gif')&nbsp;repeat-y&nbsp;}dd&nbsp;a&nbsp;{&nbsp;text-decoration:&nbsp;none&nbsp;}dd&nbsp;a:hover&nbsp;{&nbsp;color:&nbsp;#A9A9A9&nbsp;}#footer&nbsp;{&nbsp;margin-top:&nbsp;10px;&nbsp;float:&nbsp;left;&nbsp;border-top:&nbsp;#EEF1F2&nbsp;solid&nbsp;1px&nbsp;}#footer_left&nbsp;{&nbsp;padding-left:&nbsp;5px;&nbsp;float:&nbsp;left;&nbsp;width:&nbsp;560px&nbsp;}#footer_left&nbsp;a&nbsp;{&nbsp;color:&nbsp;#626B70;&nbsp;text-decoration:&nbsp;none&nbsp;}#footer_left&nbsp;a:hover&nbsp;{&nbsp;text-decoration:&nbsp;underline&nbsp;}#footer_right&nbsp;{&nbsp;width:&nbsp;208px;&nbsp;padding-right:&nbsp;5px;&nbsp;float:&nbsp;right&nbsp;}#footer_right&nbsp;a&nbsp;{&nbsp;color:&nbsp;#626B70;&nbsp;font-weight:&nbsp;bold;&nbsp;text-decoration:&nbsp;none&nbsp;}#adv&nbsp;{&nbsp;margin-bottom:&nbsp;5px;&nbsp;float:&nbsp;left;&nbsp;width:&nbsp;100%&nbsp;}#adv&nbsp;a&nbsp;{&nbsp;text-decoration:&nbsp;underline&nbsp;}</span></pre>]]></description></item><item><title>Onychofagia czyli nałogowe obgryzanie paznokci</title><pubdate>Sun, 07 Mar 2010 5:42:26 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/onychofagia-czyli-nalogowe-obgryzanie-paznokci/</link><comments>http://www.capaciouscore.pl/artykuly/onychofagia-czyli-nalogowe-obgryzanie-paznokci/#komentarze</comments><description><![CDATA[Onychofagia - przyznajcie sami, że ten nałóg dotyka nie tylko dzieci, ale i ludzi dorosłych, mężczyzn i kobiety. A może i Wy gdzieś po kątach bezwiednie, albo i nie obgryzacie paznokcie?  Od kiedy zainteresowałem się artykułami na ten temat, mimo woli zacząłem zwracałem uwagę na paznokcie najbliższych, kolegów, koleżanki, a czasami nawet ludzi mi nie znanych. Powiem Wam, że z moich obserwacji nie wygląda to najlepiej. Dłonie są brzydkie, nieestetyczne, a czasami nawet poranione. Paznokcie wielu młodych ludzi są wręcz poszarpane, opuszki pokrwawione, skórki głęboko powyrywane.
<br />
No, ale cóż się dziwić? Młodzi ludzie są znerwicowani, żyją w ciągłym stresie i najwidoczniej obgryzanie ich wycisza, uspokaja. Niektórzy twierdzą, że obgryzają, bo to rozładowuje ich nerwy. Inni twierdzą, że obgryzają, bo zawsze obgryzali i nawet chcieliby się tego oduczyć, ale&#8230;nie potrafią. A co na to medycyna?
<br />

<br />
Onychofagia (z greckiego: onycho - paznokieć, phagia - jeść) to nawykowe obgryzanie paznokci, najczęściej występujące u dzieci oraz młodzieży. Nawyk obejmuje najczęściej równomiernie wszystkie palce, bez faworyzacji jakiegoś z nich
<br />
Ogólnie przyjęło się, że problem ten pojawia się u dzieci i zwykle z wiekiem zanika. Jednakże z badań wynika, że z nałogiem tym żyje 15% dorosłych
<br />

<br />
Wyróżnia się dwa typy tego zaburzenia: &quot;łagodna onychofagia&quot; (mild) oraz &quot;niebezpieczna onychofagia&quot; (severe). Łagodna onychofagia, jak sama nazwa wskazuje oznacza obgryzanie paznokci i skórek sporadycznie, w stanie silnego wzburzenia emocjonalnego. W drugim przypadku jest znacznie gorzej. Niebezpieczna onychofagia oznacza kaleczenie dłoni jako efekt odreagowanie na sytuacje, które nas przytłaczają. Jest jedynym sposobem radzenia sobie z nerwami. Gdy tylko ta czynność daje chwile ukojenia, mamy do czynienia z formą autoagresji i samookaleczania.
<br />

<br />
<h2>Co jest przyczyną tego zaburzenia?</h2>
Nieznane są dokładnie przyczyny takiego zachowania - może ono być spowodowane zaburzeniami osobowości, stresem, niekontrolowaniem emocji problemami neurologicznymi, zażywaniem narkotyków czy być uwarunkowane genetycznie. Ankietowani respondenci, na pytanie - z jakiego powodu obgryzają paznokcie,  najczęściej wymieniali: stres, nuda, głód.  Część lekarzy twierdzi, że podłoże tego zaburzenia wynika z nadwrażliwości emocjonalnej, niskiej samooceny, zakompleksienia, pobudliwości i lękowości.
<br />

<br />
Zazwyczaj osoby, które obgryzają paznokcie nie zastanawiają się co kryje się pod paznokciami. Szacuje się jednak, iż pod paznokciami gromadzi się więcej bakterii aniżeli na muszli klozetowej, dlatego czynność ta to narażanie się na wiele chorób. Konsekwencją tego nawyku mogą być zakażenia dróg pokarmowych, infekcje bakteryjne i grzybicze, zarażenie się owsikami, tasiemcem, glistą ludzką, a nawet zapalenie wątroby. Obgryzanie paznokci od najmłodszych lat dodatkowo grozi zniekształceniem szczęk.
<br />

<br />
A jak walczyć  z tym nałogiem? Wymienia się wiele sposobów, jednakże najlepszą kuracją jest kuracja farmakologiczna. Kuracja ta polega na podawaniu leków przeciwdepresyjnych, lub małych dawek leków przeciwpsychotycznych Jeśli jednak nie chcemy leczyć się farmakologicznie pozostają nam domowe sposoby, i tak np. w momencie, kiedy mamy ochotę na włożenie palca do ust, możemy zastąpić go paluszkiem, ziarnami czy suszonymi owocami, można też żuć gumę. Dodatkowo warto jest mieć coś w rękach, bawić się długopisem lub miękką piłeczką.  Ponadto można kupić specjalny lakier do paznokci o wyjątkowo gorzkim smaku (osobliwie skuteczny jest sok z aloesu), przeznaczonym właśnie do tego, by oduczać obgryzania.]]></description></item><item><title>Web krytyka</title><pubdate>Sun, 07 Mar 2010 5:34:35 +0100</pubdate><link>http://www.capaciouscore.pl/aktualnosci/web-krytyka/</link><comments>http://www.capaciouscore.pl/aktualnosci/web-krytyka/#komentarze</comments><description><![CDATA[Dnia 16 lutego 2010 we wpisie wspomniałem o pracach nad nowym projektem oraz o tym, że za kilka dni udostępnię szczegóły. Ten dzień nadszedł. Troszkę spóźniony ale nadszedł. Projekt, który przygotowywałem to strona poświecona krytyce stron internetowych. Zamierzam na niej pokazać stan polskich stron WWW. Na pierwszy ogień pójdą witryny rządowe oraz strony większych korporacji, które twierdzą, że są profesjonalne jednak z tego co prezentują wynika, że nie do końca tak jest.]]></description></item><item><title>[PHP/MySQL] Podstawy pracy z bazami danych - zapytania</title><pubdate>Wed, 03 Mar 2010 4:23:06 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/podstawy-pracy-z-bazami-danych-zapytania/</link><comments>http://www.capaciouscore.pl/artykuly/podstawy-pracy-z-bazami-danych-zapytania/#komentarze</comments><description><![CDATA[Poniżej znajduje się prosty kod, który powinien ułatwić początkującym wyłapywanie błędów w zapytaniach SQL. W gruncie rzeczy nie ma nawet co tłumaczyć. Mamy instrukcje warunkową, która sprawdza czy zapytanie <tt>$sql</tt> zostało wykonane i jeżeli nie to echuje jego zawartość oraz nazwę i kod błędu. Jeżeli nie wystąpi błąd to możemy śmiało operować na wynikach przypisanych do <tt>$mysql_results</tt>.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$sql&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'SELECT&nbsp;pole1,&nbsp;pole2&nbsp;FROM&nbsp;tabela1'</span><span style="color: #007700">;if(!</span><span style="color: #0000BB">$mysql_results&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #0000BB">$sql</span><span style="color: #007700">)){</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'&lt;code&gt;$sql&lt;/code&gt;&nbsp;&amp;rarr;&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">mysql_error</span><span style="color: #007700">().</span><span style="color: #DD0000">'&nbsp;('</span><span style="color: #007700">.</span><span style="color: #0000BB">mysql_errno</span><span style="color: #007700">().</span><span style="color: #DD0000">')'</span><span style="color: #007700">;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.mysql-errno.php" target="_blank" class="postlink">http://php.net/manual/pl/function.mysql-errno.php</a>
<br />
<a href="http://php.net/manual/pl/function.mysql-error.php" target="_blank" class="postlink">http://php.net/manual/pl/function.mysql-error.php</a>]]></description></item><item><title>Odtwarzanie soundtracków z Unreal Tournament</title><pubdate>Sun, 28 Feb 2010 1:21:57 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/odtwarzanie-soundtrackow-z-unreal-tournament/</link><comments>http://www.capaciouscore.pl/artykuly/odtwarzanie-soundtrackow-z-unreal-tournament/#komentarze</comments><description><![CDATA[Czasami przychodzą czasy, w których to chce się posłuchać muzyki <i>klasycznej</i> o rozszerzeniu <b>.umx</b>. Do tego celu musimy zainstalować wtyczkę do Winampa o nazwie  <a href="http://www.winamp.com/plugin/umx-decoder/49627" target="_blank" class="postlink">UMX Decoder</a>.]]></description></item><item><title>Pół roku pracy w niwecz poszło się...</title><pubdate>Sat, 27 Feb 2010 9:38:09 +0100</pubdate><link>http://www.capaciouscore.pl/aktualnosci/pol-roku-pracy-w-niwecz-poszlo-sie/</link><comments>http://www.capaciouscore.pl/aktualnosci/pol-roku-pracy-w-niwecz-poszlo-sie/#komentarze</comments><description><![CDATA[Dziś dowiedziałem się od Agnieszki, że <i>przeniosła</i> serwis <a href="http://www.cs-mrowisko.pl" target="_blank" class="postlink">cs-mrowisko.pl</a> na <a href="http://csmrowisko.forumowisko.net" target="_blank" class="postlink">csmrowisko.forumowisko.net</a>. Dziwi mnie ta operacja ze względu na to, że[cut] korzystając z tego typu usług nie ma wpływu na bazę danych oraz pliki forum oraz gdyby coś się stało to zostaje dosłownie na lodzie. Mimo, że domena jest jeszcze opłacona na pół roku, a ja zaoferowałem hosting dla forum to ona nie chciała przenieść forum na nowy hosting <img src="http://www.capaciouscore.pl/smiles/icon_neutral.gif" class="emoticon" alt="Neutral" /> Grunt to pół roku pracy na marne. Prawda? Około 1200 zaindeksowanych stron w google oraz Page Rank 1 pójdzie dla kolejnego handlarza domen...
<br />

<br />
Pamiątkowy zrzut ekranu na dzień dzisiejszy.
<br />
<img src="http://www.capaciouscore.pl/download/other/cs-mrowisko.png" alt="cs-mrowisko.png" />]]></description></item><item><title>[MySQL] SELECT COUNT(*) na 971 603 rekordach</title><pubdate>Fri, 26 Feb 2010 8:38:05 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/mysql-select-count-na-971603-rekordach/</link><comments>http://www.capaciouscore.pl/artykuly/mysql-select-count-na-971603-rekordach/#komentarze</comments><description><![CDATA[Film zrobiony na potrzeby prezentacji dla tematu <a href="http://www.forumweb.pl/viewtopic.php?p=322761" target="_blank" class="postlink">Jak pobrać ilość najczęściej występujących rekordów w tabeli</a>. Raz za razem wykonano stukrotnie zapytanie:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">SELECT&nbsp;COUNT(*)&nbsp;FROM&nbsp;md5</span></pre>
powodując maksymalne obciążenie dysku. Średni czas zliczania takiej ilości rekordów przy pomocy <tt>COUNT()</tt> trwał <b>9,68 sekundy</b>.
<br />
<a href="http://www.youtube.com/watch?v=_Hr6mYJzi1g">http://www.youtube.com/watch\?v=_Hr6mYJzi1g</a>
<br />
PS
<br />
Przepraszam za YouTube, które to z niewiadomych przyczyn obcięło końcówkę filmu. Czyżby ucinanie takich samych klatek z początku lub końca filmu było celowym zabiegiem optymalizacji?]]></description></item><item><title>McDonald's tuczy czy odchudza?</title><pubdate>Fri, 26 Feb 2010 7:10:12 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/mcdonalds-tuczy-czy-odchudza/</link><comments>http://www.capaciouscore.pl/artykuly/mcdonalds-tuczy-czy-odchudza/#komentarze</comments><description><![CDATA[Długo nie trzeba się zastanawiać, żeby dojść do wniosku, że czegoś brakuje w reklamach  McDonald's. Chwila namysłu i ...? I pewnie brak pomysłu <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Pokazują piękne jedzenie mieniące się kolorami ale nie pokazują co te jedzenie robi z ludzi. Mam tutaj na myśli szczególnie naród amerykański. Poniżej trzy filmy, które powinny dąć do myślenia.
<br />
<a href="http://www.youtube.com/watch?v=on6BSfHlK_w">http://www.youtube.com/watch\?v=on6BSfHlK_w</a>
<br />
<a href="http://www.youtube.com/watch?v=gPkfjK5M-TY">http://www.youtube.com/watch\?v=gPkfjK5M-TY</a>
<br />
<a href="http://www.youtube.com/watch?v=33mUwCDrR3g">http://www.youtube.com/watch\?v=33mUwCDrR3g</a>
<br />
Na dokładkę dam fajną reklamę, która moim zdaniem wyszła im.
<br />
<a href="http://www.youtube.com/watch?v=_UKLncvGxQ8">http://www.youtube.com/watch\?v=_UKLncvGxQ8</a>
<br />
Nadal nie masz dosyć?
<br />
<a href="http://www.youtube.com/watch?v=3si3aRs3NLc">http://www.youtube.com/watch\?v=3si3aRs3NLc</a>]]></description></item><item><title>[PHP] Jak obciąć tekst po określonej liczbie znaków i dodać na końcu ...?</title><pubdate>Mon, 22 Feb 2010 1:32:43 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/jak-obciac-tekst-po-okreslonej-licznie-znakow-i-dodac-na-koncu-wielokropek/</link><comments>http://www.capaciouscore.pl/artykuly/jak-obciac-tekst-po-okreslonej-licznie-znakow-i-dodac-na-koncu-wielokropek/#komentarze</comments><description><![CDATA[Z początku miałem wrzucić dwie funkcje lecz po chwili rozmysłu i walki z wiatrakami doszedłem do wniosku, że to nie dla mnie. Pierwsza funkcja, która zostanie zaprezentowana ma małą niedoróbkę. Chodzi o to, że po podzieleniu ciągu i dodaniu trzech kropek na końcu długość stringu wychodzi nieco większa niż ta podana w drugim parametrze funkcji. Natomiast funkcja ma jedna zaletę. Nie ucina słowa w połowie. Moja funkcja miała robić to samo oraz ucinać ciąg tak ażeby nie przekraczać określonej ilości znaków razem z wielokropkiem, który miał być dodawany w zależności co się pojawiło na końcu obciętego ciągu. Mam tutaj na myśli takie wymysły jak: <tt>...</tt>, <tt>.</tt>, <tt>?</tt>, <tt>!</tt>, <tt>?!</tt>, <tt>!?</tt>, <tt>?!?</tt>, <tt>!?!</tt>, <tt>!!!</tt>, <tt>???</tt>, itp.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$str&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'Lorem&nbsp;ipsum&nbsp;dolor&nbsp;sit&nbsp;amet,&nbsp;consectetuer&nbsp;adipiscing&nbsp;elit.&nbsp;Phasellus&nbsp;sapien&nbsp;nisl,&nbsp;sollicitudin&nbsp;non,&nbsp;imperdiet&nbsp;ac,&nbsp;rhoncus&nbsp;sed,&nbsp;urna.&nbsp;Lorem&nbsp;ipsum&nbsp;dolor&nbsp;sit&nbsp;amet,&nbsp;consectetuer&nbsp;adipiscing&nbsp;elit.&nbsp;Integer&nbsp;nisl.&nbsp;Quisque&nbsp;gravida.Lorem&nbsp;ipsum&nbsp;dolor&nbsp;sit&nbsp;amet,&nbsp;consectetuer&nbsp;adipiscing&nbsp;elit.&nbsp;Sed&nbsp;euismod&nbsp;ultrices&nbsp;nulla.&nbsp;Aenean&nbsp;eros.&nbsp;Cras&nbsp;sit&nbsp;amet&nbsp;libero&nbsp;in&nbsp;ipsum&nbsp;lacinia&nbsp;feugiat.&nbsp;Ut&nbsp;dictum,&nbsp;dui&nbsp;ut&nbsp;rutrum&nbsp;tempor,&nbsp;odio&nbsp;mi&nbsp;rutrum&nbsp;lorem,&nbsp;sed&nbsp;iaculis&nbsp;purus&nbsp;metus&nbsp;nec&nbsp;turpis.&nbsp;Donec&nbsp;dignissim&nbsp;lectus&nbsp;et&nbsp;sapien.&nbsp;Sed&nbsp;molestie&nbsp;feugiat&nbsp;dui.&nbsp;Etiam&nbsp;dapibus&nbsp;varius&nbsp;risus.&nbsp;Mauris&nbsp;arcu&nbsp;mauris,&nbsp;interdum&nbsp;sit&nbsp;amet,&nbsp;malesuada&nbsp;sed,&nbsp;iaculis&nbsp;a,&nbsp;libero.&nbsp;Donec&nbsp;elementum&nbsp;nisi&nbsp;ac&nbsp;turpis.&nbsp;In&nbsp;hac&nbsp;habitasse&nbsp;platea&nbsp;dictumst.&nbsp;Aenean&nbsp;a&nbsp;massa&nbsp;non&nbsp;mauris&nbsp;cursus&nbsp;varius.&nbsp;Vivamus&nbsp;at&nbsp;ante.&nbsp;Aenean&nbsp;non&nbsp;urna&nbsp;sed&nbsp;est&nbsp;lobortis&nbsp;malesuada.'</span><span style="color: #007700">;function&nbsp;</span><span style="color: #0000BB">shortcut</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$length</span><span style="color: #007700">){</span><span style="color: #0000BB"> $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'length'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">);</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'length'</span><span style="color: #007700">]&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">$length</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">while(</span><span style="color: #0000BB">$str</span><span style="color: #007700">[</span><span style="color: #0000BB">$length</span><span style="color: #007700">]&nbsp;!=&nbsp;</span><span style="color: #DD0000">'&nbsp;'&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;++</span><span style="color: #0000BB">$length&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'length'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">substr</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$length</span><span style="color: #007700">).</span><span style="color: #DD0000">'...'</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">$str</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}}echo&nbsp;</span><span style="color: #0000BB">shortcut</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">60</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
W aktualnościach na swojej stronie stosuje takie oto cudo:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$str&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'Lorem&nbsp;ipsum&nbsp;dolor&nbsp;sit&nbsp;amet,&nbsp;consectetuer&nbsp;adipiscing&nbsp;elit<em><span>[cut]</span></em>.&nbsp;Phasellus&nbsp;sapien&nbsp;nisl,&nbsp;sollicitudin&nbsp;non,&nbsp;imperdiet&nbsp;ac,&nbsp;rhoncus&nbsp;sed,&nbsp;urna.&nbsp;Lorem&nbsp;ipsum&nbsp;dolor&nbsp;sit&nbsp;amet,&nbsp;consectetuer&nbsp;adipiscing&nbsp;elit.&nbsp;Integer&nbsp;nisl.&nbsp;Quisque&nbsp;gravida.Lorem&nbsp;ipsum&nbsp;dolor&nbsp;sit&nbsp;amet,&nbsp;consectetuer&nbsp;adipiscing&nbsp;elit.&nbsp;Sed&nbsp;euismod&nbsp;ultrices&nbsp;nulla.&nbsp;Aenean&nbsp;eros.&nbsp;Cras&nbsp;sit&nbsp;amet&nbsp;libero&nbsp;in&nbsp;ipsum&nbsp;lacinia&nbsp;feugiat.&nbsp;Ut&nbsp;dictum,&nbsp;dui&nbsp;ut&nbsp;rutrum&nbsp;tempor,&nbsp;odio&nbsp;mi&nbsp;rutrum&nbsp;lorem,&nbsp;sed&nbsp;iaculis&nbsp;purus&nbsp;metus&nbsp;nec&nbsp;turpis.&nbsp;Donec&nbsp;dignissim&nbsp;lectus&nbsp;et&nbsp;sapien.&nbsp;Sed&nbsp;molestie&nbsp;feugiat&nbsp;dui.&nbsp;Etiam&nbsp;dapibus&nbsp;varius&nbsp;risus.&nbsp;Mauris&nbsp;arcu&nbsp;mauris,&nbsp;interdum&nbsp;sit&nbsp;amet,&nbsp;malesuada&nbsp;sed,&nbsp;iaculis&nbsp;a,&nbsp;libero.&nbsp;Donec&nbsp;elementum&nbsp;nisi&nbsp;ac&nbsp;turpis.&nbsp;In&nbsp;hac&nbsp;habitasse&nbsp;platea&nbsp;dictumst.&nbsp;Aenean&nbsp;a&nbsp;massa&nbsp;non&nbsp;mauris&nbsp;cursus&nbsp;varius.&nbsp;Vivamus&nbsp;at&nbsp;ante.&nbsp;Aenean&nbsp;non&nbsp;urna&nbsp;sed&nbsp;est&nbsp;lobortis&nbsp;malesuada.'</span><span style="color: #007700">;echo&nbsp;(</span><span style="color: #0000BB">is_int</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'pointer'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">strpos</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'[cut]'</span><span style="color: #007700">))&nbsp;?&nbsp;</span><span style="color: #0000BB">substr</span><span style="color: #007700">(</span><span style="color: #0000BB">$str</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'pointer'</span><span style="color: #007700">]).</span><span style="color: #DD0000">'...'&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">$str</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
W ten sposób mam większą kontrolę nad tym, w którym momencie ucinam ciąg. W odpowiednim momencie daję tylko <tt>[cut]</tt> i sprawa załatwiona.
<br />

<br />
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.is-int.php" target="_blank" class="postlink">http://php.net/manual/pl/function.is-int.php</a>
<br />
<a href="http://php.net/manual/pl/function.strlen.php" target="_blank" class="postlink">http://php.net/manual/pl/function.strlen.php</a>
<br />
<a href="http://php.net/manual/pl/function.strpos.php" target="_blank" class="postlink">http://php.net/manual/pl/function.strpos.php</a>
<br />
<a href="http://php.net/manual/pl/function.substr.php" target="_blank" class="postlink">http://php.net/manual/pl/function.substr.php</a>]]></description></item><item><title>Kolejne oszustwo umożliwiające infekcje komputerów</title><pubdate>Wed, 17 Feb 2010 11:34:45 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/kolejne-internetowe-oszustwo-umozliwiajace-infekcje-komputerow/</link><comments>http://www.capaciouscore.pl/artykuly/kolejne-internetowe-oszustwo-umozliwiajace-infekcje-komputerow/#komentarze</comments><description><![CDATA[Przed chwilą dostałem informacje od znajomego jakoby ktoś na jego forum rozsyłał wiadomości o treści:
<br />
<p class="quote">Cytat:</p><blockquote>Temat: Important message from the forum administration!  
<br />

<br />
Dear, [tutaj login odbiorcy]!
<br />

<br />
A virus alert was noticed on your computer. 
<br />
We highly recommend you to check your computer and perform online virus check at our site immediately:http://securitytool2010.org/[tutaj login odbiorcy] 
<br />
If you do not pass this test  we will have to delete your account and forward a complaint to your ISP with attached log file (your IP address, etc.).
<br />
----------------------------------------------------
<br />
Forum Administration [tutaj adres forum]. </blockquote>
Osoby posiadające przeglądarkę Internet Explorer proszone są o nie wchodzenie na powyższy adres strony dla swojego bezpieczeństwa.
<br />

<br />
Na <a href="http://www.nhdtv.pl/forum/showthread.php?p=297298" target="_blank" class="postlink">tym forum</a> spotkałem się z taka wypowiedzią: 
<br />
<p class="quote"><cite>mateeeusz</cite> napisał(a):</p> <blockquote><p>Jestem przekonany że to <b>nie jest żaden administrator</b>, konto założone zostało wczoraj, użytkownik nie ma napisanych żadnych postów. Niemal w 100% jeżeli skorzystacie z przesłanego linku, wasz komputer <b>zostanie zainfekowany</b>. Nie bójcie się więc że wasze konto zostanie usunięte, czy &quot;admin&quot; złoży skargę do waszego operatora. Tym bardziej że nie pisałby do nas po angielsku (!), a więc strzeżcie się!</blockquote>
I trzymajmy się tej wersji <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" />
<br />

<br />
Wiadomość ta jest wysyłana przez bota, który po zalogowaniu się spamuje skrzynki odbiorcze użytkowników forum. Nie mogę znaleźć w logach miejsca rejestracji bota. Po szybkiej analizie logów zgaduję, że IP bota to 188.72.225.209. Na szczęście bot pobiera tylko jedna stronę użytkowników. Gdyby pobierał całą listę, a następnie na jej podstawie wysyłał wiadomości do wszystkich to byłoby co najmniej nie fajnie. Chce zauważyć ze fora typu phpBB czy też IPB nie maja blokady antyfloodowej, która umożliwia tego typu spamerom bezproblemowe wysłanie setek wiadomości w bardzo krótkim czasie. Poniżej znajduję się log.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:478&nbsp;+0100]&nbsp;"GET&nbsp;/index.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;83247&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/index.php"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:47:45&nbsp;+0100]&nbsp;"POST&nbsp;/login.php?sid=660bf5329d663debf19c83461e688226&nbsp;HTTP/1.0"&nbsp;302&nbsp;0&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/index.php"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:47:45&nbsp;+0100]&nbsp;"GET&nbsp;/index.php?sid=660bf5329d663debf19c83461e688226&nbsp;HTTP/1.0"&nbsp;200&nbsp;75240&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/index.php?sid=660bf5329d663debf19c83461e688226"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:47:47&nbsp;+0100]&nbsp;"GET&nbsp;/memberlist.php?mode=joined&amp;order=ASC&nbsp;HTTP/1.0"&nbsp;200&nbsp;58934&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/memberlist.php?mode=joined&amp;order=ASC"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:47:48&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=25&nbsp;HTTP/1.0"&nbsp;200&nbsp;62414&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=25"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:47:51&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11954&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=25"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:47:52&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=24&nbsp;HTTP/1.0"&nbsp;200&nbsp;62436&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=24"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:47:54&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11810&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=24"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:48:26&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11952&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=24"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:48:27&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=23&nbsp;HTTP/1.0"&nbsp;200&nbsp;62438&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=23"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:48:29&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11798&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=23"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:492&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11973&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=23"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:492&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=22&nbsp;HTTP/1.0"&nbsp;200&nbsp;62436&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=22"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:494&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11789&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=22"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:49:36&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11956&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=22"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:49:37&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=21&nbsp;HTTP/1.0"&nbsp;200&nbsp;62418&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=21"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:49:38&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11789&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=21"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:50:12&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11956&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=21"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:50:12&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=20&nbsp;HTTP/1.0"&nbsp;200&nbsp;62429&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=20"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:50:15&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11798&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=20"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:50:48&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11972&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=20"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:50:48&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=19&nbsp;HTTP/1.0"&nbsp;200&nbsp;62417&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=19"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:50:50&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11791&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=19"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:51:23&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11956&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=19"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:51:23&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=18&nbsp;HTTP/1.0"&nbsp;200&nbsp;62439&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=18"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:51:25&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11803&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=18"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:51:58&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11956&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=18"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:51:59&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=17&nbsp;HTTP/1.0"&nbsp;200&nbsp;62426&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=17"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:521&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11793&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=17"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:52:34&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11954&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=17"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:52:35&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=16&nbsp;HTTP/1.0"&nbsp;200&nbsp;62419&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=16"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:52:36&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11789&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=16"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:539&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11952&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=16"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:539&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=15&nbsp;HTTP/1.0"&nbsp;200&nbsp;62439&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=15"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:53:10&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11789&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=15"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:53:43&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11972&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=15"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:53:44&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=14&nbsp;HTTP/1.0"&nbsp;200&nbsp;62436&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=14"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:53:52&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11793&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=14"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:54:26&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11956&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=14"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:54:28&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=13&nbsp;HTTP/1.0"&nbsp;200&nbsp;62421&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=13"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:54:32&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11789&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=13"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:555&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11956&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=13"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:557&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=12&nbsp;HTTP/1.0"&nbsp;200&nbsp;62438&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=12"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:558&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11793&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=12"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:55:41&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11952&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=12"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:55:42&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=11&nbsp;HTTP/1.0"&nbsp;200&nbsp;62416&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=11"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:55:45&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11810&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=11"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:56:19&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11952&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=11"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:56:20&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=10&nbsp;HTTP/1.0"&nbsp;200&nbsp;62437&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=10"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:56:22&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11793&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=10"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:56:55&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11952&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=10"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:56:55&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=9&nbsp;HTTP/1.0"&nbsp;200&nbsp;62424&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=9"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:56:57&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11810&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=9"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:57:30&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11954&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=9"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:57:30&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=8&nbsp;HTTP/1.0"&nbsp;200&nbsp;62424&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=8"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:57:39&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11798&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=8"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:58:11&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11956&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=8"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:58:12&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=7&nbsp;HTTP/1.0"&nbsp;200&nbsp;62427&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=7"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:58:13&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11791&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=7"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:58:46&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11973&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=7"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:58:46&nbsp;+0100]&nbsp;"GET&nbsp;/privmsg.php?mode=post&amp;u=6&nbsp;HTTP/1.0"&nbsp;200&nbsp;62433&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=6"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:58:48&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11798&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=6"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"188.72.225.209&nbsp;-&nbsp;-&nbsp;[17/Feb/2010:21:59:21&nbsp;+0100]&nbsp;"POST&nbsp;/privmsg.php&nbsp;HTTP/1.0"&nbsp;200&nbsp;11952&nbsp;"http://www.TUTAJ_BYL_ADRES_FORUM_ALE_NIE_MA_BO_NIE_ROBIE_REKLAMY_FORUM.com/privmsg.php?mode=post&amp;u=6"&nbsp;"Mozilla/3.0&nbsp;(compatible;&nbsp;WebCapture&nbsp;2.0;&nbsp;Auto;&nbsp;Windows)"</span></pre>]]></description></item><item><title>[PHP] Uruchamianie skryptów w plikach .html i .htm</title><pubdate>Wed, 17 Feb 2010 7:00:10 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/uruchamianie-skryptow-w-plikach-html-i-htm/</link><comments>http://www.capaciouscore.pl/artykuly/uruchamianie-skryptow-w-plikach-html-i-htm/#komentarze</comments><description><![CDATA[Czasami w ekstremalnych przypadkach zdarza się, że musimy odpalić skrypty w plikach o rozszerzeniach <b>.html</b> bądź <b>.htm</b>. Aby tego dokonać musimy w pliku <b>.htaccess</b> dodać poniższe wpisy:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">RemoveHandler&nbsp;.html&nbsp;.htmAddType&nbsp;application/x-httpd-php&nbsp;.html&nbsp;.htm</span></pre>
Pierwsza linijka usuwa stary uchwyt dla plików <b>.html</b> i .<b>htm</b>. Druga natomiast dodaje nowe uchwyty dla plików.
<br />

<br />
Pamiętaj, że to rozwiązanie nie jest zalecane i powinno być używane przez osoby doświadczone.]]></description></item><item><title>Koniec świąt</title><pubdate>Wed, 17 Feb 2010 5:54:42 +0100</pubdate><link>http://www.capaciouscore.pl/aktualnosci/koniec-swiat/</link><comments>http://www.capaciouscore.pl/aktualnosci/koniec-swiat/#komentarze</comments><description><![CDATA[Wiecie po czym najczęściej poznać, że była wizyta księdza? <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /> Po tym, że przy śmietnikach mamy stos choinek. Może na tym zdjęciu nie ma stosu lecz jest jedna symboliczna.
<br />
<img src="http://www.capaciouscore.pl/download/other/koniec-swiat.png" alt="koniec-swiat.png" />
<br />
I pomyśleć, że z tych choinek co cześć ludzi wyrzuca można zrobić niezłe ognisko <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />
<br />

<br />
PS
<br />
Zdjęcie wykonałem 13 stycznia tego roku. Troszkę zwlekałem z tą wiadomością ale co tam <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />]]></description></item><item><title>Mysz Tracer TRM-141 Mustang PS2</title><pubdate>Wed, 17 Feb 2010 3:07:55 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/mysz-tracer-trm-141-mustang-ps2/</link><comments>http://www.capaciouscore.pl/artykuly/mysz-tracer-trm-141-mustang-ps2/#komentarze</comments><description><![CDATA[Jakiś czas temu kupiłem fajna mysze <img src="http://www.capaciouscore.pl/smiles/icon_biggrin.gif" class="emoticon" alt="Very Happy" /> Wiadomo nie śmigana, elegancka, dobrze leży w dłoni. Podłączam ją do pieca. Lata ładnie. Nie minęły 3 godziny i musiałem się zawieść. Przestała reagować na bodźce zewnętrzne. Nie pomagało szeptanie, głaskanie, szturchanie, a nawet... Dioda się święciła jakby cały czas ktoś ją ruszał ale kursor na ekranie ani drgną. Numer niezły. Lepszy był taki, że na opakowaniu pisało PS2, a w rzeczywistości miała złącze USB. Nie miąłbym nic za złe gdyby nie fakt, że nie dołączyli przejściówki! Skandal? E tam. Jakie to typowe dla <i>Made In China</i>, prawda? Jeżeli lubicie niespodzianki to gorąco polecam tą mysz! Najlepszym żartem jest to, że importer najwyraźniej wiedział o wadliwej partii towaru, a jednak nie wycofał sprzętu ze sklepów. Nie ma to jak umyślne wprowadzanie klienta w błąd?]]></description></item><item><title>Przeniesienie strony na nowy serwer</title><pubdate>Tue, 16 Feb 2010 4:55:03 +0100</pubdate><link>http://www.capaciouscore.pl/aktualnosci/przeniesienie-strony-na-nowy-serwer/</link><comments>http://www.capaciouscore.pl/aktualnosci/przeniesienie-strony-na-nowy-serwer/#komentarze</comments><description><![CDATA[Rok miną od startu <a href="http://www.capaciouscore.pl" target="_blank" class="postlink">www.capaciouscore.pl</a> i musiałem podjąć decyzje dotyczącą hostingu. Zostać na <a href="http://www.hekko.pl" target="_blank" class="postlink">hekko.pl</a> czy przenieść się na inny hosting. Postanowiłem przenieść się na <a href="http://www.linuxpl.com" target="_blank" class="postlink">linuxpl.com</a> ze względu na korzystniejsze warunki. Dzisiaj w godzinach popołudniowych można było zauważyć problemy z otwieraniem strony, które spowodowane były migracja na nowy serwer za co z góry przepraszam. W najbliższym czasie zamierzam wziąć się ostro za tworzenie kursu PHP. Na dokładkę powiem, że niedługo ruszę z projektem konstruktywnej web krytyki pod adresem polskiej sieci. Za kilka dni udostępnię szczegóły.]]></description></item><item><title>[PHP] Własny Progress Bar</title><pubdate>Mon, 15 Feb 2010 9:18:28 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/wlasny-progress-bar/</link><comments>http://www.capaciouscore.pl/artykuly/wlasny-progress-bar/#komentarze</comments><description><![CDATA[Jakiś czas temu rozmawiałem ze swoim internetowym znajomym <a href="http://jsmp.republika.pl/" target="_blank" class="postlink">jsmp</a>. Po krótkiej konwersacji pokazał mi swój progress bar. Po paru dniach udostępnił mi także źródła. Postanowiłem je gruntownie przebudować i pokazać światu. <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Być może ktoś też chciałby mieć taki progress bar jak ten na stronie <a href="http://www.capaciouscore.pl/moje-projekty/" target="_blank" class="postlink">Aktualnie pracuję nad</a>.
<br />
<h2>Opis konfiguracji</h2>
Po pierwsze sortowanie. Jeżeli chcemy aby wartości były w jakiś sposób sortowane musimy to ustawić w <tt>$config['progress_bar']['sort_type']</tt> i <tt>$config['progress_bar']['sort_by']</tt>. Pierwsza zmienna mówi nam czy ma to być sortowanie malejące czy rosnące. Druga zmienna mówi nam według czego mamy sortować. W przypadku tego skryptu <tt>0</tt> oznacza sortowanie według nazw projektów natomiast <tt>1</tt> oznacza sortowanie według postępu prac. Jeżeli chcemy wyłączyć sortowanie wystarczy aby zmienna <tt>$config['progress_bar']['sort_type']</tt> miała inna wartość niż <tt>asc</tt> i <tt>desc</tt> albo ustawiamy zmiennej <tt>$config['progress_bar']['sort_by']</tt> wartość <tt>null</tt>. Zmienna <tt>$config['progress_bar']['right_aligned_procent']</tt> informuje skrypt czy chcemy aby postęp prac był wyrównywany do prawej czy do lewej. Ostatnia zmienna jaka można napotkać jest <tt>$config['progress_bar']['inscriptions_on_the_bar']</tt>, która włącza napisy na progress barze gdy projekt jest bliski ukończenia bądź jest ukończony. Naturalnie można dodać własne wartości.
<br />
<h2>Wygląd</h2>
Tak jak wspomniałem podejrzeć prace skryptu można na stronie <a href="http://www.capaciouscore.pl/moje-projekty/" target="_blank" class="postlink">Aktualnie pracuję nad</a>. Poniżej pokazuje zrzuty ekranu ze wszystkich możliwych stanów progress bara. Dodatkowo pokazuje porównanie względem mojego starego progress bara.
<br />
<h3>Stary</h3>
<img src="http://www.capaciouscore.pl/download/other/old-progress-bar.png" alt="old-progress-bar.png" />
<br />
<h2>Nowy</h2>
<img src="http://www.capaciouscore.pl/download/other/new-progress-bar.png" alt="new-progress-bar.png" />
<br />
<h2>Źródło</h2>
Plik <b>config.php</b>
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">#--------------------------------------------+#&nbsp;Authors:&nbsp;CapaciousCore&nbsp;&amp;&nbsp;jsmp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|#&nbsp;Website:&nbsp;www.CapaciousCore.pl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;www.jsmp.republika.pl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; All&nbsp;rights&nbsp;reserved!&nbsp;|#--------------------------------------------+</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'sort_type'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'desc'</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;asc&nbsp;/&nbsp;desc</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'sort_by'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;null&nbsp;-&gt;&nbsp;not&nbsp;sort&nbsp;/&nbsp;0&nbsp;-&gt;&nbsp;sort&nbsp;by&nbsp;title&nbsp;/&nbsp;1&nbsp;-&gt;&nbsp;sort&nbsp;by&nbsp;procent</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'width'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">500</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;don't&nbsp;touch</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'height'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">20</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;don't&nbsp;touch</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'font_size'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;don't&nbsp;touch</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'right_aligned_procent'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;true&nbsp;-&gt;&nbsp;wyrównuje&nbsp;procenty&nbsp;do&nbsp;prawej&nbsp;/&nbsp;false&nbsp;-&gt;&nbsp;wyrównuje&nbsp;procenty&nbsp;do&nbsp;lewej</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'inscriptions_on_the_bar'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;true&nbsp;-&gt;&nbsp;pokazuje&nbsp;napisy&nbsp;na&nbsp;pasku&nbsp;postępu&nbsp;/&nbsp;false&nbsp;-&gt;&nbsp;nie&nbsp;pokazuje&nbsp;napisów&nbsp;na&nbsp;pasku&nbsp;postępu</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Plik <b>lang_progress_bar.php</b>
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">#--------------------------------------------+#&nbsp;Authors:&nbsp;CapaciousCore&nbsp;&amp;&nbsp;jsmp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|#&nbsp;Website:&nbsp;www.CapaciousCore.pl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;www.jsmp.republika.pl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; All&nbsp;rights&nbsp;reserved!&nbsp;|#--------------------------------------------+</span><span style="color: #0000BB">$lang</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'we_currently_do_not_work_on_any_project'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'Aktualnie&nbsp;nie&nbsp;pracuję&nbsp;nad&nbsp;żadnym&nbsp;projektem'</span><span style="color: #007700">;</span><span style="color: #0000BB">$lang</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'been_completed'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'zakończony'</span><span style="color: #007700">;</span><span style="color: #0000BB">$lang</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'its_almost_done'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'już&nbsp;prawie,&nbsp;prawie...'</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>progress_bar.php</b>
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">#--------------------------------------------+#&nbsp;Authors:&nbsp;CapaciousCore&nbsp;&amp;&nbsp;jsmp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|#&nbsp;Website:&nbsp;www.CapaciousCore.pl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;www.jsmp.republika.pl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; All&nbsp;rights&nbsp;reserved!&nbsp;|#--------------------------------------------+</span><span style="color: #0000BB">define</span><span style="color: #007700">(</span><span style="color: #DD0000">'PROGRESS_BAR'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">);</span><span style="color: #FF8000">//&nbsp;Pobranie&nbsp;konfiguracji</span><span style="color: #007700">include&nbsp;</span><span style="color: #DD0000">'./config.php'</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;Pobranie&nbsp;zawartości&nbsp;progress&nbsp;bara</span><span style="color: #007700">include&nbsp;</span><span style="color: #DD0000">'./data.php'</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;Pobranie&nbsp;tablicy&nbsp;języka</span><span style="color: #007700">include&nbsp;</span><span style="color: #DD0000">'./lang_progress_bar.php'</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;Sorotwanie</span><span style="color: #007700">if(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'sort_by'</span><span style="color: #007700">]&nbsp;===&nbsp;</span><span style="color: #0000BB">0&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'sort_by'</span><span style="color: #007700">]&nbsp;===&nbsp;</span><span style="color: #0000BB">1&nbsp;</span><span style="color: #007700">AND&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'sort_type'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #DD0000">'asc'&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'sort_type'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #DD0000">'desc'</span><span style="color: #007700">){</span><span style="color: #0000BB"> foreach</span><span style="color: #007700">(</span><span style="color: #0000BB">$progress_bar&nbsp;</span><span style="color: #007700">as&nbsp;</span><span style="color: #0000BB">$key&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$value</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'column'</span><span style="color: #007700">][</span><span style="color: #0000BB">$key</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$value</span><span style="color: #007700">[</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'sort_by'</span><span style="color: #007700">]];</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> array_multisort</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'column'</span><span style="color: #007700">],&nbsp;(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'sort_type'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #DD0000">'asc'&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #0000BB">SORT_ASC&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">SORT_DESC</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">);}</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">);</span><span style="color: #FF8000">//&nbsp;Tworzenie&nbsp;obrazka</span><span style="color: #0000BB">$img&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">imagecreate</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'width'</span><span style="color: #007700">],&nbsp;(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">0&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #0000BB">1&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">])&nbsp;*&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'height'</span><span style="color: #007700">]);</span><span style="color: #FF8000">//&nbsp;Tworzenie&nbsp;kolorów</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'dark_red'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">imagecolorallocate</span><span style="color: #007700">(</span><span style="color: #0000BB">$img</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">200</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">);</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'red'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">imagecolorallocate</span><span style="color: #007700">(</span><span style="color: #0000BB">$img</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">255</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">);</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'orange'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">imagecolorallocate</span><span style="color: #007700">(</span><span style="color: #0000BB">$img</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">255</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">200</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">);</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'green'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">imagecolorallocate</span><span style="color: #007700">(</span><span style="color: #0000BB">$img</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">169</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">211</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">41</span><span style="color: #007700">);</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'dark_green'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">imagecolorallocate</span><span style="color: #007700">(</span><span style="color: #0000BB">$img</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">128</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">160</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">32</span><span style="color: #007700">);</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'black'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">imagecolorallocate</span><span style="color: #007700">(</span><span style="color: #0000BB">$img</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">);</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'white'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">imagecolorallocate</span><span style="color: #007700">(</span><span style="color: #0000BB">$img</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">255</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">255</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">255</span><span style="color: #007700">);</span><span style="color: #FF8000">//&nbsp;Tło</span><span style="color: #0000BB">imagefill</span><span style="color: #007700">(</span><span style="color: #0000BB">$img</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'white'</span><span style="color: #007700">]);</span><span style="color: #FF8000">//&nbsp;Rozmiary&nbsp;czcionek</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'font'</span><span style="color: #007700">][</span><span style="color: #DD0000">'width'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">imagefontwidth</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'font_size'</span><span style="color: #007700">]);</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'font'</span><span style="color: #007700">][</span><span style="color: #DD0000">'height'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">imagefontheight</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'font_size'</span><span style="color: #007700">]);if(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">]&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">){</span><span style="color: #0000BB"> for</span><span style="color: #007700">(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">];&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">])&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">27</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $progress_bar</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">substr</span><span style="color: #007700">(</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">24</span><span style="color: #007700">).</span><span style="color: #DD0000">'...'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(!</span><span style="color: #0000BB">is_int</span><span style="color: #007700">(</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">])&nbsp;||&nbsp;</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;&lt;&nbsp;</span><span style="color: #0000BB">0&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">]&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">100</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $progress_bar</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Pozycja&nbsp;procentów</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'right_aligned_procent'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'procent_length'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp; if</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'procent_length'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'procent_position'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">170&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">2&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'font'</span><span style="color: #007700">][</span><span style="color: #DD0000">'width'</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; else&nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'procent_length'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'procent_position'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">170&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'font'</span><span style="color: #007700">][</span><span style="color: #DD0000">'width'</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; else &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'procent_position'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">170</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">else</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'procent_position'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">170</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Obliczanie&nbsp;y1,&nbsp;y2</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'y'</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">20&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$h</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'y'</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">20&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'font'</span><span style="color: #007700">][</span><span style="color: #DD0000">'height'</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Nazwa&nbsp;projektu</span><span style="color: #0000BB"> &nbsp;imagestring</span><span style="color: #007700">(</span><span style="color: #0000BB">$img</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'font_size'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">5</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">20&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'black'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Postęp</span><span style="color: #0000BB"> &nbsp;imagestring</span><span style="color: #007700">(</span><span style="color: #0000BB">$img</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'font_size'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'procent_position'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">20&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">].</span><span style="color: #DD0000">'%'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'black'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Wybieranie&nbsp;koloru&nbsp;dla&nbsp;paska&nbsp;postępu</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">85</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'bar'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'dark_green'</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">else&nbsp;if(</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">70</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'bar'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'green'</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">else&nbsp;if(</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">40</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'bar'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'orange'</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">else&nbsp;if(</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">10</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'bar'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'red'</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">else</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'bar'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'dark_red'</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Pasek&nbsp;postępu</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; imagefilledrectangle</span><span style="color: #007700">(</span><span style="color: #0000BB">$img</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">201</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'y'</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">]&nbsp;+&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">201&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">floor</span><span style="color: #007700">(</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;*&nbsp;</span><span style="color: #0000BB">2.95</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'y'</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'bar'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Lewa&nbsp;kreska&nbsp;postępu</span><span style="color: #0000BB"> &nbsp;imagefilledrectangle</span><span style="color: #007700">(</span><span style="color: #0000BB">$img</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">200</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'y'</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">]&nbsp;+&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">200</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'y'</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'bar'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Prawa&nbsp;kreska&nbsp;postępu</span><span style="color: #0000BB"> &nbsp;imagefilledrectangle</span><span style="color: #007700">(</span><span style="color: #0000BB">$img</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">495</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'y'</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">]&nbsp;+&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">496</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'y'</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'bar'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Napisy&nbsp;na&nbsp;progress&nbsp;barze</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'inscriptions_on_the_bar'</span><span style="color: #007700">]&nbsp;===&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; if</span><span style="color: #007700">(</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">100</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'inscription'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$lang</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'been_completed'</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; else&nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">95</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'inscription'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$lang</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'its_almost_done'</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; else &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'inscription'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp; imagestring</span><span style="color: #007700">(</span><span style="color: #0000BB">$img</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">210</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'y'</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">]&nbsp;+&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'inscription'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'black'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #007700">}}else{</span><span style="color: #0000BB"> $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'font'</span><span style="color: #007700">][</span><span style="color: #DD0000">'width'</span><span style="color: #007700">]&nbsp;*=&nbsp;</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$lang</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'we_currently_do_not_work_on_any_project'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'position'</span><span style="color: #007700">][</span><span style="color: #DD0000">'center'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">ceil</span><span style="color: #007700">((</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'width'</span><span style="color: #007700">]&nbsp;-&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'font'</span><span style="color: #007700">][</span><span style="color: #DD0000">'width'</span><span style="color: #007700">])&nbsp;/&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">);</span><span style="color: #0000BB"> $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'position'</span><span style="color: #007700">][</span><span style="color: #DD0000">'middle'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">ceil</span><span style="color: #007700">((</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'height'</span><span style="color: #007700">]&nbsp;-&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'font'</span><span style="color: #007700">][</span><span style="color: #DD0000">'height'</span><span style="color: #007700">])&nbsp;/&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">)&nbsp;-&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Tworzenie&nbsp;wyśrodkowanego&nbsp;napisu&nbsp;mówiącego&nbsp;o&nbsp;braku&nbsp;projektów</span><span style="color: #0000BB"> imagestring</span><span style="color: #007700">(</span><span style="color: #0000BB">$img</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$config</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'font_size'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'position'</span><span style="color: #007700">][</span><span style="color: #DD0000">'center'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'position'</span><span style="color: #007700">][</span><span style="color: #DD0000">'middle'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$lang</span><span style="color: #007700">[</span><span style="color: #DD0000">'progress_bar'</span><span style="color: #007700">][</span><span style="color: #DD0000">'we_currently_do_not_work_on_any_project'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">][</span><span style="color: #DD0000">'black'</span><span style="color: #007700">]);}</span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">'Content-type:&nbsp;image/png'</span><span style="color: #007700">);</span><span style="color: #FF8000">#&nbsp;header('Expires:&nbsp;Mon,&nbsp;26&nbsp;Jul&nbsp;1997&nbsp;0500&nbsp;GMT');#&nbsp;header('Last-Modified:&nbsp;'.gmdate('D,&nbsp;d&nbsp;M&nbsp;Y&nbsp;H:i:s').'&nbsp;GMT');#&nbsp;header('Cache-Control:&nbsp;no-store,&nbsp;no-cache,&nbsp;must-revalidate');#&nbsp;header('Cache-Control:&nbsp;post-check=0,&nbsp;pre-check=0',&nbsp;false);#&nbsp;header('Pragma:&nbsp;no-cache');</span><span style="color: #0000BB">imagepng</span><span style="color: #007700">(</span><span style="color: #0000BB">$img</span><span style="color: #007700">);</span><span style="color: #0000BB">imagedestroy</span><span style="color: #007700">(</span><span style="color: #0000BB">$img</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
I zapomniany <b>data.php</b>
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">#--------------------------------------------+#&nbsp;Authors:&nbsp;CapaciousCore&nbsp;&amp;&nbsp;jsmp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|#&nbsp;Website:&nbsp;www.CapaciousCore.pl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;www.jsmp.republika.pl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; All&nbsp;rights&nbsp;reserved!&nbsp;|#--------------------------------------------+</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">[]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'Projekt&nbsp;1'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">30</span><span style="color: #007700">);</span><span style="color: #0000BB">$progress_bar</span><span style="color: #007700">[]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'Projekt&nbsp;2'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">60</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>]]></description></item><item><title>Dlaczego motocykl jest lepszy od kobiety</title><pubdate>Thu, 04 Feb 2010 1:46:58 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/dlaczego-motocykl-jest-lepszy-od-kobiety/</link><comments>http://www.capaciouscore.pl/artykuly/dlaczego-motocykl-jest-lepszy-od-kobiety/#komentarze</comments><description><![CDATA[Oto kilka powodów dla których motocykl jest lepszy od kobiety <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />
<ol class="list list_1">
<li> Na motocyklu można bez obaw spalić gumę</li>
<li> Aby pojeździć na motocyklu nie trzeba ściągać ubrania</li>
<li> Motocykl nie ma teściowej</li>
<li> Motocykl nie da Ci w pysk jak włożysz rękę pod owiewkę</li>
<li> Motocykl nie straszy że jest w ciąży</li>
<li> Motocykl jest zawsze gotowy żeby sobie na nim pojeździć</li>
<li> Motocykl nie liczy ile piw już wypiłeś</li>
<li> Możesz trzymać kilka motocykli w jednym garażu i mieć pewność że się nie pobiją</li>
<li> Motocykl nie mówi że go boli głowa jak chcesz na nim pojeździć</li>
<li> Motocykl nie ogląda się za chłopakami</li>
<li> Motocykl nie potrzebuje długiej gry wstępnej przed przejażdżką</li>
<li> Motocykl nie panikuje kiedy pęknie guma</li>
<li> Motocykl nie potrzebuje złotych pierścieni i łańcucha</li>
<li> Motocykl można sprzedać za pieniądze</li>
<li> Motocykl dobrze wygląda nawet po długiej trasie</li>
<li> Motocykl dobrze wygląda nawet jak jest obklejony muchami</li>
<li> Motocykl nie zatrzymuje się przy każdej wystawie</li>
<li> Motocykl niezależnie od jego wieku wzbudza pożądanie</li>
<li> Motocykl nigdy Ci nie powie że nie ma co na siebie włożyć</li>
<li> Motocykl pije benzynę i się nie krzywi</li>
<li> Motocykl nie mówi że na stacji benzynowej śmierdzi</li>
<li> Motocykl nie jest zazdrosny że masz drugi motocykl</li>
<li> Motocykle oprócz białego, czarnego, żółtego i czerwonego występują także w innych kolorach</li>
<li> Motocykl nie zajmuje miejsca w namiocie</li>
<li> Możesz dać się przejechać kumplowi motocyklem, a motocykl się na Ciebie nie obrazi</li>
<li> Ty też możesz przejechać się na motocyklem kumpla</li>
<li> Motocykl nie przypomina Ci żebyś już wracał do domu</li>
<li> Do stacyjki motocyklu pasuje tylko Twój kluczyk</li>
<li> Motocykl lubi jeździć na zloty</li>
<li> Motocykl nie wyłącza Ci telewizora jak oglądasz Grand Prix</li>
<li> Na motocyklu można jechać we 2-ke</li>
<li> Motocykl jest rodzaju męskiego</li>
<li> Motocykl jest fotogeniczny i zawsze dobrze wychodzi na zdjęciach</li>
<li> Motocykl można kupić w sklepie</li>
<li> Gadanie motocykla jest zawsze przyjemne dla ucha</li>
<li> Motocykl nie boi się prędkości</li>
<li> Na motocyklu można sobie postawić piwo</li>
<li> Motocykl nie plotkuje o Tobie z innymi motocyklami</li>
<li> Nawet stary motocykl nie ma zmarszczek</li>
<li> Możesz mieć starszy motocykl od siebie i nikt się na Ciebie nie będzie krzywo patrzył</li>
<li> Motocykl lubi jak go napastujesz</li>
<li> Motocykl nie ma co miesiąc wycieków</li>
<li> Na motocykl nie żałujesz pieniędzy</li>
<li> Motocykl możesz przerabiać wg swoich upodobań</li>
<li> Nie ma głupich kawałów na temat &quot;Przychodzi motocykl do lekarza&quot;</li>
<li> Motocykl z wiekiem nie siwieje</li>
<li> Motocyklem możesz pojechać na piwo</li>
<li> Motocykl Cię nie zostawi nawet jak zobaczy Cię na innym motocyklu</li>
<li> Motocykl możesz dotykać gdzie tylko zechcesz i kiedy zechcesz</li>
<li> Możesz mieć motocykl innej narodowości i nie być wytykany palcami</li>
<li> Motocykl lubi pochodzić na ssaniu</li>
<li> Mając zdjęcie motocykla w portfelu nie wstydzisz się go otwierać</li>
<li> Jadąc na motocyklu myślisz o jeździe na motocyklu</li>
<li> Motocykl nie pyta gdzie idziesz i o której wrócisz</li>
<li> Motocykl wygląda dobrze nawet po jeździe w deszczu</li>
<li> Motocykl nawet jak dużo pali to nie tyje</li>
</ol>]]></description></item><item><title>[PHP] NWW i NWD</title><pubdate>Thu, 04 Feb 2010 12:19:32 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/nww-i-nwd/</link><comments>http://www.capaciouscore.pl/artykuly/nww-i-nwd/#komentarze</comments><description><![CDATA[Chyba każdy z nas spotkał się z Najmniejszą Wspólną Wielokrotnością (NWW) oraz Największym Wspólnym Dzielnikiem (NWD). Poniżej znajduje się skrypt, który umożliwia wyliczenie obu tych liczb.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">least_common_multiple</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">/* &nbsp;*&nbsp;@Name_function:&nbsp;least_common_multiple &nbsp;*&nbsp;@Description:&nbsp;function&nbsp;returns&nbsp;least&nbsp;common&nbsp;multiple&nbsp;(NWW) &nbsp;*&nbsp;@Argument:&nbsp;$a&nbsp;(int) &nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$b&nbsp;(int) &nbsp;*&nbsp;@Return:&nbsp;(int)&nbsp;||&nbsp;(bool) &nbsp;*/</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">is_int</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;</span><span style="color: #0000BB">is_int</span><span style="color: #007700">(</span><span style="color: #0000BB">$b</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;</span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$ab&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">while(</span><span style="color: #0000BB">$b</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $c&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; $b&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">%&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; $a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$c</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">$ab&nbsp;</span><span style="color: #007700">/=&nbsp;</span><span style="color: #0000BB">$a</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}}function&nbsp;</span><span style="color: #0000BB">greatest_common_divisor</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">/* &nbsp;*&nbsp;@Name_function:&nbsp;greatest_common_divisor &nbsp;*&nbsp;@Description:&nbsp;function&nbsp;returns&nbsp;greatest&nbsp;common&nbsp;divisor&nbsp;(NWD) &nbsp;*&nbsp;@Argument:&nbsp;$a&nbsp;(int) &nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$b&nbsp;(int) &nbsp;*&nbsp;@Return:&nbsp;(int)&nbsp;||&nbsp;(bool) &nbsp;*/</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">is_int</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;</span><span style="color: #0000BB">is_int</span><span style="color: #007700">(</span><span style="color: #0000BB">$b</span><span style="color: #007700">))</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">while(</span><span style="color: #0000BB">$b&nbsp;</span><span style="color: #007700">!=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $c&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">%&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; $a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; $b&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$c</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">$a</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}}</span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">192</span><span style="color: #007700">;</span><span style="color: #0000BB">$b&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">348</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #DD0000">'$a&nbsp;=&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$a</span><span style="color: #007700">.</span><span style="color: #DD0000">',&nbsp;$b&nbsp;=&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$b</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #DD0000">'NWW&nbsp;=&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">least_common_multiple</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;Najmniejsza&nbsp;Wspólna&nbsp;Wielokrotność</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #DD0000">'NWD&nbsp;=&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">greatest_common_divisor</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;Największy&nbsp;Wspólny&nbsp;Dzielnik</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.is-int.php" target="_blank" class="postlink">http://php.net/manual/pl/function.is-int.php</a>]]></description></item><item><title>[PHP] Kapitalizacja odsetek</title><pubdate>Wed, 03 Feb 2010 6:04:58 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/kapitalizacja-odsetek/</link><comments>http://www.capaciouscore.pl/artykuly/kapitalizacja-odsetek/#komentarze</comments><description><![CDATA[Jakiś czas temu miałem za zadanie stworzyć w <a href="http://pl.wikipedia.org/wiki/OpenOffice.org_Calc" target="_blank" class="postlink">Calc</a>'u wzór na <a href="http://pl.wikipedia.org/wiki/Kapitalizacja_odsetek" target="_blank" class="postlink">kapitalizacje odsetek</a> przy określonych parametrach. Ponieważ nie lubię wszystkiego co ma związek z <a href="http://pl.wikipedia.org/wiki/Microsoft_Office" target="_blank" class="postlink">Office</a>'m dlatego też postanowiłem <i>problem</i> rozwiązać przy pomocy PHP ku uciesze nauczyciela.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">#&nbsp;Dane&nbsp;wejściowe</span><span style="color: #0000BB">$kapital&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$kapitalizacja&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">100000</span><span style="color: #007700">;</span><span style="color: #0000BB">$czas_kapitalizacji&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">2190</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;6&nbsp;lat&nbsp;w&nbsp;dniach&nbsp;pomijając&nbsp;lata&nbsp;przestępne</span><span style="color: #0000BB">$czestotliwosc_kapitalizacji&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">90</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;co&nbsp;ile&nbsp;ma&nbsp;następować&nbsp;kapitalizacja&nbsp;-&nbsp;w&nbsp;dniach</span><span style="color: #0000BB">$oprocentowanie_roczne&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">12</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;nazwa&nbsp;zmiennej&nbsp;mówi&nbsp;sama&nbsp;za&nbsp;siebie#&nbsp;Obliczenia</span><span style="color: #007700">if(</span><span style="color: #0000BB">$czestotliwosc_kapitalizacji&nbsp;</span><span style="color: #007700">&lt;=&nbsp;</span><span style="color: #0000BB">365</span><span style="color: #007700">){</span><span style="color: #0000BB"> $oprocentowanie_czesciowe&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$oprocentowanie_roczne&nbsp;</span><span style="color: #007700">/&nbsp;</span><span style="color: #0000BB">floor</span><span style="color: #007700">(</span><span style="color: #0000BB">365&nbsp;</span><span style="color: #007700">/&nbsp;</span><span style="color: #0000BB">$czestotliwosc_kapitalizacji</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;oprocentowanie&nbsp;dla&nbsp;określonego&nbsp;czasu&nbsp;co&nbsp;który&nbsp;ma&nbsp;się&nbsp;odbywać&nbsp;kapitalizacja</span><span style="color: #0000BB"> $ilosc_kapitalizacji&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">floor</span><span style="color: #007700">(</span><span style="color: #0000BB">$czas_kapitalizacji&nbsp;</span><span style="color: #007700">/&nbsp;</span><span style="color: #0000BB">$czestotliwosc_kapitalizacji</span><span style="color: #007700">);</span><span style="color: #0000BB"> for</span><span style="color: #007700">(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$ilosc_kapitalizacji</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$kapitalizacja&nbsp;</span><span style="color: #007700">+=&nbsp;</span><span style="color: #0000BB">$kapitalizacja&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">$oprocentowanie_czesciowe&nbsp;</span><span style="color: #007700">/&nbsp;</span><span style="color: #0000BB">100</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'$kapital&nbsp;=&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$kapital</span><span style="color: #007700">;</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'$kapitalizacja&nbsp;=&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">round</span><span style="color: #007700">(</span><span style="color: #0000BB">$kapitalizacja</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">);}else{</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'Częstotliwość&nbsp;kapitalizacji&nbsp;jest&nbsp;za&nbsp;rzadka'</span><span style="color: #007700">;}</span><span style="color: #0000BB">?&gt;</span> </span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.floor.php" target="_blank" class="postlink">http://php.net/manual/pl/function.floor.php</a>
<br />
<a href="http://php.net/manual/pl/function.round.php" target="_blank" class="postlink">http://php.net/manual/pl/function.round.php</a>]]></description></item><item><title>[PHP] Wszystkie możliwe kombinacje kolorów</title><pubdate>Wed, 03 Feb 2010 5:10:03 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/wszystkie-mozliwe-kombinacje-kolorow-w-systemie-szesnastkowym/</link><comments>http://www.capaciouscore.pl/artykuly/wszystkie-mozliwe-kombinacje-kolorow-w-systemie-szesnastkowym/#komentarze</comments><description><![CDATA[Jakiś czas temu na <a href="http://www.forumweb.pl" target="_blank" class="postlink">forumweb.pl</a> ktoś zapytał o skrypt umożliwiający wylosowanie koloru. Takowy wykonałem i udostępniłem w artykule pod tytułem <a href="http://www.capaciouscore.pl/artykuly/losowy-kolor-w-trzech-postaciach/" target="_blank" class="postlink">[PHP] Losowy kolor w trzech postaciach</a>. Jednakże nie to jest tematem dzisiejszego artykuły. Jakiś czas temu znajomy webmaster próbował wygenerować wszystkie możliwe kolory w zapisie szesnastkowym lecz mu się nie udało. Chcąc iść jego śladami postanowiłem zrobić skrypt, który wygeneruje listę wszystkich możliwych kolorów. Poniżej znajduje się kod, który stworzy plik <b>hex-colors.txt</b>, a następnie wrzuci do niego wszystkie 16 777 216 możliwych kombinacji. Po wygenerowaniu lista powinna zajmować około 127MB. Informuje, że skrypt może generować się dłuższą chwile dlatego też jeżeli zamierzacie go uruchomić to będziecie musieli zmodyfikować <b>php.ini</b> i ustawić zmiennej <tt>max_execution_time</tt> wartość <tt>0</tt>. Podczas pracy skryptu proszę na bieżąco sprawdzać wielkość pliku aby mieć pewność, że wszystko idzie zgodnie z planem.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$fp&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #DD0000">'hex-colors.txt'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'a'</span><span style="color: #007700">);</span><span style="color: #0000BB">$i&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">16777216</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;Ilość&nbsp;kolorów</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #007700">for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$i</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;na&nbsp;hex</span><span style="color: #0000BB"> $hex&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">dechex</span><span style="color: #007700">(</span><span style="color: #0000BB">$h</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;liczymy&nbsp;długość</span><span style="color: #0000BB"> $length&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$hex</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;uzupełniamy</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$length&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">6</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$hex&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">str_repeat</span><span style="color: #007700">(</span><span style="color: #DD0000">'0'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">6&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">$length</span><span style="color: #007700">).</span><span style="color: #0000BB">$hex</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;na&nbsp;duże&nbsp;litery</span><span style="color: #0000BB"> $hex&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">strtoupper</span><span style="color: #007700">(</span><span style="color: #0000BB">$hex</span><span style="color: #007700">).((</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;&lt;&nbsp;</span><span style="color: #0000BB">$i&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #DD0000">"\r\n"&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;zapisujemy</span><span style="color: #0000BB"> fwrite</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$hex</span><span style="color: #007700">);}</span><span style="color: #0000BB">fclose</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Poniżej znajdują się wygenerowane i skompresowane listy zawierające:
<br />
<ul class="list">
<li> <a href="http://www.capaciouscore.pl/download/other/hex-colors.rar" target="_blank" class="postlink">wszystkie kombinacje kolorów w hexie (16 777 216 możliwych kombinacji) - 167KB</a></li>
<li> <a href="http://www.capaciouscore.pl/download/other/hex-colors-short.rar" target="_blank" class="postlink">wszystkie kombinacje kolorów w hexie w formie skróconej (4 096 możliwych kombinacji) - 276B</a></li>
</ul>

<br />
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.dechex.php" target="_blank" class="postlink">http://php.net/manual/pl/function.dechex.php</a>
<br />
<a href="http://php.net/manual/pl/function.fclose.php" target="_blank" class="postlink">http://php.net/manual/pl/function.fclose.php</a>
<br />
<a href="http://php.net/manual/pl/function.fopen.php" target="_blank" class="postlink">http://php.net/manual/pl/function.fopen.php</a>
<br />
<a href="http://php.net/manual/pl/function.fwrite.php" target="_blank" class="postlink">http://php.net/manual/pl/function.fwrite.php</a>
<br />
<a href="http://php.net/manual/pl/function.str-repeat.php" target="_blank" class="postlink">http://php.net/manual/pl/function.str-repeat.php</a>
<br />
<a href="http://php.net/manual/pl/function.strlen.php" target="_blank" class="postlink">http://php.net/manual/pl/function.strlen.php</a>
<br />
<a href="http://php.net/manual/pl/function.strtoupper.php" target="_blank" class="postlink">http://php.net/manual/pl/function.strtoupper.php</a>]]></description></item><item><title>[PHP] Generator liczb losowych</title><pubdate>Mon, 01 Feb 2010 9:42:14 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/generator-liczb-losowych/</link><comments>http://www.capaciouscore.pl/artykuly/generator-liczb-losowych/#komentarze</comments><description><![CDATA[W poprzednich artykułach sugerowałem użycie generatora liczb losowych przy pomocy funkcji <tt>srand()</tt> jednakże po dłuższej analizie i przeczytaniu paru artykułów sugeruje ażeby osoby posiadające PHP w wersji &lt; 4.2.0 używały funkcji <tt>mt_rand()</tt>.]]></description></item><item><title>Zmiany na stronie</title><pubdate>Sun, 31 Jan 2010 10:06:39 +0100</pubdate><link>http://www.capaciouscore.pl/aktualnosci/zmiany-na-stronie/</link><comments>http://www.capaciouscore.pl/aktualnosci/zmiany-na-stronie/#komentarze</comments><description><![CDATA[Dziś przeprowadziłem gruntowną modyfikację strony. Poniżej znajduję się lista przeprowadzonych prac:
<ol class="list list_1">
<li> Zaimplementowanie mechanizmu <a href="http://www.capaciouscore.pl/examples/bbcode-z-phpbb2/index.php" target="_blank" class="postlink">BBCode z phpBB</a></li>
<li> Poprawienie szablonu</li>
<li> Optymalizacja strony</li>
</ol>
Dzięki temu zabiegowi będę mógł z łatwością przenosić treści pomiędzy rożnymi stronami.]]></description></item><item><title>Napisy w Real Alternative</title><pubdate>Sun, 03 Jan 2010 7:30:02 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/napisy-w-real-alternative/</link><comments>http://www.capaciouscore.pl/artykuly/napisy-w-real-alternative/#komentarze</comments><description><![CDATA[Gdy pojawia nam się taki komunikat
<br />
<img src="http://www.capaciouscore.pl/download/other/error-subtitles-real-alternative.png" alt="error-subtitles-real-alternative.png" />
<br />
przy próbie załadowania napisów wtedy musimy zajrzeć do <b>Options</b> w zakładce <b>Output</b>
<br />
<img src="http://www.capaciouscore.pl/download/other/real-alternative-options-output.png" alt="real-alternative-options-output.png" />
<br />
i ustawić wedle powyższego schematu. Teraz powinniśmy po restartowaniu programu móc korzystać z napisów.]]></description></item><item><title>Rezygnacja z administracji serwisu CS-Mrowisko i gry w CS'a</title><pubdate>Sun, 03 Jan 2010 12:25:19 +0100</pubdate><link>http://www.capaciouscore.pl/aktualnosci/rezygnacja-z-administracji-serwisu-cs-mrowisko-i-gry-w-counter-strike/</link><comments>http://www.capaciouscore.pl/aktualnosci/rezygnacja-z-administracji-serwisu-cs-mrowisko-i-gry-w-counter-strike/#komentarze</comments><description><![CDATA[Kilka dni temu podjąłem decyzję. Dzisiaj ją ogłaszam. Rezygnuję z bycia administratorem serwisu <a href="http://www.cs-mrowisko.pl/" target="_blank" class="postlink">CS-Mrowisko.pl</a>. To nie wszystko. Rezygnuje także z[cut]  gry w <a href="http://pl.wikipedia.org/wiki/Counter-Strike" target="_blank" class="postlink">Counter Strike</a>. Decyzja jest ostateczna i nieodwracalna. Było mi milo poznać fajnych ludzi lecz wszystko, co dobre kiedyś musi się skończyć. Pamięć po Was zostanie na zawsze.]]></description></item><item><title>Czity czyli to co drażni w Counter Strike</title><pubdate>Sat, 02 Jan 2010 11:21:13 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/czity-czyli-to-co-drazni-w-counter-strike/</link><comments>http://www.capaciouscore.pl/artykuly/czity-czyli-to-co-drazni-w-counter-strike/#komentarze</comments><description><![CDATA[Na wstępie powiem, że nie jest to artykuł instruujący jak używać czitów lecz opisujący ich działanie. Jeżeli szukasz hacków to odsyłam do <a href="http://www.google.pl/" target="_blank" class="postlink">google.pl</a>. W 99% natrafisz na zainfekowane partie towaru.
<br />
<h2>MultiHack</h2>
MultiHack jest to aplikacja łącząca kilka <i>oszustw</i> w jednym miejscu. Przykładem takich aplikacji jest chociażby ECC, BadBoy, Unreal-Rage Public czy też AbsoHack.
<br />
<h2>WallHack</h2>
WallHack (WH) jest świetnym typem cheat'u jeżeli chcemy zobaczyć kogoś przez ściany. Na nieszczęście oszustów bardzo łatwo go wykryć. Typowy nowicjusz używający WH gapi się przez ściany na przeciwnika czyniąc siebie bardzo szybkim celem do banicji. Gracz używający WallHack'a zazwyczaj jest zbyt pewny siebie i ma <i>info od boga</i> gdzie patrzyć i gdzie skanować przez ścianę. Wykrycie takich pacjentów przy pomocy ESP dla adminów to kwestia sekund.
<br />
<h2>ESP</h2>
Przydatne narzędzie w rękach administratorów lecz niepożądane w rękach cziterów. Działa podobnie jak WH. Dzięki niemu znamy np. odległość od przeciwnika, broń jakiej używa czy też stan jego życia.
<br />
<h2>MiniMapHack</h2>
Działanie ma podobne do WH i ESP. Różnica polega na tym, że widzimy wszystko na mini mapie w lewej górnej części ekranu.
<br />
<h2>AimBot albo aim</h2>
Do jego działania należy automatyczne celowanie na wroga. Zazwyczaj nacelowuję na hitboxy głowy lub korpusu. Cześć mało dopracowanych aim'ów łatwo wykryć, gdyż u delikwenta trzęsie się celownik jak przy ataku padaczki. Przy tych bardziej dopracowanych można zauważyć, że przy zabiciu jednej osoby celownik przeskakuje na następna niemal natychmiast.
<br />
<h2>NoSpread</h2>
Oszustwo polegające na tym, że po wystrzale pocisku leci on dokładnie w wycelowane miejsce. Czit łatwo wykryć gdy ktoś używa AWP. Jak powszechnie wiemy bez celownika naboje lecą zawsze w rożne miejsca. Przy użyciu tego czitu pociski będą lecieć dokładnie w to samo miejsce nie zważając na odległość.
<br />
<h2>NoRecoil</h2>
NoRecoil czyli brak rozrzutu. Przy używaniu tego <i>kodu</i> celownik nie szaleje nam podczas strzału.
<br />
<h2>SpeedHack albo KniveSpeed</h2>
Dzięki temu bajerowi możemy biegać lub strzelać o wiele szybciej. Nawet nowicjusz rozpozna ten cheat.
<br />
<h2>NoFlash lub NoSmoke</h2>
Cheat, który usuwa efekt flasha i smoga. Wykrywalny stosunkowo łatwo. Gość dostanie  <i>mleko</i> w twarz i pruje do Ciebie gdyby nigdy nic.
<br />
<h2>FullBright</h2>
Hax usuwający cienie z gry. Dzięki niemu cziter widzi wroga w najciemniejszych zakamarkach.
<br />
<h2>Lambert</h2>
Zabawny czit, który powoduje, że CT świeci się na niebiesko a TT na czerwono.
<br />
<h2>SpinHack</h2>
Działanie polega na kręceniu się wokół własnej osi z zawrotnymi prędkościami. Osoba używająca tego czitu nie widzi obracania się lecz obserwator tak. Zgaduje, że został wymyślny aby denerwować innych graczy. Innego zastosowania nie widzę.
<br />
<h2>Gdzie mogę znaleźć?</h2>
Wszystkie cheaty można znaleźć na google. Osoby piszące, że nie zawierają one żadnych <a href="http://pl.wikipedia.org/wiki/Keylogger" target="_blank" class="postlink">keyloggerów</a>, <a href="http://pl.wikipedia.org/wiki/Złośliwe_oprogramowanie" target="_blank" class="postlink">malware</a>, <a href="http://pl.wikipedia.org/wiki/Programy_szpiegujące" target="_blank" class="postlink">spyware</a> kłamią! Nikt za darmo nie rozdaję cheatow! Zawsze jest jakiś cel. Zazwyczaj jest on ukryty. W sumie nie musicie mi wierzyć. Ściągnijcie byle cheat a następnie przeskanujcie binarkę przy pomocy chociażby <a href="http://www.virustotal.com/" target="_blank" class="postlink">VirusTotal</a>. Pamiętajcie, że tylko lapsy używają haxów.]]></description></item><item><title>[PHP] Potęgowanie</title><pubdate>Thu, 31 Dec 2009 1:34:37 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/potegowanie/</link><comments>http://www.capaciouscore.pl/artykuly/potegowanie/#komentarze</comments><description><![CDATA[Przeglądając fora dyskusyjne często widzę potęgowanie w formie pętli. Zastanawiam się dlaczego ludzie tworzą dodatkowe linijki kodu skoro PHP posiada funkcje do potęgowania.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$p&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">;</span><span style="color: #0000BB">$w&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">10</span><span style="color: #007700">;</span><span style="color: #0000BB">$k&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">pow</span><span style="color: #007700">(</span><span style="color: #0000BB">$p</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$w</span><span style="color: #007700">);echo&nbsp;</span><span style="color: #0000BB">$k</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;1024</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.pow.php" target="_blank" class="postlink">http://php.net/manual/pl/function.pow.php</a>]]></description></item><item><title>[PHP] Silnia</title><pubdate>Thu, 31 Dec 2009 12:22:38 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/silnia/</link><comments>http://www.capaciouscore.pl/artykuly/silnia/#komentarze</comments><description><![CDATA[Poniżej prezentuję Wam metodę do obliczania silni w PHP.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$n&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">;function&nbsp;</span><span style="color: #0000BB">factorial</span><span style="color: #007700">(</span><span style="color: #0000BB">$n</span><span style="color: #007700">){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">/* &nbsp;*&nbsp;@Name_function:&nbsp;factorial &nbsp;*&nbsp;@Description:&nbsp;function&nbsp;calculating&nbsp;feature&nbsp;factorial &nbsp;*&nbsp;@Argument:&nbsp;$n&nbsp;(int) &nbsp;*&nbsp;@Return:&nbsp;(int) &nbsp;*/</span><span style="color: #0000BB"> $factorial&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;</span><span style="color: #0000BB"> for</span><span style="color: #007700">(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;=&nbsp;</span><span style="color: #0000BB">$n</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$factorial&nbsp;</span><span style="color: #007700">*=&nbsp;</span><span style="color: #0000BB">$h</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> return&nbsp;$factorial</span><span style="color: #007700">;}echo&nbsp;</span><span style="color: #DD0000">'silnia&nbsp;dla&nbsp;$n&nbsp;=&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$n</span><span style="color: #007700">.</span><span style="color: #DD0000">'&nbsp;wynosi&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">factorial</span><span style="color: #007700">(</span><span style="color: #0000BB">$n</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>]]></description></item><item><title>Przydatne komendy AMX na serwerze Counter Strike</title><pubdate>Wed, 30 Dec 2009 9:29:47 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/przydatne-komendy-amx-na-serwerze-counter-strike/</link><comments>http://www.capaciouscore.pl/artykuly/przydatne-komendy-amx-na-serwerze-counter-strike/#komentarze</comments><description><![CDATA[<ol class="list list_1">
<li> amxmodmenu</li>
<li> <a href="http://amxx.pl/amx-ip-t2382.html&amp;p=13828#entry13828" target="_blank" class="postlink">amx_ip</a></li>
<li> <a href="http://amxx.pl/Ultimate-ScreenShot-v12-t917.html" target="_blank" class="postlink">amx_ss</a></li>
<li> <a href="http://forums.alliedmods.net/showthread.php?t=13211" target="_blank" class="postlink">amx_exec</a> (zalecam gruntowną optymalizację)</li>
<li> <a href="http://amxx.pl/banconfig-rangeban-t2513.html" target="_blank" class="postlink">amx_banconfig</a> (zalecam modyfikację)</li>
</ol>]]></description></item><item><title>[PHP] Polska dokumentacja Smarty</title><pubdate>Tue, 29 Dec 2009 4:07:42 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/polska-dokumentacja-smarty/</link><comments>http://www.capaciouscore.pl/artykuly/polska-dokumentacja-smarty/#komentarze</comments><description><![CDATA[Jakiś czas temu wpadłem na pomysł spolszczenia dokumentacji <a href="http://pl.wikipedia.org/wiki/Smarty" target="_blank" class="postlink">Smarty</a> lecz szybko zrezygnowałem. Powodem tej decyzji było znalezienie w internecie przetłumaczonej już dokumentacji. Wyznając doktrynę:
<br />
<p class="quote">Cytat:</p><blockquote>Nigdy nie należy rozwiązywać problemu dwa razy.
<br />

<br />
Twórcze umysły są na tyle wartościowe, że nie powinny być marnotrawione na powtórne wynajdywanie koła (...)</blockquote>
nie będę dublował poczynań. Zastanawia mnie tylko dlaczego te tłumaczenie nie zostało wrzucone na oficjalna stronę projektu? Rzecz, o której mowa powyżej znajduje się pod adresem <a href="http://www.google.pl/search?q=Dokumentacja+Smarty+Artur+Kmera" target="_blank" class="postlink">Dokumentacja Smarty</a>.
<br />

<br />
<b>Więcej informacji na:</b>
<br />
<a href="http://pl.wikibooks.org/wiki/PHP/Smarty" target="_blank" class="postlink">http://pl.wikibooks.org/wiki/PHP/Smarty</a>
<br />
<a href="http://pl.wikipedia.org/wiki/Smarty" target="_blank" class="postlink">http://pl.wikipedia.org/wiki/Smarty</a>
<br />
<a href="http://www.smarty.net/" target="_blank" class="postlink">http://www.smarty.net/</a>]]></description></item><item><title>[PHP] Losowy kolor w trzech postaciach</title><pubdate>Mon, 28 Dec 2009 5:29:52 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/losowy-kolor-w-trzech-postaciach/</link><comments>http://www.capaciouscore.pl/artykuly/losowy-kolor-w-trzech-postaciach/#komentarze</comments><description><![CDATA[W wyniku potrzeb napisałem prostą funkcję do generowania losowego koloru. Wywołać ją możemy z jednym z trzech możliwych parametrów (<i>primary</i>, <i>short</i> lub <i>long</i>).
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'primary_color'</span><span style="color: #007700">]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'black'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'silver'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'gray'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'white'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'maroon'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'red'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'purple'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'fuchsia'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'green'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'lime'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'olive'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'yellow'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'navy'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'blue'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'teal'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'aqua'</span><span style="color: #007700">);function&nbsp;</span><span style="color: #0000BB">random_color</span><span style="color: #007700">(</span><span style="color: #0000BB">$type</span><span style="color: #007700">){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">/* &nbsp;*&nbsp;@Name_function:&nbsp;random_color &nbsp;*&nbsp;@Description:&nbsp;function&nbsp;returns&nbsp;a&nbsp;random&nbsp;color,&nbsp;depending&nbsp;on&nbsp;$type &nbsp;*&nbsp;@Argument:&nbsp;$type&nbsp;(string) &nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;primary&nbsp;-&gt;&nbsp;16&nbsp;combination &nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;short&nbsp;-&gt;&nbsp;4&nbsp;096&nbsp;combination &nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;long&nbsp;-&gt;&nbsp;16&nbsp;777&nbsp;216&nbsp;combination &nbsp;*&nbsp;@Return:&nbsp;(string) &nbsp;*/</span><span style="color: #0000BB"> global&nbsp;$cfg</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Jeżeli&nbsp;wersja&nbsp;PHP&nbsp;&lt;&nbsp;4.2.0&nbsp;wtedy&nbsp;zachodzi&nbsp;potrzeba&nbsp;użycia&nbsp;generator&nbsp;liczb&nbsp;losowych</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;srand(floor(time()&nbsp;/&nbsp;(60*60*24)));</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$type&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #DD0000">'primary'</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'primary_color'</span><span style="color: #007700">][</span><span style="color: #0000BB">array_rand</span><span style="color: #007700">(</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'primary_color'</span><span style="color: #007700">])];</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else&nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$type&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #DD0000">'short'&nbsp;</span><span style="color: #007700">||&nbsp;</span><span style="color: #0000BB">$type&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #DD0000">'long'</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'#'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">]&nbsp;=&nbsp;(</span><span style="color: #0000BB">$type&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #DD0000">'short'&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #0000BB">3&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">6</span><span style="color: #007700">);&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">];&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">]&nbsp;.=&nbsp;</span><span style="color: #0000BB">dechex</span><span style="color: #007700">(</span><span style="color: #0000BB">rand</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">15</span><span style="color: #007700">));</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Zbędna&nbsp;kosmetyka&nbsp;dla&nbsp;fanatyków</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">strtoupper</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> return&nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">];}echo&nbsp;</span><span style="color: #0000BB">random_color</span><span style="color: #007700">(</span><span style="color: #DD0000">'primary'</span><span style="color: #007700">);echo&nbsp;</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #0000BB">random_color</span><span style="color: #007700">(</span><span style="color: #DD0000">'short'</span><span style="color: #007700">);echo&nbsp;</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #0000BB">random_color</span><span style="color: #007700">(</span><span style="color: #DD0000">'long'</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Poniżej znajduję się funkcja zmieniająca kod koloru zapisany szesnastkowo do numeru koloru zapisanego w RGB
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">hex_to_rgb</span><span style="color: #007700">(</span><span style="color: #0000BB">$r</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$g</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">/* &nbsp;*&nbsp;@Name_function:&nbsp;hex_to_rgb &nbsp;*&nbsp;@Description:&nbsp;function&nbsp;changes&nbsp;the&nbsp;hex&nbsp;color&nbsp;to&nbsp;rgb&nbsp;number&nbsp;color &nbsp;*&nbsp;@Argument:&nbsp;$hex&nbsp;(string) &nbsp;*&nbsp;@Return:&nbsp;(int) &nbsp;*&nbsp;@Other:&nbsp;General&nbsp;formula&nbsp;-&gt;&nbsp;R&nbsp;*&nbsp;256^2&nbsp;+&nbsp;G&nbsp;*&nbsp;256&nbsp;+&nbsp;B &nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; 256^2&nbsp;=&nbsp;pow(256,&nbsp;2)&nbsp;=&nbsp;65536 &nbsp;*/</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;@Info:&nbsp;to&nbsp;jest&nbsp;stara&nbsp;wersja&nbsp;gdzie&nbsp;przyjmowano,&nbsp;że&nbsp;kolor&nbsp;jest&nbsp;zawsze&nbsp;w&nbsp;postaci&nbsp;długiej&nbsp;oraz&nbsp;funkcja&nbsp;przyjmuję&nbsp;tylko&nbsp;jeden&nbsp;parametr&nbsp;($hex)</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;return&nbsp;hexdec(substr($hex,&nbsp;1,&nbsp;2))&nbsp;*&nbsp;pow(256,&nbsp;2)&nbsp;+&nbsp;hexdec(substr($hex,&nbsp;3,&nbsp;2))&nbsp;*&nbsp;256&nbsp;+&nbsp;hexdec(substr($hex,&nbsp;5,&nbsp;2));</span><span style="color: #0000BB"> return&nbsp;$r&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">65536&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">$g&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">256&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">$b</span><span style="color: #007700">;}</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'#FFF'</span><span style="color: #007700">;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'lenght'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">]);for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">){</span><span style="color: #0000BB"> $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">][</span><span style="color: #0000BB">$h</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">substr</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">],&nbsp;(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'lenght'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">7&nbsp;</span><span style="color: #007700">?&nbsp;(</span><span style="color: #0000BB">1&nbsp;</span><span style="color: #007700">+&nbsp;(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">))&nbsp;:&nbsp;(</span><span style="color: #0000BB">1&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">$h</span><span style="color: #007700">)),&nbsp;(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'lenght'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">7&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #0000BB">2&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">));</span><span style="color: #0000BB"> $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">][</span><span style="color: #0000BB">$h</span><span style="color: #007700">]&nbsp;=&nbsp;(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'lenght'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">7&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">][</span><span style="color: #0000BB">$h</span><span style="color: #007700">]&nbsp;:&nbsp;</span><span style="color: #0000BB">str_repeat</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">][</span><span style="color: #0000BB">$h</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">));}</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'r'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">][</span><span style="color: #0000BB">0</span><span style="color: #007700">];</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'g'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">];</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'b'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">][</span><span style="color: #0000BB">2</span><span style="color: #007700">];</span><span style="color: #FF8000">//&nbsp;Porządki</span><span style="color: #007700">unset(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'lenght'</span><span style="color: #007700">]);echo&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'color'</span><span style="color: #007700">].</span><span style="color: #DD0000">'&nbsp;=&nbsp;(rgb)'</span><span style="color: #007700">.</span><span style="color: #0000BB">hex_to_rgb</span><span style="color: #007700">(</span><span style="color: #0000BB">hexdec</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'r'</span><span style="color: #007700">]),&nbsp;</span><span style="color: #0000BB">hexdec</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'g'</span><span style="color: #007700">]),&nbsp;</span><span style="color: #0000BB">hexdec</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'b'</span><span style="color: #007700">]));</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Poniżej znajduję się jedna z możliwych metod zmiany krótkiego zapisu koloru w systemie szesnastkowych na postać długą.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">short_hex_to_long_hex</span><span style="color: #007700">(</span><span style="color: #0000BB">$hex</span><span style="color: #007700">){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">/* &nbsp;*&nbsp;@Name_function:&nbsp;short_hex_to_long_hex &nbsp;*&nbsp;@Description:&nbsp;function&nbsp;returns&nbsp;converted&nbsp;long&nbsp;hex&nbsp;color&nbsp;from&nbsp;short&nbsp;hex &nbsp;*&nbsp;@Argument:&nbsp;$hex&nbsp;(string) &nbsp;*&nbsp;@Return:&nbsp;(string) &nbsp;*/</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">strlen</span><span style="color: #007700">(</span><span style="color: #0000BB">$hex</span><span style="color: #007700">)&nbsp;==&nbsp;</span><span style="color: #0000BB">4</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">str_split</span><span style="color: #007700">(</span><span style="color: #0000BB">$hex</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">][</span><span style="color: #0000BB">5</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">][</span><span style="color: #0000BB">6</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">][</span><span style="color: #0000BB">3</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">][</span><span style="color: #0000BB">3</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">][</span><span style="color: #0000BB">4</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">][</span><span style="color: #0000BB">2</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">][</span><span style="color: #0000BB">2</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">][</span><span style="color: #0000BB">1</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp;sort</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">implode</span><span style="color: #007700">(</span><span style="color: #DD0000">''</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> return&nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">];}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Poniżej znajduję się funkcja, która powie nam czy kolor napisu na wylosowanym kolorze ma być biały czy czarny.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">whether_font_color_is_white_or_black</span><span style="color: #007700">(</span><span style="color: #0000BB">$rgb</span><span style="color: #007700">){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">/* &nbsp;*&nbsp;@Name_function:&nbsp;whether_font_color_is_white_or_black &nbsp;*&nbsp;@Description:&nbsp;function&nbsp;says&nbsp;that&nbsp;the&nbsp;font&nbsp;color&nbsp;is&nbsp;white&nbsp;or&nbsp;black &nbsp;*&nbsp;@Argument:&nbsp;$rgb&nbsp;(int) &nbsp;*&nbsp;@Return:&nbsp;(string) &nbsp;*/</span><span style="color: #0000BB"> return&nbsp;</span><span style="color: #007700">(((</span><span style="color: #0000BB">$rgb&nbsp;</span><span style="color: #007700">&gt;&gt;&nbsp;</span><span style="color: #0000BB">16</span><span style="color: #007700">)&nbsp;+&nbsp;(</span><span style="color: #0000BB">$rgb&nbsp;</span><span style="color: #007700">&gt;&gt;&nbsp;</span><span style="color: #0000BB">8&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">0xff</span><span style="color: #007700">)&nbsp;+&nbsp;(</span><span style="color: #0000BB">$rgb&nbsp;</span><span style="color: #007700">&amp;&nbsp;</span><span style="color: #0000BB">0xff</span><span style="color: #007700">))&nbsp;/&nbsp;</span><span style="color: #0000BB">3&nbsp;</span><span style="color: #007700">&lt;=&nbsp;</span><span style="color: #0000BB">0x7f&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #DD0000">'#FFF'&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">'#000'</span><span style="color: #007700">);}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Przy tworzeniu dema musiałem nieco zmodyfikowac tablice <tt>$cfg['primary_color']</tt> i losowanie z niej. Wyglada ona nastepujaca:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'primary_color'</span><span style="color: #007700">]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'black'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'000'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'silver'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'C0C0C0'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'gray'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'808080'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'white'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'FFF'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'maroon'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'800000'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'red'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'F00'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'purple'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'800080'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'fuchsia'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'F0F'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'green'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'008000'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'lime'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'0F0'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'olive'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'808000'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'yellow'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'FF0'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'navy'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'000080'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'blue'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'00F'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'teal'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'008080'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'aqua'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'0FF'</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
W funkcji <tt>random_color()</tt> uległ zmiane ten kawalek kodu:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">random_color</span><span style="color: #007700">(</span><span style="color: #0000BB">$type</span><span style="color: #007700">){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;ciach</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$type&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #DD0000">'primary'</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'output'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">array_rand</span><span style="color: #007700">(</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'primary_color'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;ciach</span><span style="color: #007700">}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<h2>Demo</h2>
Demo wykorzystania powyższych rozwiązań znajduje się pod adresem <a href="http://www.capaciouscore.pl/examples/losowy-kolor-w-php/index.php" target="_blank" class="postlink">Losowy kolor w PHP</a>.
<br />

<br />
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.array-rand.php" target="_blank" class="postlink">http://php.net/manual/pl/function.array-rand.php</a>
<br />
<a href="http://php.net/manual/pl/function.implode.php" target="_blank" class="postlink">http://php.net/manual/pl/function.implode.php</a>
<br />
<a href="http://php.net/manual/pl/function.dechex.php" target="_blank" class="postlink">http://php.net/manual/pl/function.dechex.php</a>
<br />
<a href="http://php.net/manual/pl/function.hexdec.php" target="_blank" class="postlink">http://php.net/manual/pl/function.hexdec.php</a>
<br />
<a href="http://php.net/manual/pl/function.sort.php" target="_blank" class="postlink">http://php.net/manual/pl/function.sort.php</a>
<br />
<a href="http://php.net/manual/pl/function.str-repeat.php" target="_blank" class="postlink">http://php.net/manual/pl/function.str-repeat.php</a>
<br />
<a href="http://php.net/manual/pl/function.str-split.php" target="_blank" class="postlink">http://php.net/manual/pl/function.str-split.php</a>
<br />
<a href="http://php.net/manual/pl/function.strlen.php" target="_blank" class="postlink">http://php.net/manual/pl/function.strlen.php</a>
<br />
<a href="http://php.net/manual/pl/function.strtoupper.php" target="_blank" class="postlink">http://php.net/manual/pl/function.strtoupper.php</a>
<br />
<a href="http://php.net/manual/pl/function.substr.php" target="_blank" class="postlink">http://php.net/manual/pl/function.substr.php</a>]]></description></item><item><title>Wesołych Świat i Szczęśliwego Nowego Roku 2010</title><pubdate>Thu, 10 Dec 2009 7:27:59 +0100</pubdate><link>http://www.capaciouscore.pl/aktualnosci/wesolych-swiat-i-szczesliwego-nowego-roku-2010/</link><comments>http://www.capaciouscore.pl/aktualnosci/wesolych-swiat-i-szczesliwego-nowego-roku-2010/#komentarze</comments><description><![CDATA[Postanowiłem wyprzedzić nieco innych i napisać pierwszy. Bo świat należy do odważnych! Wesołej choinki. Aby Wam mania świątecznych zakupów nie uderzyła do główki. Życzę Wam abyście milo spędzili czas z bliskimi i rodzina, aby było mniej kłótni, <b>aby życzenia były szczere</b>, aby[cut] mniej spamu wysłano na te święta, aby ten czas nie został zmarnowany, aby elfy przyniosły stos prezentów w worach, aby chochliki same bez motywujących batów posprzątały dom, aby biały puch dopisał, aby można było wybrać się na sanki ze znajomymi (tak wiem mam 20 lat ale pomarzyć zawsze można) <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> , aby horda bałwanów zaatakowała Wasze podwórka, aby batalie kuchenne z karpiem były fikuśne, aby nie zabrakło miejsca przy wigilijnym stole, aby choinka nie spłonęła od sylwestrowej zabawy i abyście nie spalili włosów kolegów i koleżanek będąc podszampanionym mięskiem i abyście nie robili za moździerz do pocisków (trzymanie dwu kilogramowych petard ziemia-powietrze w łapie). Przede wszystkim abyście zdrowo przetrzymali ten okres i byli mili cały rok, a nie tak jak dotychczas, że tylko na święta <i>ot takie postanowienie noworoczne</i>.
<br />
<img src="http://www.capaciouscore.pl/download/other/xmas-tree.png" alt="xmas-tree.png" />
<br />

<br />
<b>Post scriptum</b>
<br />
To nie mój dom <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> ale <i>podobny</i> do Agi.
<br />
<b>Zródło:</b>
<br />
Obrazek (XMAS Tree 2008 03.JPG) pochodzi z galerii użytkownika <b>Piotrus</b> z <a href="http://commons.wikimedia.org/wiki/" target="_blank" class="postlink">commons.wikimedia.org</a>.]]></description></item><item><title>[PHP] LangSwitch czyli wielojęzyczne strony + Smarty</title><pubdate>Wed, 09 Dec 2009 11:42:42 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/langswitch-czyli-wielojezyczne-strony-z-zaimplementowanym-smarty/</link><comments>http://www.capaciouscore.pl/artykuly/langswitch-czyli-wielojezyczne-strony-z-zaimplementowanym-smarty/#komentarze</comments><description><![CDATA[Po krótkiej analizie i paru minutach namysłu zdecydowałem się stworzyć alternatywną wersję skryptu do <a href="http://www.forumweb.pl/viewtopic.php?t=47638" target="_blank" class="postlink">LangSwitch</a> by <a href="http://jsmp.republika.pl/" target="_blank" class="postlink">jsmp</a>. Powyższe rozwiązanie pokazuję jak stworzyć prostą stronę w kilku językach. Bazując na podpowiedziach z forum pozwoliłem sobie dodać do mojego LangSwitch'a możliwość utrzymywania aktualnego języka w sesji oraz zaimplementowałem bibliotekę szablonów <a href="http://pl.wikipedia.org/wiki/Smarty" target="_blank" class="postlink">Smarty</a>.
<br />
<h2>Wymagania</h2>
Do poprawnego działania skryptu wymagane jest <tt>register_globals</tt> ustawione na wartość <tt>off</tt> oraz <a href="http://pl.wikipedia.org/wiki/Chmod" target="_blank" class="postlink">chmod</a> <b>777</b> dla folderu <tt>templates_c</tt>.
<br />
<h2>Charakterystyka i opis działania skryptu</h2>
Zacznę od rozłożenia pliku <tt>config.php</tt> na części pierwsze. W tablicy <tt>$cfg['dir']</tt> definiujemy katalogi. Następnie znajdują się dwie stałe, których nie ruszamy. Kolejną zmienną jaka napotkamy na swojej drodze będzie <tt>$cfg['system']['default_lang']</tt>, która będzie ustalać docelowy język gdy użytkownik wejdzie pierwszy raz na stronę bez zdefiniowanego języka w adresie bądź nie będzie posiadał ciastka z użytym przez niego wcześniej językiem. Następną zmienną na liście jest <tt>$cfg['system']['enforce_lang']</tt>. Jeżeli wartość jej wynosi <tt>true</tt> oznacza to, że wymuszamy język docelowy. Przy jakiejkolwiek próbie zmiany języka odniesiemy porażkę. Kolejnym elementem tablicy $cfg jest <tt>$cfg['system']['load_lang_array']</tt>. To w niej znajdują się wytyczne jakie pliki językowe maja zostać załadowane. W przypadku pobytu np. w panelu administratora łatwo będzie dodać kolejny plik językowy do załadowania. Zawartość tablicy <tt>$cfg['system']['available_langs']</tt> mówi nam jakie mamy dostępne języki. Wiedza ta jest opierana na wylistowaniu folderu <tt>lang</tt>. Chcę poinformować, że tłumaczenia oparłem na <a href="http://www.translate.google.pl/" target="_blank" class="postlink">translate.google</a> dlatego też może zawierać błędy. Pamiętaj, że <u>jest to tylko przykład</u>! Istotą rzeczy jest zademonstrowanie i nic poza tym. W momencie kiedy Wy będziecie budować stronę wielojęzyczna powinniście oprzeć się na prawidłowym, profesjonalnym tłumaczeniu. W <tt>index.php</tt> znajduje się operator trójkowy, który decyduję o wyborze prawidłowego  <a href="http://pl.wikipedia.org/wiki/Kod_znaku" target="_blank" class="postlink">charset</a>  (<a href="http://en.wikipedia.org/wiki/Character_encoding" target="_blank" class="postlink">angielska obszerniejsza wersja opisu charset</a>). Można go <i>usunąć</i> gdy za podstawę kodowania użyjemy np. <a href="http://pl.wikipedia.org/wiki/UTF-8" target="_blank" class="postlink">UTF-8</a>. Gdy tak się stanie musimy pamiętać, ażeby zapisywać pliki językowe w wybranym przez nas kodowaniu. Naturalnie nasz <u>edytor musi wspierać użyte przez nas kodowanie</u>. Chciałbym zwrócić uwagę na prawidłową metodę budowy tablicy <tt>$lang</tt>. Najlepszym rozwiązaniem będzie nadawanie kluczy słownych w języku angielskim. Ułatwi to przyszłe tłumaczenia. Odradzam używanie kluczy liczbowych czyli <tt>$lang['main'][0]</tt> gdyż w momencie dużego rozrostu możemy strącić kontrole nad zawartością. Mam tutaj na myśli np. powtarzanie się wartości. Ta metoda jest bardzo niewygodna ze względu na to, że za każdym razem musimy sprawdzać co dana tablica ma w swojej wartości. Chce wskazać, że tablica <tt>$lang</tt> została podzielona na segmenty tj. main, menu, struct, title, header, etc. Powyższy zabieg ułatwi utrzymanie jej w przyzwoitym stanie. Pamiętajmy także o uaktualnianiu wszystkich plików językowych gdy dokonujemy zmian.
<br />
<h2>Zasada tworzenia nowych podstron</h2>
W pliku <tt>lang_struct.php</tt> w danym języku mamy tablice <tt>$lang['struct']</tt>, która odpowiada za includowanie podstron. Jeżeli chcemy aby po wywołaniu strony z parametrem index.php?<tt>page=informacje</tt> załadował się plik <tt>informations.php</tt> z katalogu <tt>webs</tt> wtedy tworzymy taki wpis:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php&nbsp;$lang</span><span style="color: #007700">[</span><span style="color: #DD0000">'struct'</span><span style="color: #007700">][</span><span style="color: #DD0000">'informations'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'informacje'</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Naturalnie mechanizm ten można zmienić wedle upodobań.
<br />
<h2>Kosmetyka</h2>
Skrypt nie został poddany kosmetyce. Mam tutaj na myśli np. brak instrukcji warunkowej, która to by usuwała aktualnie używany język z menu wyboru jeżyków. Powyższy zabieg jest rzadko stosowany co nie wyklucza, że nie można go zastosować. Dodatkowo przy niewielkim nakładzie pracy można zmodyfikować skrypt tak ażeby przy zmianie języka automatycznie przenosiło nas na podstrone, która oglądaliśmy w innym języku.
<br />
<h2>Demo</h2>
Demo znajduję się pod tym adresem <a href="http://www.capaciouscore.pl/examples/langswitch-czyli-wielojezyczne-strony/index.php" target="_blank" class="postlink">LangSwitch czyli wielojęzyczne strony</a>. Gotowy przykład do ściągnięcia znajduje się w dziale <a href="http://www.capaciouscore.pl/skrypty/" target="_blank" class="postlink">skrypty</a> pod adresem <a href="http://www.capaciouscore.pl/skrypty/langswitch-czyli-wielojezyczne-strony/" target="_blank" class="postlink">LangSwitch czyli wielojęzyczne strony</a>.]]></description></item><item><title>Martyna - Początki</title><pubdate>Thu, 26 Nov 2009 7:08:28 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/martyna-poczatki/</link><comments>http://www.capaciouscore.pl/artykuly/martyna-poczatki/#komentarze</comments><description><![CDATA[Jakiś miesiąc temu przez przypadek poznałem <i>panią</i> Martynę, przyszłą feministkę <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Nie było by w tym nic dziwnego gdyby nie fakt, że dziewczyna mieszka w moim najbliższym sąsiedztwie od dobrych paru lat, a ja ani razu nie zwróciłem na nią uwagi. Cóż za swoisty paradoks. Tak, wiem, moja wina ale mam nadzieję, iż nadrobimy zaległości.
<br />

<br />
Zaczęło się dość niewinnie. Zapowiadał się kolejny zwykły szary dzień u klienta lecz jak się potem okazało nie był nim. Po spędzeniu dobrych paru chwil zaczęliśmy prowadzić konwersacje <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Szybko znaleźliśmy wspólny język. Okazało się, że dziewczyna jest niczego sobie. Istota ta jest bardzo rozgadana, miła, piękna, mająca własne zdanie <i>mała złośnica</i> <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> uważająca, że wszystko albo prawie wszystko jest winą mężczyzn. A dlaczego nie? Niech i będzie! Właśnie dlatego na wstępie wspomniałem, że będzie feministka ;) Wszystkie symptomy pasują. Tak jak ja, osobnik ten nie lubi ciszy i spokoju. Wydaje się być istną dusza towarzystwa <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Naturalnie musimy tutaj wspomnieć o jej pasji i zainteresowaniach. Prawda Martyna? W sekrecie powiem Wam, iż interesuje się końmi. Od lat kilku jak mi <i>wyznała</i> zajmuje się tym i przyznam szczerzę, że uraczył mnie jej widok na koniu w Natalinie. Połączenie harmonii i spokoju jak ją zobaczyłem. Długo będę wspominał ten widok mimo iż była pełna oporów żeby mnie tam zabrać <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Mam cicha nadzieję, że wkrótce będzie następny raz.]]></description></item><item><title>Instalacja pluginów AMX na serwerze Counter Strike</title><pubdate>Wed, 25 Nov 2009 4:37:28 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/instalowanie-pluginow-amx-na-serwerze-counter-strike/</link><comments>http://www.capaciouscore.pl/artykuly/instalowanie-pluginow-amx-na-serwerze-counter-strike/#komentarze</comments><description><![CDATA[Instalowanie pluginów AMX na serwerze Counter Strike jest stosunkowo proste. Moim zdaniem nawet dziecko sobie poradzi z tym. Po pierwsze wybrany przez nas plugin wgrywamy do katalogu <b>/cstrike/addons/amxmodx/plugins/</b>. Drugim krokiem jest dodanie nazwy pliku do <b>plugins.ini</b>, który to znajduję się w <b>/cstrike/addons/amxmodx/configs/</b>. Jeżeli przed nazwa pluginu znajduje się średnik oznacza to iż jest wyłączony. W celu wlaczenia wystarczy usunać sprzed konkretnej pozycji. Pamiętajmy, że <u>wielkość liter w nazwie wpisu ma znaczenie</u>. Czasami zdarza się, że potrzebujemy dodać tzw. Cvary. W tym celu wklejamy je do konfiguracji serwera, którą znajdziemy tutaj <b>/cstrike/server.cfg</b>. W przypadku gdy plugin wymaga dodatkowych plików wymaganych do prawidłowego działania to jesteśmy zmuszeni wgrać je na serwer. Gdy cały proces przebiegł pomyślnie przeprowadzamy restart serwera i sprawdzamy czy nastąpiły zmiany. Pamiętajmy aby czytać instrukcje dołączone do pluginów. Jeżeli poszukujecie jakiegoś pluginu to polecam ów fora: <a href="http://www.amxx.pl/" target="_blank" class="postlink">AMXX.pl</a> i <a href="http://forums.alliedmods.net/" target="_blank" class="postlink">AlliedModders</a>.]]></description></item><item><title>Gdzie ta Martyna?</title><pubdate>Sun, 22 Nov 2009 7:25:46 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/gdzie-ta-martyna/</link><comments>http://www.capaciouscore.pl/artykuly/gdzie-ta-martyna/#komentarze</comments><description><![CDATA[Jakiś czas temu poznałem Martynę. Fajna, niczego sobie dziewczyna jeżeli wiesz co mam na myśli. Tutaj wymieniłbym szereg jej cech, które mi się u niej spodobały lecz promocja jej osoby tutaj nie jest teraz moim głównym moim celem. Z <i>powodów technicznych</i> nie idzie się pouśmiechać do niej. Moje pytanie brzmi czy jeszcze kiedyś się spotkamy? <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Hm?
<br />

<br />
Tak , musiałem zapytać na stronie. Tak, bardzo mi się nudzi. Tak, brakuje mi  Twojej obecność.]]></description></item><item><title>Podróż w nieznane</title><pubdate>Sun, 22 Nov 2009 5:28:16 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/podroz-w-nieznane/</link><comments>http://www.capaciouscore.pl/artykuly/podroz-w-nieznane/#komentarze</comments><description><![CDATA[I uciec nie zdążyła. Jest obok mnie. Lecz myliłem się. Znowu. To ona poczyniła pierwszy krok. To ona złapała mnie za rękę. Przyglądając się jej bliżej niedowierzałem, że po Ziemi może stąpać aż tak piękna istota. Przez chwile zacząłem się zastanawiać czy to aby nie złudzenie. Zamknąłem oczy z myślą, że to tylko iluzja, głupi kaprys, który umysł mi zgotował. Staram się opanować potok myśli. Po chwili refleksji otwieram powieki. Ona nadal tu jest. To nie miraż był. Los się uśmiechną do mnie? Zauważam diametralną zmianę. Jest piękny zachód słońca, któremu towarzyszy miła bryza. Czy ona potrafi czarować? Na to pytanie nie potrafię sobie odpowiedzieć. Przyszedł czas na czyny. Po nawiązaniu kontaktu wzrokowego próbuje dowiedzieć się czegoś o nieznajomej. Moje pytania pozostają bez odpowiedzi. Wygląda na to, że ona bawi się ze mną w jakąś grę. Umysł otwarty mam. Nadziei wiele. Czas pokaże czy cierpliwość popłaca. W końcu dokonała pierwszego ruchu. Zaczęła niewinnym uśmiechem po chwili wypowiadając pierwsze słowa. Głos jej był niczym tknięcie ręki wirtuoza w struny harfy. Wygląda jakby znała mnie od zawsze. Niestety ja nie mogę powiedzieć tego samego. Los dzisiaj przekrętny jest.
<br />

<br />
c.d.n.]]></description></item><item><title>[Apache] Banowanie przy pomocy .htaccess</title><pubdate>Tue, 17 Nov 2009 5:37:50 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/banowanie-przy-pomocy-htaccess/</link><comments>http://www.capaciouscore.pl/artykuly/banowanie-przy-pomocy-htaccess/#komentarze</comments><description><![CDATA[Krótko i na temat. Przy pomocy <a href="http://pl.wikipedia.org/wiki/Htaccess" target="_blank" class="postlink">.htaccess</a> możemy w prosty sposób zbanować konkretne IP, pule bądź <i>hosta</i>.
<br />
<h2>Banowanie pojedynczego IP</h2>
<b>Kod:</b><pre class="code"><span style="color: #000000">order&nbsp;allow,&nbsp;denydeny&nbsp;from&nbsp;127.0.0.1allow&nbsp;from&nbsp;all</span></pre>
<h2>Blokada kilku IP</h2>
<b>Kod:</b><pre class="code"><span style="color: #000000">order&nbsp;allow,&nbsp;denydeny&nbsp;from&nbsp;192.168.0.2deny&nbsp;from&nbsp;192.168.0.3deny&nbsp;from&nbsp;192.168.0.4allow&nbsp;from&nbsp;all</span></pre>
<h2>Blokowanie puli (zakresu) IP</h2>
<b>Kod:</b><pre class="code"><span style="color: #000000">order&nbsp;allow,&nbsp;denydeny&nbsp;from&nbsp;192.168.0allow&nbsp;from&nbsp;all</span></pre>
Możemy także zastosować .* jeżeli jest nam wygodniej. Powyższy zapis zablokuje zakres od 192.168.0.0 do 192.168.0.255.
<br />
<h2>Banowanie neostrady</h2>
<b>Kod:</b><pre class="code"><span style="color: #000000">order&nbsp;allow,&nbsp;denydeny&nbsp;from&nbsp;neostrada.plallow&nbsp;from&nbsp;all&nbsp;</span></pre>
Analogicznie możemy skasować Netie i innych operatorów.
<br />
<h2>Banowanie krajów</h2>
W skrajnych przypadkach najlepiej użyć banicji na cały kraj. Do tego potrzebujemy pule IP dla danego kraju. Ów pule można znaleźć w internecie wystarczy poszukać.
<br />

<br />
<b>Więcej informacji na:</b>
<br />
<a href="http://httpd.apache.org/docs/1.3/mod/mod_access.html#order" target="_blank" class="postlink">http://httpd.apache.org/docs/1.3/mod/mod_access.html#order</a>]]></description></item><item><title>[PHP] Skanowanie portów z użyciem fsocketopen</title><pubdate>Tue, 17 Nov 2009 4:31:12 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/skanowanie-portow-z-uzyciem-fsocketopen/</link><comments>http://www.capaciouscore.pl/artykuly/skanowanie-portow-z-uzyciem-fsocketopen/#komentarze</comments><description><![CDATA[Poniższy kod prezentuje prostą metodę skanowania portów z użyciem <tt>fsocketopen()</tt>. Zwarzywszy na małą wydajność nie polecam tego rozwiązania! Pamiętajmy także, aby parametr <b>timeout</b> był odpowiednio dobrany. Inne czas odrzuceń będą dla hostów w Polsce, a inne dla <i>graczy</i> z USA. Mam na myśli dystans między maszynami i ich ping. Lepszą metodą skanowania jest używanie narzędzia o nazwie <a href="http://pl.wikipedia.org/wiki/Nmap" target="_blank" class="postlink">Nmap</a>. Dla ciekawostki powiem, iż można połączyć nmap oraz PHP przy pomocy <tt>exec()</tt> lub podobnych funkcji.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'target'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'127.0.0.1'</span><span style="color: #007700">;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'timeout'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">0.5</span><span style="color: #007700">;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'port'</span><span style="color: #007700">][</span><span style="color: #DD0000">'from'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">25</span><span style="color: #007700">;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'port'</span><span style="color: #007700">][</span><span style="color: #DD0000">'to'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">100</span><span style="color: #007700">;for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'port'</span><span style="color: #007700">][</span><span style="color: #DD0000">'to'</span><span style="color: #007700">]&nbsp;-&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'port'</span><span style="color: #007700">][</span><span style="color: #DD0000">'from'</span><span style="color: #007700">];&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">];&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">){</span><span style="color: #0000BB"> $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'port'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'port'</span><span style="color: #007700">][</span><span style="color: #DD0000">'from'</span><span style="color: #007700">];</span><span style="color: #0000BB"> if</span><span style="color: #007700">(@</span><span style="color: #0000BB">fsockopen</span><span style="color: #007700">(</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'target'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'port'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$errno</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$errstr</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'timeout'</span><span style="color: #007700">]))</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'open'</span><span style="color: #007700">][]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'port'</span><span style="color: #007700">];</span><span style="color: #0000BB"> </span><span style="color: #007700">}}echo&nbsp;(!empty(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'open'</span><span style="color: #007700">])&nbsp;?&nbsp;</span><span style="color: #DD0000">'Otwarte&nbsp;porty&nbsp;to:&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">implode</span><span style="color: #007700">(</span><span style="color: #DD0000">',&nbsp;'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'open'</span><span style="color: #007700">])&nbsp;:&nbsp;</span><span style="color: #DD0000">'Nie&nbsp;wykryto&nbsp;otwartych&nbsp;portów'</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.fsockopen.php" target="_blank" class="postlink">http://php.net/manual/pl/function.fsockopen.php</a>]]></description></item><item><title>[PHP] Ściąganie demotywatorów na dysk</title><pubdate>Mon, 16 Nov 2009 5:11:09 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/sciaganie-demotywatorow-na-dysk/</link><comments>http://www.capaciouscore.pl/artykuly/sciaganie-demotywatorow-na-dysk/#komentarze</comments><description><![CDATA[Musiałem ostro na łeb spaść by to wyprodukować. No cóż takie życie.
<br />
<h2>Nowa wersja skryptu</h2>
Uwaga! Powstała nowa, lepsza wersja skryptu. Aby dowiedzieć się więcej skocz do artykułu <a href="http://www.capaciouscore.pl/artykuly/ripper-grafiki-czyli-jak-sciagnac-obrazki-z-dowolnej-strony/" target="_blank" class="postlink">Ripper grafiki czyli jak ściągnąć obrazki z dowolnej strony</a>.
<br />
<h2>Wymagania</h2>
Po pierwsze idźcie po wiadro i stos papierowych ręczników bo możecie zaślinić cały dywan i klawiaturę. Nie odpowiadam za euforie i inne skutki uboczne tego co zrobicie i zobaczycie <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Co nam będzie potrzebne? Naturalnie sprzęt, na którym wykonamy tą jakże brutalna operacje!
<br />
<h2>Wymagania na serio</h2>
Prędkość przeprowadzonego procesu będzie zależeć od paru czynników. Po pierwsze od naszego kochanego <a href="http://pl.wikipedia.org/wiki/Procesor" target="_blank" class="postlink">CPU</a>. Musicie być świadomi, że indeksacja i ściąganie tych plików potrwa dłuższą chwilę, która to obciąży procesor do granic możliwości. Na wszelki wypadek przygotujcie także gaśnice. Proces, który wykonałem trwał ~2 godziny. Moim zdaniem jak na jakieś 6 tysięcy plików to całkiem względnie zważywszy na to, że nie mam super kombajnu na lewicy mojej nogi. Drugim istotnym parametrem jest prędkość łącza. To od niej będzie zależało jak szybko zassiemy to co naszej duszy potrzeba. Trzecim, dość istotnym parametrem jest obciążenie aktualne serwisu <a href="http://demotywatory.pl/" target="_blank" class="postlink">demotywatory</a>. Radziłbym przeprowadzić tą operacje w nocy. Za dnia może ostro mulić ich serwer. Kolejnym parametrem może być konfiguracja serwera lokalnego. Upewniamy się, że w <b>php.ini</b> zmienna <tt>max_execution_time</tt> ma wartość <tt>0</tt>! Bez tej czynności prawdopodobnie po chwili  zobaczycie komunikat błędu o przekroczeniu limitu czasowego. Innym parametrem mogą być zasobożerne aplikacje działające w tle. Wyłączcie wszystko co zbędne. Naturalnie gadu-gadu możecie zostawić z opisem &quot;Właśnie zasysam demotywatory na dysk&quot;. Poinformujmy także domowników o fakcie ściągania, ażeby to nie dostać przez przypadek patelnia w twarz bo &quot;zamulasz neta&quot; albo co gorsza &quot;zabrałeś mi internet&quot;. Kolejną rzeczą miało być zaopatrzenie się w przeglądarkę, która nie blokuje dużej ilości odświeżeń. Docelowo skrypt odświeżał się po każdej zaindeksowanej stronie (proces pierwszy). Po chwili namysłu w momencie pisania tego artykułu doszedłem do wniosku, że lepiej jednym ciurkiem zaindeksować do bazy danych. Ostatnia rzeczą, na która wpadłem jest RAM. Jeżeli macie gdzieś pod łóżkiem bądź w szafie dodatkowe kości to włóżcie je do pieca dla szpanu.
<br />
<h2>Informacje dodatkowe</h2>
Skrypt, który zostanie za chwilę zademonstrowany ściąga tylko i wyłącznie zaakceptowane demotywatory ze strony. Łatwo będzie przerobić ten skrypt, ażeby to ściągał także te czekające na akceptacje. Wystarczy lekka korekta adresu z
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">http://demotywatory.pl/page/</span></pre>
na
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">http://demotywatory.pl/<em><span>poczekalnia</span></em>/page/</span></pre>
Myślałem także by przerobić skrypt tak aby ściągał <a href="http://www.despair.com/" target="_blank" class="postlink">amerykańską wersję demotywatorów</a> lecz sobie darowałem! A przynajmniej nie na tą noc rezerwuje sobie tą operacje <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />
<br />
Jeżeli ktoś potrzebuje paczkę skryptu to znajduje się ona w dziale skrypty pod adresem <a href="http://www.capaciouscore.pl/skrypty/ripper-demotywatorow/" target="_blank" class="postlink">Ripper demotywatorów</a>. Uważam, że skrypt jest mało wydajny aczkolwiek wystarczający, ażeby dojść do celu. Mogłem pokusić się o drobna optymalizacje lecz darowałem sobie.
<br />
<h2>Źródło skryptu</h2>
<b>struct.sql</b> czyli struktura bazy danych
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">CREATE&nbsp;TABLE&nbsp;`graphic`&nbsp;( &nbsp;`address`&nbsp;varchar(100)&nbsp;collate&nbsp;utf8_polish_ci&nbsp;NOT&nbsp;NULL&nbsp;default&nbsp;'', &nbsp;PRIMARY&nbsp;KEY &nbsp;(`address`), &nbsp;UNIQUE&nbsp;KEY&nbsp;`address`&nbsp;(`address`))&nbsp;ENGINE=InnoDB&nbsp;DEFAULT&nbsp;CHARSET=utf8&nbsp;COLLATE=utf8_polish_ci;&nbsp;</span></pre>
<b>config.php</b> to chyba wiadomo do czego służy bo nazwa mówi sama za siebie?
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">#--------------------------------------------+#&nbsp;Author:&nbsp;CapaciousCore &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|#&nbsp;Website:&nbsp;CapaciousCore.pl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Wszystkie&nbsp;prawa&nbsp;zastrzeżone!&nbsp;|#--------------------------------------------+#&nbsp;Dir</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir'</span><span style="color: #007700">][</span><span style="color: #DD0000">'img'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'./graphic/'</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;Naturalnie&nbsp;możemy&nbsp;podać&nbsp;ścieżkę&nbsp;do&nbsp;innej&nbsp;partycji&nbsp;włącznie#&nbsp;MySQL</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'mysql'</span><span style="color: #007700">][</span><span style="color: #DD0000">'host'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'localhost'</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;Host&nbsp;of&nbsp;database</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'mysql'</span><span style="color: #007700">][</span><span style="color: #DD0000">'database'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'demotywatory'</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;Name&nbsp;of&nbsp;database</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'mysql'</span><span style="color: #007700">][</span><span style="color: #DD0000">'login'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;Login&nbsp;to&nbsp;database</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'mysql'</span><span style="color: #007700">][</span><span style="color: #DD0000">'password'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;Password&nbsp;to&nbsp;database#&nbsp;Other</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'url_name'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'http://demotywatory.pl/page/'</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;Adres,&nbsp;z&nbsp;którego&nbsp;będziemy&nbsp;indeksować//&nbsp;Łączenie&nbsp;z&nbsp;baza&nbsp;danych</span><span style="color: #0000BB">mysql_connect</span><span style="color: #007700">(</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'mysql'</span><span style="color: #007700">][</span><span style="color: #DD0000">'host'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'mysql'</span><span style="color: #007700">][</span><span style="color: #DD0000">'login'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'mysql'</span><span style="color: #007700">][</span><span style="color: #DD0000">'password'</span><span style="color: #007700">]);</span><span style="color: #0000BB">mysql_select_db</span><span style="color: #007700">(</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'mysql'</span><span style="color: #007700">][</span><span style="color: #DD0000">'database'</span><span style="color: #007700">]);</span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SET&nbsp;NAMES&nbsp;'latin2'"</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>indexing.php</b> czyli plik odpowiedzialny za zaindeksowanie adresów obrazków  graficznych
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">#--------------------------------------------+#&nbsp;Author:&nbsp;CapaciousCore &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|#&nbsp;Website:&nbsp;CapaciousCore.pl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Wszystkie&nbsp;prawa&nbsp;zastrzeżone!&nbsp;|#--------------------------------------------+</span><span style="color: #007700">include(</span><span style="color: #DD0000">'./config.php'</span><span style="color: #007700">);</span><span style="color: #FF8000">/*********************************************************************************************** *&nbsp;W&nbsp;dniu&nbsp;16-11-2009&nbsp;było&nbsp;723&nbsp;podstron&nbsp;demotywatorów, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* *&nbsp;patrz&nbsp;na&nbsp;dół&nbsp;Demotywatory.pl&nbsp;i&nbsp;sprawdź&nbsp;ostatnią&nbsp;zastronicowaną&nbsp;stronę &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * *&nbsp;dodałem&nbsp;kilka&nbsp;podstron&nbsp;(patrz&nbsp;warunek&nbsp;pętli&nbsp;głównej)&nbsp;celem&nbsp;wyeliminowania&nbsp;marginesu&nbsp;błędu &nbsp; * ***********************************************************************************************/</span><span style="color: #007700">for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">730</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">){</span><span style="color: #0000BB"> $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'url_address'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'url_name'</span><span style="color: #007700">].</span><span style="color: #0000BB">$h</span><span style="color: #007700">;</span><span style="color: #0000BB"> $content&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'url_address'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> if</span><span style="color: #007700">(!empty(</span><span style="color: #0000BB">$content</span><span style="color: #007700">))</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Wyciąganie&nbsp;adresów&nbsp;grafiki&nbsp;_^_</span><span style="color: #0000BB"> &nbsp;preg_match_all</span><span style="color: #007700">(</span><span style="color: #DD0000">'/&lt;img.*src=\"(.*)\".*&gt;/iU'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$content</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$catch</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">for(</span><span style="color: #0000BB">$i&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$catch</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]);&nbsp;</span><span style="color: #0000BB">$i&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">];&nbsp;++</span><span style="color: #0000BB">$i</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $result&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT&nbsp;address&nbsp;FROM&nbsp;graphic&nbsp;WHERE&nbsp;address&nbsp;=&nbsp;'"</span><span style="color: #007700">.</span><span style="color: #0000BB">$catch</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">][</span><span style="color: #0000BB">$i</span><span style="color: #007700">].</span><span style="color: #DD0000">"'"</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp; if</span><span style="color: #007700">(</span><span style="color: #0000BB">mysql_num_rows</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</span><span style="color: #007700">)&nbsp;===&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; &nbsp;mysql_query</span><span style="color: #007700">(</span><span style="color: #DD0000">"INSERT&nbsp;INTO&nbsp;graphic&nbsp;VALUES&nbsp;('"</span><span style="color: #007700">.</span><span style="color: #0000BB">$catch</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">][</span><span style="color: #0000BB">$i</span><span style="color: #007700">].</span><span style="color: #DD0000">"')"</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #007700">}}echo&nbsp;</span><span style="color: #DD0000">'finished&nbsp;step&nbsp;1'</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>download.php</b> czyli plik odpowiedzialny za ściąganie grafiki na podstawie zaindeksowanych adresów
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">#--------------------------------------------+#&nbsp;Author:&nbsp;CapaciousCore &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|#&nbsp;Website:&nbsp;CapaciousCore.pl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|# &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Wszystkie&nbsp;prawa&nbsp;zastrzeżone!&nbsp;|#--------------------------------------------+</span><span style="color: #007700">include(</span><span style="color: #DD0000">'./config.php'</span><span style="color: #007700">);</span><span style="color: #FF8000">//&nbsp;Pobieramy&nbsp;listę&nbsp;plików</span><span style="color: #0000BB">$result&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #DD0000">"SELECT&nbsp;address&nbsp;FROM&nbsp;graphic"</span><span style="color: #007700">);for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">mysql_num_rows</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</span><span style="color: #007700">);&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">];&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">){</span><span style="color: #0000BB"> $row&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">mysql_fetch_assoc</span><span style="color: #007700">(</span><span style="color: #0000BB">$result</span><span style="color: #007700">);</span><span style="color: #0000BB"> $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_name'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">explode</span><span style="color: #007700">(</span><span style="color: #DD0000">'/'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$row</span><span style="color: #007700">[</span><span style="color: #DD0000">'address'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> $tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_location'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir'</span><span style="color: #007700">][</span><span style="color: #DD0000">'img'</span><span style="color: #007700">].</span><span style="color: #0000BB">end</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_name'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">substr</span><span style="color: #007700">(</span><span style="color: #0000BB">$row</span><span style="color: #007700">[</span><span style="color: #DD0000">'address'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">7</span><span style="color: #007700">)&nbsp;==&nbsp;</span><span style="color: #DD0000">'http://'&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;!</span><span style="color: #0000BB">file_exists</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_location'</span><span style="color: #007700">]))</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$content&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$row</span><span style="color: #007700">[</span><span style="color: #DD0000">'address'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp;file_put_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_location'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$content</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #007700">}}echo&nbsp;</span><span style="color: #DD0000">'finished&nbsp;step&nbsp;2'</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<h2>Lista operacji</h2>
Pamiętajcie, że jeżeli już zaczęliście proces to skończcie go <img src="http://www.capaciouscore.pl/smiles/icon_razz.gif" class="emoticon" alt="Razz" />
<ol class="list list_1">
<li> ściągniecie skryptu</li>
<li> skonfigurowanie</li>
<li> zaimportowanie tabeli do bazy danych</li>
<li> konfiguracja serwera</li>
<li> przywiązanie się do krzesła</li>
<li> odpalenie <b>indexing.php</b></li>
<li> odpalenie <b>download.php</b></li>
<li> długie czekanie</li>
<li> cieszenie się i marnowanie czasu oglądając parę tysięcy demotywatorów, z których 5% jest czegokolwiek warta <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /></li>
</ol>
<h2>Rezultat</h2>
<img src="http://www.capaciouscore.pl/download/other/demotywatory.png" alt="demotywatory.png" />
<br />
<h2>Nota</h2>
Gdy przeglądacie <a href="http://www.demotywatory.pl" target="_blank" class="postlink">demotywatory.pl</a> to w gruncie rzeczy zapisujecie grafikę na swoim dysku. Moje pytanie brzmi dlaczego by tego nie zrobić na masową skalę? Nie będę oglądał <b>głupich reklam</b> i innego chłamu. Nie będę także czytał komentarzy. Skupie się jedynie na kwintesencji. Dziękuję za uwagę i życzę miłego dnia.
<br />

<br />
PS
<br />
Kocham jak ktoś zrzyna zagraniczny pomysł przekładając go na polskie &quot;standardy&quot; plącąc za to małe pieniądze, a zyskując krocie.]]></description></item><item><title>[PHP] Odliczanie czasu od danej akcji</title><pubdate>Mon, 09 Nov 2009 11:50:34 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/odliczanie-czasu-od-danej-akcji/</link><comments>http://www.capaciouscore.pl/artykuly/odliczanie-czasu-od-danej-akcji/#komentarze</comments><description><![CDATA[Czasami potrzebne jest sprawdzenie różnicy w czasie miedzy dokonanymi akcjami. Zastosowanie takiego rozwiązania ma sens np. w przypadku łapania robotów sieciowych, które wypełniają formularze zbyt szybko <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" />
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'refresh_limit'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">10</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;W&nbsp;sekundach//&nbsp;Inicjowanie&nbsp;sesji&nbsp;naturalnie</span><span style="color: #0000BB">session_start</span><span style="color: #007700">();</span><span style="color: #FF8000">//&nbsp;Sprawdzamy&nbsp;czy&nbsp;pierwsza&nbsp;akcja&nbsp;została&nbsp;dokonana</span><span style="color: #007700">if(!isset(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'countdown'</span><span style="color: #007700">][</span><span style="color: #DD0000">'base'</span><span style="color: #007700">])){</span><span style="color: #0000BB"> $_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'countdown'</span><span style="color: #007700">][</span><span style="color: #DD0000">'base'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">gmmktime</span><span style="color: #007700">();</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'Zainicjowano&nbsp;"wskaźnik",&nbsp;odświeżaj&nbsp;stronę!'</span><span style="color: #007700">;}else{</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">abs</span><span style="color: #007700">(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'countdown'</span><span style="color: #007700">][</span><span style="color: #DD0000">'base'</span><span style="color: #007700">]&nbsp;-&nbsp;</span><span style="color: #0000BB">gmmktime</span><span style="color: #007700">())&nbsp;&lt;&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'refresh_limit'</span><span style="color: #007700">])</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'Określony&nbsp;czas&nbsp;jeszcze&nbsp;nie&nbsp;minął'</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Jeżeli&nbsp;chcesz&nbsp;zresetować&nbsp;czas&nbsp;od&nbsp;którego&nbsp;ma&nbsp;odliczać&nbsp;to&nbsp;nadpisujesz&nbsp;zmienna&nbsp;nowa&nbsp;wartością...&nbsp;i&nbsp;cały&nbsp;proces&nbsp;na&nbsp;nowo</span><span style="color: #0000BB"> &nbsp;$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'countdown'</span><span style="color: #007700">][</span><span style="color: #DD0000">'base'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">gmmktime</span><span style="color: #007700">();</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Inne&nbsp;akcje</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'Wykonaj&nbsp;akcje&nbsp;po&nbsp;określonym&nbsp;czasie'</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Naturalnie metodę można rozszerzyć o parę rzeczy lecz darowałem sobie ze względu na to, że chciałem tylko pokazać rozwiązanie. Dla przykładu możemy zapisywać częstotliwość wykonania kolejnych akcji do tablicy. Dalej na podstawie tych danych budujemy swoje wnioski.
<br />

<br />
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.abs.php" target="_blank" class="postlink">http://php.net/manual/pl/function.abs.php</a>
<br />
<a href="http://php.net/manual/pl/function.gmmktime.php" target="_blank" class="postlink">http://php.net/manual/pl/function.gmmktime.php</a>
<br />
<a href="http://php.net/manual/pl/function.isset.php" target="_blank" class="postlink">http://php.net/manual/pl/function.isset.php</a>
<br />
<a href="http://php.net/manual/pl/function.session-start.php" target="_blank" class="postlink">http://php.net/manual/pl/function.session-start.php</a>]]></description></item><item><title>[PHP] Rysowanie przebiegów czasowych bramek logicznych</title><pubdate>Mon, 09 Nov 2009 2:38:44 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/rysowanie-przebiegow-czasowych-wejscia-i-wyjscia-bramek-logicznych-not-or-and-nor-nand-xor-enor/</link><comments>http://www.capaciouscore.pl/artykuly/rysowanie-przebiegow-czasowych-wejscia-i-wyjscia-bramek-logicznych-not-or-and-nor-nand-xor-enor/#komentarze</comments><description><![CDATA[Jakiś czas temu na potrzeby celów edukacyjnych zrobiłem skrypt generujący przebiegi czasowe <a href="http://pl.wikipedia.org/wiki/Bramka_logiczna" target="_blank" class="postlink">bramek logicznych</a> na podstawie danych wejściowych. Do dyspozycji mamy kilka typów operacji: <a href="http://pl.wikipedia.org/wiki/Bramka_NOT" target="_blank" class="postlink">NOT</a>, <a href="http://pl.wikipedia.org/wiki/Bramka_OR" target="_blank" class="postlink">OR</a>, <a href="http://pl.wikipedia.org/wiki/Koniunkcja_(matematyka)" target="_blank" class="postlink">AND</a>, <a href="http://pl.wikipedia.org/wiki/Binegacja" target="_blank" class="postlink">NOR</a>,  <a href="http://pl.wikipedia.org/wiki/Bramka_NAND" target="_blank" class="postlink">NAND</a>, <a href="http://pl.wikipedia.org/wiki/Alternatywa_wykluczająca" target="_blank" class="postlink">XOR</a> i <a href="http://pl.wikipedia.org/wiki/XNOR" target="_blank" class="postlink">ENOR</a>. Całość dostepna jest pod podanym adresem: <a href="http://www.capaciouscore.pl/examples/rysowanie-przebiegow-czasowych-wejscia-i-wyjscia-bramek-not-or-and-nor-nand-xor-enor/index.php" target="_blank" class="postlink">Rysowanie przebiegów czasowych wejścia i wyjścia bramek NOT, OR, AND, NOR, NAND, XOR i ENOR</a>.]]></description></item><item><title>Narodziny nowego jutra</title><pubdate>Thu, 05 Nov 2009 8:11:37 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/narodziny-nowego-jutra/</link><comments>http://www.capaciouscore.pl/artykuly/narodziny-nowego-jutra/#komentarze</comments><description><![CDATA[Noc spowita mgłą, a ja przemieszczam się wśród liści. Księżyc zawieszony ponad ulicami. Pewnie szuka ukojenia. Pewnie nie on jeden. Licząc gwiazdy zauważam na horyzoncie kontury postaci. Może to anioł? Staram się zbliżyć lecz odwrotny efekt uzyskuję. Ktoś celowo ingeruje w zamierzony cel. Może to ten, który lubi ciągnąć za wszystkie sznurki? Czego on chce? Może próbuje rozplątać ten kłębek nici? Nie wiem. Ja staram się wykrzesać iskrę. Wszystko sprzysięgło się przeciwko mnie. Szukam drogi na skróty aby zobaczyć zbłąkana duszyczkę. Próbuję oszukać los. A co Ty o tym wiesz? Pewnie wiele. Codziennie go oszukujesz. Lecz to nie to samo. Wszystko wokół mnie zmienia się, a ja stoję tam gdzie stałem. Wysilając wzrok widzę długie, bujne włosy powiewające na wietrze. Kwiatuszek odwraca łodygę lecz nie widzi mnie. Ja krzyczę lecz okno zamknięte jest. Zaczynam biec. Wreszcie doganiam mroczną postać. Skryta i tajemnicza kobieta okazuje się tylko cieniem na ziemi. Czy to możliwe, że byłem tak ślepy? Otóż nie! Ta postać metrów pięć ode mnie. Nagle krokiem szybkim teleportuję się obok jej ciała. Łapię za rękę. Tym razem nie ucieknie.
<br />

<br />
c.d.n.]]></description></item><item><title>[PHP] Sprawdzanie poprawności adresu e-mail</title><pubdate>Wed, 04 Nov 2009 7:17:01 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/sprawdzanie-poprawnosci-adresu-e-mailowego/</link><comments>http://www.capaciouscore.pl/artykuly/sprawdzanie-poprawnosci-adresu-e-mailowego/#komentarze</comments><description><![CDATA[Jakiś czas temu poszukiwałem rozwiązania tego problemu. Szukając rozwiązania w sieci natchnąłem się na kilka ciekawych stron. Pierwsze rozwiązanie ulokowane jest pod tytułem <a href="http://code.google.com/p/isemail/source/browse/trunk/is_email.php?r=6" target="_blank" class="postlink">is_email</a> na code.google. Drugi artykuł, z którym warto zaznajomić się nosi nazwę <a href="http://wortal.php.pl/phppl/wortal/artykuly/proces_tworzenia_aplikacji/tlumaczenia/weryfikacja_adresu_e_mail_w_php/" target="_blank" class="postlink">Weryfikacja adresu e-mail w PHP</a>. Trzecim rozwiązaniem problemu może być zastosowanie funkcji <tt>filter_var()</tt>.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;Ta&nbsp;metoda&nbsp;dostepna&nbsp;jest&nbsp;od&nbsp;PHP&nbsp;&gt;=&nbsp;5.2.0</span><span style="color: #007700">if(</span><span style="color: #0000BB">filter_var</span><span style="color: #007700">(</span><span style="color: #DD0000">'login@example.com'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">FILTER_VALIDATE_EMAIL</span><span style="color: #007700">)){</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'Adres&nbsp;e-mail&nbsp;poprawny'</span><span style="color: #007700">;}else{</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'Adres&nbsp;e-mail&nbsp;niepoprawny'</span><span style="color: #007700">;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.filter-var.php" target="_blank" class="postlink">http://php.net/manual/pl/function.filter-var.php</a>]]></description></item><item><title>Wyjątki od reguły</title><pubdate>Wed, 04 Nov 2009 4:26:54 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/wyjatki-od-reguly/</link><comments>http://www.capaciouscore.pl/artykuly/wyjatki-od-reguly/#komentarze</comments><description><![CDATA[Od zawsze kiedy pamiętam wyjątki od reguły występowały. Wygląda to zawsze tak samo. Próbujemy przewidzieć wszystkie możliwe opcje jakie mogą zaistnieć w przyszłym wydarzeniu i cyklicznie co jakiś czas zdarza się, że dana sytuacja nie idzie po naszej myśli. Przykładowo idziemy do klienta mając relacje o tym co mniej więcej <i>zepsute</i> jest. Na miejscu okazuje się, że problem jest np. bardziej złożony. Nasz plan działania musimy diametralnie zmienić. I tak oto w ten sposób z godziny robi się parę i wszystkiemu winne dodatkowe usługi. Nie mowie ze jest to źle <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> O nie! Dodatkowe usługi są good. Zawsze to dobry powód ażeby porozmawiać z klientem, zjeść ciasteczko i napić się kawki. Starajcie się rozmawiać z gościem nie przeszkadzając mu w <i>pracy</i>, a może przy wystawaniu rachunku za usługi <i>specjalista</i> spojrzy miłym wzrokiem. Trzeba przyznać, że życie &quot;informatyka&quot; jest bardzo ciężkie, a naprawdę to jest boskie. Nieprawdaż? Do zobaczenia u Ciebie w domu!
<br />

<br />
Post scriptum
<br />
Pozdrawiam Martynę z tego miejsca. <img src="http://www.capaciouscore.pl/smiles/icon_surprised.gif" class="emoticon" alt="Surprised" />]]></description></item><item><title>W internecie znajdziesz wszystko!</title><pubdate>Wed, 28 Oct 2009 8:46:52 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/w-internecie-znajdziesz-wszystko/</link><comments>http://www.capaciouscore.pl/artykuly/w-internecie-znajdziesz-wszystko/#komentarze</comments><description><![CDATA[Na wstępie mógłbym użyć poniższego zapisu:
<br />
<p class="quote">Cytat:</p><blockquote>Artykuł służy wyłącznie celom edukacyjnym. Autor wypowiedzi nie ponosi odpowiedzialności za ewentualne szkody wykonane przez jego czytelników...</blockquote>
lecz tego nie zrobię z prostego powodu. Mianowicie powyższy zapis nie ma mocy prawnej. Jest to tak zwany <a href="http://pl.wikipedia.org/wiki/Disclaimer" target="_blank" class="postlink">disclaimer</a>.
<br />
<h2>Wstęp</h2>
Nie prowadzę badań na temat piractwa więc nie wiem jak duża cześć społeczeństwa internetowego zdaje sobie sprawę z tego, że w internecie możemy znaleźć praktycznie wszystko. Artykuł ma na celu jedynie pokazanie skali problemu.
<br />
<h2>Początek</h2>
Potrzebujesz wypracowania? Pierwsze co prawdopodobnie zrobisz to sięgnięcie do wuja <a href="http://www.google.pl/" target="_blank" class="postlink">google</a>, nieprawdaż? W następnej kolejności trafisz na serwisy pokroju <a href="http://www.sciaga.pl/" target="_blank" class="postlink">sciaga.pl</a>, na których możemy znaleźć pracę praktycznie na każdy temat. Nie wierzysz? Sprawdź samemu!
<br />
<h2>Szukanie informacji</h2>
Z pewnością nie raz potrzebowaliście zdobyć jakąkolwiek informację. Na pewno doszliście do wniosku, że odpowiednio sformułowane zapytanie daje oczekiwane rezultaty. Jak powszechnie wiemy liczą się tzw. słowa kluczowe. Odpowiednio formułując wyrażenie znajdujemy rzeczy, o których nam się nie śniło. To właśnie nazywamy magią wyszukiwarek! Przemierzając sieć wchodzimy na kolejny level (poziom).
<br />
<h2>Piractwo w sieci</h2>
Nie ważne czy potrzebujesz Windows'a, oprogramowania, filmu czy muzyki. Tutaj znajdziesz wszystko. Zasada jest prosta i wygląda następująco: wchodzimy do sklepu i wybieramy co potrzeba. Pytasz tylko kto za to zapłaci? Otóż odpowiadam Ci, że nikt. Wystarczy umiejętne używanie google. Nie wierzysz mi? Czytaj dalej, a nie pożałujesz.
<br />
<h2>Filmy</h2>
Mimo, że ich nie oglądam prawie wcale. Co najwyżej mogę popatrzyć się w szklana bańkę okazjonalnie ze swoimi znajomymi. Zauważam taka prawidłowość, że tym większy szum medialny wokół danej produkcji tym prędzej trafi przed premiera do sieci. Przykładem takiej akcji był film <a href="http://pasja.filmweb.pl/" target="_blank" class="postlink">Pasja aka Passion of the Christ (2004)</a>. Pamiętam jak na każdym kroku słyszane były komentarze, które stały się efektem emocji wzbudzonych przez ten film.
<br />
<h2>Nielegalne oprogramowanie</h2>
Tutaj mamy wielkie pole do popisu. Prawie każdy program wyprodukowany przez developerów możemy znaleźć w sieci. I nie chodzi tutaj o wersje <i>demo</i> lecz o pełne, najczęściej scrackowane wersje. Ostatecznie do ściągniętych aplikacji mogą być dołączone tzw. seriale lecz nie muszą. Nie ważne czy jest to prosta aplikacja ala edytor czy rozbudowane studio programistyczne. Tutaj możemy mieć wszystko. Jedynymi ograniczeniami są umiejętności szukania oraz nasza wyobraźnia.
<br />
<h2>Mp3</h2>
Mp3 czyli to co kochamy. Jakiś czas temu zainteresowałem się kwestia legalności tego procederu. Natrafiłem na kilka ciekawych artykułów. Oto kilka wybranych: <a href="http://www.dobreprogramy.pl/Mp-z-sieci-proba-uporzadkowania-dyskusji-cz,Artykul,11352.html" target="_blank" class="postlink">Mp3 z sieci - próba uporządkowania dyskusji cz. 1</a>, <a href="http://www.dobreprogramy.pl/Mp-z-sieci-proba-uporzadkowania-dyskusji-cz,Artykul,11354.html" target="_blank" class="postlink"> Mp3 z sieci - próba uporządkowania dyskusji cz. 2 </a> i jeden <a href="http://www.forumowisko.pl/topic/29297-przepisy-prawa-a-piractwo/" target="_blank" class="postlink">zapis z forum</a>. Z pewnością jest tego o wiele więcej lecz ja ograniczę się do tych trzech.
<br />

<br />
Chcesz znaleźć jakiś album przy pomocy google? Żaden problem! Wpisujemy:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">rapidshare&nbsp;[wykonawca]&nbsp;[album]&nbsp;[<em><span>+download</span></em>]</span></pre> i mamy czego szukaliśmy. Opcjonalnie możemy użyć:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">[rs]&nbsp;[wykonawca]</span></pre> i także trafimy na stos pięknie mieniących się linków. Powyższa regułka ma także zastosowanie gdy szukamy filmu, programu, gry bądź czegokolwiek na rapidshare i nie tylko.
<br />
<h2>Legalność operacji</h2>
Na pewno przy takim szukani natchniecie się na <a href="http://www.peb.pl/" target="_blank" class="postlink">peb.pl</a> bądź <a href="http://www.darkwarez.pl/" target="_blank" class="postlink">darkwarez.pl</a>. Nie żeby to była krypto reklama lecz ciekawostka jest to, że te serwisy są w pełni legalne <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Dlaczego tak się dzieje? A no dlatego, że pliki są na <i>zewnętrznym</i> serwerze. Grunt to takie zapiski:
<br />
<p class="quote"><cite>resorte z forumprawne.org</cite> napisał(a):</p> <blockquote><p>Pamiętaj, że pliki objęte prawem autorskim wolno zgrywać z sieci jedynie, jeżeli posiada się w domu ich oryginalną wersję, a ściągniętą kopię będzie się traktować jako zapasową</blockquote>
oraz
<br />
<p class="quote"><cite>resorte z forumprawne.org</cite> napisał(a):</p> <blockquote><p>Wszystkie materiały zawarte na odnośnikach od tej strony prezentowane są wyłącznie w celach edukacyjnych. Nie mogą one służyć jakimkolwiek celom niezgodnym z prawem. Można z nich skorzystać, ale trzeba je usunąć z dysku twardego przed upływem 24 godzin. Są to materiały prywatne bądź wyłącznie prezentacyjne. Autorzy serwisu nie ponoszą żadnej odpowiedzialności z powodu wykorzystania materiałów tu zawartych niezgodnie z przeznaczeniem, w szczególności gdy spowodowało to szkodę osób trzecich</blockquote>
Więcej do poczytania na google przy użyciu frazy:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">site:forumprawne.org&nbsp;warez</span></pre>
<h2>P2P</h2>
Kiedyś najpopularniejsze teraz przechodzi do lamusa. Wyparte przez rapidshare. No cóż taka kolej rzeczy. Coś umiera żeby coś mogło się narodzić. Masz inne zdanie? To mam dla Ciebie zadanie! Przekonaj mnie komentarzem z konkretnymi argumentami.
<br />
<h2>Mój ot</h2>
Ilu z Was spojrzy w lustro i powie, że ma wszystko legalne na dysku? Obstawiam, że
<br />
ponad 80% danych z dysków rapidshare to nielegalne pliki. Kolejna śmieszna sprawa jest dla mnie Bill Gates, który to jest okradany przez wiele milionów ludzi i nadal jest najbogatszym człowiekiem na świecie. I na tym zakończymy <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />]]></description></item><item><title>Bindy do Counter Strike</title><pubdate>Mon, 26 Oct 2009 4:46:49 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/bindy-do-counter-strike/</link><comments>http://www.capaciouscore.pl/artykuly/bindy-do-counter-strike/#komentarze</comments><description><![CDATA[Każdy szanujący się gracz powinien znać terminologię związaną z bindowaniem klawiszy. Co nam to daje? Znajomość używania bindów skraca czas wykonywania pewnych operacji np. banowania osoby używającej <a href="http://pl.wikipedia.org/wiki/Cheat" target="_blank" class="postlink">cheatów</a> bądź kupowania broni.
<br />
<h2>Wprowadzenie</h2>
Podstawowymi komendami, z którymi zapoznamy się dzisiaj są <tt>bind</tt> i <tt>unbind</tt>. Komenda <tt>bind</tt> może służyć do dodania, edytowania bądź też &quot;zerowania&quot; binda. Komenda <tt>unbind</tt> ma tylko jeden cel czyli usuwanie zbindowanego klawisza.
<br />
<h2>Wykonywanie bindowania</h2>
Jeżeli chcemy kupić np. USP przy pomocy dajmy na to klawisza F3 wystarczy w konsoli użyć poniższego polecenia, a następnie w grze wcisnąć wyżej wymieniony klawisz i cieszyć się nowo zakupionym USP leżącym w dłoni.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">bind&nbsp;"F3"&nbsp;"usp"</span></pre>
Musimy pamiętać, że jeżeli mieliśmy już jakiś bind pod F3 to zostanie on nadpisany! Wcześniej użyłem określenia &quot;zerowanie&quot;, które oznacza usuniecie binda pod konkretny klawisz.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">bind&nbsp;"F3"&nbsp;""</span></pre>
Użycie powyższego zapisu spowoduje, że do klawisza F3 nie będzie przypisana żadna akcja. Ten sam efekt można uzyskać poprzez użycie <tt>unbind</tt> tak jak poniżej:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">unbind&nbsp;"F3"</span></pre>
<h2>Różne komendy do bindów</h2>
Poniżej znajduję się lista różnorakich komend, które można wykorzystać w grze.
<br />
&quot;+forward&quot; - do przodu (standardowo: w)
<br />
&quot;+back&quot; - do tyłu (standardowo: s)
<br />
&quot;+moveleft&quot; - w lewo (standardowo: a)
<br />
&quot;+moveright&quot; - w prawo (standardowo: d)
<br />
&quot;+speed&quot; - chodzenie/<i>pełzanie</i> <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> (standardowo: shift)
<br />
&quot;+duck&quot; - kucanie (standardowo: ctrl)
<br />
&quot;jump&quot; - skakanie (standardowo: space)
<br />
&quot;use&quot; - użyj (np. rozbrajanie/kładzenie paki) (standardowo: e)
<br />
&quot;impulse 100&quot; - latarka (standardowo: f)
<br />
&quot;impulse 201&quot; - spray logo (standardowo: t)
<br />
&quot;+showscores&quot; - pokaż statystyki (Standardowo: TAB)
<br />
&quot;+voicerecord&quot; - włącz &quot;karanie głosem&quot; (standardowo: k)
<br />
&quot;slot1&quot; - slot 1 (standardowo: 1)
<br />
&quot;slot2&quot; - slot 2 (standardowo: 2)
<br />
&quot;slot3&quot; - slot 3 (standardowo: 3)
<br />
&quot;slot4&quot; - slot 4 (standardowo: 4)
<br />
&quot;slot5&quot; - slot 5 (standardowo: 5)
<br />
&quot;slot6&quot; - slot 6 (standardowo: 6)
<br />
&quot;slot7&quot; - slot 7 (standardowo: 7)
<br />
&quot;slot8&quot; - slot 8 (standardowo: 8)
<br />
&quot;slot9&quot; - slot 9 (standardowo: 9)
<br />
&quot;slot0&quot; - slot 10 (standardowo: 0)
<br />
&quot;nightvision&quot; - noktowizor (standardowo: n)
<br />
&quot;+attack&quot; - atak (standardowo: mouse1)
<br />
&quot;+attack2&quot; - atak alternatywny np. zakładanie tłumika (standardowo: mouse2)
<br />
&quot;+reload&quot; - przeładowanie broni (standardowo: r)
<br />
&quot;drop&quot; - wyrzucenie przedmiotu trzymanego w dłoni (nie licząc noża) (standardowo: f)
<br />
&quot;lastinv&quot; - ostatnio wyjęta broń (standardowo: q)
<br />
&quot;invnext&quot; - następny slot (standardowo: mwheeldown)
<br />
&quot;invprev&quot; - poprzedni slot (standardowo: mwheelup)
<br />
&quot;buy&quot; - kupowanie (standardowo: b)
<br />
&quot;messagemode&quot; - wiadomość do wszystkich (standardowo: y)
<br />
&quot;messagemode2&quot; - wiadomość do drużyny (standardowo: u)
<br />
&quot;radio1&quot; - komendy radiowe (standardowo: z)
<br />
&quot;radio2&quot; - komendy radiowe (standardowo: x)
<br />
&quot;radio3&quot; - komendy radiowe (standardowo: c)
<br />
&quot;commandmenu&quot; - menu pomocnicze (standardowo: h)
<br />
&quot;cl_righthand &quot;1&quot; - broń w prawej ręce (standardowo: brak)
<br />
&quot;cl_righthand &quot;2&quot; - broń w lewej ręce (standardowo: brak)
<br />
&quot;cancelselect&quot; - wychodzi z danego menu (standardowo: esc)
<br />
&quot;toggleconsole&quot; - konsola (standardowo: `)
<br />
&quot;chooseteam&quot; - wybór drużyny (standardowo: m)
<br />
&quot;hud_fastswitch &quot;1&quot; - szybka zmiana broni włączona
<br />
&quot;hud_fastswitch &quot;0&quot; - szybka zmiana broni wyłączona
<br />
&quot;_cl_autowepswitch &quot;1&quot; - zmienia broń po podniesieniu
<br />
&quot;_cl_autowepswitch &quot;0&quot; - nie zmienia broni po podniesieniu
<br />
<h2>Bronie</h2>
Poniżej znajduję się lista broni, która możemy użyć w bindach.
<br />
<h3>Pistolety</h3>
&quot;glock&quot; - Glock 18
<br />
&quot;usp&quot; - H&amp;K USP 45 Tactical
<br />
&quot;p228&quot; - Sig P228
<br />
&quot;deagle&quot; - Desert Eagle
<br />
&quot;fn57&quot; - FN FiveseveN
<br />
&quot;elites&quot; - Dual Beretta 96G Elite
<br />
<h3>Shotguny</h3>
&quot;m3&quot; - Benelli M3 Super 90
<br />
&quot;xm1014&quot; - Benelli XM1014
<br />
<h3>SMG</h3>
&quot;tmp&quot; - Steyr TMP
<br />
&quot;mac10&quot; - Ingram M10
<br />
&quot;mp5&quot; - H&amp;K MP5-Navy
<br />
&quot;ump45&quot; - H&amp;K UMP 45
<br />
&quot;p90&quot; - FN P90
<br />
<h3>Karabiny</h3>
&quot;galil&quot; - Galil
<br />
&quot;famas&quot; &#8211; FAMAS
<br />
&quot;ak47&quot; - AK-47
<br />
&quot;m4a1&quot; - Colt M4A1 Carbine
<br />
&quot;sg552&quot; - SG 550
<br />
&quot;aug&quot; - Steyr AUG0
<br />
<h3>Broń snajperska</h3>
&quot;scout&quot; - Steyr Scout
<br />
&quot;sg550&quot; - SIG SG 550
<br />
&quot;awp&quot; - Arctic Warfare Magnum aka AWM
<br />
&quot;g3sg1&quot; - H&amp;K G3/SG-1 Sniper Rifle
<br />
<h3>Machinegun</h3>
&quot;m249&quot; - M249 Para
<br />
<h3>Amunicja</h3>
&quot;primammo&quot; - primary ammo
<br />
&quot;secammo&quot; - secondary ammo
<br />
<h3>Ekwipunek</h3>
&quot;vest&quot; - kevlar vest
<br />
&quot;vesthelm&quot; - kevlar vest &amp; helmet
<br />
&quot;defuser&quot; - defuse kit
<br />
&quot;nvgs&quot; - night vision goggles
<br />
&quot;shield&quot; - tactical shield
<br />
&quot;flash&quot; - flashbang aka mleko
<br />
&quot;hegren&quot; - HE grenade aka kret
<br />
&quot;sgren&quot; - smoke grenade
<br />
&quot;buyammo1&quot; - amunicja do pierwszej broni (standardowo: ,)
<br />
&quot;buyammo2&quot; - amunicja do drugiej broni (standardowo: .)
<br />
<h3>Komendy radiowe</h3>
Komendy radiowe ażeby sobie pospamować radio i dostać bana <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />
<br />
<h4>Radio 1</h4>
&quot;coverme&quot; - cover me
<br />
&quot;takepoint&quot; - you take the point
<br />
&quot;holdpos&quot; - hold this position
<br />
&quot;regroup&quot; - regroup team
<br />
&quot;followme&quot; - follow me
<br />
&quot;takingfire&quot; - taking fire, need assistance
<br />
<h4>Radio 2</h4>
&quot;go&quot; - go go go
<br />
&quot;fallback&quot; - fall back
<br />
&quot;sticktog&quot; - stick together team
<br />
&quot;getinpos&quot; - get in position
<br />
&quot;stormfront&quot; - storm the front
<br />
&quot;report&quot; - report in
<br />
<h4>Radio 3</h4>
&quot;roger&quot; - affirmative/roger
<br />
&quot;enemyspot&quot; - enemy spotted
<br />
&quot;needbackup&quot; - need backup
<br />
&quot;sectorclear&quot; - sector clear
<br />
&quot;inposition&quot; - i'm in position
<br />
&quot;reportingin&quot; - reporting in
<br />
&quot;getout&quot; - she's gonna blow (in my face)!
<br />
&quot;negative&quot; - negative
<br />
&quot;enemydown&quot; - enemy down
<br />
<h3>Mój zestaw</h3>
Poniższe bindy dotyczące broni, których używam osobiście. Proszę nie krytykować <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> wole USP aniżeli Desert Eagle <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">bind&nbsp;"f3"&nbsp;=&nbsp;"ak47;m4a1;primammo"bind&nbsp;"f4"&nbsp;=&nbsp;"usp;secammo"bind&nbsp;"f5"&nbsp;=&nbsp;"defuser;hegren;flash;sgren;flash;vesthelm"</span></pre>
I coś ekstra na zaspokojenie żądzy destrukcji cziterów.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">bind&nbsp;"f6"&nbsp;=&nbsp;"amxmodmenu"</span></pre>]]></description></item><item><title>[PHP] Debugowanie czyli odnajdywanie błędów</title><pubdate>Mon, 26 Oct 2009 12:24:09 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/debugowanie-w-php-czyli-odnajdywanie-bledow/</link><comments>http://www.capaciouscore.pl/artykuly/debugowanie-w-php-czyli-odnajdywanie-bledow/#komentarze</comments><description><![CDATA[<h2>Spis treści:</h2>
<ol class="list list_1">
<li> <a href="http://www.capaciouscore.pl/artykuly/debugowanie-w-php-czyli-odnajdywanie-bledow/#o_debugowaniu_slow_kilka" target="_blank" class="postlink">O debugowaniu słów kilka</a></li>
<li> <a href="http://www.capaciouscore.pl/artykuly/debugowanie-w-php-czyli-odnajdywanie-bledow/#fazy_debugowania" target="_blank" class="postlink">Fazy debugowania</a></li>
<li> <a href="http://www.capaciouscore.pl/artykuly/debugowanie-w-php-czyli-odnajdywanie-bledow/#metody_szukania" target="_blank" class="postlink">Metody szukania</a></li>
<li> <a href="http://www.capaciouscore.pl/artykuly/debugowanie-w-php-czyli-odnajdywanie-bledow/#izolowanie_zrodla_bledu" target="_blank" class="postlink">Izolowanie źródła błędu</a></li>
<li> <a href="http://www.capaciouscore.pl/artykuly/debugowanie-w-php-czyli-odnajdywanie-bledow/#identyfikacja_przyczyny_usterki" target="_blank" class="postlink">Identyfikacja przyczyny usterki</a></li>
<li> <a href="http://www.capaciouscore.pl/artykuly/debugowanie-w-php-czyli-odnajdywanie-bledow/#usuwanie_bledu" target="_blank" class="postlink">Usuwanie błędu</a></li>
<li> <a href="http://www.capaciouscore.pl/artykuly/debugowanie-w-php-czyli-odnajdywanie-bledow/#przyklady" target="_blank" class="postlink">Przykłady</a></li>
</ol>
<a name="o_debugowaniu_slow_kilka"></a><h2>O debugowaniu słów kilka</h2>
Debugowanie jest procesem, który ma na celu doprowadzić do zredukowania błędów w oprogramowaniu. W <a href="http://pl.wikipedia.org/wiki/Język_wysokiego_poziomu" target="_blank" class="postlink">językach wysokiego poziomu</a> ma to miejsce przy użyciu debugera (czyli programu, który będzie kontrolował proces). Nadzorując aplikacje, która działać w czasie rzeczywistym możemy wykonywać kod linijka po linijce, obserwować kod od wybranego miejsca bądź zostawić pułapki, które uaktywnia się po wykonaniu konkretnego segmentu kodu. W PHP sprawa jest prostsza. Nie musimy kontrolować kodu linijka po linijce lecz odpowiednio reagować na komunikaty błędu. Znając znaczenie błędu w ciągu paru sekund możemy naprawić każdorazowo jeden błąd. Trzeba wspomnieć, że błędy nie musza ujawnić się odraz lecz mogą pojawić się po pewnym czasie (kwestia budowy skryptu). Może się zdarzyć tak, że programista zauważy błąd w czasie testów lecz może być też także, że jakiś użytkownik zauważy wadliwe działanie kodu. Wtedy sprawa się komplikuje nieco gdyż czas działa na nasza niekorzyść.
<br />
<a name="fazy_debugowania"></a><h2>Fazy debugowania</h2>
<ol class="list list_a">
<li> Pierwsza, najistotniejsza faza debugowania jest wykrywanie miejsca, w którym występuje defekt.</li>
<li> Druga faza jest identyfikacja błędu i tego co go powoduje, jakie czynniki.</li>
<li> Trzecia faza jest usuwanie usterki.</li>
<li> W czwartej fazie jest weryfikacja czy naprawdę miało miejsce naprawienie błędu poprzez dokładne testy.</li>
</ol>
<a name="metody_szukania"></a><h2>Metody szukania</h2>
Jak wyżej napisałem, błąd może zostać wykryty przez programistę bądź użytkownika. Jeżeli programista wykrywa bug'a to ma zadanie wykryć miejsce błędu czyli plik (linijki), nazwa funkcji bądź metody oraz poznanie wszystkich parametrów, które wpływają na nieporządne działanie danego fragmentu kodu. Dla użytkownika sprawa jest nieco prostsza. W przypadku gdzie nie ma zaimplementowanej metody informowania o błędach, użytkownik musi jedynie podać datę zdarzenia, okoliczności oraz lokalizację strony, ma której zauważył nieprawidłowość. Dodatkowo jeżeli strona wyrzuciła komunikat błędu to mile widziane będzie podanie go.
<br />
<a name="izolowanie_zrodla_bledu"></a><h2>Izolowanie źródła błędu</h2>
Gdy posiadamy już informację o błędzie pierwsza czynnością jaka musimy zrobić jest wyeliminowanie wszystkich czynników, które nie wpływają bezpośrednio na powstawanie błędu. Bardzo ważne jest abyśmy już w tym momencie mieli pewność, które czynniki na pewno nie wpływają na nieprawidłowe działanie.
<br />
<a name="identyfikacja_przyczyny_usterki"></a><h2>Identyfikacja przyczyny usterki</h2>
Odnajdywanie przyczyny usterki odbywa się poprzez obserwację danych wyjściowych i danych używanych wewnątrz danej metody. Następnie skrupulatnie krok po kroku dochodzi się do miejsca, w którym konkretna funkcja nieprawidłowo spełnia swoją rolę.
<br />
<a name="usuwanie_bledu"></a><h2>Usuwanie błędu</h2>
Gdy już wiemy gdzie leży problem musimy jedynie go usunąć np. poprzez manipuluję parametrów błędnie wykorzystanej funkcji, poprawienie łańcucha zgodności (REGEX) bądź dodanie walidacji nieprawidłowych informacji, etc.
<br />
<a name="przyklady"></a><h2>Przykłady</h2>
Zanim przejdę do omawiania poszczególnych błędów wyprzedzę nieliczne przypadki, w których mogą nie występować komunikaty błędu. W takim przypadku trzeba sprawdzić w konfiguracji (php.ini) czy error_reporting oraz display_errors posiadają odpowiednie wartości. Więcej informacji <a href="http://pl2.php.net/manual/pl/errorfunc.configuration.php#ini.error-reporting" target="_blank" class="postlink">tutaj</a>. Chcę także wspomnieć o tym, ze bardzo istotna rzeczą jest znajomość angielskiego. To dzięki niemu szybko dotrzemy do wniosku co jest źle. Wystarczy zobaczyć na pierwszy przykład i wynieść wnioski ze słowa unexpected czyli niespodziewany. Ostatnią rzeczą jaka chce dodać tutaj jest fakt, że zanim zapytamy powinniśmy użyć <a href="http://www.google.pl/" target="_blank" class="postlink">wszystkowiedzącego wujka google</a>!
<br />
<p class="quote"><cite>Bill Gates</cite> napisał(a):</p> <blockquote><p>Jeżeli nie można czegoś znaleźć w Google, to to po prostu nie istnieje</blockquote>
<h3><b>unexpected T_ECHO</b> badź <b>T_STRING</b>, deklarowanie zmiennych</h3>
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$zmienna&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'text'</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">$zmienna</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Oczywiście w przykładzie powyżej brakuję średnika po stworzeniu zmiennej. Aby pozbyć się tego błędu należy jedynie go <i>dokleić</i>.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$zmienna&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'text'</span><span style="color: #0000BB"><em><span></span><span style="color: #007700">;</span><span style="color: #0000BB"></span></em></span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">$zmienna</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
T_STRING wystąpi wtedy gdy użyjemy funkcji <tt>print_r()</tt> zamiast <tt>echo()</tt>.
<br />
<h3>Nieprawidłowe łączenie ciągów</h3>
Dość często popełniany błąd przez nowicjuszy. Korzystając z okazji wyjaśnię różnicę miedzy cudzysłowem pojedynczym, a podwójnym. W pojedynczym cudzysłowu $zmienna pozostanie jedynie zestawem znaków, a w podwójnym zostanie zinterpretowana i do tworzonego stringu zostanie wrzucona wartość $zmienne. Drugą różnicą jest to, że w cudzysłowu podwójnym znaki cytowane ulegają interpretacji. Przykłady poniżej.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$dodatkowa_zmienna&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'php'</span><span style="color: #007700">;</span><span style="color: #0000BB">$ciag_znakow&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'test&nbsp;\r\n&nbsp;test&nbsp;$dodatkowa_zmienna'</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #0000BB">$ciag_znakow</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Wynikiem tego kodu powinno być:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">test&nbsp;\r\n&nbsp;test&nbsp;$dodatkowa_zmienna</span></pre>
Teraz przykład z podwójnym cudzysłowem.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$dodatkowa_zmienna&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'php'</span><span style="color: #007700">;</span><span style="color: #0000BB">$ciag_znakow&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"test&nbsp;\r\n&nbsp;test&nbsp;$dodatkowa_zmienna"</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #0000BB">$ciag_znakow</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Wynikiem powyższego kodu powinno być:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">test test&nbsp;php</span></pre>
Znak podwójnego cudzysłowa wewnatrz &quot; i &quot;
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$ciag_znakow&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"test&nbsp;znak&nbsp;"&nbsp;</span><span style="color: #0000BB">i&nbsp;mamy&nbsp;problem</span><span style="color: #DD0000">";echo&nbsp;$ciag_znakow;?&gt;</span>
</span></pre>
Jak widzimy powyżej składnia &quot;nieprawidłowo&quot; zaczęła nabierać kolorów. Oto solucja jak poprawić powyższa deklaracje.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$ciag_znakow&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"test&nbsp;znak&nbsp;<em><span>\</span></em>"&nbsp;</span><span style="color: #0000BB">i&nbsp;już&nbsp;nie&nbsp;ma&nbsp;problemu</span><span style="color: #DD0000">";echo&nbsp;$ciag_znakow;?&gt;</span>
</span></pre>
Analogicznie ta sama sytuacja dotyczy '. Mieszanie ' i &quot; jest dość częstym problemem spotykanym na forach. Szczególnie często występuję w <a href="http://pl.wikipedia.org/wiki/SQL#Przyk.C5.82adowe_zapytania" target="_blank" class="postlink">zapytaniach SQL</a>.
<br />

<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$sql&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'SELECT&nbsp;obiekt&nbsp;FROM&nbsp;tabela&nbsp;WHERE&nbsp;family&nbsp;=&nbsp;'</span><span style="color: #0000BB">Niespodzianka</span><span style="color: #DD0000">''</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #0000BB">$sql</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Jeżeli zbudowane przez Ciebie zapytanie wyrzuca błąd bądź nie zwraca wyników wyrzuć je za pomocą <tt>echo()</tt> podobnej funkcji bądź użyj funkcji <tt>mysql_errno()</tt> (w przypadku używania MySQL). W powyższym kodzie nieprawidłowo połączono ze sobą '. Oto optymalny sposób sformułowania zapytania:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$sql&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB"><em><span></span><span style="color: #DD0000">"</span></em>SELECT&nbsp;obiekt&nbsp;FROM&nbsp;tabela&nbsp;WHERE&nbsp;family&nbsp;=&nbsp;'Niespodzianka'<em><span>"</span><span style="color: #0000BB"></span></em></span><span style="color: #007700">;echo&nbsp;</span><span style="color: #0000BB">$sql</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Jeżeli uprzemy sie przy stosowaniu pojedynczego cudzysłowu to tylko musimy odpowiednio używać znaku \ przed '
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$sql&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'SELECT&nbsp;obiekt&nbsp;FROM&nbsp;tabela&nbsp;WHERE&nbsp;family&nbsp;=&nbsp;\'Niespodzianka\''</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #0000BB">$sql</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Kolejnym błędem jest używanie jakiś niespotykanych wzorców przy łączeniu ciągów i zmiennych.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$extra&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'extra'</span><span style="color: #007700">;</span><span style="color: #0000BB">$zmienna&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'test&nbsp;'</span><span style="color: #0000BB">$extra</span><span style="color: #DD0000">'&nbsp;test&nbsp;'</span><span style="color: #0000BB">$extra</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #0000BB">$zmienna</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
W powyższym przykładzie zapomniano oczywiście o kropce miedzy zmienną a ciągiem. Poniżej poprawny sposób:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$extra&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'extra'</span><span style="color: #007700">;</span><span style="color: #0000BB">$zmienna&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'test&nbsp;'</span><span style="color: #0000BB"><em><span></span><span style="color: #007700">.</span><span style="color: #0000BB"></span></em>$extra<em><span></span><span style="color: #007700">.</span><span style="color: #0000BB"></span></em></span><span style="color: #DD0000">'&nbsp;test&nbsp;'</span><span style="color: #0000BB"><em><span></span><span style="color: #007700">.</span><span style="color: #0000BB"></span></em>$extra</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #0000BB">$zmienna</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Powyższy kod można także przedstawić w nieco innej formie.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"> <span style="color: #0000BB">&lt;?php$extra&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'extra'</span><span style="color: #007700">;</span><span style="color: #0000BB">$zmienna&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"test&nbsp;$extra&nbsp;test&nbsp;$extra"</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #0000BB">$zmienna</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>&nbsp;</span></pre>
Czasami zdarza się, że musimy dodać cos do zmiennej. W takim przypadku robimy to w ten sposób:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$zmienna&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'test'</span><span style="color: #007700">;</span><span style="color: #0000BB">$zmienna&nbsp;</span><span style="color: #007700">.=&nbsp;</span><span style="color: #DD0000">'&nbsp;extra'</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #0000BB">$zmienna</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<h3>Dyrektywa global w funkcjach</h3>
Czasami zdarza się, że musimy mieć dostęp do zmiennej z zewnątrz. Są dwie metody. Pierwsza to przekazywanie danych przez parametry funkcji. Druga metoda oznacza zastosowanie dyrektywy global. Oto prosty przykład jak to działa.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$zmienna&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'text'</span><span style="color: #007700">;function&nbsp;</span><span style="color: #0000BB">test</span><span style="color: #007700">(){</span><span style="color: #0000BB"> global&nbsp;$zmienna</span><span style="color: #007700">;</span><span style="color: #0000BB"> return&nbsp;$zmienna</span><span style="color: #007700">.</span><span style="color: #DD0000">'&nbsp;cos&nbsp;extra'</span><span style="color: #007700">;}echo&nbsp;</span><span style="color: #0000BB">test</span><span style="color: #007700">();</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Jeżeli usuniecie global wtedy wyświetli się tylko <i>cos extra</i>
<br />
<h3>failed to open stream</h3>
Najczęstsza wina takiego stanu rzeczy jest nieprawidłowa ścieżka, zła lokalizacja do zdalnego pliku bądź nie odpowiadający serwer. Na początku omówimy kwestie związana z otwieraniem nieistniejącego pliku za pomocą funkcji <tt>fopen()</tt>.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$uchwyt&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #DD0000">'./plik.txt'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'r'</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Powyższy kod wygeneruję błąd <b>No such file or directory</b> jeżeli plik nie istnieję. Aby zapobiec takiemu zdarzeniu trzeba dodatkowo użyć funkcji <tt>file_exists()</tt>.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$plik&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'./plik.txt'</span><span style="color: #007700">;if(!</span><span style="color: #0000BB">file_exists</span><span style="color: #007700">(</span><span style="color: #0000BB">$plik</span><span style="color: #007700">)){</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'Plik&nbsp;nie&nbsp;istnieje'</span><span style="color: #007700">;}else{</span><span style="color: #0000BB"> $uchwyt&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #0000BB">$plik</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'r'</span><span style="color: #007700">);}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Gdyby plik nie posiadał odpowiedniego <a href="http://pl.wikipedia.org/wiki/Prawa_dostępu" target="_blank" class="postlink">chmodu</a> to dodatkowo dostalibyśmy komunikat <b>Permission denied</b>. Dlatego też trzeba się dobrze zastanowić w jaki sposób będziemy operować na plikach.
<br />
<h3><i>fsocketopen()</i> i <b>unable to connect</b></h3>
Mamy sobie taki kod, który doprowadzi do błędu ze względu na to, że próbujemy połączyć się z nieistniejącym serwisem.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$uchwyt&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">fsockopen</span><span style="color: #007700">(</span><span style="color: #DD0000">"www.example.com"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">88</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$errno</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$errstr</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">);if(!</span><span style="color: #0000BB">$uchwyt</span><span style="color: #007700">){</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">"$errstr&nbsp;($errno)"</span><span style="color: #007700">;}else{</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'dalsze&nbsp;operacje'</span><span style="color: #007700">;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Przypuśćmy iż host i port są prawidłowe to jednak przy przekroczeniu limitu czasowego funkcja także wywali błąd. W tym przypadku mamy dwie opcje. Jedna z nich to zmiana poziomu raportowania błędów w php.ini. Druga opcja to proste stłumienie błędów za pomocą @ przed nazwa funkcji.
<br />
<h3><b>headers already sent by</b></h3>
Mój ulubiony błąd. Najczęściej spotykany na wszelkiego rodzaju forach. Taki komunikat mówi nam o tym, że przed wysłaniem nagłówka (np. rozpoczęciem sesji, wysłaniem ciastka) zostało już coś wysłane do przeglądarki. Aby zapobiec temu zjawisku trzeba usunąć wszystkie znaki wędrujące do browsera przed operacjami, które wysyłają dodatkowe nagłówki do przeglądarki bądź zastosowanie buforu, patrz <tt>ob_start()</tt> i <tt>ob_end_flush()</tt>. Powyższy błąd dość szczegółowo opisałem w artykule pod tytułem <a href="http://www.capaciouscore.pl/artykuly/blad-headers-already-sent-by/" target="_blank" class="postlink">[PHP] headers already sent by</a>.
<br />
<h3>Błędy logiczne</h3>
Czasami zdarza nam się, że popełnimy błąd logiczny tj. taki kiedy podamy nieprawidłowe warunki dla instrukcji warunkowej. Przykład poniżej:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$x&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">17</span><span style="color: #007700">;</span><span style="color: #0000BB">$y&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">22</span><span style="color: #007700">;if(</span><span style="color: #0000BB">$x&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">17&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$y&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">22</span><span style="color: #007700">){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">/*&nbsp;ten&nbsp;warunek&nbsp;nigdy&nbsp;nie&nbsp;zostanie&nbsp;spełniony&nbsp;*/</span><span style="color: #007700">}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<h3><i>Wyjątki</i> w składni</h3>
Pamiętajmy aby nie zostawiać przez przypadek ; po pętli. Czasami zdarza się, że edytor sam dokleja. Poniższy przykład wyrzuci tylko 5.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">5</span><span style="color: #007700">;&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">);{</span><span style="color: #0000BB"> echo&nbsp;$h</span><span style="color: #007700">.</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<h3>Dozwolone znaki w nazwach zmiennych</h3>
Pamiętajmy, że w nazwach zmiennych i tablic nie możemy używać niedozwolonych znaków. Wolno używać a-z, A-Z, 0-9 (z wyjątkiem początku nazwy) oraz _ dodatkowo możemy użyć znaków z ASCII od 127 do 255.
<br />
<h3>Liczymy od 0 a nie od 1</h3>
Pamiętajmy, że w językach programowania indeksy tablic zaczynają się od 0 a nie od 1.
<br />
<h3>Brakujące klamerki w instrukcjach warunkowych</h3>
Czasami zdarzy się ze gdzieś brakuje klamerki. Gdy kod jest mocno rozbudowany to znalezienie takiego błędu doprowadzi do straty czasu. Dlatego tez warto stosować wcięcia w kodzie i starać się aby kod był jak najbardziej czytelny.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$zmienna&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'test'</span><span style="color: #007700">;if(</span><span style="color: #DD0000">'test'&nbsp;</span><span style="color: #007700">!=&nbsp;</span><span style="color: #DD0000">'test'</span><span style="color: #007700">)</span><span style="color: #FF8000">/*&nbsp;ucinamy&nbsp;{&nbsp;*/</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'cos&nbsp;sie&nbsp;dzieje'</span><span style="color: #007700">;}</span><span style="color: #0000BB">$zmienna2&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'test'</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Powyższy kod wskaże nam 7 linię. W tym przypadku detekcja będzie prosta. Jednak co się stanie gdy utniemy klamerkę końcową?
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"> <span style="color: #0000BB">&lt;?php$zmienna&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'test'</span><span style="color: #007700">;if(</span><span style="color: #DD0000">'test'&nbsp;</span><span style="color: #007700">!=&nbsp;</span><span style="color: #DD0000">'test'</span><span style="color: #007700">){</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'cos&nbsp;sie&nbsp;dzieje'</span><span style="color: #007700">;</span><span style="color: #FF8000">/*&nbsp;ucinamy&nbsp;}&nbsp;*/</span><span style="color: #0000BB">$zmienna2&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'test'</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>&nbsp;</span></pre>
Wskazało nam błąd w linii 11. Zabawne gdyż ten kod posiada tylko 10 linii. Właśnie w takich przypadkach mamy przysłowiowy pasztet szczególnie kiedy plik liczy parę tysięcy linijek. Dlatego ważne jest robienie częstych kopii zapasowych przez edytor. Potem unikniemy takich problemów jeżeli nagle okaże się ze gdzieś popełniliśmy błąd i nie potrafimy go zlokalizować. Możemy oczywiście próbować znaleźć błąd przez echo. Przed błędem dana treść zostanie wyświetlona lecz po błędzie już nie.
<br />
<h3>Perfekcja</h3>
Testy, testy i jeszcze raz testy. Bez nich szybko wejdziemy na minę. Dlatego też ważne jest abyśmy starali się na bieżąco testować kod w rożnych warunkach. Ważne jest aby samemu szukać rozwiązania, a nie czekać na to, że ktoś z forum znajdzie je za Ciebie!
<br />
<h3>Własna obsługa błędów</h3>
Aby tego dokonać tworzymy własna funkcje, a następnie używamy funkcji <tt>set_error_handler()</tt> aby nakierować na funkcje obsługująca własne błędy.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">wlasny_blad</span><span style="color: #007700">(</span><span style="color: #0000BB">$errno</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$errstr</span><span style="color: #007700">){</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'&lt;b&gt;Blad:&lt;/b&gt;&nbsp;['</span><span style="color: #007700">.</span><span style="color: #0000BB">$errno</span><span style="color: #007700">.</span><span style="color: #DD0000">']&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$errstr</span><span style="color: #007700">.</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;Blad&nbsp;zalogowano'</span><span style="color: #007700">;</span><span style="color: #0000BB"> exit</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #FF8000">/*&nbsp;tutaj&nbsp;można&nbsp;dodać&nbsp;funkcje&nbsp;logująca&nbsp;takie&nbsp;przypadki&nbsp;*/</span><span style="color: #007700">}</span><span style="color: #0000BB">set_error_handler</span><span style="color: #007700">(</span><span style="color: #DD0000">'wlasny_blad'</span><span style="color: #007700">);</span><span style="color: #0000BB">$uchwyt&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #DD0000">'cokolwiek'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'r'</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<h3>Wyjątki</h3>
Poniższy kod przedstawia metode zastosowania wyjątkow w PHP.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">dzielenie</span><span style="color: #007700">(</span><span style="color: #0000BB">$a</span><span style="color: #007700">){</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">/</span><span style="color: #0000BB">$a</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">throw&nbsp;new&nbsp;</span><span style="color: #0000BB">Exception</span><span style="color: #007700">(</span><span style="color: #DD0000">'Dzielenie&nbsp;przez&nbsp;zero.'</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #007700">}}try{</span><span style="color: #0000BB"> echo&nbsp;dzielenie</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">).</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB"> echo&nbsp;dzielenie</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">).</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;}catch&nbsp;(</span><span style="color: #0000BB">Exception&nbsp;$e</span><span style="color: #007700">){</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'Złapano&nbsp;wyjątek:&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$e&nbsp;</span><span style="color: #007700">-&gt;&nbsp;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">();}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>]]></description></item><item><title>Zrobione prawo jazdy (A + B)</title><pubdate>Sun, 25 Oct 2009 10:27:11 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/zrobione-prawo-jazdy-a-i-b/</link><comments>http://www.capaciouscore.pl/artykuly/zrobione-prawo-jazdy-a-i-b/#komentarze</comments><description><![CDATA[Tą drobna notkę miałem napisać już jakiś czas temu lecz zabrakło mi czasu na dokonanie tego iście diabelskiego planu. Zacznijmy od początku. Na wakacjach tego roku zdałem egzaminy na prawo jazdy. Mam na myśli kategorię A i B. Dziwie się ludziom, którzy nie zdają za trzecim lub więcej razami. Niby taki straszny ten egzamin lecz jak się podejdzie na luzie do niego to wydaje się prosty. Wystarczy tylko zachować spokój i być opanowanym. Pamiętać o zasadach panujących na drodze. Myśleć głowa, a nie panikować! Czasami się ludziom dziwie. Sytuacja realna. Pamiętam jakby to było wczoraj. Gość wyczytał listę, na której byłem ja. Idziemy grupką do samochodów. Przede mną dziewczyna wsiada na tylne siedzenia za egzaminatora. Autentyk! Nie wiem co ta pani chciała zrobić. Może udusić sznurem egzaminatora? Nie wiem. Nie jest mi dane to wiedzieć <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" /> Co stres z ludźmi robi? Tego nikt załapać nie może. Rozumiem, że można popełnić jakiś błąd bo ludzką rzeczą jest błądzić lecz takie sytuacje przechodzą moje wszelkie pojęcie. Dla przykładu zgasł mi Yaris startując przy robieniu zadania na łuku. Powód? Nie miałem wyczucia <img src="http://www.capaciouscore.pl/smiles/icon_razz.gif" class="emoticon" alt="Razz" /> Innym przykładem będzie zgaśniecie Hondy CBF 250 na wzniesieniu. Powód? Zbyt szybko łapiące sprzęgło.
<br />

<br />
Większość moich znajomych zdało za pierwszym razem kategorię B. Stąd moje pytanie dlaczego tak dużo osób nie zdaję za pierwszym razem, a potem słyszymy płacz, że to egzaminator był ble? Obserwując egzamin na kategorię pamiętam, że 2 osoby w dniu, w którym zdawałem kategorię A zaliczyło przysłowiową glebę. Pierwsza sytuacja była z dziewczyną. Wykonała wszystko elegancko na placu i już wystarczyło zaparkować lecz stanęła i przechyliła się na prawo co spowodowało kontakt motocykla z ziemia. Skutkiem tej kolizji była negatywna ocena. W sumie się nie dziwie. Dziewczyna miała około 160cm wzrostu wiec ledwo na palcach się utrzymywała. Druga sytuacja jest dla mnie niezrozumiała. Gość wjechał na wzniesienie i się po prostu przewrócił. Nie jestem w stanie znaleźć na to logicznego wytłumaczenia. Czy jadąc prosto można strącić równowagę? Pamiętam, że po zaliczeniu zadania na placu egzaminator podszedł i powiedział:
<br />
<p class="quote"><cite>Egzaminator</cite> napisał(a):</p> <blockquote><p>Dziś dwie osoby upadły czyli o trzy za dużo. Rozumiecie? Jeżeli macie zamiar powtórzyć wyczyny tych osób w terenie miejskim to proszę zrezygnować już teraz bo jak to miałoby wyglądać w mieście?</blockquote>
Po za tym nie wyprzedzajcie na przejściu dla pieszych rowerzystów <img src="http://www.capaciouscore.pl/smiles/icon_razz.gif" class="emoticon" alt="Razz" /> bo źle się to skończy, tak jak dla jednego ze zdających.
<br />

<br />
Z perspektywy czasu puszką (samochodem) jeżdżę niewiele bo i niewiele jest okazji. Trzeba przyznać, że kierowca rajdowym nie będę. W sumie kategorie B robiłem tylko jednym celu. Mianowicie chciałem być niedzielnym kierowca, a tak na prawdę kategoria B potrzebna mi do przewozu rzeczy <img src="http://www.capaciouscore.pl/smiles/icon_razz.gif" class="emoticon" alt="Razz" /> i nic po za tym. Normalnie to na motocyklu wole polatać. I to inne odczucia i inna jazda. Szkoda tylko, że drogi nie są już tak piękne.]]></description></item><item><title>Ludzie podobni do mnie</title><pubdate>Sun, 25 Oct 2009 5:02:45 +0100</pubdate><link>http://www.capaciouscore.pl/artykuly/ludzie-podobni-do-mnie/</link><comments>http://www.capaciouscore.pl/artykuly/ludzie-podobni-do-mnie/#komentarze</comments><description><![CDATA[Dziś króciutko. Od czasu kiedy poznałem parę osób przez internet i spotkałem się z nimi w <i>realu</i> zacząłem także szukać ludzi myślących podobnie do mnie. Obrałem sobie za cel posiadanie znajomych na poziomie, z którymi można pogadać na każdy temat i naturalnie wypić &quot;kapkę&quot; trunku, okazjonalnie oczywiście. I nie ma tutaj mowy o upijaniu się, prawda Aga <img src="http://www.capaciouscore.pl/smiles/icon_question.gif" class="emoticon" alt="Question" /> <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> O nie <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />
<br />
Na początku myślałem sobie ze to głupota. Rządziły mną wątpliwości lecz po poznaniu Doroty, Agi i Jacka wszystko stało się klarowne. Korzystając z okazji pozdrawiam Was moi mili. To dzięki Wam odkryłem po części siebie. Dzięki Wam za to. Teraz jestem otwarty na propozycje i czekam... może cos ciekawego mnie spotka.]]></description></item><item><title>[PHP] Banalna metoda autoryzacji w stylu .htpasswd i .htaccess</title><pubdate>Thu, 15 Oct 2009 11:26:54 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/banalna-metoda-autoryzacji-w-stylu-htpasswd-i-htaccess/</link><comments>http://www.capaciouscore.pl/artykuly/banalna-metoda-autoryzacji-w-stylu-htpasswd-i-htaccess/#komentarze</comments><description><![CDATA[Przed przedstawieniem tej metody muszę Was lekko doinformować jakie zobowiązania wiążą się przy stosowaniu tego typu autoryzacji. Po pierwsze nasz PHP musi pracować jako moduł <a href="http://pl.wikipedia.org/wiki/Apache_(serwer)" target="_blank" class="postlink">Apache</a>. Oznacza to, że jeżeli PHP pracuje w trybie CGI to ta metoda nie zadziała. Dostępne są dwie metody autoryzacji: &quot;Basic&quot; i &quot;Digest&quot;. Trzeba pamiętać, że trzeba wysłać pierw nagłówek z  <i>WWW-Authenticate</i> przed <i>HTTP/1.0 401</i> ze względu na kapryśne IE. Więcej informacji w manualu (link poniżej).
<br />
Z informacji, która posiadam jest to jedna z pierwszych metod autoryzacji przed pojawieniem się PHP. Oczywiście można byłoby sprawdzać czy takie konto istnieje na podstawie jakiejś bazy lecz chciałem tylko przedstawić Wam w jaki sposób uzyskuję się taki efekt (widok z Internet Explorer 6):
<br />
<img src="http://www.capaciouscore.pl/download/other/okno-autoryzacji-windows-internet-explorer.png" alt="okno-autoryzacji-windows-internet-explorer.png" />
<br />
Powyższy efekt możemy uzyskać przy pomocy tego prostego kodu:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;Banalna&nbsp;metoda&nbsp;autoryzacji</span><span style="color: #007700">if(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'PHP_AUTH_USER'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #DD0000">'login'&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'PHP_AUTH_PW'</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #DD0000">'pass'</span><span style="color: #007700">){</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'Ukryta&nbsp;strona'</span><span style="color: #007700">;}else{</span><span style="color: #0000BB"> header</span><span style="color: #007700">(</span><span style="color: #DD0000">"WWW-Authenticate:&nbsp;Basic&nbsp;realm=Anything"</span><span style="color: #007700">);</span><span style="color: #0000BB"> header</span><span style="color: #007700">(</span><span style="color: #DD0000">"HTTP/1.0&nbsp;401&nbsp;Unauthorized"</span><span style="color: #007700">);</span><span style="color: #0000BB"> exit</span><span style="color: #007700">;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/features.http-auth.php" target="_blank" class="postlink">http://php.net/manual/pl/features.http-auth.php</a>]]></description></item><item><title>Recenzja telefonu Motorola V547</title><pubdate>Thu, 15 Oct 2009 7:32:17 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/recenzja-telefonu-motorola-v547/</link><comments>http://www.capaciouscore.pl/artykuly/recenzja-telefonu-motorola-v547/#komentarze</comments><description><![CDATA[Używałem tego telefonu od 2004 roku do czasu nabycia Sony Ericsson W350i. Jest on nieco masywniejszy niż moja obecna komórka lecz w tamtych czasach to był rarytas. Pisanie SMS'ów było wygodne za sprawą dobrze opracowanej klawiatury. Nie posiadał funkcji Notatnika lecz to można było łatwo obejść zapisując ważne informacje jako kopie robocze bądź szablony SMS'ów. Standardowa bateria (820mAh) wystarcza na około 3 dni ciągłego działania. Oczywiście nie ma mowy o słuchaniu muzyki z uwagi na brak możliwości użycia pamięci zewnętrznej. Docelowo telefon ma 5MB pamięci, co wystarcza na dwa lub trzy utwory skompresowane. Słuchając muzyki przez głośnik stwierdziłem, że jakość utworu znacząco się obniża po skompresowaniu więc stosowanie słuchawek mijało się z celem. Z tego co pamiętam najbardziej prądochłonne było robienie zdjęć. Musze przyznać, że na tamte czasy 0,3Mpx wystarczało w zupełności. Fotografie w rozdzielczości 640	na 480 wychodziły całkiem przyzwoicie. Telefon posiadał Bluetooth lecz nie posiadał IRDA co w niczym nie przeszkadzało gdyż teraz praktycznie każde dobre urządzenie ma Bluetooth. Pamiętam, że telefon posiadał WAP, który się przydaję od czasu do czasu. Przydatną sprawa w tym telefonie był drugi wyświetlacz, na którym można było zobaczyć która jest godzina oraz to czy przypadkiem nie mamy nowej wiadomości. Dobrze przemyślaną rzeczą jest brzęczyk, który był puszczany cyklicznie w sytuacji gdy dostaliśmy SMS 'a lecz go nie przeczytaliśmy bądź podczas rozładowywania się baterii.
<br />

<br />
Do wad telefonu trzeba zaliczyć błąd w oprogramowaniu, który to usuwa SMS'a zamiast go zapisać w kopiach roboczych w momencie klikniecie czerwonej słuchawki. O ile dobrze pamiętam ten sam błąd był w sytuacji kiedy zamykamy klapkę. Do problemów związanych z tym telefonem trzeba zaliczyć brak możliwości nabycia obudowy. Mimo ze telefon był dość odporny na upadki to jednak po pewnym czasie uszkodziłem gwint gdzie była mocowana antena i była konieczność wymienienia obudowy. Te zdarzenie po części zmusiło mnie niejako do wymiany telefonu.
<br />

<br />
Biorąc pod uwagę telefony w tamtym czasie dla Motoroli V547 dam ocenę 7/10.]]></description></item><item><title>[PHP] Losowanie elementów z tablicy bez powtarzania się</title><pubdate>Tue, 06 Oct 2009 9:19:02 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/losowanie-elementow-z-tablicy-bez-powtarzania-sie/</link><comments>http://www.capaciouscore.pl/artykuly/losowanie-elementow-z-tablicy-bez-powtarzania-sie/#komentarze</comments><description><![CDATA[Krótko i na temat. Oto prosty skrypt, który wylosuje 5 nie powtarzających się wartości z 20 elementowej tablicy.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;Tworzymy&nbsp;tablice&nbsp;ze&nbsp;zdefiniowanymi&nbsp;liczbami&nbsp;do&nbsp;wylosowania</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'list'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">array_flip</span><span style="color: #007700">(</span><span style="color: #0000BB">range</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">21</span><span style="color: #007700">));</span><span style="color: #FF8000">//&nbsp;Jeżeli&nbsp;wersja&nbsp;PHP&nbsp;&lt;&nbsp;4.2.0&nbsp;wtedy&nbsp;zachodzi&nbsp;potrzeba&nbsp;użycia&nbsp;generator&nbsp;liczb&nbsp;losowych//&nbsp;srand(floor(time()&nbsp;/&nbsp;(60*60*24)));//&nbsp;Losowanie</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'random'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">array_rand</span><span style="color: #007700">(</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'list'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">5</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;Drugi&nbsp;parametr&nbsp;odpowiada&nbsp;za&nbsp;ilość&nbsp;elementów,&nbsp;które&nbsp;mają&nbsp;zostać&nbsp;wylosowane//&nbsp;Sortowanie&nbsp;dla&nbsp;klarowności</span><span style="color: #0000BB">sort</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'random'</span><span style="color: #007700">]);</span><span style="color: #FF8000">//&nbsp;Throw</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">implode</span><span style="color: #007700">(</span><span style="color: #DD0000">',&nbsp;'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'random'</span><span style="color: #007700">]);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.array-flip.php" target="_blank" class="postlink">http://php.net/manual/pl/function.array-flip.php</a>
<br />
<a href="http://php.net/manual/pl/function.array-rand.php" target="_blank" class="postlink">http://php.net/manual/pl/function.array-rand.php</a>
<br />
<a href="http://php.net/manual/pl/function.implode.php" target="_blank" class="postlink">http://php.net/manual/pl/function.implode.php</a>
<br />
<a href="http://php.net/manual/pl/function.range.php" target="_blank" class="postlink">http://php.net/manual/pl/function.range.php</a>
<br />
<a href="http://php.net/manual/pl/function.sort.php" target="_blank" class="postlink">http://php.net/manual/pl/function.sort.php</a>]]></description></item><item><title>[PHP] headers already sent by</title><pubdate>Tue, 29 Sep 2009 5:04:05 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/blad-headers-already-sent-by/</link><comments>http://www.capaciouscore.pl/artykuly/blad-headers-already-sent-by/#komentarze</comments><description><![CDATA[<h2>Omówienie</h2>
Dość częstym i banalnym błędem jest <i>headers already sent by</i>, który pojawia się w momencie próby wysłania nagłówków do przeglądarki. Oznacza to, że przed wysłaniem jakichkolwiek treści strony musimy wysłać wszystkie nagłówki. Najczęściej problem stwarzany jest przez użycie funkcji <tt>session_start()</tt> lub <tt>setcookie()</tt>. Poniższy przykład wygeneruję nam omawiany błąd.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'hello&nbsp;there!'</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;Zainicjowanie&nbsp;sesji</span><span style="color: #0000BB">session_start</span><span style="color: #007700">();</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Aby rozwiązać problem wystarczy przesunąć <tt>session_start()</tt> na początek w ten sposób:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;Zainicjowanie&nbsp;sesji</span><span style="color: #0000BB">session_start</span><span style="color: #007700">();echo&nbsp;</span><span style="color: #DD0000">'hello&nbsp;there!'</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<h2>Includowanie i headers already sent by</h2>
Kolejną sprawę, która trzeba omówić są pliki includowane. Przypuścmy, że to jest nasz <b>index.php</b>:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">include&nbsp;</span><span style="color: #DD0000">'./a.php'</span><span style="color: #007700">;include&nbsp;</span><span style="color: #DD0000">'./b.php'</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;Zainicjowanie&nbsp;sesji</span><span style="color: #0000BB">session_start</span><span style="color: #007700">();</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
ten to: <b>a.php</b>
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$init&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
a poniższy to: <b>b.php</b>
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"> <span style="color: #0000BB">&lt;?php</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'$init&nbsp;=&nbsp;'</span><span style="color: #007700">.(</span><span style="color: #0000BB">$init&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">true&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #DD0000">'true'&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">'false'</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Najlepszym rozwianiem tego problemu jest inicjowanie mechanizmu sesji na początku pliku głównego czyli <b>index.php</b> powinien wyglądać tak:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;Zainicjowanie&nbsp;sesji</span><span style="color: #0000BB">session_start</span><span style="color: #007700">();</span><span style="color: #FF8000">//&nbsp;Inne&nbsp;operacje</span><span style="color: #007700">include&nbsp;</span><span style="color: #DD0000">'./a.php'</span><span style="color: #007700">;include&nbsp;</span><span style="color: #DD0000">'./b.php'</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<h2>Używanie bufora ob_start()</h2>
Niby to jest proste lecz co w przypadku kiedy trzeba będzie wysłać <a href="http://pl.wikipedia.org/wiki/Ciasteczko" target="_blank" class="postlink">cookie</a> w środku skryptu? Tutaj kłania się budowa skryptu. Normalnie wygląda to w ten sposób, że najpierw jest generowana cała strona, a dopiero na końcu parsowana i wysyłana do przeglądarki. W naszym wypadku kiedy wysłaliśmy już coś do przeglądarki z pomocą przychodzi nam bufor. Poniżej znajduję się przykład jak go zastosować.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?phpob_start</span><span style="color: #007700">();&nbsp;</span><span style="color: #FF8000">//&nbsp;Definitywnie&nbsp;na&nbsp;początku</span><span style="color: #0000BB">?&gt;</span>&lt;html&gt; &lt;head&gt; &lt;/head&gt; &lt;body&gt; &nbsp;<span style="color: #0000BB">&lt;?php &nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'I&nbsp;like&nbsp;bananas'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;setcookie</span><span style="color: #007700">(</span><span style="color: #DD0000">'TestCookie'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'The&nbsp;banana'</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;?&gt;</span> &lt;/body&gt;&lt;/html&gt;<span style="color: #0000BB">&lt;?phpob_end_flush</span><span style="color: #007700">();</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Jedyne co musimy pamiętać to fakt, że <tt>ob_start()</tt> umieszczamy na samym początku pliku zaś <tt>ob_end_flush()</tt> na końcu.
<br />
<h2>session_start() na początku i nadal jest błąd</h2>
Czasami zdarza się, że mamy taki oto kod:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?phpsession_start</span><span style="color: #007700">();</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Na pierwszy rzut oka powinno działać lecz jeżeli nowicjusz zapisze ów kod w notatniku to ten kochany program doda na początku pliku zbędne znaki, które są powodem problemów. <u>Odpowiednie kodowanie pliku ma znaczenie</u> dlatego też przestrzegam przed takimi praktykami! Wyjątkiem od reguły może być parametr <tt>auto_prepend_file</tt> w <b>php.ini</b>. Może się zdarzyć, że serwer będzie dorzucał automatycznie jakiś plik przed wygenerowaniem naszej strony. Sytuacje te są sporadycznie spotykane! Pamiętajmy, że używanie bufora może spowolnić dzianie serwisu szczególnie przy dużej ilości użytkowników dlatego też staramy się dobrze pisać aplikacje webowe i stosować <tt>ob_start()</tt> w ostatecznosci <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" />
<br />

<br />
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.ob-end-flush.php" target="_blank" class="postlink">http://php.net/manual/pl/function.ob-end-flush.php</a>
<br />
<a href="http://php.net/manual/pl/function.ob-start.php" target="_blank" class="postlink">http://php.net/manual/pl/function.ob-start.php</a>
<br />
<a href="http://php.net/manual/pl/function.session-start.php" target="_blank" class="postlink">http://php.net/manual/pl/function.session-start.php</a>]]></description></item><item><title>Recenzja telefonu Sony Ericsson W350i</title><pubdate>Mon, 28 Sep 2009 4:04:08 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/recenzja-telefonu-sony-ericsson-w350i/</link><comments>http://www.capaciouscore.pl/artykuly/recenzja-telefonu-sony-ericsson-w350i/#komentarze</comments><description><![CDATA[Telefon ten mam od czerwca 2008 roku i sprawuję się świetnie. Jest mały i delikatny lecz to nie przeszkadza w jego używaniu. Ważnym atutem są klawisze, które są bardzo wygodne moim zdaniem. Oczywiście jak na telefon z 2008 roku posiada wszystkie niezbędne funkcje, które powinien mieć czyli:
<br />
<ul class="list">
<li> GPRS</li>
<li> MMS</li>
<li> środowisko Java</li>
<li> aparat fotograficzny</li>
</ul>
Standardowa bateria (780mAh) wystarcza na słuchanie muzyki przez ponad 12 godzin na pełnej głośności. Jeżeli już wspomniałem o tej głośności, to na moje ucho jest wystarczająco głośny aby zagłuszyć otaczający nas świat. Docelowo ma 14MB pamięci, co w zupełności wystarcza na strzelenie kilkudziesięciu fotek na przyzwoitym poziomie. Sony Ericsson ma złącze Memory Stick Micro, które daję nam możliwość rozszerzenia pamięci telefonu o parę GB. Osobiście używam kartę 512MB lecz testowałem także 1GB oraz 2 GB i nie było problemu z prędkościami odczytywania danych. Dla tych którzy lubią pisać duże ilości SMS'ów ucieszy fakt, że ów aparat ma bardzo dobry słownik T9. Z danych technicznych, które można przeczytać na stronie producenta wynika, że książka adresowa pomieści do 1000 kontaktów. Sam nie wiem po co komu tyle <img src="http://www.capaciouscore.pl/smiles/icon_razz.gif" class="emoticon" alt="Razz" /> Ja mieszczę się w 200 <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> Dla mnie istotna rzeczą jest czy telefon jest praktyczny. W moim przekonaniu jest i to bardzo. Świetny do dłuższych spacerów, przejażdżek i podroży. Jest prosty w obsłudze i nawet laik poradzi sobie z jego obsługą. Telefon posiada bardzo wygodna klapkę z przyciskami do playera mp3.
<br />

<br />
Do mankamentów muszę zaliczyć małą pamięć dla Notatek. Oczywiście można sobie z tym problemem poradzić w inny sposób chociażby poprzez zapisywanie ważnych informacji jako kopie robocze SMS'ów. Kolejnym mankamentem jest słaba jakość farby na przycisku blokady telefonu, która to szybko się ściera. Największym błędem projektantów tego telefonu jest gniazdo do słuchawek/ładowarki. Moim zdaniem powinno być odwrócone o 180°. Kabel idący do słuchawek jest skierowany w głąb kieszeni zamiast w górę zakładając, że telefon jest włożony góra do dołu. Przy takiej pozycji wygodniejsze jest korzystanie z klawiszy playera lecz ciągłe gięcie przewodu będzie miało negatywne skutki w przyszłości. Jeżeli już wspomniałem o gnieździe to wspomnę także, że warto mieć ładowarkę z drugim wyjściem, które umożliwia nam ładowanie telefonu oraz słuchanie muzyki w tym samym czasie. Dużą niedogodnością jest brak możliwości kręcenia filmów choć mi to nie potrzebne to wielu osobom na pewno się nie spodoba. Analizując inne telefony, z którymi miałem do czynienia, model W350i oceniam na 9/10.]]></description></item><item><title>Wyszukiwarka YouTube w pasku adresu Opery</title><pubdate>Sun, 27 Sep 2009 9:24:35 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/wyszukiwarka-youtube-w-pasku-adresu-opery/</link><comments>http://www.capaciouscore.pl/artykuly/wyszukiwarka-youtube-w-pasku-adresu-opery/#komentarze</comments><description><![CDATA[Jakiś czas temu pomyślałem sobie, że skoro istnieję skrót do wyszukiwarki <a href="http://www.google.pl/" target="_blank" class="postlink">google</a> w pasku adresu to dlaczego nie dałoby rady zrobić takiego samego skrótu tylko, że dla wyszukiwarki <a href="http://www.youtube.com" target="_blank" class="postlink">YouTube</a>? Oto prosta solucja jak dodać ów skrót.
<br />

<br />
Wchodzimy z menu do <b>Narzędzia</b> -&gt; <b>Preferencje...</b> (Ctrl + F12) -&gt; zakładka <b>Wyszukiwanie</b> -&gt; klikamy przycisk <b>Dodaj...</b> następnie uzupełniamy według poniższego schematu:
<br />
<img src="http://www.capaciouscore.pl/download/other/opera-youtube-wyszukiwarka.png" alt="opera-youtube-wyszukiwarka.png" />
<br />
Teraz wystarczy wklepać w ramach testu np. <i>yt capaciouscore intro</i> do pasku adresu i mamy to czego szukaliśmy.]]></description></item><item><title>Komputer jako zagrożenie czy dobrodziejstwo XXI wieku?</title><pubdate>Mon, 14 Sep 2009 1:45:58 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/komputer-jako-zagrozenie-czy-dobrodziejstwo-xxi-wieku/</link><comments>http://www.capaciouscore.pl/artykuly/komputer-jako-zagrozenie-czy-dobrodziejstwo-xxi-wieku/#komentarze</comments><description><![CDATA[Zacznijmy od tego, kiedy pierwsze gry powstały. Miało to miejsce około 60 lat temu. Były na tyle skomplikowane na ile technika pozwalała. Osobiście uważam, że rozrywka zaczęła się w latach 90, kiedy to <a href="http://pl.wikipedia.org/wiki/Komputer_osobisty" target="_blank" class="postlink">PC</a>'ty rosły w siłę oraz zaczęły ukazywać się kultowe gry takie jak: <a href="http://pl.wikipedia.org/wiki/Wolfenstein_3D" target="_blank" class="postlink">Wolfenstein 3D</a>, <a href="http://pl.wikipedia.org/wiki/Doom" target="_blank" class="postlink">Doom</a>, <a href="http://pl.wikipedia.org/wiki/Warcraft" target="_blank" class="postlink">WarCraft</a>, <a href="http://pl.wikipedia.org/wiki/SimCity_(seria)" target="_blank" class="postlink">SimCity</a>, <a href="http://pl.wikipedia.org/wiki/Quake" target="_blank" class="postlink">Quake</a>, <a href="http://pl.wikipedia.org/wiki/Heroes_of_Might_and_Magic_(seria)" target="_blank" class="postlink">Heroes of Might and Magic</a>, <a href="http://pl.wikipedia.org/wiki/Age_of_Empires" target="_blank" class="postlink">Age of Empires</a>, <a href="http://pl.wikipedia.org/wiki/StarCraft" target="_blank" class="postlink">StarCraft</a>, <a href="http://pl.wikipedia.org/wiki/Unreal_Tournament" target="_blank" class="postlink">Unreal Tournament</a>, <a href="http://pl.wikipedia.org/wiki/FIFA_(seria_gier_komputerowych)" target="_blank" class="postlink">seria FIFA</a> czy też <a href="http://pl.wikipedia.org/wiki/Grand_Theft_Auto" target="_blank" class="postlink">Grand Theft Auto</a>. Dla uzupełnienia wiedzy proponuję zapoznać się z artykułem <a href="http://pl.wikipedia.org/wiki/Historia_gier_komputerowych" target="_blank" class="postlink">Historia gier komputerowych</a>. Od początku gry cieszyły się dużą popularnością użytkowników komputera. Gracza nie można było zaszufladkować do danej grupy wiekowej, gdyż wiek osób korzystających z tego typu rozrywki wahał się od około 8 do około 45 lat.
<br />

<br />
Analizując tą problematykę nasuwa się pytanie &quot;Czy komputer jest narkotykiem czy też narzędziem do realizacji własnych celów?&quot;. Zdania zapewne są podzielone. Jedni na pewno będą stać w obronie jakże pomocnego urządzenia jakim jest komputer, a drudzy będą twierdzić, że PC't jest takim samym narkotykiem jak inne środki odurzające. Warto przyjrzeć się temu problemowi z bliska, gdyż staje się on coraz poważniejszy. Odkąd usłyszałem o śmierci gracza, który umarł z wycieńczenia zdałem sobie sprawę, że coś jest nie tak skoro umiera gość od korzystania z komputera w nadmiernych ilościach. Czy nie możemy tutaj mówić o nowym nałogu?
<br />

<br />
Wiele firm zajmujących się produkcja gier ostrzegają przed tym, aby korzystać z rozrywki z umiarem. Niestety nie wszyscy posiadają na tyle rozwagi, aby zastosować się do tego typu rad i często przesądzają z ilością godzin spędzonych przed szklana bańka (monitorem) naginając wszystkie możliwe reguły zdrowego.
<br />

<br />
Niewątpliwie trzeba wspomnieć, że istnieje grupa gier która ma charakter edukacyjny. Te gry pozwalają &quot;rozwijać&quot; wyobraźnie, a także umysł gdyż każda gra zbudowana jest z leveli (z ang. poziomów) i tym wyższy level, tym więcej trzeba zaangażować się, aby przejść do następnego etapu. Niestety ma to swoje minusy. &quot;Zapalony&quot; gracz będzie dotąd męczył się z problemem jaki go napotkał do mementu, w którym go nie rozwiąże nie zważając na czas, obowiązki, prace domowe, a nawet pójście do szkoły czy też podstawowe czynności.
<br />

<br />
Warto wspomnieć o niebezpiecznym zjawisku jakie niosą gry komputerowe z możliwością interakcji z internetem (np. gry MMORPG). Mam tutaj na myśli np. agresję. Wystarczy drobny pretekst, a kłótnia rozkręca się, aż do ustąpienia jednej ze stron. Nierzadko człowiek po takich wydarzeniach staje się nabuzowany, agresywny w stosunku do innych i przenosi potem swoje emocje do świata realnego.
<br />

<br />
Niestety cyberprzestrzeń to także szambo pełne pornografii i pedofili(i). W internecie jest dosłownie wszystko.
<br />
<p class="quote"><cite>Bill Gates</cite> napisał(a):</p> <blockquote><p>Jeżeli nie można czegoś znaleźć w Google, to to po prostu nie istnieje</blockquote>
Ze względu na to, że tego medium prawie nie da się kontrolować i cenzurować, dlatego też występują tutaj zintensyfikowane zjawiska, które w normalnym świecie nie mają racji bytu.
<br />

<br />
Trafionym argumentem jest to, że korzystanie z komputera jest dobre, gdy za oknem mamy <i>złą pogodę</i> bądź po prostu nudzimy się. Wszystko jest dobre do czasu, kiedy panujemy nad czasem spędzonym przy monitorze. Warto powiedzieć sobie tutaj wprost następująca sentencję. Jeżeli mówimy, że już kończymy, a tego nie robimy to można mówić o początkach uzależnienia. Łatwo takie zjawisko zauważyć ponieważ z 15 min robi się godzina, a z godziny pięć. Nie ważne co się stało w &quot;wirtualnym świecie&quot;, ważne jest to, że tracimy kontrolę nad czasem. Często w takiej sytuacji zjawisko to określamy jako brak sił do oderwania się. Pierwszymi objawami są nadmierne godziny spędzone przy klawiaturze. Jeżeli planowany czas siedzenie przedłuża się o ponad 1 godzinę to powinniśmy się zaniepokoić tym co się dzieje z nami bądź znajomymi. Tutaj przekraczamy cienka granicę. Kolejnymi symptomami jest zmienianie priorytetów, utrata kontaktów z rówieśnikami, a nawet rodzina i przyjaciółmi. Osoba uzależniona systematycznie zaczyna zaniedbywać obowiązki. Pojawia się tutaj uczucie &quot;totalnej olewki&quot;. Gdy nie widzimy świata po za komputerem to jest to już za późno. Gdy nie mamy dostępu do komputera/internetu to ogarnia nas frustracja, złość, stajemy się nerwowi, nie potrafimy znaleźć dla siebie miejsca. Gdy odczuwamy rozłąkę z &quot;wirtualnymi przyjaciółmi&quot; to także jest znak, że coś nie gra z nami. W miarę możliwości niektórzy próbują ta lukę wypełnić np. chodząc do kafejek internetowych. Warto w tym momencie wspomnieć o czymś takim jak choroba komputerowa. Zazwyczaj używając pieca (komputera) jesteśmy w pozycji siedzącej. Nie jest to obojętne dla naszego organizmu. Po pewnym czasie pojawiają się pierwsze objawy tj. znużenie, zaburzenia czucia, ukrwienia i koordynacji ruchowej. Najwcześniejszymi objawami jakie się zauważa są: bóle palców, zimne dłonie, brak czucia oraz tępy ból. Następstwami są stany zapalne, obrzmienia na dłoniach, zapalenia mięśni oraz częste bóle głowy. Bardzo często zdarza się uczucie piekących oczu. Dodatkowo jeżeli pracujemy w głośnym otoczeniu to narażamy także swój własny słuch.
<br />

<br />
Teraz trochę statystyki. Według ostatnich badań przeprowadzonych przez rożne podmioty stwierdzono, że około 50% Polaków korzysta z internetu. Średnio takie surfowanie ma miejsce kilka razy w tygodniu. Ostatnimi czasy coraz więcej osób korzysta z dobrodziejstwa w zaciszu domowym zamiast w pracy czy szkole. Najczęściej Polak w sieci korzysta z komunikatora, szuka informacji oraz materiałów rozrywkowych. Często także zajmuje się ściąganiem plików. Czasami zdarza się, że osoba robi zakupy przez internet.
<br />

<br />
Podając powyższe informacje mam nadzieje, że choć trochę przybliżyłem Wam skalę zjawiska. Analizując temat dochodzę do wniosku, że więcej złego niż dobrego możemy w sieci znaleźć. Mimo, że te medium pozwala nam uzyskać natychmiastowy dostęp do wszelkiego rodzaju informacji to jednak często jest wykorzystywane w złych celach. Powinniśmy korzystać z komputera z umiarem, a ponadto jeżeli znamy osoby uzależnione, nie wahajmy się i zróbmy coś aby wyszły na dobra drogę. Może kiedyś to docenia. Pamiętajmy także o tym, aby kontrolować swój własny czas spędzony przed komputerem, aby nie popaść w to błędne koło. Warto także zaznaczyć, że ten &quot;sport&quot; pożera dużo czasu i pieniędzy. Miejmy także na uwadze że <i>wirtualny świat</i> tworzą ludzie (choć niekoniecznie) - wyjątkiem od tej reguły są boty. Istoty żywe czyli ludzie z krwi i kości, tworzą ten świat więc czasami warto zastanowić się czy stwierdzenie &quot;świat wirtualny&quot; sztucznie wykreowane przez media ma sens dalszego bytu. Chce także zwrócić uwagę, że oparłem się przede wszystkim na graczach ze względu, że to oni właśnie tworzą duża cześć &quot;rynku&quot;.]]></description></item><item><title>[PHP] Data powiększona o kilka dni</title><pubdate>Sun, 13 Sep 2009 6:40:47 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/data-powiekszona-o-kilka-dni/</link><comments>http://www.capaciouscore.pl/artykuly/data-powiekszona-o-kilka-dni/#komentarze</comments><description><![CDATA[W tym jakże krótkim artykule pokaże Wam w jaki sposób powiększyć aktualna datę o kilka dni. W naszym przypadku data aktualna będzie powiększana o 7 dni.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'date'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">date</span><span style="color: #007700">(</span><span style="color: #DD0000">'d.m.Y'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">strtotime</span><span style="color: #007700">(</span><span style="color: #DD0000">'+7&nbsp;days'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">time</span><span style="color: #007700">()));echo&nbsp;</span><span style="color: #DD0000">'Data&nbsp;powiększona&nbsp;o&nbsp;tydzień&nbsp;to:&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'date'</span><span style="color: #007700">];</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.date.php" target="_blank" class="postlink">http://php.net/manual/pl/function.date.php</a>
<br />
<a href="http://php.net/manual/pl/function.strtotime.php" target="_blank" class="postlink">http://php.net/manual/pl/function.strtotime.php</a>
<br />
<a href="http://php.net/manual/pl/function.time.php" target="_blank" class="postlink">http://php.net/manual/pl/function.time.php</a>]]></description></item><item><title>Czas szkolny nastał</title><pubdate>Fri, 11 Sep 2009 8:20:18 +0200</pubdate><link>http://www.capaciouscore.pl/aktualnosci/czas-szkolny-nastal/</link><comments>http://www.capaciouscore.pl/aktualnosci/czas-szkolny-nastal/#komentarze</comments><description><![CDATA[Czas szkolny nastał, a z nim braki czasowe. Powoli realizuję projekt video kursu PHP. Jak zwykle dużo jest planów lecz mało czasu. Mam nadzieję, że sprawna organizacja czasu pomoże mi w zrealizowaniu celów.]]></description></item><item><title>[PHP/MySQL] Łączenie się z serwerem i bazą danych MySQL?</title><pubdate>Tue, 08 Sep 2009 11:49:58 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/laczenie-sie-z-serwerem-i-baza-danych-mysql-oraz-roznice-pomiedzy-mysql-connect-i-mysql-pconnect/</link><comments>http://www.capaciouscore.pl/artykuly/laczenie-sie-z-serwerem-i-baza-danych-mysql-oraz-roznice-pomiedzy-mysql-connect-i-mysql-pconnect/#komentarze</comments><description><![CDATA[W tym krótkim artykule przedstawię Wam w jaki sposób łączymy się i wybieramy bazę oraz wskaże różnice między funkcja <tt>mysql_connect()</tt> i <tt>mysql_pconnect()</tt>.
<br />

<br />
Przy użyciu funkcji <tt>mysql_pconnect()</tt> zostaję nawiązane stałe połączenie, które nie zostanie zamknięte po wykonaniu skryptu. Przed próba stworzenia takiego połączenia PHP sprawdza czy nie istnieję identyczne połączenie czyli takie gdzie host, nazwa użytkownika i hasło są takie same. W sytuacji gdy PHP jest uruchomiony jako &quot;wrapper&quot; CGI wtedy zachodzi zjawisko, w którym po każdorazowym wykonaniu skryptu wszystkie zasoby są zwalniane. Tyczy się to także połączeń stałych. Musimy wiedzieć, że czas nawiązywania połączenia z bazą danych jest znaczny lecz zablokowanie zasobów serwera jest groźniejsze. Wyobraź sobie sytuacje, w której przekroczymy jednoczesny limit połączeń co doprowadzi do paraliżu aplikacji. W przypadku źle napisanych aplikacji doprowadzenie do takiego stanu wcale nie jest trudne! Wtedy kolejne próby połączeń spełzną na niczym.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'mysql'</span><span style="color: #007700">][</span><span style="color: #DD0000">'host'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'127.0.0.1'</span><span style="color: #007700">;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'mysql'</span><span style="color: #007700">][</span><span style="color: #DD0000">'login'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'root'</span><span style="color: #007700">;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'mysql'</span><span style="color: #007700">][</span><span style="color: #DD0000">'password'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'pass'</span><span style="color: #007700">;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'mysql'</span><span style="color: #007700">][</span><span style="color: #DD0000">'database'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'name'</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;Funkcja&nbsp;do&nbsp;prostej&nbsp;obsługi&nbsp;błędów</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">show_error</span><span style="color: #007700">(</span><span style="color: #0000BB">$id</span><span style="color: #007700">){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">/* &nbsp;*&nbsp;@Name_function:&nbsp;show_error &nbsp;*&nbsp;@Description:&nbsp;function&nbsp;display&nbsp;selected&nbsp;error &nbsp;*&nbsp;@Argument:&nbsp;$id&nbsp;(int) &nbsp;*/</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">switch(</span><span style="color: #0000BB">$id</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; case&nbsp;1</span><span style="color: #007700">:</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'couldn\'t&nbsp;connect&nbsp;to&nbsp;database'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; break</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; case&nbsp;2</span><span style="color: #007700">:</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'cannot&nbsp;select&nbsp;database'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; break</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; default</span><span style="color: #007700">:</span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'unknown&nbsp;error'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp; break</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}}</span><span style="color: #FF8000">//&nbsp;Łączenie&nbsp;z&nbsp;baza&nbsp;danych</span><span style="color: #0000BB">$mysql_handle&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">mysql_connect</span><span style="color: #007700">(</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'mysql'</span><span style="color: #007700">][</span><span style="color: #DD0000">'host'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'mysql'</span><span style="color: #007700">][</span><span style="color: #DD0000">'login'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'mysql'</span><span style="color: #007700">][</span><span style="color: #DD0000">'password'</span><span style="color: #007700">])&nbsp;or&nbsp;die&nbsp;(</span><span style="color: #0000BB">show_error</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">));</span><span style="color: #FF8000">//&nbsp;Wybieranie&nbsp;bazy&nbsp;danych</span><span style="color: #0000BB">mysql_select_db</span><span style="color: #007700">(</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'mysql'</span><span style="color: #007700">][</span><span style="color: #DD0000">'database'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$mysql_handle</span><span style="color: #007700">)&nbsp;or&nbsp;die(</span><span style="color: #0000BB">show_error</span><span style="color: #007700">(</span><span style="color: #0000BB">2</span><span style="color: #007700">));&nbsp;</span><span style="color: #FF8000">//&nbsp;Możemy&nbsp;użyć&nbsp;uchwytu&nbsp;lecz&nbsp;nie&nbsp;musimy&nbsp;gdy&nbsp;nawiązujemy&nbsp;tylko&nbsp;jedno&nbsp;połączenie//&nbsp;Zamykanie&nbsp;połączenia</span><span style="color: #0000BB">mysql_close</span><span style="color: #007700">(</span><span style="color: #0000BB">$mysql_handle</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.mysql-close.php" target="_blank" class="postlink">http://php.net/manual/pl/function.mysql-close.php</a>
<br />
<a href="http://php.net/manual/pl/function.mysql-connect.php" target="_blank" class="postlink">http://php.net/manual/pl/function.mysql-connect.php</a>
<br />
<a href="http://php.net/manual/pl/function.mysql-error.php" target="_blank" class="postlink">http://php.net/manual/pl/function.mysql-error.php</a>
<br />
<a href="http://php.net/manual/pl/function.mysql-pconnect.php" target="_blank" class="postlink">http://php.net/manual/pl/function.mysql-pconnect.php</a>
<br />
<a href="http://php.net/manual/pl/function.mysql-select-db.php" target="_blank" class="postlink">http://php.net/manual/pl/function.mysql-select-db.php</a>]]></description></item><item><title>[PHP] Lista dostępnych funkcji na serwerze</title><pubdate>Sat, 22 Aug 2009 6:02:24 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/lista-dostepnych-funkcji-na-serwerze/</link><comments>http://www.capaciouscore.pl/artykuly/lista-dostepnych-funkcji-na-serwerze/#komentarze</comments><description><![CDATA[Zdarza się, iż potrzebujemy listę funkcji dostępnych na serwerze. Do tego celu służy funkcja <tt>get_defined_functions()</tt>. Poniżej przykład stosowania ów funkcji.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?phpprint_r</span><span style="color: #007700">(</span><span style="color: #0000BB">get_defined_functions</span><span style="color: #007700">());</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Wyżej wymieniony kod powinien dać podobny rezultat:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">Array( &nbsp; &nbsp;[internal]&nbsp;=&gt;&nbsp;Array &nbsp; &nbsp; &nbsp; &nbsp;( &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[0]&nbsp;=&gt;&nbsp;zend_version &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[1]&nbsp;=&gt;&nbsp;func_num_args &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[2]&nbsp;=&gt;&nbsp;func_get_arg &nbsp;  &nbsp; &nbsp;... &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[977]&nbsp;=&gt;&nbsp;mysql_dbname &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[978]&nbsp;=&gt;&nbsp;mysql_tablename &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[979]&nbsp;=&gt;&nbsp;mysql_table_name &nbsp; &nbsp; &nbsp; &nbsp;) &nbsp; &nbsp;[user]&nbsp;=&gt;&nbsp;Array &nbsp; &nbsp; &nbsp; &nbsp;( &nbsp; &nbsp; &nbsp; &nbsp;))</span></pre>
Może się zdarzyć, że będziemy potrzebowali listę funkcji dostępnych na serwerze oraz listę funkcji, które zostały stworzone przez programistę.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">test</span><span style="color: #007700">(){</span><span style="color: #0000BB"> return&nbsp;true</span><span style="color: #007700">;}function&nbsp;</span><span style="color: #0000BB">test2</span><span style="color: #007700">(){</span><span style="color: #0000BB"> return&nbsp;false</span><span style="color: #007700">;}</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'list_of_functions'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">get_defined_functions</span><span style="color: #007700">();</span><span style="color: #0000BB">sort</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'list_of_functions'</span><span style="color: #007700">][</span><span style="color: #DD0000">'internal'</span><span style="color: #007700">]);</span><span style="color: #0000BB">sort</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'list_of_functions'</span><span style="color: #007700">][</span><span style="color: #DD0000">'user'</span><span style="color: #007700">]);</span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'list_of_functions'</span><span style="color: #007700">]);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
W rezultacie powyższy kod powinien dać podobny rezultat:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000">Array( &nbsp; &nbsp;[internal]&nbsp;=&gt;&nbsp;Array &nbsp; &nbsp; &nbsp; &nbsp;( &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[0]&nbsp;=&gt;&nbsp;_eaccelerator_loader_file &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[1]&nbsp;=&gt;&nbsp;_eaccelerator_loader_line &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[2]&nbsp;=&gt;&nbsp;_eaccelerator_output_handler &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;... &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[977]&nbsp;=&gt;&nbsp;zend_logo_guid &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[978]&nbsp;=&gt;&nbsp;zend_version &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[979]&nbsp;=&gt;&nbsp;zlib_get_coding_type &nbsp; &nbsp; &nbsp; &nbsp;) &nbsp; &nbsp;[user]&nbsp;=&gt;&nbsp;Array &nbsp; &nbsp; &nbsp; &nbsp;( &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[0]&nbsp;=&gt;&nbsp;test &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[1]&nbsp;=&gt;&nbsp;test2 &nbsp; &nbsp; &nbsp; &nbsp;))</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/functions.user-defined.php" target="_blank" class="postlink">http://php.net/manual/pl/functions.user-defined.php</a>
<br />
<a href="http://php.net/manual/pl/function.get-defined-functions.php" target="_blank" class="postlink">http://php.net/manual/pl/function.get-defined-functions.php</a>
<br />
<a href="http://php.net/manual/pl/function.print-r.php" target="_blank" class="postlink">http://php.net/manual/pl/function.print-r.php</a>
<br />
<a href="http://php.net/manual/pl/function.sort.php" target="_blank" class="postlink">http://php.net/manual/pl/function.sort.php</a>]]></description></item><item><title>[PHP] Sprawdzanie, czy dana funkcja jest dostępna na serwerze?</title><pubdate>Sat, 22 Aug 2009 5:02:19 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/sprawdzanie-czy-dana-funkcja-jest-dostepna-na-serwerze/</link><comments>http://www.capaciouscore.pl/artykuly/sprawdzanie-czy-dana-funkcja-jest-dostepna-na-serwerze/#komentarze</comments><description><![CDATA[Zdarza się, że potrzebujemy sprawdzić czy dana funkcja jest osiągalna na serwerze. Oto najprostszy sposób aby tego dokonać.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'function_to_check'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'mail'</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;Nazwa&nbsp;funkcji,&nbsp;którą&nbsp;sprawdzamy</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'Funkcja&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'function_to_check'</span><span style="color: #007700">].</span><span style="color: #DD0000">'&nbsp;jest&nbsp;'</span><span style="color: #007700">.(</span><span style="color: #0000BB">function_exists</span><span style="color: #007700">(</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'function_to_check'</span><span style="color: #007700">])&nbsp;?&nbsp;</span><span style="color: #DD0000">'dostępna'&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">'niedostępna'</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.function-exists.php" target="_blank" class="postlink">http://php.net/manual/pl/function.function-exists.php</a>]]></description></item><item><title>Prawie koniec wakacji</title><pubdate>Sat, 22 Aug 2009 4:33:09 +0200</pubdate><link>http://www.capaciouscore.pl/aktualnosci/prawie-koniec-wakacji/</link><comments>http://www.capaciouscore.pl/aktualnosci/prawie-koniec-wakacji/#komentarze</comments><description><![CDATA[Wakacje prawie dobiegły końca, a ja raptem uzupełniłem portfolio, napisałem parę artykułów oraz przygotowuję video kurs PHP i SQL. Mam nadzieję, że teraz wszystko pójdzie z górki...]]></description></item><item><title>[PHP] Zapisywanie danych do pliku tekstowego</title><pubdate>Mon, 27 Jul 2009 6:33:30 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/zapisywanie-danych-do-pliku-tekstowego/</link><comments>http://www.capaciouscore.pl/artykuly/zapisywanie-danych-do-pliku-tekstowego/#komentarze</comments><description><![CDATA[Często zdarza się ze musimy zapisać cos do pliku (np. <a href="http://pl.wikipedia.org/wiki/Log_(informatyka)" target="_blank" class="postlink">log</a>). Aby tego dokonać użyjemy prostego skryptu, który przedstawi Wam podstawowe zasady jakich trzeba się trzymać.
<br />

<br />
Jeżeli plik nie istnieję wtedy funkcja fopen() spróbuje go stworzyć. Pamiętajmy, że nowsze wpisy będą na końcu pliku.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_name'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'testowy.log'</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;Formułowanie&nbsp;wpisu</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'date'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">date</span><span style="color: #007700">(</span><span style="color: #DD0000">'Y-m-d&nbsp;H:i:s'</span><span style="color: #007700">);</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'data'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">"["</span><span style="color: #007700">.</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'date'</span><span style="color: #007700">].</span><span style="color: #DD0000">"]&nbsp;Wprowadzono&nbsp;dane\r\n"</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;\r&nbsp;specjalnie&nbsp;dla&nbsp;Windowsa&nbsp;<img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /></span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'handle'</span><span style="color: #007700">][</span><span style="color: #DD0000">'file'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #DD0000">'./'</span><span style="color: #007700">.</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_name'</span><span style="color: #007700">],&nbsp;</span><span style="color: #DD0000">'a'</span><span style="color: #007700">);</span><span style="color: #FF8000">//&nbsp;Łopatologia</span><span style="color: #007700">if(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'handle'</span><span style="color: #007700">][</span><span style="color: #DD0000">'file'</span><span style="color: #007700">]){</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Blokujemy&nbsp;plik&nbsp;do&nbsp;zapisu</span><span style="color: #0000BB"> flock</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'handle'</span><span style="color: #007700">][</span><span style="color: #DD0000">'file'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Zapisujemy&nbsp;dane&nbsp;do&nbsp;pliku,&nbsp;funkcja&nbsp;fputs()&nbsp;jest&nbsp;aliasem&nbsp;funkcji&nbsp;fwrite()</span><span style="color: #0000BB"> fputs</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'handle'</span><span style="color: #007700">][</span><span style="color: #DD0000">'file'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'data'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Odblokowujemy&nbsp;plik&nbsp;po&nbsp;zabiegu</span><span style="color: #0000BB"> flock</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'handle'</span><span style="color: #007700">][</span><span style="color: #DD0000">'file'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Zamykamy&nbsp;plik</span><span style="color: #0000BB"> fclose</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'handle'</span><span style="color: #007700">][</span><span style="color: #DD0000">'file'</span><span style="color: #007700">]);}else{</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'Nie&nbsp;udało&nbsp;się&nbsp;otworzyć&nbsp;pliku'</span><span style="color: #007700">;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.date.php" target="_blank" class="postlink">http://php.net/manual/pl/function.date.php</a>
<br />
<a href="http://php.net/manual/pl/function.fclose.php" target="_blank" class="postlink">http://php.net/manual/pl/function.fclose.php</a>
<br />
<a href="http://php.net/manual/pl/function.flock.php" target="_blank" class="postlink">http://php.net/manual/pl/function.flock.php</a>
<br />
<a href="http://php.net/manual/pl/function.fopen.php" target="_blank" class="postlink">http://php.net/manual/pl/function.fopen.php</a>
<br />
<a href="http://php.net/manual/pl/function.puts.php" target="_blank" class="postlink">http://php.net/manual/pl/function.puts.php</a>
<br />
<a href="http://php.net/manual/pl/function.fwrite.php" target="_blank" class="postlink">http://php.net/manual/pl/function.fwrite.php</a>]]></description></item><item><title>[PHP] Tworzenie katalogu oraz pliku wraz z nadawaniem chmodu</title><pubdate>Sun, 26 Jul 2009 8:23:21 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/tworzenie-katalogu-oraz-pliku-a-nastepnie-nadawanie-im-chmodu-czyli-praw-dostepu/</link><comments>http://www.capaciouscore.pl/artykuly/tworzenie-katalogu-oraz-pliku-a-nastepnie-nadawanie-im-chmodu-czyli-praw-dostepu/#komentarze</comments><description><![CDATA[Oto prosty skrypt mający na celu stworzyć folder, nadać <a href="http://pl.wikipedia.org/wiki/Chmod" target="_blank" class="postlink">chmod</a>, a następnie stworzyć w nowo powstałym katalogu plik.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir_name'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'my_dir'</span><span style="color: #007700">;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_name'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'test.php'</span><span style="color: #007700">;if(</span><span style="color: #0000BB">mkdir</span><span style="color: #007700">(</span><span style="color: #DD0000">'./'</span><span style="color: #007700">.</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir_name'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">0777</span><span style="color: #007700">)){</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">touch</span><span style="color: #007700">(</span><span style="color: #DD0000">'./'</span><span style="color: #007700">.</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir_name'</span><span style="color: #007700">].</span><span style="color: #DD0000">'/'</span><span style="color: #007700">.</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_name'</span><span style="color: #007700">]))</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Odczyt&nbsp;i&nbsp;zapis&nbsp;dla&nbsp;właściciela,&nbsp;żadnych&nbsp;praw&nbsp;dla&nbsp;innych</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">chmod</span><span style="color: #007700">(</span><span style="color: #DD0000">'./'</span><span style="color: #007700">.</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir_name'</span><span style="color: #007700">].</span><span style="color: #DD0000">'/'</span><span style="color: #007700">.</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_name'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">0600</span><span style="color: #007700">))</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; echo&nbsp;</span><span style="color: #DD0000">'Stworzono&nbsp;folder&nbsp;i&nbsp;plik&nbsp;oraz&nbsp;nadano&nbsp;prawa&nbsp;dostępu'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">else</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; echo&nbsp;</span><span style="color: #DD0000">'Stworzono&nbsp;folder&nbsp;i&nbsp;plik&nbsp;jednak&nbsp;nie&nbsp;udało&nbsp;się&nbsp;nadać&nbsp;praw&nbsp;dostępu'</span><span style="color: #007700">;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'Nie&nbsp;udało&nbsp;się&nbsp;stworzyć&nbsp;pliku'</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}}else{</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'Nie&nbsp;udało&nbsp;się&nbsp;stworzyć&nbsp;katalogu'</span><span style="color: #007700">;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.chmod.php" target="_blank" class="postlink">http://php.net/manual/pl/function.chmod.php</a>
<br />
<a href="http://php.net/manual/pl/function.mkdir.php" target="_blank" class="postlink">http://php.net/manual/pl/function.mkdir.php</a>
<br />
<a href="http://php.net/manual/pl/function.touch.php" target="_blank" class="postlink">http://php.net/manual/pl/function.touch.php</a>]]></description></item><item><title>Dlaczego Gadu-Gadu gaśnie o 5:30?</title><pubdate>Sun, 26 Jul 2009 6:47:46 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/dlaczego-slonko-gadu-gadu-gasnie-o-5-30-codziennie/</link><comments>http://www.capaciouscore.pl/artykuly/dlaczego-slonko-gadu-gadu-gasnie-o-5-30-codziennie/#komentarze</comments><description><![CDATA[Swojego czasu sam zastanawiałem się nad tym pytaniem. Po jakimś czasie doszedłem do tego, że jest to spowodowane restartowaniem aplikacji po stronie serwera. Zabieg ten ma na celu usunięcie błędów związanych z niedoskonałym oprogramowaniem. Mam tutaj na myśli <a href="http://pl.wikipedia.org/wiki/Wyciek_pamięci" target="_blank" class="postlink">wycieki pamięci</a> i inne błędy. Na początku gdy ten zabieg miał miejsce ginęły wiadomości jednak teraz nie ma z tym jakichkolwiek problemów.]]></description></item><item><title>[PHP] Wyświetlanie losowego odsyłacza</title><pubdate>Sun, 26 Jul 2009 6:20:48 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/wyswietlanie-losowego-odsylacza/</link><comments>http://www.capaciouscore.pl/artykuly/wyswietlanie-losowego-odsylacza/#komentarze</comments><description><![CDATA[Czasami potrzeba nam wyświetlić losowy link. Oto najprostszy sposób aby tego dokonać.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;tablica&nbsp;zawierajaca&nbsp;tablice&nbsp;z&nbsp;opisem&nbsp;i&nbsp;adresem</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'links'</span><span style="color: #007700">][]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'CapaciousCore'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'capaciouscore.pl'</span><span style="color: #007700">);</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'links'</span><span style="color: #007700">][]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'Example.com'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'example.com'</span><span style="color: #007700">);</span><span style="color: #FF8000">//&nbsp;Jeżeli&nbsp;wersja&nbsp;PHP&nbsp;&lt;&nbsp;4.2.0&nbsp;wtedy&nbsp;zachodzi&nbsp;potrzeba&nbsp;użycia&nbsp;generator&nbsp;liczb&nbsp;losowych//&nbsp;srand(floor(time()&nbsp;/&nbsp;(60*60*24)));//&nbsp;Losowanie</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'random_link'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'links'</span><span style="color: #007700">][</span><span style="color: #0000BB">array_rand</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'links'</span><span style="color: #007700">])];foreach(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'random_link'</span><span style="color: #007700">]&nbsp;as&nbsp;</span><span style="color: #0000BB">$key&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$value</span><span style="color: #007700">){</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'&lt;a&nbsp;href="http://www.'</span><span style="color: #007700">.</span><span style="color: #0000BB">$value</span><span style="color: #007700">.</span><span style="color: #DD0000">'"&gt;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$key</span><span style="color: #007700">.</span><span style="color: #DD0000">'&lt;/a&gt;'</span><span style="color: #007700">;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/control-structures.foreach.php" target="_blank" class="postlink">http://php.net/manual/pl/control-structures.foreach.php</a>
<br />
<a href="http://php.net/manual/pl/function.array-rand.php" target="_blank" class="postlink">http://php.net/manual/pl/function.array-rand.php</a>]]></description></item><item><title>[PHP] Zaokrąglanie liczb</title><pubdate>Fri, 24 Jul 2009 6:28:24 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/zaokraglanie-liczb/</link><comments>http://www.capaciouscore.pl/artykuly/zaokraglanie-liczb/#komentarze</comments><description><![CDATA[W PHP istnieje kilka funkcji odpowiedzialnych za zaokrąglanie. Oto kilka przykładów z ich wykorzystaniem.
<br />
Zaokrąglanie w górę wygląda w ten sposób:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'number'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">5.56</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;zaokrąglanie&nbsp;w&nbsp;górę</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">ceil</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'number'</span><span style="color: #007700">]);&nbsp;</span><span style="color: #FF8000">//&nbsp;6</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
natomiast zaokrąglanie w dół wygląda tak:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'number'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">5.56</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;zaokrąglanie&nbsp;w&nbsp;dół</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">floor</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'number'</span><span style="color: #007700">]);&nbsp;</span><span style="color: #FF8000">//&nbsp;5</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
aby zaokrąglić liczbę do 1 miejsca po przecinku zrobimy to w ten sposób:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'number'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">5.56</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;zaokrąglanie&nbsp;do&nbsp;pierwszego&nbsp;miejsca&nbsp;po&nbsp;przecinku</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">round</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'number'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;5.6</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.ceil.php" target="_blank" class="postlink">http://php.net/manual/pl/function.ceil.php</a>
<br />
<a href="http://php.net/manual/pl/function.floor.php" target="_blank" class="postlink">http://php.net/manual/pl/function.floor.php</a>
<br />
<a href="http://php.net/manual/pl/function.round.php" target="_blank" class="postlink">http://php.net/manual/pl/function.round.php</a>]]></description></item><item><title>[PHP] Jak ustawić chmod dla phpBB3?</title><pubdate>Sun, 19 Jul 2009 9:31:34 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/jak-ustawic-chmod-dla-phpbb3/</link><comments>http://www.capaciouscore.pl/artykuly/jak-ustawic-chmod-dla-phpbb3/#komentarze</comments><description><![CDATA[<a href="http://pl.wikipedia.org/wiki/Chmod" target="_blank" class="postlink">Chmod</a> dla forum opartego na <a href="http://pl.wikipedia.org/wiki/PhpBB" target="_blank" class="postlink">phpBB3</a> powinien wynosić odpowiednio:
<br />
<ul class="list">
<li> <i>config.php</i> <b>666</b> przed instalacja, <b>644</b> po instalacji</li>
<li> <i>cache</i> folder <b>777</b></li>
<li> <i>files</i> folder: <b>777</b></li>
<li> <i>/images/avatars/upload/</i> folder: <b>777</b></li>
<li> <i>store</i> folder: <b>777</b></li>
<li> reszta plików: <b>644</b></li>
<li> reszta folderów: <b>755</b></li>
</ul>]]></description></item><item><title>[PHP] Jak sprawdzić czy dany host odpowiada na określonym porcie?</title><pubdate>Wed, 15 Jul 2009 9:41:55 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/jak-sprawdzic-czy-dany-host-jest-online-lub-offline/</link><comments>http://www.capaciouscore.pl/artykuly/jak-sprawdzic-czy-dany-host-jest-online-lub-offline/#komentarze</comments><description><![CDATA[Czasami zachodzi potrzeba sprawdzenia czy dany serwer działa i jeżeli tak to wystosowanie odpowiedniego komunikatu. Ten skrypt umożliwi Wam sprawdzanie serwerów ze zdefiniowanej listy.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'socket_timeout'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;2&nbsp;sekundy&nbsp;powinny&nbsp;wystarczyć</span><span style="color: #0000BB">$server_list</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">][</span><span style="color: #DD0000">'name'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'Serwer&nbsp;WWW'</span><span style="color: #007700">;</span><span style="color: #0000BB">$server_list</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">][</span><span style="color: #DD0000">'ip'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'127.0.0.1'</span><span style="color: #007700">;</span><span style="color: #0000BB">$server_list</span><span style="color: #007700">[</span><span style="color: #0000BB">0</span><span style="color: #007700">][</span><span style="color: #DD0000">'port'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">80</span><span style="color: #007700">;</span><span style="color: #0000BB">$server_list</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">][</span><span style="color: #DD0000">'name'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'Serwer&nbsp;proxy'</span><span style="color: #007700">;</span><span style="color: #0000BB">$server_list</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">][</span><span style="color: #DD0000">'ip'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'127.0.0.1'</span><span style="color: #007700">;</span><span style="color: #0000BB">$server_list</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">][</span><span style="color: #DD0000">'port'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">8080</span><span style="color: #007700">;for(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$server_list</span><span style="color: #007700">);&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">];&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">){</span><span style="color: #0000BB"> $handle&nbsp;</span><span style="color: #007700">=&nbsp;@</span><span style="color: #0000BB">fsockopen</span><span style="color: #007700">(</span><span style="color: #0000BB">$server_list</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #DD0000">'ip'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$server_list</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #DD0000">'port'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'error'</span><span style="color: #007700">][</span><span style="color: #DD0000">'number'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'error'</span><span style="color: #007700">][</span><span style="color: #DD0000">'message'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'socket_timeout'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> echo&nbsp;$server_list</span><span style="color: #007700">[</span><span style="color: #0000BB">$h</span><span style="color: #007700">][</span><span style="color: #DD0000">'name'</span><span style="color: #007700">].</span><span style="color: #DD0000">'&nbsp;jest&nbsp;'</span><span style="color: #007700">.(</span><span style="color: #0000BB">$handle&nbsp;</span><span style="color: #007700">?&nbsp;</span><span style="color: #DD0000">'online'&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">'offline'</span><span style="color: #007700">).</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$handle</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;fclose</span><span style="color: #007700">(</span><span style="color: #0000BB">$handle</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #007700">}}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.count.php" target="_blank" class="postlink">http://php.net/manual/pl/function.count.php</a>
<br />
<a href="http://php.net/manual/pl/function.fclose.php" target="_blank" class="postlink">http://php.net/manual/pl/function.fclose.php</a>
<br />
<a href="http://php.net/manual/pl/function.fsocketopen.php" target="_blank" class="postlink">http://php.net/manual/pl/function.fsocketopen.php</a>]]></description></item><item><title>[PHP] Sprawdzanie czy zdalny plik istnieje</title><pubdate>Wed, 15 Jul 2009 7:11:31 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/sprawdzanie-czy-zdalny-plik-istnieje/</link><comments>http://www.capaciouscore.pl/artykuly/sprawdzanie-czy-zdalny-plik-istnieje/#komentarze</comments><description><![CDATA[Czasami zachodzi potrzeba sprawdzenia czy istnieje plik na zewnętrznym serwerze. Oto najprostsza metoda.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'address'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'http://www.capaciouscore.pl/index.php'</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #DD0000">'Wskazany&nbsp;adres&nbsp;jest&nbsp;'</span><span style="color: #007700">.(@</span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'address'</span><span style="color: #007700">],&nbsp;</span><span style="color: #DD0000">'r'</span><span style="color: #007700">)&nbsp;?&nbsp;</span><span style="color: #DD0000">'prawidłowy'&nbsp;</span><span style="color: #007700">:&nbsp;</span><span style="color: #DD0000">'nieprawidłowy'</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.fopen.php" target="_blank" class="postlink">http://php.net/manual/pl/function.fopen.php</a>]]></description></item><item><title>[PHP] Zamiana przecinka w kropkę</title><pubdate>Wed, 15 Jul 2009 5:41:27 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/zamiana-przecinka-w-kropke/</link><comments>http://www.capaciouscore.pl/artykuly/zamiana-przecinka-w-kropke/#komentarze</comments><description><![CDATA[Czasami zachodni potrzebna zamiany przecinka w kropkę, aby np. móc dokonać obliczeń bądź dodać dane do bazy danych.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'number'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'5,56'</span><span style="color: #007700">;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'number'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">str_replace</span><span style="color: #007700">(</span><span style="color: #DD0000">','</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'.'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'number'</span><span style="color: #007700">]);echo&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'number'</span><span style="color: #007700">];</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.str-replace.php" target="_blank" class="postlink">http://php.net/manual/pl/function.str-replace.php</a>]]></description></item><item><title>[PHP] Losowy obrazek</title><pubdate>Fri, 10 Jul 2009 7:20:24 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/losowy-obrazek/</link><comments>http://www.capaciouscore.pl/artykuly/losowy-obrazek/#komentarze</comments><description><![CDATA[Czasami zachodzi potrzeba wylosowania obrazka z zdefiniowanej listy bądź z określonego katalogu. Tutaj zostaną rozwiane wszystkie wątpliwości.
<br />

<br />
Pierwsza przedstawiona metoda losuje obrazek z listy.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;Tablica&nbsp;ze&nbsp;zdefiniowanymi&nbsp;obrazkami&nbsp;do&nbsp;losowania</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'list'</span><span style="color: #007700">]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'img1.png'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'img2.png'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'img3.png'</span><span style="color: #007700">);</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir_images'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'images'</span><span style="color: #007700">;</span><span style="color: #FF8000">//&nbsp;Jeżeli&nbsp;wersja&nbsp;PHP&nbsp;&lt;&nbsp;4.2.0&nbsp;wtedy&nbsp;zachodzi&nbsp;potrzeba&nbsp;użycia&nbsp;generator&nbsp;liczb&nbsp;losowych//&nbsp;srand(floor(time()&nbsp;/&nbsp;(60*60*24)));//&nbsp;Losowanie</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'img'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'list'</span><span style="color: #007700">][</span><span style="color: #0000BB">array_rand</span><span style="color: #007700">(</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'list'</span><span style="color: #007700">])];echo&nbsp;</span><span style="color: #DD0000">'&lt;img&nbsp;src="'</span><span style="color: #007700">.</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir_images'</span><span style="color: #007700">].</span><span style="color: #DD0000">'/'</span><span style="color: #007700">.</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'img'</span><span style="color: #007700">].</span><span style="color: #DD0000">'"&nbsp;alt="Tekst&nbsp;alternatywny"&nbsp;/&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Poniższy przykład daje możliwość losowania obrazka ze zdefiniowanego katalogu oraz przy ustalonych rozszerzeniach plików graficznych.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir_images'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'images'</span><span style="color: #007700">;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'expansions'</span><span style="color: #007700">]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'png'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'gif'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'jpg'</span><span style="color: #007700">);</span><span style="color: #FF8000">//&nbsp;Jeżeli&nbsp;wersja&nbsp;PHP&nbsp;&lt;&nbsp;4.2.0&nbsp;wtedy&nbsp;zachodzi&nbsp;potrzeba&nbsp;użycia&nbsp;generator&nbsp;liczb&nbsp;losowych//&nbsp;srand(floor(time()&nbsp;/&nbsp;(60*60*24)));//&nbsp;Losowanie</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'randed_img'</span><span style="color: #007700">][</span><span style="color: #DD0000">'name_file'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'img'</span><span style="color: #007700">][</span><span style="color: #0000BB">array_rand</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'img'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">glob</span><span style="color: #007700">(</span><span style="color: #DD0000">'./'</span><span style="color: #007700">.</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir_images'</span><span style="color: #007700">].</span><span style="color: #DD0000">'/*.{'</span><span style="color: #007700">.</span><span style="color: #0000BB">implode</span><span style="color: #007700">(</span><span style="color: #DD0000">','</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">array_unique</span><span style="color: #007700">(</span><span style="color: #0000BB">array_map</span><span style="color: #007700">(</span><span style="color: #DD0000">'strtolower'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'expansions'</span><span style="color: #007700">]))).</span><span style="color: #DD0000">'}'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">GLOB_BRACE</span><span style="color: #007700">))];</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'randed_img'</span><span style="color: #007700">][</span><span style="color: #DD0000">'file_info'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">getimagesize</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'randed_img'</span><span style="color: #007700">][</span><span style="color: #DD0000">'name_file'</span><span style="color: #007700">]);</span><span style="color: #FF8000">//&nbsp;Throw</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;img&nbsp;src="'</span><span style="color: #007700">.</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'randed_img'</span><span style="color: #007700">][</span><span style="color: #DD0000">'name_file'</span><span style="color: #007700">].</span><span style="color: #DD0000">'"&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'randed_img'</span><span style="color: #007700">][</span><span style="color: #DD0000">'file_info'</span><span style="color: #007700">][</span><span style="color: #0000BB">3</span><span style="color: #007700">].</span><span style="color: #DD0000">'&nbsp;alt="Tekst&nbsp;alternatywny"&nbsp;/&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Ten kod daję możliwość losowania zdjęcia z drobnym wyjątkiem, mianowicie można zdefiniować kilka folderów, w których ma szukać obrazków.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir_images'</span><span style="color: #007700">]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'images'&nbsp;</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'images2'</span><span style="color: #007700">);</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'expansions'</span><span style="color: #007700">]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'png'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'gif'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'jpg'</span><span style="color: #007700">);</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_list'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">glob</span><span style="color: #007700">(</span><span style="color: #DD0000">'./{'</span><span style="color: #007700">.</span><span style="color: #0000BB">implode</span><span style="color: #007700">(</span><span style="color: #DD0000">','</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir_images'</span><span style="color: #007700">]).</span><span style="color: #DD0000">'}/*.{'</span><span style="color: #007700">.</span><span style="color: #0000BB">implode</span><span style="color: #007700">(</span><span style="color: #DD0000">','</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">array_unique</span><span style="color: #007700">(</span><span style="color: #0000BB">array_map</span><span style="color: #007700">(</span><span style="color: #DD0000">'strtolower'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'expansions'</span><span style="color: #007700">]))).</span><span style="color: #DD0000">'}'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">GLOB_BRACE</span><span style="color: #007700">);</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">][</span><span style="color: #DD0000">'images'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_list'</span><span style="color: #007700">]);</span><span style="color: #FF8000">//&nbsp;Jeżeli&nbsp;wersja&nbsp;PHP&nbsp;&lt;&nbsp;4.2.0&nbsp;wtedy&nbsp;zachodzi&nbsp;potrzeba&nbsp;użycia&nbsp;generator&nbsp;liczb&nbsp;losowych//&nbsp;srand(floor(time()&nbsp;/&nbsp;(60*60*24)));//&nbsp;Losowanie</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'randed_img'</span><span style="color: #007700">][</span><span style="color: #DD0000">'name_file'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_list'</span><span style="color: #007700">][</span><span style="color: #0000BB">array_rand</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_list'</span><span style="color: #007700">])];</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'randed_img'</span><span style="color: #007700">][</span><span style="color: #DD0000">'file_info'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">getimagesize</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'randed_img'</span><span style="color: #007700">][</span><span style="color: #DD0000">'name_file'</span><span style="color: #007700">]);</span><span style="color: #FF8000">//&nbsp;Throw</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;img&nbsp;src="'</span><span style="color: #007700">.</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'randed_img'</span><span style="color: #007700">][</span><span style="color: #DD0000">'name_file'</span><span style="color: #007700">].</span><span style="color: #DD0000">'"&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'randed_img'</span><span style="color: #007700">][</span><span style="color: #DD0000">'file_info'</span><span style="color: #007700">][</span><span style="color: #0000BB">3</span><span style="color: #007700">].</span><span style="color: #DD0000">'&nbsp;alt="Tekst&nbsp;alternatywny"&nbsp;/&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Poniższy skrypt daje możliwość losowania kilku obrazków nie powtarzających się z jednego lub kilku folderów.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir_images'</span><span style="color: #007700">]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'images'&nbsp;</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'images2'</span><span style="color: #007700">);</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'expansions'</span><span style="color: #007700">]&nbsp;=&nbsp;array(</span><span style="color: #DD0000">'png'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'gif'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'jpg'</span><span style="color: #007700">);</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">][</span><span style="color: #DD0000">'rand'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">3</span><span style="color: #007700">;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_list'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">glob</span><span style="color: #007700">(</span><span style="color: #DD0000">'./{'</span><span style="color: #007700">.</span><span style="color: #0000BB">implode</span><span style="color: #007700">(</span><span style="color: #DD0000">','</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'dir_images'</span><span style="color: #007700">]).</span><span style="color: #DD0000">'}/*.{'</span><span style="color: #007700">.</span><span style="color: #0000BB">implode</span><span style="color: #007700">(</span><span style="color: #DD0000">','</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">array_unique</span><span style="color: #007700">(</span><span style="color: #0000BB">array_map</span><span style="color: #007700">(</span><span style="color: #DD0000">'strtolower'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'expansions'</span><span style="color: #007700">]))).</span><span style="color: #DD0000">'}'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">GLOB_BRACE</span><span style="color: #007700">);</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">][</span><span style="color: #DD0000">'images'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_list'</span><span style="color: #007700">]);</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'randed_file_list'</span><span style="color: #007700">]&nbsp;=&nbsp;array();if(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">][</span><span style="color: #DD0000">'images'</span><span style="color: #007700">]&nbsp;&gt;&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">){</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">][</span><span style="color: #DD0000">'rand'</span><span style="color: #007700">]&nbsp;&gt;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">][</span><span style="color: #DD0000">'images'</span><span style="color: #007700">]&nbsp;&amp;&amp;&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">][</span><span style="color: #DD0000">'rand'</span><span style="color: #007700">]&nbsp;!=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">][</span><span style="color: #DD0000">'rand'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">][</span><span style="color: #DD0000">'rand'</span><span style="color: #007700">]&nbsp;-&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">][</span><span style="color: #DD0000">'rand'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">][</span><span style="color: #DD0000">'rand'</span><span style="color: #007700">];</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;Jeżeli&nbsp;wersja&nbsp;PHP&nbsp;&lt;&nbsp;4.2.0&nbsp;wtedy&nbsp;zachodzi&nbsp;potrzeba&nbsp;użycia&nbsp;generator&nbsp;liczb&nbsp;losowych</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;srand(floor(time()&nbsp;/&nbsp;(60*60*24)));</span><span style="color: #0000BB"> for</span><span style="color: #007700">(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">][</span><span style="color: #DD0000">'rand'</span><span style="color: #007700">];&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'randed_file_list'</span><span style="color: #007700">][]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'randed'</span><span style="color: #007700">][</span><span style="color: #DD0000">'img'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_list'</span><span style="color: #007700">][</span><span style="color: #0000BB">array_rand</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_list'</span><span style="color: #007700">])];</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'key'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">array_search</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'randed'</span><span style="color: #007700">][</span><span style="color: #DD0000">'img'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_list'</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">unset(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_list'</span><span style="color: #007700">][</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'key'</span><span style="color: #007700">]]);</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> for</span><span style="color: #007700">(</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$h&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'how'</span><span style="color: #007700">][</span><span style="color: #DD0000">'rand'</span><span style="color: #007700">];&nbsp;++</span><span style="color: #0000BB">$h</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_info'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">getimagesize</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'randed_file_list'</span><span style="color: #007700">][</span><span style="color: #0000BB">$h</span><span style="color: #007700">]);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #FF8000">//&nbsp;Throw</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;img&nbsp;src="'</span><span style="color: #007700">.</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'randed_file_list'</span><span style="color: #007700">][</span><span style="color: #0000BB">$h</span><span style="color: #007700">].</span><span style="color: #DD0000">'"&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'file_info'</span><span style="color: #007700">][</span><span style="color: #0000BB">3</span><span style="color: #007700">].</span><span style="color: #DD0000">'&nbsp;alt="Tekst&nbsp;alternatywny"&nbsp;/&gt;&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}}else{</span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">'Brak&nbsp;obrazków'</span><span style="color: #007700">;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Przykłady do ściągnięcia znajdują się <a href="http://www.capaciouscore.pl/skrypty/losowy-obrazek/" target="_blank" class="postlink">tutaj</a>.
<br />

<br />
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.array-rand.php" target="_blank" class="postlink">http://php.net/manual/pl/function.array-rand.php</a>
<br />
<a href="http://php.net/manual/pl/function.array-search.php" target="_blank" class="postlink">http://php.net/manual/pl/function.array-search.php</a>
<br />
<a href="http://php.net/manual/pl/function.count.php" target="_blank" class="postlink">http://php.net/manual/pl/function.count.php</a>
<br />
<a href="http://php.net/manual/pl/function.getimagesize.php" target="_blank" class="postlink">http://php.net/manual/pl/function.getimagesize.php</a>
<br />
<a href="http://php.net/manual/pl/function.glob.php" target="_blank" class="postlink">http://php.net/manual/pl/function.glob.php</a>
<br />
<a href="http://php.net/manual/pl/function.implode.php" target="_blank" class="postlink">http://php.net/manual/pl/function.implode.php</a>
<br />
<a href="http://php.net/manual/pl/function.unset.php" target="_blank" class="postlink">http://php.net/manual/pl/function.unset.php</a>]]></description></item><item><title>[PHP] Jak odczytać adres IP odwiedzającego stronę?</title><pubdate>Fri, 10 Jul 2009 2:46:21 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/jak-odczytac-adres-ip-goscia-odwiedzajacego-strone/</link><comments>http://www.capaciouscore.pl/artykuly/jak-odczytac-adres-ip-goscia-odwiedzajacego-strone/#komentarze</comments><description><![CDATA[Adres IP gościa przechowywany jest w tablicy <tt>$_SERVER</tt> w polu o nazwie <tt>REMOTE_ADDR</tt>. Jeżeli chcemy je pozyskać to używamy poniższego kodu.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'REMOTE_ADDR'</span><span style="color: #007700">];</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Możemy także spróbować odczytać czy ktoś używa <a href="http://pl.wikipedia.org/wiki/Serwer_pośredniczący" target="_blank" class="postlink">proxy</a> jednakże ta metoda daje około 10% skuteczności gdyż większość serwerów proxy dobrze maskuje IP.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">if(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_CLIENT_IP'</span><span style="color: #007700">]){</span><span style="color: #0000BB"> $ip&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_CLIENT_IP'</span><span style="color: #007700">];}else&nbsp;if(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_X_FORWARDED_FOR'</span><span style="color: #007700">]){</span><span style="color: #0000BB"> $ip&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_X_FORWARDED_FOR'</span><span style="color: #007700">];}else{</span><span style="color: #0000BB"> $ip&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'REMOTE_ADDR'</span><span style="color: #007700">];}echo&nbsp;</span><span style="color: #0000BB">$ip</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Ponadto można to obudować w funkcję:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">get_ip</span><span style="color: #007700">(</span><span style="color: #0000BB">$ip2long&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">){</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_CLIENT_IP'</span><span style="color: #007700">])</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$ip&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_CLIENT_IP'</span><span style="color: #007700">];</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else&nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_X_FORWARDED_FOR'</span><span style="color: #007700">])</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$ip&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_X_FORWARDED_FOR'</span><span style="color: #007700">];</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> else </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$ip&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'REMOTE_ADDR'</span><span style="color: #007700">];</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">$ip2long</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;$ip&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">ip2long</span><span style="color: #007700">(</span><span style="color: #0000BB">$ip</span><span style="color: #007700">);</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> return&nbsp;$ip</span><span style="color: #007700">;}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Dla bardziej zawziętych można zawsze zapodać wersję obiektową:
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">engine</span><span style="color: #007700">{</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;ciach</span><span style="color: #0000BB"> public&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">get_ip</span><span style="color: #007700">(</span><span style="color: #0000BB">$ip2long&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">)</span><span style="color: #0000BB"> </span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_CLIENT_IP'</span><span style="color: #007700">])</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $ip&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_CLIENT_IP'</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">else&nbsp;if(</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_X_FORWARDED_FOR'</span><span style="color: #007700">])</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $ip&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_X_FORWARDED_FOR'</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">else</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $ip&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'REMOTE_ADDR'</span><span style="color: #007700">];</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">$ip2long</span><span style="color: #007700">)</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">{</span><span style="color: #0000BB"> &nbsp; $ip&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">ip2long</span><span style="color: #007700">(</span><span style="color: #0000BB">$ip</span><span style="color: #007700">);</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">$ip</span><span style="color: #007700">;</span><span style="color: #0000BB"> </span><span style="color: #007700">}</span><span style="color: #0000BB"> </span><span style="color: #FF8000">//&nbsp;ciach</span><span style="color: #007700">}</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Jeżeli wykorzystujemy więcej niż jeden raz <tt>$ip</tt>, w którymś z formatów to warto trzymać te dane w <i>polu</i> aby nie katować CPU niepotrzebnie <img src="http://www.capaciouscore.pl/smiles/icon_smile.gif" class="emoticon" alt="Smile" />
<br />

<br />
Dodatkowo w tablicy <tt>$_SERVER</tt> jest kilka rekordów, które mogą pomóc nam w detekcji osoby korzystającej z proxy.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_CLIENT_IP'</span><span style="color: #007700">];</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_COMING_FROM'</span><span style="color: #007700">];</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_FORWARDED'</span><span style="color: #007700">];</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_FORWARDED_FOR'</span><span style="color: #007700">];</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_VIA'</span><span style="color: #007700">];</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_X_COMING_FROM'</span><span style="color: #007700">];</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_X_FORWARDED'</span><span style="color: #007700">];</span><span style="color: #0000BB">$_SERVER</span><span style="color: #007700">[</span><span style="color: #DD0000">'HTTP_X_FORWARDED_FOR'</span><span style="color: #007700">];</span><span style="color: #0000BB">?&gt;</span>
</span></pre>]]></description></item><item><title>[PHP] Pobieranie i wyświetlanie aktualnej daty</title><pubdate>Thu, 09 Jul 2009 10:30:59 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/pobieranie-manipulowanie-i-wyswietlanie-aktualnej-daty/</link><comments>http://www.capaciouscore.pl/artykuly/pobieranie-manipulowanie-i-wyswietlanie-aktualnej-daty/#komentarze</comments><description><![CDATA[W PHP jest kilka funkcji odpowiedzialnych za datę i czas. Podstawową jest <tt>date()</tt>. Poniżej znajdują się przykłady jak tą funkcję można wykorzystać.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">date</span><span style="color: #007700">(</span><span style="color: #DD0000">'d-m-Y'</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;09-07-2009</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #0000BB">date</span><span style="color: #007700">(</span><span style="color: #DD0000">'d.m.Y'</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;09.07.2009</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #0000BB">date</span><span style="color: #007700">(</span><span style="color: #DD0000">'d.m.Y&nbsp;H:i'</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;09.07.2009&nbsp;22:30</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #0000BB">date</span><span style="color: #007700">(</span><span style="color: #DD0000">'d.m.Y\r.'</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;09.07.2009r.</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #0000BB">date</span><span style="color: #007700">(</span><span style="color: #DD0000">'Y'</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;2009</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #0000BB">date</span><span style="color: #007700">(</span><span style="color: #DD0000">'Y-m-d&nbsp;H:i:s'</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;2009-07-09&nbsp;22:30:59</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Jak zauważyliście w 4 przykładzie zastosowałem znak <tt>\</tt> przed <tt>r</tt> ponieważ gdybym tego nie zrobił to <tt>r</tt> zamieniłoby się na datę w takim formacie: <i>Thu, 21 Dec. 2000 1617 +0200</i>.
<br />

<br />
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.date.php" target="_blank" class="postlink">http://php.net/manual/pl/function.date.php</a>]]></description></item><item><title>[PHP] Przekierowanie na konkretny adres URL</title><pubdate>Thu, 09 Jul 2009 9:51:35 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/przekierowanie-na-konkretny-adres-url/</link><comments>http://www.capaciouscore.pl/artykuly/przekierowanie-na-konkretny-adres-url/#komentarze</comments><description><![CDATA[Czasami zachodzi potrzeba przekierowania gościa na konkretny adres. Taki zabieg często wykonuję się po poprawnym zalogowaniu, wysłaniu komentarza oraz przy pseudoautoryzacji użytkownika.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;przekierowanie&nbsp;na&nbsp;loklany&nbsp;adres</span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">'Location:&nbsp;intro.php'</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;przekierowanie&nbsp;na&nbsp;inną&nbsp;stronę</span><span style="color: #0000BB">header</span><span style="color: #007700">(</span><span style="color: #DD0000">'Location:&nbsp;http://www.example.com/'</span><span style="color: #007700">);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
Ważne jest aby wysłać nagłówek przed innymi informacjami. Jeżeli zostało już coś wysłane do przeglądarki, a potem nastąpiła próba wysłania headera wtedy zobaczymy ostrzeżenie o treści <a href="http://www.capaciouscore.pl/artykuly/blad-headers-already-sent-by/" target="_blank" class="postlink">headers already sent by</a>.
<br />

<br />
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.header.php" target="_blank" class="postlink">http://php.net/manual/pl/function.header.php</a>]]></description></item><item><title>[PHP] Wydobywanie dnia tygodnia z dowolnej daty</title><pubdate>Thu, 09 Jul 2009 8:49:10 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/wydobywanie-dnia-tygodnia-z-dowolnej-daty/</link><comments>http://www.capaciouscore.pl/artykuly/wydobywanie-dnia-tygodnia-z-dowolnej-daty/#komentarze</comments><description><![CDATA[Oto prosty przykład jak uzyskać dzień tygodnia dla zdefiniowanej daty.
<br />
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'date'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'09-07-2009'</span><span style="color: #007700">;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'day_of_week'</span><span style="color: #007700">][</span><span style="color: #DD0000">'en'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">date</span><span style="color: #007700">(</span><span style="color: #DD0000">'l'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">strtotime</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'date'</span><span style="color: #007700">]));</span><span style="color: #FF8000">//&nbsp;Przy&nbsp;ustawionej&nbsp;dacie&nbsp;09-07-2009&nbsp;wyjdzie&nbsp;w&nbsp;rezultacie&nbsp;Tuesday</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'day_of_week'</span><span style="color: #007700">][</span><span style="color: #DD0000">'en'</span><span style="color: #007700">];</span><span style="color: #FF8000">//&nbsp;Jeżeli&nbsp;chcemy&nbsp;aby&nbsp;dzień&nbsp;tygodnia&nbsp;był&nbsp;po&nbsp;polsku</span><span style="color: #007700">switch(</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'day_of_week'</span><span style="color: #007700">][</span><span style="color: #DD0000">'en'</span><span style="color: #007700">]){</span><span style="color: #0000BB"> case&nbsp;</span><span style="color: #DD0000">'Monday'</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'day_of_week'</span><span style="color: #007700">][</span><span style="color: #DD0000">'pl'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'Poniedziałek'</span><span style="color: #007700">;&nbsp;break;</span><span style="color: #0000BB"> case&nbsp;</span><span style="color: #DD0000">'Tuesday'</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'day_of_week'</span><span style="color: #007700">][</span><span style="color: #DD0000">'pl'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'Wtorek'</span><span style="color: #007700">;&nbsp;break;</span><span style="color: #0000BB"> case&nbsp;</span><span style="color: #DD0000">'Wednesday'</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'day_of_week'</span><span style="color: #007700">][</span><span style="color: #DD0000">'pl'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'Środa'</span><span style="color: #007700">;&nbsp;break;</span><span style="color: #0000BB"> case&nbsp;</span><span style="color: #DD0000">'Thursday'</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'day_of_week'</span><span style="color: #007700">][</span><span style="color: #DD0000">'pl'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'Czwartek'</span><span style="color: #007700">;&nbsp;break;</span><span style="color: #0000BB"> case&nbsp;</span><span style="color: #DD0000">'Friday'</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'day_of_week'</span><span style="color: #007700">][</span><span style="color: #DD0000">'pl'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'Piątek'</span><span style="color: #007700">;&nbsp;break;</span><span style="color: #0000BB"> case&nbsp;</span><span style="color: #DD0000">'Saturday'</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'day_of_week'</span><span style="color: #007700">][</span><span style="color: #DD0000">'pl'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'Sobota'</span><span style="color: #007700">;&nbsp;break;</span><span style="color: #0000BB"> case&nbsp;</span><span style="color: #DD0000">'Sunday'</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'day_of_week'</span><span style="color: #007700">][</span><span style="color: #DD0000">'pl'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'Niedziela'</span><span style="color: #007700">;&nbsp;break;}echo&nbsp;</span><span style="color: #0000BB">$tmp</span><span style="color: #007700">[</span><span style="color: #DD0000">'day_of_week'</span><span style="color: #007700">][</span><span style="color: #DD0000">'pl'</span><span style="color: #007700">];</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.date.php" target="_blank" class="postlink">http://php.net/manual/pl/function.date.php</a>
<br />
<a href="http://php.net/manual/pl/function.strtotime.php" target="_blank" class="postlink">http://php.net/manual/pl/function.strtotime.php</a>]]></description></item><item><title>Wakacje się zaczęły</title><pubdate>Thu, 09 Jul 2009 6:52:14 +0200</pubdate><link>http://www.capaciouscore.pl/aktualnosci/wakacje-sie-zaczely/</link><comments>http://www.capaciouscore.pl/aktualnosci/wakacje-sie-zaczely/#komentarze</comments><description><![CDATA[Krótko acz treściwie. Wakacje się zaczeły, a strona stoi w miejscu ze względu na brak wolnego czasu. Mam nadzieję, że niedługo sytuacja się zmieni.]]></description></item><item><title>[PHP] Generowanie losowej liczby</title><pubdate>Sun, 31 May 2009 10:49:47 +0200</pubdate><link>http://www.capaciouscore.pl/artykuly/jak-generowac-losowa-liczbe-w-php/</link><comments>http://www.capaciouscore.pl/artykuly/jak-generowac-losowa-liczbe-w-php/#komentarze</comments><description><![CDATA[Co jakiś czas zachodzi potrzeba użycia generatora losowych liczb. Ten artykuł przybliży Wam magie tego kina.
<br />

<br />
<b>Kiedy zachodzi potrzeba użycia?</b>
<br />
<ul class="list">
<li> generowanie graficznych <a href="http://pl.wikipedia.org/wiki/Token" target="_blank" class="postlink">tokenów</a></li>
<li> generowanie klucza aktywacyjnego</li>
<li> symulowanie obliczeń</li>
<li> rotator bannerów</li>
<li> jednorazowe kody autoryzacji </li>
<li> inne przypadki <img src="http://www.capaciouscore.pl/smiles/icon_razz.gif" class="emoticon" alt="Razz" /></li>
</ul>
<b>Kod:</b><pre class="code"><span style="color: #000000"><span style="color: #0000BB">&lt;?php</span><span style="color: #FF8000">//&nbsp;Jeżeli&nbsp;wersja&nbsp;PHP&nbsp;&lt;&nbsp;4.2.0&nbsp;wtedy&nbsp;zachodzi&nbsp;potrzeba&nbsp;użycia&nbsp;srand()//&nbsp;srand(floor(time()&nbsp;/&nbsp;(60*60*24)));</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'minimal_value'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">12</span><span style="color: #007700">;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'maximum_value'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">22</span><span style="color: #007700">;echo&nbsp;</span><span style="color: #0000BB">rand</span><span style="color: #007700">(</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'minimal_value'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$cfg</span><span style="color: #007700">[</span><span style="color: #DD0000">'maximum_value'</span><span style="color: #007700">]);</span><span style="color: #0000BB">?&gt;</span>
</span></pre>
W tym przypadku zostanie wylosowana liczba z zakresu od 12 do 22.
<br />

<br />
<b>Więcej informacji na:</b>
<br />
<a href="http://php.net/manual/pl/function.rand.php" target="_blank" class="postlink">http://php.net/manual/pl/function.rand.php</a>]]></description></item><item><title>Dziewiczy news</title><pubdate>Mon, 25 May 2009 12:06:55 +0200</pubdate><link>http://www.capaciouscore.pl/aktualnosci/dziewiczy-news/</link><comments>http://www.capaciouscore.pl/aktualnosci/dziewiczy-news/#komentarze</comments><description><![CDATA[Krótko i na temat. Dodałem podstawowe treści i w najbliższych dniach mam zamiar brać się za kontynuowanie tworzenia kursu PHP. Dziękuje za uwagę <img src="http://www.capaciouscore.pl/smiles/icon_wink.gif" class="emoticon" alt="Wink" /> .]]></description></item></channel></rss>
