<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>mijagi&#039;s codepage</title>
	<atom:link href="http://mijagi.eu/feed/" rel="self" type="application/rss+xml" />
	<link>http://mijagi.eu</link>
	<description>Programming :: C# :: C/C++ :: PHP :: Delphi :: Security :: Linux</description>
	<lastBuildDate>Sun, 22 Apr 2012 20:32:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Like me, or die!</title>
		<link>http://mijagi.eu/2012/04/like-me-or-die/</link>
		<comments>http://mijagi.eu/2012/04/like-me-or-die/#comments</comments>
		<pubDate>Sun, 22 Apr 2012 20:32:17 +0000</pubDate>
		<dc:creator>mijagi</dc:creator>
				<category><![CDATA[Bez kategorii]]></category>
		<category><![CDATA[facebook]]></category>

		<guid isPermaLink="false">http://mijagi.eu/?p=197</guid>
		<description><![CDATA[Zawsze dziwiłem się moim znajomym, którzy prowadzą blogi &#8211; &#8222;po co im fan page na facebooku&#8221; Smutnym (a może i wesołym?) faktem jest to, że ludzie wolą dowiadywać się o nowościach z portali społecznościowych niż np. z czytnika RSS Jako, że moim mottem przewodnik jest cytat &#8222;należy się zmieniać by jakim jest się pozostać&#8221;, postanowiłem [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mijagi.eu/wp-content/uploads/2012/04/facebook.png"><img src="http://mijagi.eu/wp-content/uploads/2012/04/facebook-150x150.png" alt="facebook" title="facebook" width="150" height="150" class="alignleft size-thumbnail wp-image-201" /></a><br />
Zawsze dziwiłem się moim znajomym, którzy prowadzą blogi &#8211; &#8222;po co im fan page na facebooku&#8221; <img src='http://mijagi.eu/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' />  Smutnym (a może i wesołym?) faktem jest to, że ludzie wolą dowiadywać się o nowościach z portali społecznościowych niż np. z czytnika RSS <img src='http://mijagi.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Jako, że moim mottem przewodnik jest cytat &#8222;należy się zmieniać by jakim jest się pozostać&#8221;, postanowiłem dołączyć do większości i sFacebookowałem się. Umieściłem nawet Like box&#8217;a po prawej na dole <img src='http://mijagi.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Link do fan page : <a href="https://www.facebook.com/MijagisCodepage" title="Facebook fan page" target="_blank">facebook.com/MijagisCodepage</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mijagi.eu/2012/04/like-me-or-die/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zwycięstwo w hackfest 2012</title>
		<link>http://mijagi.eu/2012/04/zwyciestwo-w-hackfest-2012/</link>
		<comments>http://mijagi.eu/2012/04/zwyciestwo-w-hackfest-2012/#comments</comments>
		<pubDate>Sat, 21 Apr 2012 14:50:55 +0000</pubDate>
		<dc:creator>mijagi</dc:creator>
				<category><![CDATA[Bez kategorii]]></category>
		<category><![CDATA[hackfest]]></category>
		<category><![CDATA[konkurs]]></category>

		<guid isPermaLink="false">http://mijagi.eu/?p=161</guid>
		<description><![CDATA[Kilka dni temu (13.04 &#8211; 15.04) odbył się 48h maraton programowania pod nazwą hackfest. W ogromnym skrócie, całość polega na dobraniu się w 1-3 osobowy zespół, pojechania do Poznania, Bielsko-Białej lub pracy online i stworzeniu w 48h od 0 całej aplikacji internetowej. Poniżej opisałem jak to wyglądało u nas, jaki projekt wykonaliśmy i kilka słów [...]]]></description>
			<content:encoded><![CDATA[<p>Kilka dni temu (13.04 &#8211; 15.04) odbył się 48h maraton programowania pod nazwą <a title="Hackfest - 48h maraton programistyczny" href="http://hackfest.pl" target="_blank">hackfest</a>. W ogromnym skrócie, całość polega na dobraniu się w 1-3 osobowy zespół, pojechania do Poznania, Bielsko-Białej lub pracy online i stworzeniu w 48h od 0 całej aplikacji internetowej.<br />
Poniżej opisałem jak to wyglądało u nas, jaki projekt wykonaliśmy i kilka słów mojej subiektywnej oceny hackfest <img src='http://mijagi.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-161"></span></p>
<h3>1 miejsce <img src='http://mijagi.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </h3>
<p style="text-align: center;"><img class="aligncenter" title="1st" src="http://www.freeclipartnow.com/d/10894-1/award-ribbon-blue-1st.jpg" alt="1st" width="152" height="210" /></p>
<p style="text-align: left;">W hackfest 2012, nasza aplikacja zajęła pierwsze miejsce. Uzyskaliśmy dość dużą przewagę w postaci ilości głosów nad innymi projektami &#8211; jesteśmy bardzo zadowoleni.<br />
W tym miejscu chciałbym podziękować wszystkim internautom, którzy oddali głos na DetRobb&#8217;a &#8211; to zwycięstwo jest dzięki Wam <img src='http://mijagi.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Tak naprawdę wygrali wszyscy, którzy zdobyli nowe doświadczenie i umiejętności podczas trwania hackfest. Mam nadzieję, że wszystkie konkursowe start up&#8217;y będą dalej rozwijane &#8211; życzę powodzenia <img src='http://mijagi.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Mi osobiście bardzo spodobał się projekt <a title="zabio.re" href="http://hackfest.pl/projects/1374,zabio.re" target="_blank">zabio.re </a> i bardzo mu kibicuję w rozwijaniu poza konkursem <img src='http://mijagi.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Gratuluję wszystkim <img src='http://mijagi.eu/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<h3>Jak to się zaczęło&#8230;</h3>
<p>&nbsp;</p>
<p>Udział w konkursie wziąłem z dwoma kumplami z roku, <a title="Adrian" href="https://twitter.com/#!/AdrianSzen" target="_blank">Adrianem</a> i <a title="Bartek" href="https://twitter.com/#!/BartomiejZalews" target="_blank">Bartkiem</a> - nazwaliśmy nasz zespół mało twórczo, mianowicie: kodzimy.net. Dość dużo czasu spędzam na bezproduktywne przeglądanie internetu, a mimo to nie zauważyliśmy informacji o tego rocznym hackfest. Zarejestrowaliśmy się w ostatnim możliwym dniu, więc z powodu braku organizacji nie mieliśmy możliwości pojechać do Poznania czy Bielsko-Białej (a szkoda!). Informacje o tego rocznej edycji odkryliśmy dopiero z <a title="Niebezpiecznik.pl" href="http://niebezpiecznik.pl" target="_blank">niebezpiecznik.pl</a> - gdyby nie ten portal, pewnie w ogóle byśmy nie wzięli udziału <img src='http://mijagi.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Oczywiście ten wpis jest moją subiektywną oceną i bardzo wspieram i podobają mi się takie przedsięwzięcia jak hackfest &#8211; jesteśmy bardzo zadowoleni, że mogliśmy brać w nim udział <img src='http://mijagi.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Generalnie ciężko mi jest się skupić przez 48h bez dłuższego odpoczynku, ale to było ciekawe doświadczenie (programowanie pod presją czasu). Myślę, że w pracy często się mogą zdarzać podobne sytuacje.</p>
<p>Wspólnie doszliśmy do wniosku, że skoro bierzemy udział online, to warto byłoby się spotkać i programować wspólnie zamiast tracić czas na komunikatorach i skype. Tak też zrobiliśmy! Dzięki Bogu, rodzice Adriana wyjechali na weekend, więc zrobiliśmy mu wjazd na chatę! <img src='http://mijagi.eu/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Konkurs startował w piątek trzynastego o 15:00, my zebraliśmy się około 16 i <span style="text-decoration: underline;"><strong>rozpoczęliśmy</strong></span> zbieranie pomysłów co w ogóle będziemy kodzić.<br />
Po krótkiej burzy mózgów i wycieczce do biedronki (BePower rox), postanowiliśmy programować DetRobb (o tym co to jest później). Nadmuchaliśmy materac i rozpoczęło się <img src='http://mijagi.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Całość relacji &#8222;live&#8221; <img src='http://mijagi.eu/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  możecie znaleźć na moim <a title="mijagi" href="http://twitter.com/mijagii" target="_blank">twitterze</a>. Pochłonęło nas na 48h tylko C#, PHP i pizza&#8230;</p>
<p>&nbsp;</p>
<h3>Czym jest DetRobb?</h3>
<p>DetRobb (detect robbery) &#8211; to aplikacja dzięki, której odzyskasz skradziony sprzęt. Zdarza się, że wszelkiego rodzaju urządzenia przenośne są kradzione lub po prostu giną. Nasz program w momencie podłączenia zaginionego sprzętu do internetu wyślę adres IP oraz zrobi zdjęcie z kamerki (o ile jest wbudowana w urządzenie). Całość jest zarządzania poprzez interfejs WWW &#8211; tam się ustawia status, że urządzenie zostało skradzione i chcemy uzyskać lokalizację.</p>
<p>Trochę o technologii&#8230;</p>
<p>Jak wcześniej wspomniałem interfejs dla użytkowników jest na stronie WWW, napisaliśmy to w PHP. Dane użytkowników przechowujemy w bazie MySQL.<br />
Sercem DetRobb&#8217;a jest oczywiście aplikacja desktopowa. Napisaliśmy ją w C#, która jest zorientowana usługowo-obiektowo. Komunikacja z serwerem odbywa się poprzez WCF.<br />
Aplikacja kliencka miała być prosta i taka właśnie nam wyszła. Po instalacji : jeśli nie mamy konta, wyskakuję okienko z rejestracją, natomiast jeśli już jesteśmy użytkownikami DetRobb aplikacja zaczyna pracować w tle. Co 15 minut łączy się z serwerem, sprawdza czy status jest ustawiony na skradziony i jeśli tak, przesyła IP i zdjęcia z kamerki. Proste? Proste!<br />
Ze znalezienie hosta dla PHP nie było problematyczne, ale już dla usługi C# owszem. Na co dzień nie pracuję na Windows, nie jestem specem w tym środowisku, nie orientuję się w darmowych serwerach Windows &#8211; więc jedynym ratunkiem dla nas okazał się <a title="Tomasz Cieplak" href="http://www.cieplak.net/" target="_blank">dr. Tomasz Cieplak</a> - któremu chcieliśmy bardzo serdecznie podziękować za udostępnienie kawałka serwera <img src='http://mijagi.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Mimo, że wiele osób myśli &#8222;przecież to proste&#8230;WCF jest prosty&#8230;pobranie zrzutu kamerki jest proste&#8230;PHP? pfff&#8221; &#8211; zgadzamy się z tym w 100%. Jednak 48h na wymyślenie i realizację takiego projektu to dość mało by wykonać testy i wszystko działało tak jak w specyfikacji. Na dzień dzisiejszy projekt jest zrealizowany, ale do końca &#8222;niedopieszczony&#8221;. Mamy chęci wdrożyć jeszcze kilka poprawek , udoskonalić algorytmy i nawiązać współpracę z nowymi ciekawymi ludźmi.</p>
<p>Wiele osób piszę, że takie programy już są. To prawda, takie programy już są. My zamierzamy wdrożyć funkcjonalności, których nie ma w obecnych programach, poprawić ich efektywność. Te osoby mają rację, na dzień dzisiejszy nasz program nie odstaję wzwyż od konkurencyjnego softu. Dlaczego? Bo był pisany na kolanie w niecałe 48h, dajcie nam kilka miesięcy, nie oceniajcie niedokończonego dzieła <img src='http://mijagi.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p>Podsumowując chciałem jeszcze raz bardzo podziękować wszystkim, którzy oddali głos na naszą aplikację oraz wszystkim, którzy pomogli mentalnie przy projekcie:</p>
<ul>
<li>dr. Cieplak Tomasz</li>
<li>mgr inż. Hawryluk Maciej</li>
<li>Nebelski Rafał</li>
<li>Rafał <img src='http://mijagi.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
</ul>
<p>&#8230; oraz wszystkim tym, którzy w tej chwili nie przychodzą mi do głowy!</p>
]]></content:encoded>
			<wfw:commentRss>http://mijagi.eu/2012/04/zwyciestwo-w-hackfest-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Obróbka obrazów w PHP &#8211; biblioteka GD</title>
		<link>http://mijagi.eu/2012/02/obrobka-obrazow-w-php-biblioteka-gd/</link>
		<comments>http://mijagi.eu/2012/02/obrobka-obrazow-w-php-biblioteka-gd/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 06:00:39 +0000</pubDate>
		<dc:creator>mijagi</dc:creator>
				<category><![CDATA[Archiwum]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[GD]]></category>

		<guid isPermaLink="false">http://mijagi.eu/?p=49</guid>
		<description><![CDATA[Poniższy post był napisany przeze mnie kilka lat temu (dlatego kategoria archiwalne), ale myślę, że przyda się niektórym osobom. Informacje zawarte w tym poście mogły ulec przedawnieniu. Język PHP dysponuje biblioteką GD odpowiedzialną za wyświetlanie i modyfikowanie obrazów. Z biblioteki GD, oprócz PHP, korzystają m.in. takie języki programowania jak Pascal czy C. Będę operował na obrazku dinozaur.jpg. Zmniejszanie obrazka Na wielu stronach możemy zauważyć skrypty [...]]]></description>
			<content:encoded><![CDATA[<p>Poniższy post był napisany przeze mnie kilka lat temu (dlatego kategoria archiwalne), ale myślę, że przyda się niektórym osobom.<br />
Informacje zawarte w tym poście mogły ulec przedawnieniu.</p>
<p>Język <strong><a title="PHP" href="http://www.php.net/" rel="homepage">PHP</a></strong> dysponuje biblioteką <strong>GD</strong> odpowiedzialną za wyświetlanie i modyfikowanie <strong>obrazów</strong>. Z biblioteki <strong>GD</strong>, oprócz <strong>PHP</strong>, korzystają m.in. takie języki programowania jak <strong>Pascal</strong> czy <strong>C</strong>.</p>
<p>Będę operował na obrazku dinozaur.jpg.</p>
<p><a href="http://mijagi.files.wordpress.com/2011/07/dinozaur.jpg"><img class="aligncenter" title="dinozaur" src="http://mijagi.files.wordpress.com/2011/07/dinozaur.jpg?w=150" alt="gd" width="150" height="112" /></a></p>
<p><span id="more-49"></span></p>
<p><strong>Zmniejszanie obrazka</strong><br />
Na wielu stronach możemy zauważyć skrypty zmniejszające obrazki. Często używa się tego sposobu do uploadowania avatarów i zmniejszania ich do określonej wielkości. Obrazek dinozaur.jpg, możemy pomniejszyć takim skryptem:</p>
<pre class="brush: php; title: Kod; notranslate">
&lt;?php
$obraz = imagecreatefromjpeg('dinozaur.jpg'); #pobranie obrazka do skryptu
$szerokosc = 255; #ustalenie szerokosci
$wysokosc = 255; #ustalenie wysokosci
$mini = imagecreatetruecolor($szerokosc,$wysokosc); #stworzenie obrazka
imagecopyresized($mini,$obraz,0,0,0,0,$szerokosc,$wysokosc,imagesx($obraz),imagesy($obraz)); #nanoszenie
header('Content-Type: image/jpeg'); #naglowek
imagejpeg($mini, null, 70); #wydruk jpeg'a
?&gt;</pre>
<p>Jak widać kod nie jest skomplikowany. Wymiary pomniejszonego obrazka deklarujemy w zmiennych $wysokosc i $szerokosc. Warto zapoznać się z funkcją GetImageSize(), jeśli chcemy wykorzystać ten kod do skalowania obrazków wtedy gdy są za duże, ja opisuje tylko przykładowe wykorzystanie tych funkcji.</p>
<p><strong>Powiększanie obrazka</strong><br />
Powiększanie obrazka, jest równoznaczne ze spadkiem jakości obrazu. Właściwie powiększanie opiera się na rozciągnięciu danego kawałka obrazka. Mimo “pikselozy”, na którą będzie cierpiał nasz dinozaur, skrypt może się komuś przydać.</p>
<pre class="brush: php; title: Kod; notranslate">
&lt;?php
$obraz = imagecreatefromjpeg('dinozaur.jpg'); #pobranie obrazka
$szerokosc = 200;
$wysokosc = 150;
$mini = imagecreatetruecolor($szerokosc,$wysokosc);
imagecopyresized($mini,$obraz,0,0,40,15,800,600,imagesx($obraz),imagesy($obraz));
header('Content-Type: image/jpeg');
imagejpeg($mini, null, 70);
?&gt;</pre>
<p>Skrypt, bardzo podobny do poprzedniego, różni się tylko parametrami w funkcji <strong>imagecopyresized</strong>. W tej funkcji wartość 40 i 15 określają, który fragment obrazka będzie powiekszany (chciałem skupić się na głowie gada). Wartości 800 i 600 określają do jakich rozmiarów obraz ma być powiększony. Efektem skryptu będzie taki obrazek:</p>
<p><a href="http://mijagi.files.wordpress.com/2011/07/powiekszony.jpeg"><img class="aligncenter" title="powiekszony" src="http://mijagi.files.wordpress.com/2011/07/powiekszony.jpeg?w=150" alt="gd" width="150" height="112" /></a><strong>Filtry nakładane na obrazek</strong><br />
Biblioteka GD zaopatruje nas w różne filtry, które możemy nałożyć na obrazek. Filtr możemy nałożyć za pomocą takiego kodu:</p>
<pre class="brush: php; title: Kod; notranslate">
&lt;?php
$obraz = imagecreatefromjpeg('dinozaur.jpg');
imagefilter($obraz, IMG_FILTER_COLORIZE, -60, 10, 70); # funkcja odpowiadajaca za nalozenie filtru
header('Content-Type: image/jpeg');
imagejpeg($obraz, null, 100);
?&gt;</pre>
<p>Do zapoznania się z wszystkimi filtrami odsyłam was do manuala funkcji, ja opiszę kilka filtrów, którymi dysponuje.</p>
<div class="wp-caption aligncenter" style="width: 410px"><img title="IMG_FILTER_SELECTIVE_BLUR" src="http://mijagi.files.wordpress.com/2011/07/img_filter_selective_blur.jpeg" alt="" width="400" height="300" /><p class="wp-caption-text">IMG FILTER SELECTIVE BLUR</p></div>
<div class="wp-caption aligncenter" style="width: 410px"><img title="IMG FILTER NEGATE" src="http://mijagi.files.wordpress.com/2011/07/img_filter_negate.jpeg" alt="IMG FILTER NEGATE" width="400" height="300" /><p class="wp-caption-text">IMG FILTER NEGATE</p></div>
<div class="wp-caption aligncenter" style="width: 410px"><img title="IMG FILTER MEAN REMOVAL" src="http://mijagi.files.wordpress.com/2011/07/img_filter_mean_removal.jpeg" alt="IMG FILTER MEAN REMOVAL" width="400" height="300" /><p class="wp-caption-text">IMG FILTER MEAN REMOVAL</p></div>
<div class="wp-caption aligncenter" style="width: 410px"><img title="IMG FILTER GAUSSIAN BLUR" src="http://mijagi.files.wordpress.com/2011/07/img_filter_gaussian_blur.jpeg" alt="IMG FILTER GAUSSIAN BLUR" width="400" height="300" /><p class="wp-caption-text">IMG FILTER GAUSSIAN BLUR</p></div>
<div class="wp-caption aligncenter" style="width: 410px"><img title="IMG FILTER EMBOSS" src="http://mijagi.files.wordpress.com/2011/07/img_filter_emboss.jpeg" alt="IMG FILTER EMBOSS" width="400" height="300" /><p class="wp-caption-text">IMG FILTER EMBOSS</p></div>
<div class="wp-caption aligncenter" style="width: 410px"><img title="IMG FILTER EDGEDETECT" src="http://mijagi.files.wordpress.com/2011/07/img_filter_edgedetect.jpeg" alt="IMG FILTER EDGEDETECT" width="400" height="300" /><p class="wp-caption-text">IMG FILTER EDGEDETECT</p></div>
<div class="wp-caption aligncenter" style="width: 410px"><img title="IMG FILTER CONTRAST, -30" src="http://mijagi.files.wordpress.com/2011/07/img_filter_contrast-30.jpeg" alt="IMG FILTER CONTRAST, -30" width="400" height="300" /><p class="wp-caption-text">IMG FILTER CONTRAST, -30</p></div>
<div class="wp-caption aligncenter" style="width: 410px"><img title="IMG FILTER COLORIZE, -60, 10, 70" src="http://mijagi.files.wordpress.com/2011/07/img_filter_colorize-60-10-70.jpeg" alt="IMG FILTER COLORIZE, -60, 10, 70" width="400" height="300" /><p class="wp-caption-text">IMG FILTER COLORIZE, -60, 10, 70</p></div>
<div class="wp-caption aligncenter" style="width: 410px"><img title="IMG FILTER BRIGHTNESS, 20" src="http://mijagi.files.wordpress.com/2011/07/img_filter_brightness20.jpeg" alt="IMG FILTER BRIGHTNESS, 20" width="400" height="300" /><p class="wp-caption-text">IMG FILTER BRIGHTNESS, 20</p></div>
<p><strong>Obracanie obrazka</strong><br />
Za obrót obrazka odpowiada funkcja imagerotate.</p>
<pre class="brush: php; title: Kod; notranslate">
&lt;?php
$obraz = imagecreatefromjpeg('dinozaur.jpg');
$kolor = imagecolorallocate($obraz, 255, 255, 255); #ustawiamy kolor
$szerokosc = 240;
$wysokosc = 180;
$mini = imagecreatetruecolor($szerokosc, $wysokosc);
imagecopyresized($mini, $obraz, 0, 0, 0, 0, $szerokosc, $wysokosc, imagesx($obraz), imagesy($obraz));
$mini = imagerotate($mini, 200, $kolor); #obracamy obraz z parametrem 200
header('Content-Type: image/jpeg');
imagejpeg($mini, null, 100);
?&gt;
</pre>
<p>Efekt wykonania skryptu będzie taki:</p>
<p><a href="http://mijagi.files.wordpress.com/2011/11/obrot.jpeg"><img class="aligncenter" title="obrot" src="http://mijagi.files.wordpress.com/2011/11/obrot.jpeg?w=150" alt="gd" width="150" height="131" /></a><strong>Nanoszenie obrazka na obrazek</strong><br />
W tej części wpisu, będe operował na dwóch obrazkach. Pierwszy z nich to kwiat.jpg, drugi to php.png.</p>
<p><a href="http://mijagi.files.wordpress.com/2011/11/kwiat.jpg"><img class="aligncenter" title="kwiat" src="http://mijagi.files.wordpress.com/2011/11/kwiat.jpg?w=150" alt="gd" width="150" height="144" /></a><a href="http://mijagi.files.wordpress.com/2011/11/php.png"><img class="aligncenter" title="php" src="http://mijagi.files.wordpress.com/2011/11/php.png?w=150" alt="" width="150" height="78" /></a></p>
<p>Spróbujemy nanieść logo PHP na kwiatka. Kod, który wykona tą czynność wygląda tak:</p>
<pre class="brush: php; title: Kod; notranslate">
&lt;?php
$img = imagecreatefromjpeg('kwiat.jpg');
$logo = imagecreatefrompng('php.png');
$mini = imagecreatetruecolor(80, 70);
imagecopyresized($mini, $logo, 0, 0, 0, 0, 80, 70, imagesx($logo), imagesy($logo));
imagecopymerge($img, $mini, 400, 370, 0, 0, imagesx($img), imagesy($img), 40);
header('Content-Type: image/jpeg');
imagejpeg($img, null, 70);
?&gt;
</pre>
<p>Z funkcją <strong>imagecopyresized</strong> mieliście okazje zapoznać się w poprzednich kodach. Za nanoszenie obrazka na obrazek odpowiada funkcja <strong>imagecopymerge</strong>. Parametry 400 i 370 okreslają współrzędne od których zaczynamy nanoszenie. Natomiast parametr 40 określa stopień widoczności. Jeśli ktoś ma problem ze zrozumieniem pozostałych parametrów to zapraszam do przeczytania manuala funkcji. Efekt wykonania kodu wygląda tak:</p>
<p><a href="http://mijagi.files.wordpress.com/2011/11/nanoszenie.jpeg"><img class="aligncenter" title="nanoszenie" src="http://mijagi.files.wordpress.com/2011/11/nanoszenie.jpeg?w=150" alt="gd" width="150" height="144" /></a>W prawym dolnym rogu widzimy <strong>miniaturke</strong> loga PHP. Możemy wykorzystać tą metode do stosowania tzw. znaków wodnych, wtedy jednak musimy nauczyć się tworzenia obrazków z przezroczystym tłem (w gif i png), co postaram się opisać w kolejnym wpisie.</p>
<p><strong>Nanoszenie tekstu na obrazek</strong><br />
Do nanoszenia tekstu na obrazek posłuży nam funkcja <strong>imagettftext</strong>. W tej części ponownie będę operował na obrazku dinozaur.jpg.<br />
Oto kod odpowiadający za nałożenie tekstu:</p>
<pre class="brush: php; title: Kod; notranslate">
&lt;?php
$obraz = imagecreatefromjpeg('dinozaur.jpg');
$kolor = imagecolorallocate($img, 12, 12,12);
imagettftext($obraz,40,0,140,290,$kolor,'./Nervous.TTF','dinozaur');
header('Content-Type: image/jpeg');
imagejpeg($obraz, null, 100);
?&gt;
</pre>
<p>W funkcji <strong>imagettftext</strong>, parametr 40, odpowiada za rozmiar czcionki, 140 i 290 za współrzędne położenia napisu. Kolor czcionki określamy za pomocą zmiennej $kolor, która przyjmuje wartość funkcji <strong>imagecolorallocate</strong>. Typ czcionki, jest określamy w kolejnym parametrze, a tekst, który nanosimy w ostatnim. Parametr 0, w naszym przypadku jest nieistotny, odpowiada on za nachylenie czcionki. Oto efekt skryptu:</p>
<p><a href="http://mijagi.files.wordpress.com/2011/11/tekst.jpeg"><img class="aligncenter" title="tekst" src="http://mijagi.files.wordpress.com/2011/11/tekst.jpeg?w=150" alt="gd" width="150" height="112" /></a><strong>Podsumowanie</strong><br />
Jak widać, łatwo się używa biblioteki GD, napewno nie zastąpi nam programu graficznego, jesli chodzi o obróbke obrazków, ale z pewnością wystarczy do manipulowania na zdjęciach na stronach internetowych. W kolejnych wpisach postaram się szerzej opisać jej możliwości.</p>
<p><strong><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://mijagi.eu/2012/02/obrobka-obrazow-w-php-biblioteka-gd/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Adresowanie IP v4</title>
		<link>http://mijagi.eu/2012/01/adresowanie-ip-v4/</link>
		<comments>http://mijagi.eu/2012/01/adresowanie-ip-v4/#comments</comments>
		<pubDate>Sat, 07 Jan 2012 06:00:42 +0000</pubDate>
		<dc:creator>mijagi</dc:creator>
				<category><![CDATA[Pozostałe]]></category>
		<category><![CDATA[Broadcast]]></category>
		<category><![CDATA[DHCP]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[TCP/IP]]></category>

		<guid isPermaLink="false">http://mijagi.eu/?p=45</guid>
		<description><![CDATA[Adresowanie IPv4 1. Czym jest adres IP? 2. Klasy adresów 3. Zabawa w router 4. Praktyczny przykład 5. Mowa końcowa Adres IP to najprościej mówiąc, nasz adres logiczny w sieci, który oparty jest na protokole sieciowym TCP/IP. Adres ten składa się 32 bitów podzielonych na 4 oktety (po 8 bitów). Możemy go podzielić na dwie części, pierwsza odpowiada za identyfikator sieci, druga natomiast [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Adresowanie <a title="IPv4" href="http://en.wikipedia.org/wiki/IPv4" rel="wikipedia">IPv4</a></strong></p>
<p><strong></strong><br />
1. Czym jest adres IP?<br />
2. Klasy adresów<br />
3. Zabawa w router<br />
4. Praktyczny przykład<br />
5. Mowa końcowa <img src='http://mijagi.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-45"></span></p>
<p><strong>Adres IP</strong> to najprościej mówiąc, nasz adres logiczny w sieci, który oparty jest na<br />
protokole sieciowym <strong>TCP/IP</strong>. Adres ten składa się 32 bitów podzielonych na 4 oktety (po 8<br />
bitów). Możemy go podzielić na dwie części, pierwsza odpowiada za identyfikator sieci,<br />
druga natomiast za identyfikator hosta.<br />
Identyfikator sieci : określa segment, w którym znajduje się dany komputer, komputery w<br />
tym samym segmencie muszą mieć ten sam identyfikator sieci ofc :&gt;<br />
Identyfikator hosta : określa konkretne urządzenie w danym segmencie. Identyfikator ten<br />
musi być unikalny dla każdego urządzenia w jednej podsieci, identyfikator hosta mogą się<br />
powtarzać wyłącznie gdy są w różnych podsieciach. <img src='http://mijagi.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Adresy IP dzielą się na różne grupy, nazywamy je klasami.<br />
<img title="Adresy IP" src="http://majusek.fm.interia.pl/grafika/adresy.gif" alt="Adresy IP" width="443" height="245" /><br />
<strong></strong></p>
<p>&nbsp;</p>
<p><strong>Czym charakteryzują się poszczególne klasy?</strong><br />
<strong></strong></p>
<p><strong>Klasa A:</strong><br />
W tej klasie na identyfikator sieci przeznaczony jest tylko pierwszy oktet, czyli może<br />
istnieć 126 podsieci. Mamy dużo bitów na rezerwację identyfikatorów hostów, da nam to<br />
ponad 16mln (2^24) hostów. Domyślna maska podsieci : 255.0.0.0.<br />
Zakres adresów: 1.0.0.0 – 126.0.0.0.<br />
<strong></strong></p>
<p><strong>Klasa B:</strong><br />
W klasie B na identyfikator sieci przeznaczone są dwa pierwsze oktety, co daję ponad<br />
16 tysięcy podsieci i ponad 65 tysięcy hostów (2^16). Domyślna maska podsieci<br />
255.255.0.0.<br />
Zakres adresów: 128.1.0.0 &#8211; 191.254.0.0<br />
<strong></strong></p>
<p><strong>Klasa C:</strong><br />
W tej klasie można utworzyć najwięcej podsieci, przeznaczone są na to aż trzy<br />
pierwsze oktety (ponad 2 mln)! Natomiast zostaję nam jeden oktet na identyfikator hosta, co<br />
daję nam 254 różnych hostów. Domyślna maska podsieci: 255.255.255.0.<br />
Zakres adresów: 192.0.1.0 – 223.255.254.0.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Liczba 127 w pierwszym oktecie jest zarezerwowana dla tak zwanej pętli zwrotnej,<br />
czyli starego poczciwego localhosta. Pingując do naszego adresu localhost<br />
(127.0.0.1) możemy sprawdzić, czy karta sieciowa działa poprawnie, jeśli ping nie<br />
odpowiada powinniśmy się martwić <img src='http://mijagi.eu/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Oprócz tych standardowych masek podsieci, występują też niestandardowe. Maski<br />
te (niestandardowe) określa się za pomocą bitów. Na przykład maska : 255.255.0.0<br />
jest 16 bitowa, ponieważ ma w sobie 2 oktety wypełnione po 8 bitów. Łatwiej będzie<br />
to zrozumieć gdy zamienimy to na liczby w systemie binarnym.<br />
8bitów+8bitów = 16 bitów.</p>
<p>11111111.11111111.00000000.00000000.<br />
8bitów + 8bitów + 8bitów = 24 bity.<br />
11111111.11111111.11111111.00000000</p>
<p>Maskę 28 bitową oznaczylibyśmy tak:<br />
8bitów + 8 bitów + 8bitów + 4 bity<br />
11111111.11111111.11111111.11110000<br />
255.255.255.240.</p>
<p>Mając adres sieci i maskę podsieci możemy w prosty sposób określić, czy hosty są<br />
dla siebie zdalne czy lokalne (występują w jednym segmencie). Wystarczy<br />
porównać ich identyfikator sieci i maskę podsieci.<br />
Podczas adresowania musimy pamiętać o kilku bardzo ważnych zasadach, w<br />
pierwszym oktecie nie może znajdować się liczba 127 (zarezerwowana dla<br />
testowania połączenia). W identyfikatorze hosta nie mogą znajdować się tylko<br />
liczby 255, tego typu adres wykorzystuję broadcast, same 0 w identyfikatorze hosta<br />
również są zakazane, wtedy przecież byłby adresem sieci! Ostatnią oczywistą<br />
zasadą jest unikalność identyfikatora hosta w każdym segmencie sieci.<br />
Mówiąć, a właściwie pisząc o adresach IP, warto wspomnieć o APIPA (ang.<br />
<a title="Link-local address" href="http://en.wikipedia.org/wiki/Link-local_address" rel="wikipedia">Automatic Private IP Addressing</a>), jest to adres, który przydzielany jest<br />
automatycznie w systemach Windows, gdy serwer <a title="Dynamic Host Configuration Protocol" href="http://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol" rel="wikipedia">DHCP</a> jest nieosiągalny. APIPA<br />
należy do zakresu adresów: 169.254.0.1 – 169.254.255.254, z 16 bitową maską<br />
podsieci.<br />
<strong>Pobawmy się w router!</strong></p>
<p><strong></strong><br />
Router operuję na liczbach binarnych. Dokonuję operacji AND, czyli poprostu<br />
koniunkcji. Małe przypomnienie z logiki matematycznej:</p>
<p>P | Q | P^Q<br />
0 | 0  |  0<br />
0 | 1  |  0<br />
1 | 0  |  0<br />
1 | 1  |  1</p>
<p>Przeanalizuj tabelkę, zwróc uwagę, że tylko w jednym wypadku koniunkcja zwróci<br />
prawdę.<br />
Wykonajmy prostę ćwiczenie dla utrwalenia wiedzy. Sprawdźmy czy adresy<br />
172.25.1.100/20 i 172.25.100.1/20 są zdalne czy lokalne.<br />
Zamieniamy pierwszy adres na jego binarny odpowiednik:</p>
<p>&nbsp;</p>
<p>172                      25              1                100<br />
10101100.00011001.00000001.01100100<br />
Uwaga: Spójrz na drugi oktet, 25 binarnie to 11001 (5 cyfr), oktet musi mieć osiem,<br />
więc dopełniamy zerami.<br />
172.25.1.100/20 – zapis ten oznacza, że maska jest 20 bitowa, a więc<br />
niestandardowa.<br />
Zamieniamy naszą 20bitową maskę na bity:</p>
<p>255              255            240              0<br />
11111111.11111111.11110000.00000000<br />
Kolejnym krokiem jest zestawienie ze sobą maski i adresu IP w celu uzyskania<br />
adresu sieci.</p>
<p>10101100.00011001.00000001.01100100</p>
<p>11111111.11111111.11110000.00000000<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- AND<br />
10101100.00011001.00000000.00000000 = 172.25.0.0<br />
Porównujemy ze sobą kolejne bity, proponuję to robić podpisująć jak w przykładzie<br />
wyżej (trudniej się pomylić).<br />
Tak więc mamy takie informację :<br />
<strong>Adres IP</strong>: 172.25.1.100<br />
<strong>Maska podsieci</strong>: 20 bitowa<br />
<strong>Adres sieci</strong>: 172.25.0.0<br />
Zajmijmy się teraz drugim adresem.</p>
<p>&nbsp;</p>
<p>172                25               100            1<br />
10101100.00011001.01100100.00000001</p>
<p>Teraz maska:</p>
<p>255              255             240               0</p>
<p>11111111.11111111.11110000.00000000</p>
<p>&nbsp;</p>
<p>Operacja AND:<br />
10101100.00011001.01100100.00000001<br />
11111111.11111111.11110000.00000000<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; AND<br />
10101100.00011001.01100000.00000000 = 172.25.96.0</p>
<p>&nbsp;</p>
<p>Informację na temat drugiego adresu:<br />
<strong>Adres IP</strong>: 172.25.100.1<br />
<strong>Maska podsieci</strong>: 20 bitowa<br />
<strong>Adres sieci</strong>: 172.25.96.0<br />
Porównując ze sobą dwa adresy sieci stwierdzamy, że hosty są dla siebie zdalne<br />
(172.25.0.0 != 172.25.96.0).<br />
<strong>Praktyczny przykład</strong><br />
Wyobraźmy sobie, że dostaliśmy pracę w pewnej firmie. Dostaliśmy od szefa<br />
polecenie zaplanowania sieci w budynku. Szef zażyczył sobie żeby na każdym<br />
piętrze była inna podsieć, dał nam do wiadomości, że na każdym piętrze stoi nie<br />
więcej niż 100 komputerów.<br />
Podsumowując musimy zrobić 10 podsieci, w każdej z nich po przynajmniej 100<br />
hostów. Mamy do dyspozycji następujący adres IP 171.15.0.0 z maską 16 bitową<br />
(255.255.0.0).<br />
Żeby dobrze rozplanować naszą sieć, musimy przesunąć identyfikator hosta i kilka<br />
bitów w prawo (tak, żeby można było utworzyć przynajmniej 10 podsieci, 100<br />
hostów). Myślę, że rozsądnie będzie przesunąć identyfikator hosta o 6 bitów w<br />
prawo.<br />
Zobaczmy jak to będzie wyglądało w zapisie binarnym</p>
<p>10101100.00001111.00000000.00000000 identyfikator sieci<br />
11111111.11111111.11111100.00000000 maska podsieci</p>
<p>Mamy 6 bitów na adresy podsieci, czyli (2^6)-2 = 62 oraz 10 bitów na hosty co daje<br />
(2^10)-2 = 1022. Spełniliśmy założenia szefa i jesteśmy przygotowani na rozrost<br />
sieci w przyszłości.<br />
Takim sposobem trzeba przydzielić podsieci:</p>
<p>10101100.00001111.000000|00.00000000 identyfikator sieci<br />
11111111.11111111.111111|00.00000000 maska podsieci (22 bity)<br />
10101100.00001111.000001|00.00000000 pierwsza podsieć<br />
10101100.00001111.000010|00.00000000 druga podsieć<br />
&#8230;<br />
10101100.00001111.111110|00.00000000 ostatnia podsieć</p>
<p>Nasze sieci będą miały następujące adresy:<br />
1. 171.15.4.0<br />
2. 171.15.8.0<br />
&#8230;<br />
n. 171.15.248.0<br />
Oczywiście nam będzie potrzebne tylko 10 adresów sieci.<br />
Przyjrzyjmy się jak rozdzielić hosty do każdej z podsieci. Weźmy adres pierwszej z<br />
nich.</p>
<p>10101100.00001111.000000|00.00000000 identyfikator sieci<br />
11111111.11111111.111111|00.00000000 maska podsieci (22 bity)<br />
10101100.00001111.000001|00.00000001 id. Pierwszego hosta<br />
10101100.00001111.000001|00.00000010 id. drugiego hosta<br />
&#8230;<br />
10101100.00001111.000001|11.11111110 id. ostatniego hosta<br />
10101100.00001111.000001|11.11111111 broadcast</p>
<p>Adres broadcast to adres rozgłoszeniowy, rozgłasza pakiety do wszystkich hostów<br />
w danej podsieci. Składa się on z wyłącznie 1 w części identyfikatora hosta.</p>
<p>Dziesiętny zapis listy hostów:<br />
1. 171.15.4.1/22<br />
2. 171.15.4.2/22<br />
&#8230;<br />
Ostatni: 171.15.7.254/22<br />
Wszystko rozplanowane, teraz trzeba trochę pobiegać po piętrach z kablem i<br />
zaciskarką.<br />
Dzięki za uwagę!</p>
]]></content:encoded>
			<wfw:commentRss>http://mijagi.eu/2012/01/adresowanie-ip-v4/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Merry Xmass!</title>
		<link>http://mijagi.eu/2011/12/merry-xmass/</link>
		<comments>http://mijagi.eu/2011/12/merry-xmass/#comments</comments>
		<pubDate>Sat, 24 Dec 2011 18:40:18 +0000</pubDate>
		<dc:creator>mijagi</dc:creator>
				<category><![CDATA[Bez kategorii]]></category>
		<category><![CDATA[xmass]]></category>

		<guid isPermaLink="false">http://mijagi.eu/?p=156</guid>
		<description><![CDATA[Wraz z dzisiejszym dniem rozpoczynają się święta Bożego Narodzenia, które osobiście bardzo lubię (po Wigilii czekam zawsze do północy, żeby zjeść 3 duże porcje tatarów) Życzę wszystkim tak skromnie, ale szczerze wesołych świąt i szczęśliwego nowego roku Oprócz powyższych banałów chciałbym Wam życzyć (również sobie ), dużo zapału do pracy, nie przejmowania się porzuconymi projektami, [...]]]></description>
			<content:encoded><![CDATA[<p>Wraz z dzisiejszym dniem rozpoczynają się święta Bożego Narodzenia, które osobiście bardzo lubię (po Wigilii czekam zawsze do północy, żeby zjeść 3 duże porcje tatarów) <img src='http://mijagi.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Życzę wszystkim tak skromnie, ale szczerze wesołych świąt i szczęśliwego nowego roku <img src='http://mijagi.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Oprócz powyższych banałów chciałbym Wam życzyć (również sobie <img src='http://mijagi.eu/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ),</p>
<p>dużo zapału do pracy, nie przejmowania się porzuconymi projektami,<br />
multum pomysłów na startupy, cierpliwości, dokładności,<br />
szczęścia, rozumu, &#8222;czasu&#8221;, zdanych egzaminów, kawy, spełnienia marzeń,<br />
and many, many others!</p>
<p>życzy mijagi <img src='http://mijagi.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://mijagi.eu/2011/12/merry-xmass/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Własny skrypt captcha w PHP</title>
		<link>http://mijagi.eu/2011/12/wlasny-skrypt-captcha-w-php/</link>
		<comments>http://mijagi.eu/2011/12/wlasny-skrypt-captcha-w-php/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 06:00:50 +0000</pubDate>
		<dc:creator>mijagi</dc:creator>
				<category><![CDATA[Archiwum]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Captcha]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://mijagi.eu/?p=42</guid>
		<description><![CDATA[Jak inne wpisy w kategorii &#8222;Archiwalne&#8221; zostały przeze mnie mucone ładnych kilka lat temu więc, niektóre rzeczy mogą być przedawnione. Po pewnym czasie od publikacji tego kodu (jeszcze na moim wcześniejszym blogu) dochodziły do mnie linki od znajomych gdzie wykorzystują moją captche, jest m.in. na napiprojekt.pl (http://www.napiprojekt.pl/?dz=6), tyle, że gdy napisałem do nich czy umieszczą [...]]]></description>
			<content:encoded><![CDATA[<p>Jak inne wpisy w kategorii &#8222;Archiwalne&#8221; zostały przeze mnie mucone ładnych kilka lat temu <img src='http://mijagi.eu/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  więc, niektóre rzeczy mogą być przedawnione.</p>
<p>Po pewnym czasie od publikacji tego kodu (jeszcze na moim wcześniejszym blogu) dochodziły do mnie linki od znajomych gdzie wykorzystują moją captche, jest m.in. na napiprojekt.pl (<a href="http://www.napiprojekt.pl/?dz=6">http://www.napiprojekt.pl/?dz=6</a>), tyle, że gdy napisałem do nich czy umieszczą linka skąd pochodzi (oczywiście zostałem bez odpowiedzi), zmienili jej kod na tyle, że trzeba podać wynik prostego rachunku <img src='http://mijagi.eu/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><span id="more-42"></span></p>
<p><img title="More..." src="https://mijagi.wordpress.com/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" />Poczytałem o <strong>GD</strong>, o <strong><a title="CAPTCHA" href="http://en.wikipedia.org/wiki/CAPTCHA" rel="wikipedia">captcha</a></strong> i napisałem własny kodzik. Skrypt fajnie działa, możemy go rozszerzyć o tła czy nowe czcionki.<br />
Zamieszczę kilka przykładowych obrazków, które generuje skrypt:</p>
<p><a href="http://mijagi.files.wordpress.com/2011/07/1.jpeg"><img class="aligncenter" title="Captcha1" src="http://mijagi.files.wordpress.com/2011/07/1.jpeg?w=150" alt="captcha" width="150" height="45" /><br />
</a> <a href="http://mijagi.files.wordpress.com/2011/07/2.jpeg"><img class="aligncenter" title="Captcha2" src="http://mijagi.files.wordpress.com/2011/07/2.jpeg?w=150" alt="captcha" width="150" height="45" /><br />
</a> <a href="http://mijagi.files.wordpress.com/2011/07/3.jpeg"><img class="aligncenter" title="Captcha3" src="http://mijagi.files.wordpress.com/2011/07/3.jpeg?w=150" alt="captcha" width="150" height="45" /><br />
</a> <a href="http://mijagi.files.wordpress.com/2011/07/4.jpeg"><img class="aligncenter" title="Captcha4" src="http://mijagi.files.wordpress.com/2011/07/4.jpeg?w=150" alt="captcha" width="150" height="45" /><br />
</a><a href="http://mijagi.files.wordpress.com/2011/07/5.jpeg"><img class="aligncenter" title="Captcha5" src="http://mijagi.files.wordpress.com/2011/07/5.jpeg?w=150" alt="captcha" width="150" height="45" /></a></p>
<p>Jak widzicie token jest czytelny. Zastosowanie losowej czcionki w każdym znaku sprawia, że litera powtórzona w tokenie może wyglądać inaczej, wtedy a != a. Specjalnie dobrałem tak czcionki, żeby litery nie wyglądały na proste i równe. Znaki w niektórych miejscach nachodzą na siebie, co zdecydowanie utrudni robote dla bota, podobnie jak losowe ułożenie (odstępy między znakami i pozycja z nachyleniem) znaków. Każdy znak jest innego, zbliżonego do siebie koloru (tak, tak, wiem, że to nie utrudnia roboty dla bota, ale newbie spamers się na tym złapią).<br />
Dodatkowym plusem kodu jest nałożenie na obrazek z tokenem kreski czarnej, która też jest nakładana w losowym położeniu i z losowym naciskiem tyle razy, ile jest znaków w tokenie.</p>
<p>Jeśli chcesz rozszerzyć ten kod o swoje tła czy czcionki to musisz pamiętać by je dobrze dobrać. Czcionki nie powinny być równe, bardziej pokręcone, skrzywione (tylko nie przesadź!). Nowe czcionki umieść w katalogu captcha_fonts, a nowe tła w captcha_bg.</p>
<p><strong>Jak używać captcha?</strong><br />
Obrazek generowany ze skryptu, umieszczamy na stronie w ten sposób:</p>
<pre class="brush: php; title: Kod; notranslate">
&lt;img src=&quot;captcha.php&quot; /&gt;
</pre>
<p>Nie można zapomnieć, o wystartowaniu sesji, w pliku gdzie jest obrazek. Jeśli chcemy sprawdzić czy token jest dobrze wpisany, należy go porównać z zawartością sesji – <strong>$_SESSION['captcha']</strong>.</p>
<p>Kod captcha:</p>
<pre class="brush: php; title: Kod; notranslate">
&lt;?php
session_start(); #otwieramy sesje
$pool = &quot;abcdefghijklmnouprstuwyz&quot;; #deklaracja znakow
$kreska = imagecreatefromjpeg('kreska.jpg'); #tworzymy kreske z jpg
$background_array = glob('captcha_bg/*.jpg'); #wczytujemy tla
$font_array = glob('captcha_fonts/*.TTF'); #wczytujemy czcionki
$count_pool = rand(4,5); #losujemy liczbe znakow
$background = $background_array[array_rand($background_array)]; #losujemy tlo
$captcha = imagecreatefromjpeg($background); #tworzymy tlo z obrazka
for($x=1; $x&lt;=$count_pool; $x++){
	$font = $font_array[array_rand($font_array)]; #losujemy czcionke
	$znak     = $pool[rand(0, strlen($pool)-1)]; #losujemy znaki
	$color = imagecolorallocate($captcha, rand(0,50), rand(0,70), rand(0,85)); #ustalamy kolor znakow
	$space = (round(imagesx($captcha) / $count_pool+1)-10)*($x-1)+30; #obliczamy odstepy miedzy znakami
	imagettftext($captcha,rand(30, 40),rand(-15, 35),$space,rand(40, 60),$color,$font,$znak); #nanosimy znaki
	imagecopymerge($captcha, $kreska, rand(1,10),rand(1,10),rand(1,10),rand(1,10), imagesx($captcha), imagesy($captcha), rand(10,30)); #nanosimy kreske
	$token .= $znak; #przypisujemy znaki
}
header('Content-Type: image/jpeg'); #odpowiedni naglowek
imagejpeg($captcha); #obrazek
$_SESSION['captcha'] = $token; #sesja z tokenem
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mijagi.eu/2011/12/wlasny-skrypt-captcha-w-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>kodzimy.net</title>
		<link>http://mijagi.eu/2011/11/kodzimy-net/</link>
		<comments>http://mijagi.eu/2011/11/kodzimy-net/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 06:00:10 +0000</pubDate>
		<dc:creator>mijagi</dc:creator>
				<category><![CDATA[Bez kategorii]]></category>
		<category><![CDATA[blog]]></category>

		<guid isPermaLink="false">http://mijagi.eu/?p=151</guid>
		<description><![CDATA[Chciałem was wszystkich zaprosić na nową stronę poświęconą programowaniu, której jestem współautorem. Portal będzie się charakteryzował tym, że każdy znajdzie tam coś dla siebie zaczynając od kompletnie początkujących a kończąc na zaawansowanych zagadnieniach. Będą tam krótkie notki z poradami oraz rozległe artykuły opisujące konkretne projekty. To pierwsze dni kodzimy.net, więc zapraszamy wszystkich, którzy czują się [...]]]></description>
			<content:encoded><![CDATA[<p>Chciałem was wszystkich zaprosić na nową stronę poświęconą programowaniu, której jestem współautorem. Portal będzie się charakteryzował tym, że każdy znajdzie tam coś dla siebie zaczynając od kompletnie początkujących a kończąc na zaawansowanych zagadnieniach. Będą tam krótkie notki z poradami oraz rozległe artykuły opisujące konkretne projekty. To pierwsze dni <strong>kodzimy.net</strong>, więc zapraszamy wszystkich, którzy czują się na siłach opisywać zagadnienia z programowania do współpracy.</p>
<p>Link: <a title="kodzimy.net" href="http://kodzimy.net" target="_blank">http://kodzimy.net</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mijagi.eu/2011/11/kodzimy-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lotto &#8211; zwiększenie szansy wygranej</title>
		<link>http://mijagi.eu/2011/10/lotto-zwiekszenie-szansy-wygranej/</link>
		<comments>http://mijagi.eu/2011/10/lotto-zwiekszenie-szansy-wygranej/#comments</comments>
		<pubDate>Wed, 05 Oct 2011 19:10:55 +0000</pubDate>
		<dc:creator>mijagi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Pozostałe]]></category>
		<category><![CDATA[kombinatoryka]]></category>
		<category><![CDATA[Lotto]]></category>

		<guid isPermaLink="false">http://mijagi.eu/?p=106</guid>
		<description><![CDATA[ Oto tym chwytliwym tytułem rozpoczynam serię wpisów na temat Lotto. Długo wahałem się czy nie dodać oddzielnej kategorii dla tego typu wpisów, ale ich ciągłość nie jest pewna, więc jak na razie będę je dodawał do kategorii Pozostałe. Sam pomysł typowania w Lotto dorastał dość długo, około półtora roku, jednak teraz zdecydowałem się na jego [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="LottoLogo" src="http://4.bp.blogspot.com/_JIVM5L2Rjj8/TB5RTw_YZeI/AAAAAAAAAEY/M_HrzkBIpMQ/s1600/875_54r4xik9xkc.gif" alt="Lotto" width="172" height="116" /> Oto tym chwytliwym tytułem rozpoczynam serię wpisów na temat <strong><a title="Lotto" href="http://www.lotto.pl/" target="_blank">Lotto</a></strong>.</p>
<p>Długo wahałem się czy nie dodać oddzielnej kategorii dla tego typu wpisów, ale ich ciągłość nie jest pewna, więc jak na razie będę je dodawał do kategorii Pozostałe. Sam pomysł typowania w Lotto dorastał dość długo, około półtora roku, jednak teraz zdecydowałem się na jego realizację.<br />
W tym wątku postaram się opisać pewne amatorskie metody analizowania statystyk wylosowanych liczb, przedstawię kilka własnych wzorów na wyliczanie szóstki oraz supportuję to kodem w <a title="PHP" href="http://mijagi.eu/category/php/">PHP</a>.</p>
<h2></h2>
<p><span id="more-106"></span><br />
<strong></strong></p>
<h2><strong>O Lotto i statystykach</strong></h2>
<p>Gra Lotto ogólnie mówiąc polega na losowaniu 6 liczb spośród 49. Totalizator sportowy płaci za trafienie trójek, czwórek, piątek i szóstek.<br />
Mając 49 liczb, możemy z nich ułożyć 13 983 816 sześcioelementowych zestawów (bez powtórzeń). Jeśli chcielibyśmy mieć pewność, że wygramy musielibyśmy obstawić wszystkie możliwe kombinacje co jest jednoznaczne, że na kupony byśmy wydali 41 951 448 zł (zakładając, że jeden kupon kosztuje 3zł). Tak więc brute force odpada <img src='http://mijagi.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  (Pozdrowienia dla Komeniusza, który układał kostkę rubika metodą brute force <img src='http://mijagi.eu/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> )<br />
Ręcznie uzupełnianie tych kuponów przy założeniach, że uzupełniamy jedną kratkę na sekundę, a mamy ich do zamalowania 83 902 896 wynosiłby 2,69 lat. Jest ktoś chętny do policzenia ile potrzeba długopisów do uzupełnienia kuponów <img src='http://mijagi.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ?</p>
<p>Wysyłając jeden kupon, prawdopodobieństwo trafienia szóstki wynosi 1:13 983 816 czyli 0,000000072%, chyba prędzej wpadniemy pod samochód idąc obstawić kupon <img src='http://mijagi.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Prawdopodobieństwo trafienia k liczb spośród 49 wyraża się wzorem:</p>
<div class="wp-caption aligncenter" style="width: 114px"><img title="Prawdopodobieństwo" src="http://upload.wikimedia.org/math/5/9/2/59228ae5d122d16feace5c24a5d10e6e.png" alt="Prawdopodobieństwo" width="104" height="65" /><p class="wp-caption-text">Wzór</p></div>
<p>Po obliczeniu otrzymujemy:<br />
Dla 5: 1:54 201 = 0,001844%<br />
Dla 4: 1:1 032 =   0,096899%<br />
Dla 3: 1:57 =        1,754385%</p>
<h2>Statystyka</h2>
<p>Pewnego dnia pomyślałem sobie, że głupi zawsze ma szczęście, więc czemu miałbym nie skorzystać? Chwilę później zebrałem dane o losowaniach od 1994.<br />
Na podstawię tych losowań wygenerowałem nowe tabele z przydatnymi do analizy danymi.<br />
Spis tabel, które wygenerowałem :</p>
<ul>
<li>Średni odstęp danej liczby w losowaniach</li>
<li>Największa liczba losowań pod rząd w którym dana liczba nie wystąpiła</li>
<li>Ilość liczb parzystych i nieparzystych w każdym losowaniu</li>
<li>Największa liczba wystąpień danej liczby w losowaniach pod rząd</li>
<li>Ilość liczb z przedziałów 1-24,25-49 w każdym losowaniu</li>
<li>Suma wylosowanych liczb w każdym losowaniu</li>
<li>Ilość wypadnięć danej liczby we wszystkich losowaniach</li>
<li>Ilość wypadnięć danej pary</li>
</ul>
<div>Skrypt liczący te dane trochę wisiał <img src='http://mijagi.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </div>
<div>Posiadając te dane postanowiłem dla każdej z liczb (1-49) generować ranking według kilku wzorów.<br />
Na podstawie tych wzorów będę generował dla każdej z liczb ranking cząstkowy, na podstawie, którego wyliczę ranking wypadkowy.<br />
Ogólnie rzecz ujmując ranking wypadkowy będzie generowany na podstawie pozycji danej liczby w każdym z rankingów cząstkowych.</div>
<div>Ranking cząstkowy składa się z wyliczeń ogólnych dla każdej z liczb (G) oraz pobocznych (O). Te dane ze sobą będę mnożył, odejmował i dodawał &#8211; aż w końcu coś wygram : &#8211; D</div>
<div>Dla skrótu pisania wzorów, przyjmijmy, że funkcja C oznacza ilość wystąpień danego parametru, funkcja A &#8211; średnią.</div>
<pre>G = C(wypadnięcia) * A(przedział) * A(parzystość)
O1 = C(ostatnia ciągłość w losowaniu) * C(powtórzenia)
O2 = C(przez ile losowań nie było liczby) * C(opóźnienia)</pre>
<div>Jest jeszcze O3, bazujący na tabeli z parami liczb. Ogólnie dla O3 chodzi o współczynniki par, każda liczba w rankingu ciągnie inną w górę, tą z którą najczęściej wypadała. Następnie współczynnik mnożę przez jakąś wagę. Każda liczba wystąpiła z każdą X razy.  Więc dla par liczb Z,Y jest X wystąpień. Dla Z i Y += X, to samo robię z innymi liczbami przykładowo dla liczby T += X a dla Z i Y dodaję wystąpienia liczby T z liczbami Z  i Y.<br />
btw, bardzo ciężko dobrać słowa by jako parametry nie wsadzać całych zdań a było w miarę krótko, więc proponuję dla rozjaśnienia zajrzeć do kodu i odszukać linijki z wyliczeniami wzorów, wtedy wszystko stanie się jasne <img src='http://mijagi.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  (Kod w podsumowaniu)</div>
<pre>H - stała wynosząca 10000000.
N - stała wynosząca 1000.
W1: G + O1 + O2 + O3
W2:  O1 + O2 + O3
W3: G + O1 * H + O2 * N + O3 * N
W4: G + O1 * N + O2 * H + O3 * N
W5: G + O1 * N + O2 * N + O3 * H
W6: G + O1 * N + O2 * N + O3 * N</pre>
<p>Na podstawie tych wzorów wygenerowałem dla każdej z liczb rankingi cząstkowe. Ranking wypadkowy będzie generowany na podstawie sumy pozycji w każdym z rankingu cząstkowym. Dla rozjaśnienia załóżmy, że funkcja P, przyjmuję dwa parametry. Jako pierwszy liczbę, jako drugi ranking cząstkowy. Na podstawie tych danych zwraca pozycję liczby w danym rankingu. Liczba z najlepszym rankingiem ma pozycje pierwsza. Rankingi oznaczane są W1,W2&#8230;W6, więc wzór na ranking wypadkowy wygląda tak:</p>
<div class="mceTemp mceIEcenter" style="text-align: center;">
<dl id="" class="wp-caption  aligncenter" style="width: 442px;">
<dt class="wp-caption-dt"><img title="RW (Ranking wypadkowy)" src="http://www.texify.com/img/%5CLARGE%5C%21RW%20%5C%20dla%20%5C%20liczba%20%5C%20%3D%20%5Csum_%7Bn%3D1%7D%5E%7B6%7D%20P%28liczba%2CW_%7Bn%7D%29.gif" alt="RW (Ranking wypadkowy)" width="432" height="65" /></dt>
<dd class="wp-caption-dd">RW (Ranking wypadkowy)</dd>
</dl>
</div>
<p>Główne założenia już opisałem, teraz trochę spraw organizacyjnych.<br />
Właściwie już mógłbym zrealizować wykresy trafień typując wszystko wstecz, ale zostawię to na kolejny wpis <img src='http://mijagi.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Jeśli jesteś tym zainteresowany śledź mnie na <a title="mijagi blip" href="http://mijagi.blip.pl">blip</a>, <a href="http://twitter.com/mijagii">twitter</a> lub dodaj RSS do swojego czytnika.</p>
<p>Tutaj umieszczam <a href="http://mijagi.eu/wp-content/uploads/2011/10/toshow.txt">kod</a> wyliczający ranking. Jest wersją roboczą, która ma na celu lepsze zobrazowanie obliczeń, raczej do niczego więcej się nie przyda <img src='http://mijagi.eu/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<h2>Podsumowanie</h2>
<p>Doskonale zdaję sobie sprawę z tego, że próbuję dokonać niemożliwego. Prawdopodobieństwo wylosowania każdej z liczb jest takie same. Typowane przeze mnie liczby mają takie same prawdopodobieństwo wypadnięcia jak np. zestaw {1,2,3,4,5,6} &#8211; z matematycznego punktu widzenia. Dodatkowo, żeby było ciekawiej statystyki trafiania wytypowanych przeze mnie liczb, będę porównywał ze statystykami trafiania liczb wylosowanych przez skrypt, funkcje random podobne czyli tzw chybił-trafił <img src='http://mijagi.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Wrzuciłem na ten serwer pliki, które typują liczby na losowanie według wszystkich wzorów, oraz podają ilość trafień z ostatniego losowania (które wprowadziłem).<br />
Link: <strong><a title="wyniki Lotto" href="http://mijagi.eu/lotto/wyniki.php " target="_blank">http://mijagi.eu/lotto/wyniki.php<br />
</a></strong>Jeżeli chciałbyś prowadzić jakieś swoje wyliczenia i nie chce ci się zbierać danych, skontaktuj się ze mną mailowo, mogę udostępnić swoje statystyki.<br />
Tak więc w kolejnym wpisie spodziewajcie się ulepszonych wzorów, porównania rankingów oraz spróbuję napisać (jeśli pozwoli czas), system obstawiający &#8222;na sucho&#8221;. Mam na myśli to, że skrypt sam będzie sprawdzał ilość trafień i dodawał do moich funduszy średnią stawkę za dane trafienie <img src='http://mijagi.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Jestem ciekawy jakimi systemami gracie (o ile w ogóle typujecie w Lotto ; &gt;), zostawcie ślad w komentarzach <img src='http://mijagi.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>PS: Pozdrowienia dla Kasi :*</p>
]]></content:encoded>
			<wfw:commentRss>http://mijagi.eu/2011/10/lotto-zwiekszenie-szansy-wygranej/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Zróbmy sobie honeypot&#8217;a w Wodpressie!</title>
		<link>http://mijagi.eu/2011/10/zrobmy-sobie-honeypota-w-wodpressie/</link>
		<comments>http://mijagi.eu/2011/10/zrobmy-sobie-honeypota-w-wodpressie/#comments</comments>
		<pubDate>Sat, 01 Oct 2011 08:00:17 +0000</pubDate>
		<dc:creator>mijagi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Honeypot]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://mijagi.eu/?p=37</guid>
		<description><![CDATA[Postaram się opisać jak zmontować prostego honeypota w popularnym skrypcie blogowym WordPress. Tutaj macie do tego gotowy plugin WP-HoneyPot, ale wiadomo, że nawet kanapki smakują lepiej jeśli je zrobimy sami. Co nam będzie potrzebne? Trochę czasu, edytor, WordPress. Na początku przygotujmy sobię plik, który odpowiada za logowanie (wp-login.php). Pierwszym krokiem to wywołanie fake błędu ;&#62; Otwieramy wp-login.php i [...]]]></description>
			<content:encoded><![CDATA[<p>Postaram się opisać jak zmontować prostego <strong>honeypot</strong>a w popularnym skrypcie blogowym <strong>WordPress</strong>. Tutaj macie do tego gotowy plugin <a href="http://wordpress.org/extend/plugins/wp-honeypot/" target="_blank"><strong>WP-HoneyPot</strong></a>, ale wiadomo, że nawet kanapki smakują lepiej jeśli je zrobimy sami. <img src='http://mijagi.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Co nam będzie potrzebne?<br />
Trochę czasu, edytor, WordPress.</p>
<p><img title="More..." src="https://mijagi.wordpress.com/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" /><span id="more-37"></span></p>
<p>Na początku przygotujmy sobię plik, który odpowiada za logowanie (<strong>wp-login.php</strong>). Pierwszym krokiem to wywołanie fake błędu ;&gt; Otwieramy wp-login.php i dodajemy kodzik :</p>
<pre class="brush: php; title: Kod; notranslate">
if(strstr($_POST['log'], &quot;'&quot;) || strstr($_POST['pwd'], &quot;'&quot;))
{
	echo &quot;&lt;pre&gt;
	&lt;strong&gt;Parse error:&lt;/strong&gt; syntax error, unexpected ; in /home/mijagi/public_html/wp/wp-login.php on line 42
	if($ _POST['log'] == 'mijagi' &amp;&amp; md5($ _POST['pwd']) == 'c19c27722ea415a93e1576ee0eb6ba1b'){
		wp_redirect('wp-admins/index.php');
	} &lt; /pre&gt;&quot;;
}</pre>
<p>Kodzik możesz wstawić przed funkcją <strong>login_header</strong>.<br />
Ten fragment zareaguje na zaczepki gdy w pole loginu lub hasła wstawimy apostrof.<br />
Co do błędu,<br />
pamiętajmy o wstawieniu ścieżki do pliku w którym jest kod, by było bardziej wiarygodnie. Hasło w md5 powinno być proste do “odszyfrowania”, żeby nasz człowiek się nie zniechęcił ;&gt; Proponuję skorzystać z jakiejś bazy takich gadżetów, np. milw0rm or whatever;&gt;<br />
Każdy kto miał do czynienia z WP, wie, że panel admina znajduje się w katalogu “<strong>wp_admin</strong>“, my natomiast damy tam “<strong>wp_admins</strong>“.<br />
Tutaj można wykazać się wyobraźnią i przerobić warunek by reagował na inne zaczepki ;&gt;</p>
<p>Teraz dodajmy kolejny kodzik do pliku <strong>wp-login.php</strong>, który będzie odpowiadał za logowanie naszego agresorka.</p>
<pre class="brush: php; title: Kod; notranslate">
if($_POST['log'] == 'mijagi' &amp;&amp; $_POST['pwd'] == 'karol'){
	setcookie(&quot;pro&quot;,$_SERVER['REMOTE_ADDR'],time()+36000);
	wp_redirect('https://mijagi.eu/wp-admins/index.php');
}
</pre>
<p>To pozwoli nam na zalogowanie do fake panelu;&gt; Hasło “karol”, bo taki dałem hash w kodzie wyżej ;&gt;<br />
Po zalogowaniu potrzebne nam będzie ciasteczko, dla większej wiarygodności może mieć jakaś mądrą nazwę np “session_admin”. Później korzystamy z wbudowanej funkcji w WP, która przekieruje nas do fake panelu.<br />
Kodzik ten możemy dać nad fragmentem wywołującym błąd.</p>
<p>Wywołanie fake błędu jest, logowanie do panelu również, czas na sam panel.<br />
Tworzymy nowy katalog, w moim przypadku “wp_admins” i tworzymy tam plik index.php.<br />
Na początku pliku index.php, dajmy sprawdzenie czy jest ciasteczko, które powstało w momencie zalogowania.<br />
W naszym przypadku, najlepiej, żeby design bardzo przypominał prawdziwy panel admina WP. W tym celu można skopiować kod, usuwając zbędne funkcje, zostawiając tabelkę “Publish”, tytuł i coś na treść.<br />
Na końcu pliku dodajmy kod, który wygląda mniej/więcej tak:</p>
<pre class="brush: php; title: Kod; notranslate">
if($_POST['tytul'] &amp;&amp; $_POST['tresc']){
session_start();
$_SESSION['tytul'] = addslashes(htmlspecialchars(strip_tags($_POST['tytul'])));
$_SESSION['tresc'] = substr(addslashes(htmlspecialchars(strip_tags($_POST['tresc']))),0,1500);
$msg = &quot;TITLE: &quot;.$_POST['tytul'].&quot; :: CONTENT: &quot;.$_POST['tresc'].&quot; ::: &quot;.date('Y-m-d').&quot; ::: IP:&quot;.$_COOKIE['pro'];
mail('your@mail.com','hax me',$msg);
}
</pre>
<p>Zmienne POST’owe, tytuł i treść pochodzą z naszego fake panelu, oczyszczone dane dodajemy do sesji, treść ograniczmy do 1500 znaków. O całym zdarzeniu dostaniemy powiadomienie na maila ;&gt;</p>
<p>Kolejnym krokiem to edycja pliku WordPressowego index.php. Możemy to zrobić ręcznie, lub przez panel (<strong>Appearance, Editor-&gt;Index.php</strong>).<br />
Nie dam kodu, ponieważ w każdym stylu będzie to inaczej wyglądało, ale chodzi o to by sprawdzić czy sesja tytul i treść nie są puste, a następnie wstawić je w design, tak jak inne wpisy w Twoim WP. Jedyne co mogę podpowiedzieć, to, że będzie to fragment w pliku po:</p>
<pre class="brush: php; title: Kod; notranslate">
&lt;?php if (have_posts()) : ?&gt;
</pre>
<p>W tym miejscu wyświetli nam się hacked z sesji, który będzie widział tylko agresorek, będzie fajnie jak wyśle link, żeby ktoś zobaczył jego hacka.</p>
<p><strong>Podsumowanie</strong><br />
Musimy pamiętać by zwracać uwagę na szczegóły, by nasz honeypot był jak najbardziej wiarygodny. W takiej formie ta pułapka jest jak najbardziej do odgadnięcia, ale możemy liczyć na to, że znajdzie się osoba, której na widok błędu trzęsą się i pocą dłonie, doda “hackeda”, zrobi screena i umieści u siebie na blogu, a my mamy wtedy fun.<br />
Przed aktywacją honeypota, warto dodać notkę na blogu, że się modziło w plikach, poprawiało na własną rękę, to zachęci do szukania bugów i doda trochę pewności gdy ujrzy nasz błąd.<br />
Fake błędy, można ukryć w wielu miejscach, w logowaniu wydawało mi się najprostsze do wdrożenia. Ogranicza nas wyłącznie wyobraźnia ;&gt; Więc róbmy entertaiment of programming!</p>
<p>Zapraszam do zostawiania nowych pomysłów w postaci komentarzy, jak ulepszyć honeypota w WP, co dodać, żeby był bardziej wiarygodny or whatever ;&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://mijagi.eu/2011/10/zrobmy-sobie-honeypota-w-wodpressie/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Easter eggs w PHP</title>
		<link>http://mijagi.eu/2011/09/easter-egg-w-php/</link>
		<comments>http://mijagi.eu/2011/09/easter-egg-w-php/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 07:02:38 +0000</pubDate>
		<dc:creator>mijagi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[easter egg]]></category>

		<guid isPermaLink="false">http://mijagi.eu/?p=72</guid>
		<description><![CDATA[W poprzednim wpisie o bezpiecznej konfiguracji php zahaczyłem o temat easter egg, wiele osób pisało mi, że nie znało wcześniej tych &#8222;sekretnych&#8221; wiadomości, więc postanowiłem kontynuować temat i rozwinąć nieco, ten krótki wątek w PHP Easter eggs, są ukrytymi niespodziankami od twórców PHP (for fun?). Twórcy PHP, chcieli dodać trochę radości do smutnego języka, jakim jest [...]]]></description>
			<content:encoded><![CDATA[<p>W poprzednim wpisie o <a title="(Nie) bezpieczeństwo konfiguracji PHP" href="http://mijagi.eu/2011/08/nie-bezpieczenstwo-konfiguracji-php/">bezpiecznej konfiguracji php</a> zahaczyłem o temat easter egg, wiele osób pisało mi, że nie znało wcześniej tych &#8222;sekretnych&#8221; wiadomości, więc postanowiłem kontynuować temat i rozwinąć nieco, ten krótki wątek w PHP <img src='http://mijagi.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><span id="more-72"></span></p>
<p>Easter eggs, są ukrytymi niespodziankami od twórców PHP (for fun?). Twórcy PHP, chcieli dodać trochę radości do <a title="Piosenka programistyczna" href="http://www.youtube.com/watch?v=bXoc9hOIj3M" target="_blank">smutnego języka</a>, jakim jest pehap <img src='http://mijagi.eu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Gdy 1 kwietnia wywołamy funkcję phpinfo(), zamiast standardowego loga PHP, zobaczymy inny obrazek, a jaki? To sprawdzicie sami! : &#8211; D</p>
<p>Generalnie wywoływanie easter eggs, polega na dopisywaniu ciągu znaków do adresu. Robi się to w podobny sposób jak ze zmiennymi $_GET. Dosłownie można wytłumaczyć, że &#8222;przypisujemy wartość easter egg do zmiennej $_GET bez nazwy&#8221;.<br />
Wygląda to w ten sposób:</p>
<pre class="brush: php; title: Kod; notranslate">
mijagi.eu/?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
</pre>
<p>Oto reszta kodów easter eggs:</p>
<pre class="brush: php; title: Kod; notranslate">
?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 – oryginalne logo PHP
?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 – logo zend
?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 – development credit
</pre>
<p>Poniżej znajdują się obrazki, którymi PHP wyjawia swoją wersję.
<a href='http://mijagi.eu/2011/09/easter-egg-w-php/easteregg1/' title='Easter egg'><img width="130" height="67" src="http://mijagi.eu/wp-content/uploads/2011/09/easteregg1.gif" class="attachment-thumbnail" alt="Easter egg" title="Easter egg" /></a>
<a href='http://mijagi.eu/2011/09/easter-egg-w-php/easteregg2/' title='Easter Egg'><img width="120" height="67" src="http://mijagi.eu/wp-content/uploads/2011/09/easteregg2.gif" class="attachment-thumbnail" alt="Easter Egg" title="Easter Egg" /></a>
<a href='http://mijagi.eu/2011/09/easter-egg-w-php/easteregg3/' title='Easter Egg'><img width="120" height="67" src="http://mijagi.eu/wp-content/uploads/2011/09/easteregg3.gif" class="attachment-thumbnail" alt="Easter Egg" title="Easter Egg" /></a>
<a href='http://mijagi.eu/2011/09/easter-egg-w-php/easteregg4/' title='Easter Egg'><img width="130" height="67" src="http://mijagi.eu/wp-content/uploads/2011/09/easteregg4.gif" class="attachment-thumbnail" alt="Easter Egg" title="Easter Egg" /></a>
<a href='http://mijagi.eu/2011/09/easter-egg-w-php/easteregg5/' title='Easter Egg'><img width="120" height="67" src="http://mijagi.eu/wp-content/uploads/2011/09/easteregg5.gif" class="attachment-thumbnail" alt="Easter Egg" title="Easter Egg" /></a>
<a href='http://mijagi.eu/2011/09/easter-egg-w-php/easteregg6/' title='Easter Egg'><img width="120" height="67" src="http://mijagi.eu/wp-content/uploads/2011/09/easteregg6.gif" class="attachment-thumbnail" alt="Easter Egg" title="Easter Egg" /></a>
</p>
<p>Easter eggs, są zdefiniowane w źródłach PHP w pliku ext/standard/info.h w liniach : 53-56, pozwolę sobie zacytować:</p>
<pre class="brush: cpp; title: Kod; notranslate">
#define PHP_LOGO_GUID		  &quot;PHPE9568F34-D428-11d2-A769-00AA001ACF42&quot;
#define PHP_EGG_LOGO_GUID	  &quot;PHPE9568F36-D428-11d2-A769-00AA001ACF42&quot;
#define ZEND_LOGO_GUID		&quot;PHPE9568F35-D428-11d2-A769-00AA001ACF42&quot;
#define PHP_CREDITS_GUID  &quot;PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000&quot;
</pre>
<p>Jeśli kogoś nie bawią easter eggs i chciałby je wyłączyć to podpowiem, że służy do tego dyrektywa, którą dokładniej opisałem w tym <a title="(Nie) bezpieczeństwo konfiguracji PHP" href="http://mijagi.eu/2011/08/nie-bezpieczenstwo-konfiguracji-php/">wpisie</a> : expose_php ustawiona na off.</p>
<p>Podsumowując jest to dość ciekawy &#8222;żart&#8221; programistyczny, oby więcej takich niespodzianek : &#8211; D</p>
]]></content:encoded>
			<wfw:commentRss>http://mijagi.eu/2011/09/easter-egg-w-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

