<?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>Ferrante.pl - simplicity of web programming &#187; PHP</title>
	<atom:link href="http://ferrante.pl/category/tech/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://ferrante.pl</link>
	<description>Technologie internetowe, PHP5, Python, Javascript. Publicystyka i kursy w najlepszym wydaniu.</description>
	<lastBuildDate>Tue, 27 Jul 2010 19:28:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Front-Trends 2010 &#8211; konferencja, jakiej w Polsce nie było</title>
		<link>http://ferrante.pl/2010/04/13/front-trends-2010-konferencja-jakiej-w-polsce-nie-bylo/</link>
		<comments>http://ferrante.pl/2010/04/13/front-trends-2010-konferencja-jakiej-w-polsce-nie-bylo/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 08:39:27 +0000</pubDate>
		<dc:creator>ferrante</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[W sieci...]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://ferrante.pl/?p=736</guid>
		<description><![CDATA[Wielkie wydarzenie w świecie polskiego i wschodnioeuropejskiego front-endu. Z inicjatywy Pawła Czerskiego i Damiana Wielgosika oraz firmy Frontend Force, 21-22 października br. w Warszawie odbędzie się konferencja Front-Trends 2010. Największe światowe gwiazdy JavaScript, CSS3 i HTML5 przyjadą do stolicy Polski podzielić się swoją wiedzą i doświadczeniem. Wśród nich między innymi Douglas Crockford, Peter-Paul Koch, Paul [...]]]></description>
			<content:encoded><![CDATA[<p>Wielkie wydarzenie w świecie polskiego i wschodnioeuropejskiego front-endu. Z inicjatywy Pawła Czerskiego i Damiana Wielgosika oraz firmy <a href="http://frontendforce.com">Frontend Force</a>, <strong>21-22 października br. w Warszawie</strong> odbędzie się konferencja <a href="http://front-trends.com">Front-Trends 2010</a>. Największe światowe gwiazdy JavaScript, CSS3 i HTML5 przyjadą do stolicy Polski podzielić się swoją wiedzą i doświadczeniem. Wśród nich między innymi <strong>Douglas Crockford, Peter-Paul Koch, Paul Bakaus,</strong> czy <strong>Dmitry Baranovskiy</strong>.</p>
<p>Można powiedzieć, że marzenia się spełniają. Długo zapowiadana niespodzianka stała się faktem. Szykuje się <strong>największe w tej części Europy</strong> święto dla wszystkich ludzi odpowiedzialnych za kształt Internetu.</p>
<p>Niniejszym zapraszam na stronę informacyjną konferencji &#8211; <a href="http://front-trends.com">Front-Trends.com</a>. Jak dotąd, udało się nam zebrać samą śmietankę w postaci <strong>naukowców</strong>, <strong>ewangelizatorów</strong> i <strong>twórców popularnych frameworków</strong>. Ludzi, którzy kreują światowy web. Już wkrótce kolejne, równie gorące nazwiska!</p>
<p>Oficjalna strona wydarzenia ma obecnie charakter wyłącznie informacyjny. Identyfikacja wizualna wraz logo i pełną wersją strony (w tym płatnościami) pojawią się <strong>już niedługo</strong>. Jednocześnie zapraszamy na <a href="http://twitter.com/fronttrends">Twittera</a> oraz <a href="http://fronttrends.blip.pl">Blip</a> po najnowsze wiadomości.</p>
]]></content:encoded>
			<wfw:commentRss>http://ferrante.pl/2010/04/13/front-trends-2010-konferencja-jakiej-w-polsce-nie-bylo/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Wzorzec MVC w PHP</title>
		<link>http://ferrante.pl/2008/08/30/wzorzec-mvc-w-php/</link>
		<comments>http://ferrante.pl/2008/08/30/wzorzec-mvc-w-php/#comments</comments>
		<pubDate>Sat, 30 Aug 2008 18:24:54 +0000</pubDate>
		<dc:creator>ferrante</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Publicystyka]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://ferrante.pl/2008/08/30/wzorzec-mvc-w-php/</guid>
		<description><![CDATA[Prędzej czy później, podczas przygody z programowaniem stron WWW natkniemy się na hasło MVC. Co to znaczy, o co chodzi? Odpowiedzmy sobie na te i kilka innych pytań na podstawie PHP.
MVC to nic innego, jak skrót od Model View Controller. Jest to wzorzec projektowy (a więc zbiór pewnych reguł, według których budowane są aplikacje na [...]]]></description>
			<content:encoded><![CDATA[<p>Prędzej czy później, podczas przygody z programowaniem stron WWW natkniemy się na hasło MVC. Co to znaczy, o co chodzi? Odpowiedzmy sobie na te i kilka innych pytań na podstawie PHP.<span id="more-107"></span></p>
<p>MVC to nic innego, jak skrót od <strong>Model View Controller</strong>. Jest to wzorzec projektowy (a więc zbiór pewnych reguł, według których budowane są aplikacje na całym świecie), który cieszy się bardzo dużą popularnością wśród webdeveloperów.</p>
<p>Nie wiem, jak dotąd projektowałeś swoje aplikacje PHP. Jeśli robiłeś to strukturalnie, w oparciu o funkcje, ten artykuł raczej nie jest dla Ciebie &#8211; co prawda można użyć MVC w podejściu strukturalnym, byłaby to jednak w pewnym sensie kpina ze sztuki. Kod strukturalny w PHP jest, może już to gdzieś słyszałeś, niczym źle przyrządzone spaghetti &#8211; wygląda, jak nie wiadomo co i w dodatku ucieka z talerza.</p>
<p>Jeśli z kolei znasz i wiesz na czym polega programowanie obiektowe, mamy o czym ze sobą rozmawiać. Zacznijmy od teorii.</p>
<p>Z reguły proste aplikacje w PHP wyglądają tak, że sprawdzany jest adres wpisany do przeglądarki (na podstawie <span class="f">$_GET</span>, bądź innych właściwości z <span class="f">$_SERVER</span>), potem <em>includowane</em> są potrzebne pliki w zależności od pozyskanych danych. Absolutne podstawy podstaw.</p>
<p>Stosując MVC nie możemy opierać się, jak to zwykle bywa w tradycyjnym podejściu, tylko  na jednym pliku, np. <em>index.php</em>, w którym mieszamy kod prezentacji (np. HTML) i logikę biznesową (dane np. z MySQL). </p>
<p>Działa to  zupełnie inaczej, a mianowicie mamy 3 główne elementy aplikacji, gdzie każda odpowiedzialna jest tylko za jedną rzecz. Są nimi:</p>
<ul>
<li><strong>Controller</strong> steruje wszystkim tym, co dzieje się podczas uruchamiania danej akcji. Np. podczas wywołania <em><strong>index.php?controller=news&#038;id=55</strong></em>. </p>
<p>Przykładowo, jeśli dodasz np. nowego usera do bazy, to kontroler zdecyduje, że po tej czynności przeniesiony zostaniesz np. do edycji profilu. Kontroler to mózg sterujący całym wywołaniem strony. W pliku kontrolera wybierasz, z którego modelu (a więc pliku odpowiedzialnego za pobieranie danych &#8211; może to być baza danych, plik, cokolwiek) weźmiesz treść dla strony, a także jak ją wyświetlisz (czyli który widok Cię interesuje).</li>
<li><strong>Model</strong> zajmuje się tylko i wyłącznie pracą na danych. </li>
<li><strong>Widok (View)</strong> zajmuje się tylko i wyłącznie wyświetlaniem danych. </li>
</ul>
<p>I tak, dobrą praktyką jest umieszczanie kontrolerów w folderze np. <em>/controllers</em>, widoków w <em>/views</em>, a modeli w <em>/models</em>. W ten sposób mamy <strong>jasny i prosty</strong> podział naszej aplikacji.</p>
<p>Jeśli więc uruchomimy przykładowo stronę <strong><em>index.php?controller=news&#038;param=55</em></strong>, według MVC powinny dziać się następujące rzeczy:</p>
<ul>
<li>
<div class="i">Dzięki takiemu parsowaniu adresów możemy łatwo zarządzać i dołączać kontrolery, które będą stanowić serce aplikacji. Po co stosować <em>switch</em> czy <em>if</em> do sprawdzania, co zostało wpisane w pole adresu, skoro możemy od razu, jeśli takowy istnieje, dołączyć stosowny plik.</div>
<p>Funkcja/Klasa odpowiedzialna za parsowanie adresu (np. Router) pobiera go i na podstawie konfiguracji stwierdza, które słowo/zmienna w adresie oznacza kontroler, a które parametry doń przekazywane. Posiłkując się powyższym URL, kontrolerem będzie słówko <span class="f">news</span>, a parametrem <span class="f">55</span>.</p>
<p>Następnie, na podstawie uzyskanych danych, <em>includujemy</em> potrzebne pliki. Jak już się przekonaliśmy, potrzebny nam jest kontroler. Sprawdzamy więc, czy w folderze, który umownie wybraliśmy (<em>controllers</em>) znajduje się plik news.php (tak, <em>news</em> pochodzi z adresu strony).</li>
<li>Następnie, mając załadowany kontroler, uruchamiamy jego <em>defaultową</em> metodę/funkcję, bo oprócz nazwy kontrolera nie mamy niestety nazwy żadnej jego akcji, którą moglibyśmy wywołać (gdyby adres miał postać <em><strong>index.php?controller=news&#038;action=delete&#038;id=55</strong></em>, można by posłużyć się zmienną <em>$_GET['action']</em> i uruchomić coś takiego: <span class="f">$controller->$_GET['action']($_GET['id'])</span>. W takim razie używamy $controller->index(), bądź coś podobnego &#8211; wszystko zależy od konfiguracji.
<p>Nie muszę chyba też przypominać, że dane $_GET należy przefiltrować pod kątem złośliwych ataków. Z reguły robi to klasa odpowiedzialna za parsowanie adresu, bądź specjalna klasa obsługująca dany request (wywołanie adresu) pod kątem danych przekazanych przez użytkownika.</li>
</ul>
<p>Od strony kodu, przykładowe wywołanie MVC wygląda następująco:</p>
<pre><code>
//<strong>index.php</strong>

$controller = Router::getController();
$controller = new $controller;
$action = Router::getAction();

$controller->$action(Router::getParams());</code></pre>
<pre><code>//<strong>controllers/news.php</strong>

class news_Controller extends Controller
{
	public function index($params)
	{
		$model = Router::getModel(); // // pobierze Model
		$model = new $model;

		$view = Router::getView(); // pobierze Widok
		$view = new $view; 

		$data = $model->getData($params); // pobiera dane z Modelu
		$view->setData($data); // przekazuje dane do Widoku, by ten mógł je wyświetlić
		$view->Render(); // wyświetli stronę
	}
}
</code></pre>
<p>Zalety MVC:</p>
<ul>
<li>Oddzielenie logiki biznesowej od warstwy prezentacji. Nie mieszamy znaczników HTML z zapytaniami SQL czy innymi konstrukcjami, nie mającymi ze sobą nic wspólnego.</li>
<li>Przejrzystość aplikacji</li>
<li>Łatwość rozbudowy</li>
<li>Duża konfigurowalność</li>
<li>MVC narzuca określony styl kodowania, ze strukturą katalogów włącznie, co w przypadku PHP ma duże znaczenie</li>
<li>Łatwość utrzymania aplikacji</li>
<li>i wiele innych</li>
</ul>
<p>Artykuł ten to tylko zalążek tego, co można by powiedzieć o MVC. Postanowiłem przedstawić temat powierzchownie, ale na tyle wystarczająco, aby można było łatwo dowiedzieć się, z czym to, przysłowiowo, się je.</p>
<p>Kto wie, jeśli zainteresowanie tematem będzie duże, spróbuję rozbudować materiał, tworząc tutorial, <em>jak zbudować framework oparty o MVC</em>. Decyzja należy do Was.</p>
]]></content:encoded>
			<wfw:commentRss>http://ferrante.pl/2008/08/30/wzorzec-mvc-w-php/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>Nieznośne boty a logowanie</title>
		<link>http://ferrante.pl/2008/06/21/nieznosne-boty-a-logowanie/</link>
		<comments>http://ferrante.pl/2008/06/21/nieznosne-boty-a-logowanie/#comments</comments>
		<pubDate>Fri, 20 Jun 2008 22:14:18 +0000</pubDate>
		<dc:creator>ferrante</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://ferrante.pl/2008/06/21/nieznosne-boty-a-logowanie/</guid>
		<description><![CDATA[Jakiś czas temu zostałem zapytany, jak zabezpieczać się przed atakami botów. Chodziło konkretnie o notorycznie nękany przez nie skrypt logowania, istota problemu związana jest jednak nie tylko z nim, dlatego postanowiłem podsumować kilka przydatnych faktów.
Przede wszystkim, wszelkie formularze powinny być uczulone na odpalanie ich z zewnątrz. Sprawdzenie zmiennej $_SERVER['HTTP_REFERER'] przy weryfikacji danych pochodzących z formularzy [...]]]></description>
			<content:encoded><![CDATA[<p>Jakiś czas temu zostałem zapytany, jak zabezpieczać się przed atakami botów. Chodziło konkretnie o notorycznie nękany przez nie skrypt logowania, istota problemu związana jest jednak nie tylko z nim, dlatego postanowiłem podsumować kilka przydatnych faktów.<span id="more-106"></span></p>
<p>Przede wszystkim, wszelkie formularze powinny być uczulone na odpalanie ich z zewnątrz. Sprawdzenie zmiennej <span class="f">$_SERVER['HTTP_REFERER']</span> przy weryfikacji danych pochodzących z formularzy powinno być jednym z pierwszych naszych kroków. Chodzi bowiem o to, aby właściwość ta była zawsze niepusta i równa adresowi strony, z której wysyłany jest formularz:</p>
<pre><code>if (isset($_SERVER['HTTP_REFERER']) &#038;&#038; 'domena.com/login' == str_replace(array('http://', 'www.', 'https://'), '', $_SERVER['HTTP_REFERER'])) { echo 'Wszystko gra'; };</code></pre>
<p>Podobny kod odsieje domorosłych autorów botów i skryptów &#8220;hakujących co się da!!!!1111jeden&#8217;, nie załatwi jednak na poważnie problemu, bowiem nagłówek <em>referer</em> można łatwo zmodyfikować przy requeście HTTP. Idziemy dalej.</p>
<p>Nim dopuścimy do porównania danych zawartych w bazie z tymi z formularza, sprawdźmy, czy dany, potencjalny bot obsługuje system sesji. Zakładając, że mamy stronę <em>login.php</em> (zawierająca formularz), stwórzmy zmienną sesji i zapiszmy ją w ukrytym elemencie formularza:</p>
<pre><code>$_SESSION['hidden_value'] = rand(0, 100);</code></pre>
<pre><code>&lt;input type="hidden" name="something" value="&lt;?=$_SESSION['hidden_value']?&gt;" /&gt;</code></pre>
<p>Sprawdźmy teraz, po wysłaniu danych formularza, czy zmienne sesyjne będą równać się danym z tablicy <span class="f">$_POST</span>:</p>
<pre><code>if ($_SESSION['hidden_value'] == $_POST['something']) { echo 'Droga wolna'; }</code></pre>
<p>Ukryte elementy formularza można zastosować także nieco inaczej. Osobiście bardzo sobie cenię ten sposób, ponieważ pozwala odsiać w zasadzie wszystkie boty, o ile nie prowadzimy witryny pokroju <a href="http://yahoo.com" title="Microsoft gotchaaaaaa u!">yahoo.com</a> ;-). Cała zabawa polega na ustawieniu w pliku z formularzem dodatkowego pola typu <span class="f">text</span> z pustą wartością:</p>
<pre><code>&lt;input type="text" name="something_other" value="" /&gt;</code></pre>
<p>Dodatkowo ukrywamy takie pole CSSem, stosując <em>display: none;</em>.</p>
<p>Jak wiemy, większość botów wypełnia automatycznie wszystkie pola formularza i natychmiastowo wysyła dane. Boty to komputery, dla niektórych &#8211; niestety, nie mają oczu i nie umawiają się na randki. Dlatego też bot nie zauważy, paradoksalnie, że dane pole jest ukryte przez CSS i potraktuje je jako zwykły element formularza, który trzeba wypełnić ofertą powiększenia tego i owego. Wystarczy więc sprawdzić, czy dane pole zostało wypełnione &#8211; jeśli tak, mamy do czynienia z botem bądź użytkownikiem przeglądarki tesktowej (bez CSS), który także zobaczy dodatkowe pole:</p>
<pre><code>if (!empty($_POST['something_other'])) { exit(); die(); }</code></pre>
<p>Od razu możemy wychwycić IP takiego delikwenta i na wszelki wypadek zapisać go do bazy, dzięki czemu, w większości będziemy mieć kompetentną listę botów, które należy zbanować.</p>
<p>Co więcej, tego typu puste pola możemy generować losowo, tak, by bot nie rozszyfrował nas, poznając stały atrybut <em>name</em>. Można więc losować <em>name</em> elementu <em>text</em> i zapisać go do sesji. Wtedy mamy o wiele więcej pewności, że bot nie pozna za szybko naszych intencji.</p>
<p>To tylko kilka przykładów, jak można zrobić detekcję botów. Na widnokręgu zagadnienia są: sprawdzanie włączonego JS (tutaj z kolei ryzykujemy użytkownikami z wyłączoną obsługą tego języka), odpowiednie <em>chmody</em> dla plików, autoryzacja HTTP, SSL, i wszelkiego rodzaju CAPTCHA (przy dodawaniu kontentu w miarę sprawne, choć do logowania bezużyteczne i wkurzające). Inna sprawa to także bezpieczna walidacja danych, temat ten jednak wypada omówić nieco szerzej, w bardziej rozległym kontekście. Z chęcią poznam też Wasze sposoby na tego typu ataki.</p>
]]></content:encoded>
			<wfw:commentRss>http://ferrante.pl/2008/06/21/nieznosne-boty-a-logowanie/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Mamo! Umiem PHP!</title>
		<link>http://ferrante.pl/2007/07/07/mamo-umiem-php/</link>
		<comments>http://ferrante.pl/2007/07/07/mamo-umiem-php/#comments</comments>
		<pubDate>Sat, 07 Jul 2007 21:16:56 +0000</pubDate>
		<dc:creator>ferrante</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://ferrante.pl/2007/07/07/mamo-umiem-php/</guid>
		<description><![CDATA[Język PHP jest stosunkowo łatwy i pozwala dość szybko osiągnąć pożądane efekty. Napiszemy w nim prawie każdą aplikację webową, a bogata oferta hostingu na świecie, jak i w Polsce, obsługującego ten język, bez problemu pozwoli nam publikować w Internecie nasze aplikacje. PHP jest najbardziej rozpowszechnionym językiem, w którym klepiemy swoje strony, co za tym idzie [...]]]></description>
			<content:encoded><![CDATA[<p>Język PHP jest stosunkowo łatwy i pozwala dość szybko osiągnąć pożądane efekty. Napiszemy w nim prawie każdą aplikację webową, a bogata oferta hostingu na świecie, jak i w Polsce, obsługującego ten język, bez problemu pozwoli nam publikować w Internecie nasze aplikacje. PHP jest najbardziej rozpowszechnionym językiem, w którym <em>klepiemy</em> swoje strony, co za tym idzie wykształciły się różne subkultury piszących w PHP.<span id="more-52"></span></p>
<h3>It&#8217;s a kind of magic</h3>
<p>Początkujący, z reguły 12-14 latek, który zaczynał pracę w tym biznesie, tworząc stronę internetową swojego gimnazjum/podstawówki. Początkującego możemy poznać po podobnym kodzie:</p>
<pre><code>&lt;?php

// pobieramy do zmiennej $strona zawartość z tablicy $_GET [rys. 20]
$strona = $_GET['strona'];

if ($strona == "news")
{
	print ("&lt;html&gt;&lt;body&gt;");
	header_wklej();
	include ("".$strona."php");
	print("&lt;table&gt;&lt;tr&gt;&lt;td&gt;All rights reserved!&lt;/td&gt;&lt;td&gt;Copyright 2007&lt;/td&gt;&lt;td&gt;Webmaster: Zenek12, Powered By PHP Zenek CMS&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;");
}
function header_wklej()
{
	print("&lt;head&gt;&lt;title&gt;Strona Zenka&lt;/title&gt;&lt;/head&gt;");
}
?&gt;</code></pre>
<p>Jak widać panuje tutaj pełna dowolność, ale i świadomość prestiżu, tak więc nie dziwi wykonana w dość ergonomiczny sposób stopka. Konieczne jest też nazwanie swojego kodu CMSem, bo to ostatnio dość popularne słowo. Kto nie ma CMS&#8217;a, jest zacofany i musi dużo nadrobić, by odzyskać szacunek prawdziwych webmasterów w branży.</p>
<p>Złote dziecko polskiej informatyki z reguły, po napisaniu swojego pierwszego skryptu, idzie na jakieś forum, bądź listę dyskusyjną. Z reguły też zostaje zbanowane, bądź ostrzegane przez adminów 2 godziny po zaprezentowaniu swoich niebanalnych umiejętności. Przygoda dobiega końca, kiedy ktoś wytknie jakiś błąd, bądź lukę. Wtedy najczęściej <a href="http://forum.php.pl/index.php?s=&#038;showtopic=71955&#038;view=findpost&#038;p=374010">uwidacznia się</a> lekkie zdenerwowanie, wszak rozmówcy nie wiedzą jeszcze, że mają do czynienia z przyszłym Billem Gatesem.</p>
<h3>PHP master</h3>
<p>Lata mijają, a kursy ze stronek znalezionych w Googlach już nie satysfakcjonują. Trzeba kupić jakąś książkę, aczkolwiek PHP masterowi nie chce się za bardzo czytać recenzji (przecież ma dyslekcję!), więc kupuje pierwszą lepszą z <em>PHP</em> w tytule. W <a href="http://helion.pl">helionie</a> akurat jest promocja na wszystkie książki o PHP, a najbardziej <em>sexy</em> okazała się <span class="f">PHP &#8211; programowanie gier</span>. PHP master to człowiek obyty i na poziomie, więc wie w co gra się aktualnie na podwórku, a jak ludzie z dzielni dowiedzą się, że robi gierki w PHP, tak, tak, tym PHP, to już w ogóle <em>kosmos</em>.</p>
<p>Książka przyszła do domu, a rodzina zdębiała. <em>Zenek kupił sobie książkę, no bój się Boga, ale niech dziecko czyta, byleby przed tym komputerem tak nie siedziało&#8230;</em> &#8211; dało się zasłyszeć w domowych czeluściach. Zenek jednak nic nie zrozumiał z publikacji, w dodatku nie napisali o grafice, więc dbając o ład i elegancję pokoju, wsadził pod biurko wielki jak kloc podręcznik do PHP.</p>
<p>Na szczęście, tu się zagadało, tam się zagadało, na Gie-Gie się było, z tym i tym się rozmawiało, <em>to i skill przyszedł</em>. Czas na upgrade strony domowej Zenka!</p>
<pre><code>&lt;?php

	$strona = $_GET['strona'];

	if ($strona == 'news')
	{
		mysql_connect('localhost', 'root', 'root');
		mysql_select_db('niusy');

		$query = "SELECT * FROM ".$strona." ;";
		$result = mysql_query($query);
		while ($row = mysql_fetch_array($result))
		{
			print("&lt;H4&gt;".$row['tytulnewsa']."&lt;/H4&gt;&lt;P&gt;".$row['trescnewsa']."&lt;/P&gt;");
		}
		print("&lt;table&gt;&lt;tr&gt;&lt;Td&gt;Homepage by Zenek&lt;/td&gt;&lt;td&gt;PHP powered, MySQL in&lt;/td&gt;&lt;td&gt;stronę wygenerowano w 0,00001".rand(1, 10)."sek&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;");
	}
?&gt;
</code></pre>
<p>MySQL wrzucony na ruszt, ale jak widać najpiękniejszy jest minimalizm, więc po co używać go w nadmiarze. Poza tym, warto wspomnieć o szybkości wygenerowania strony. Zenek robił testy odpalając stoper na komórce i generalnie wynik oscylował wokół 0,00001 sekundy, więc jak widać skrypt pędzi jak Robert Kubica na szybkim okrążeniu.</p>
<h3>Profil informatyczny</h3>
<p>Na czas 3. klasy gimnazjum PHP rzucamy ewidentnie do kosza. Musimy się dostać do wymarzonego liceum, a żeby to zrobić nie wystarczy napisać na teście gimnazjalnym <span class="f">exit();</span>. Po jako takim zakończeniu roku przychodzi wreszcie czas na działalność w branży. Od kumpla Zenek dostaje kilka adresów blogasków, szczególnie podoba mu się blog <a href="http://room-303.com/blog">Patrysa</a>, bo koleś ma fajną chustę i twierdzi, że teraz programuje w Pythonie, bo PHP jest dla lamerów. Na Zenku deklaracja ta robi kolosalne wrażenie. Odtąd czyta tego bloga namiętnie, chociaż nic nie rozumie.</p>
<p>Wakacje to także czas na zarobek. W <em>Wiadomościach</em> zestawili pensje i wychodzi z tego, że informatyk zarabia najwięcej. Zenek stwierdza z ulgą, że jego wybór ścieżki życiowej był słuszny. Teraz trzeba zarobić co nieco na nowego kompa. Ale kto by tam szukał czegoś na mieście? Na Webhelpie jakieś K2 szuka webdeveloperów z doświadczeniem. Zenon ma trochę obaw, bo nie wie co to SVN i OOP, ale 3-letnie doświadczenie zawodowe powinno zrobić wrażenie na włodarzach firmy. Nie zrobiło, młodziak czekał 3 tygodnie na e-maila, ale nic z tego. Cóż, nie załamujmy się! Ojciec mówił niedawno, że jego znajomy chciałby stronkę&#8230;</p>
<h3>Życie jest nowelą</h3>
<p>Po studium informatycznym, Zenon znalazł robotę jako informatyk w Urzędzie Gminy. Planuje co prawda otworzyć własną firmę wykonującą aplikacje WWW, ale to melodia przyszłości. W końcu dobrze pracuje się na <em>frilansie</em> i aktualizuje swojego blogaska na <a href="http://jogger.pl">joggerze</a>&#8230;</p>
<p>W międzyczasie Zenon dostaje zlecenie od bardzo znanej instytucji zajmującej się wirtualną rozrywką. Szykuje się ostra kasa, bo zdążył sobie przez te kilka lat wyrobić renomę, robi też trochę w grafice, więc zawsze to dodatkowy skill. Po miesiącu ostrego klepania w wolnym czasie, Zenon skasował kilka tysiaków i kupił sobie to i tamto. No i kredyt spłacił. Teraz jego strony wyglądają tak:</p>
<pre><code>
&lt;?php
if ($url_0 == 'galeria' &#038;&#038; is_numeric($url_1)) {

mysql_query("UPDATE `gallery` SET `gallery_views` = `gallery_views` + 1 WHERE `gallery_id` = '$url_1'");
$galeria_sql = mysql_fetch_array(mysql_query("SELECT * FROM `gallery` WHERE `gallery_id` = '$url_1'"));

$start = $galeria_sql['gallery_name_start'];
$koniec_wlas = $galeria_sql['gallery_name_stop'];
$ile = $koniec_wlas-$start+1;
$koniec = $koniec_wlas;

print '&lt;div class="tekst"&gt;
&lt;h4&gt;&lt;span class="floatr"&gt;&lt;img src="'.$obrazki.'/plus3.gif" alt="photos" width="5" height="5" class="plus" /&gt; '.$lang['zdjec'].': '.$ile.'&lt;/span&gt;&lt;img src="'.$obrazki.'/ikony/mpg.gif" alt="Galeria" /&gt; &lt;a href="'.$link_glowy.'galeria/'.$galeria_sql['gallery_id'].'/"&gt;'.$galeria_sql['gallery_title'].'&lt;/a&gt;&lt;/h4&gt;
&lt;div class="tresc"&gt;
&lt;table border="0" width="400px" align="center" style="border:1px solid #cccccc" frame="vsides"&gt;&lt;tr&gt;&lt;ul class="zdjecia"&gt;'."\n";
//width="'.($rozmiar[0]).'" height="'.($rozmiar[1]).'" $rozmiar = getimagesize($galeria_sql['gallery_url'].$i.'m.jpg');
for ($i=$start; $i&lt;=$koniec; $i++) {
echo '&lt;td width="100px" align="center" style="padding:5px"&gt;&lt;a href="'.$galeria_sql['gallery_url'].$i.'.jpg" rel="lightbox" title="#'.$i.'" class="slideshow"&gt;&lt;img src="'.$galeria_sql['gallery_url'].$i.'m.jpg" alt="#'.$i.'" /&gt;&lt;/a&gt;&lt;/td&gt;';
if (empty($i%3)) { echo "&lt;/tr&gt;&lt;tr&gt;"; }
}

print '&lt;/table&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;';

if (autoryzacja()) {
if (strstr($uzytkownik_poziom_dostep, 'a')) {
print '&lt;div&gt;&lt;a href="'.$link_glowy.'administracja/galerie/edytuj/'.$galeria_sql['gallery_id'].'/"&gt;&lt;img src="'.$obrazki.'/edytuj.gif" width="15" height="15" alt="Edytuj" /&gt;&lt;/a&gt; &lt;span class="szary"&gt;WyÂ¶wietleń galerii: '.$galeria_sql['gallery_views'].'&lt;/span&gt;&lt;/div&gt;';
}
}
?&gt;</code></pre>
<h3>PHP &#8211; nie dla idiotów!</h3>
<p>Powyższa anegdotka nie jest przypadkiem. Otóż ostatnio zostałem poproszony o poprawki w powyższym skrypcie. To, co ujrzałem, przeszło moje najśmielsze oczekiwania. Musicie wiedzieć bowiem, że ten kawałek kodu pochodzi z bardzo popularnej strony zajmującej się elektroniczną rozrywką. Pan, który to zrobił, a któremu nie chcę psuć renomy, wyciągnął za to pewnie dość spory kawałek banknotów&#8230; Dziś strona co jakiś czas pada, mimo że działa na serwerze dedykowanym z dobrą konfiguracją sprzętową. </p>
<p>A czy Ty zatrudniłbyś Zenka?</p>
]]></content:encoded>
			<wfw:commentRss>http://ferrante.pl/2007/07/07/mamo-umiem-php/feed/</wfw:commentRss>
		<slash:comments>55</slash:comments>
		</item>
		<item>
		<title>EditPlus</title>
		<link>http://ferrante.pl/2007/03/11/27/</link>
		<comments>http://ferrante.pl/2007/03/11/27/#comments</comments>
		<pubDate>Sun, 11 Mar 2007 16:03:20 +0000</pubDate>
		<dc:creator>ferrante</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://ferrante.pl/2007/03/11/27/</guid>
		<description><![CDATA[Jak powiadają, są gusta i guściki. Prawda ta objawia się szczególnie, kiedy przychodzi do wskazania najlepszego edytora plików HTML, PHP i innych. Każdy z developerów posiada własne przyzwyczajenia i tym samym naprawdę trudno wyróżnić absolutnie najlepszy program z tej kategorii. Osobiście również nie zamierzam zachwalać w niebiosa produktu wymienionego w tytule, aczkolwiek spróbuje go zarekomendować [...]]]></description>
			<content:encoded><![CDATA[<p>Jak powiadają, są <em>gusta i guściki</em>. Prawda ta objawia się szczególnie, kiedy przychodzi do wskazania najlepszego edytora plików HTML, PHP i innych. Każdy z developerów posiada własne przyzwyczajenia i tym samym naprawdę trudno wyróżnić absolutnie najlepszy program z tej kategorii. Osobiście również nie zamierzam zachwalać w niebiosa produktu wymienionego w tytule, aczkolwiek spróbuje go zarekomendować w sposób, na jaki według mnie zasługuje. Lata obustronnej współpracy zobowiązują.<span id="more-27"></span></p>
<p>EditPlus, to, trzeba powiedzieć jasno, program dla bardziej zaawansowanych koderów. Nie znajdziecie w nim wielu gotowych snippetów, tak, jak to miało miejsce w <a href="http://ferrante.pl/2007/03/03/coreeditor/">CoreEditor</a>. Dostępne są za to absolutnie podstawowe, takie jak wstawianie szablonów &lt;script&gt; i tym podobnych. Dobrą wiadomością jest to, że takowe można dodać własnoręcznie. Warto też wspomnieć, że EP nie oferuje edytora WYSIWYG pozwalającego <em>rysować</em> nasze strony.</p>
<p>Biorąc pod uwagę inne edytory, EP wygląda przy nich, jak biedny krewny z Kazachstanu. I, myślę, że o to właśnie tutaj chodzi. EditPlus jest szybki i wydajny. Pozwala zapisać dokumenty w UTF, również z nagłówkiem. EditPlus to fajne formatowanie tekstu &#8211; można zmieniać wielkości liter, zmieniać spacje na tabulatory i odwrotnie. Także kolorowanie składni jest w pełni edytowalne. Można zwijać prosto kod, dzięki <em>code folding</em>. Łatwo odróżnimy taby od spacji, a skróty klawiszowe pozwolą nam szybciej poruszać się po dokumencie i dostępnych opcjach.</p>
<p>Kiedy mówisz <span class="f">szybka edycja kodu</span>, myślisz <span class="f">EditPlus</span>! Program pozwala kompleksowo i błyskawicznie dostać się do konkretnych linii kodu, a jego przejrzystość i, paradoksalnie, archaiczny wygląd stawiają go obok NotePada+ na piedestale prostych i bardzo funkcjonalnych edytorów HTML, CSS, JS, a nawet, używając lekkiego nadużycia, PHP.</p>
<p>EditPlus jest programem płatnym, aczkolwiek warto wypróbować jego 30dniową wersję próbną.</p>
<p>&#8211;> <a href="http://editplus.com">EditPlus</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ferrante.pl/2007/03/11/27/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>CoreEditor</title>
		<link>http://ferrante.pl/2007/03/03/coreeditor/</link>
		<comments>http://ferrante.pl/2007/03/03/coreeditor/#comments</comments>
		<pubDate>Sat, 03 Mar 2007 20:52:19 +0000</pubDate>
		<dc:creator>ferrante</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://ferrante.pl/2007/03/03/coreeditor/</guid>
		<description><![CDATA[Dawno temu, kiedy stawiałem swoje pierwsze kroki w świecie kodowania stron internetowych, używałem w głównej mierze programu EdHTML. Jak na moje wymagania, był to całkiem sprawny edytor HTML i PHP. Oferował przede wszystkim dość fajne kolorowanie i formatowanie składni, co było dla mnie nieocenionym plusem. Jego wady, jakimi były pamięciożerność i dość niski stosunek efektywności [...]]]></description>
			<content:encoded><![CDATA[<p>Dawno temu, kiedy stawiałem swoje pierwsze kroki w świecie kodowania stron internetowych, używałem w głównej mierze programu <a href="http://pl.wikipedia.org/wiki/EdHTML">EdHTML</a>. Jak na moje wymagania, był to całkiem sprawny edytor HTML i PHP. Oferował przede wszystkim dość fajne kolorowanie i formatowanie składni, co było dla mnie nieocenionym plusem. Jego wady, jakimi były pamięciożerność i dość niski stosunek efektywności do ilości włożonej pracy spowodowały, że całkowicie zapomniałem o programie Karola Wierzchołowskiego. Od tej pory życie umilał mi Edit Plus. Ostatnimi czasy natrafiłem jednak przypadkowo na nowy edytor autora EdHTML &#8211; CoreEditor.<span id="more-19"></span></p>
<p>Kiedy jakiś program zainteresuje mnie czymkolwiek, staram się go przetestować choć przez chwilę. Leniwa ze mnie bestia i z reguły tego typu zabawy kończą się w przeciągu 2-3 minut. Człowiek kliknie tu i tam, by zobaczyć, że nie ma nic nowego i kasuje program z twardego dysku. Z CoreEditor także nie wiązałem większych nadziei, byłem tylko ciekawy, głównie z sentymentu do EdHTML, co takiego oferuje jego oficjalny następca. Tym razem moje <em>&#8220;testy&#8221;</em> zakończyły się po 10 minutach, co jest wręcz niewyobrażalnym wynikiem, jeśli chodzi o moją osobę. Co prawda nie warto się spodziewać długiej listy pochwał, aczkolwiek należy wyróżnić CoreEditor pod paroma względami. </p>
<p>Pamiętam, że w swojej karierze, kiedy jeszcze XHTML był mgnieniem przyszłości, używałem w większości tagów pisanych wersalikami. Po rewolucji, w związku z którą porzucono tego typu pisownię, miałem niemały kłopot z przekonwertowaniem kodu na małe litery. Co prawda mogłem napisać program robiący to za mnie, ale jakoś nigdy do tego nie doszło, przez co większość stron z tamtego okresu pozostawała w swojej archaicznej postaci. Wielka szkoda, że nie było przy mnie CodeEditora. Między innymi właśnie zmiana tagów na xhtmlowe przykuła moją uwagę na dłużej. CoreEditor robi to bardzo sprawnie, jednym kliknięciem możemy poprawić skutki niewiedzy naszych współpracowników, którzy o XHTML nigdy nie słyszeli.</p>
<p>Co jeszcze utkwiło mi w pamięci z okazji kontaktu z edytorem to możliwość zmiany tego typu potworków: <span class="f">align=&#8221;left&#8221;</span> na <span class="f">style=&#8221;text-align: left;&#8221;</span>. Moduł ten jest w wersji beta, więc nie działa jeszcze sprawnie, aczkolwiek sprawił mi miłą niespodziankę.</p>
<p>Poza tym, CoreEditor jest, ku mojemu zdziwieniu, dość &#8220;lekki&#8221; i nie zabiera dużej ilości pamięci. Nie miałem okazji wypróbować go przy pracy z kilkunastoma zakładkami, bo zabraniała tego wersja demo, aczkolwiek przy mniejszej ich ilości było całkiem sympatycznie.</p>
<p>Standardowo, program Karola zawiera mnóstwo snippetów do wielu języków: <em>php, html, js, czy mysql</em>. Dołączone są też manuale i kursy. Plusem jest też domyślnie, świetne kolorowanie składni. Szczególnie w wypadku PHP. Przynajmniej jeśli o mnie chodzi, bardzo mi się podoba. Gdybym zaczynał, miałbym z pewnością słabe pojęcie o zmianie kolorowania składni, więc zaproponowane, defaultowe rozwiązanie tego problemu byłoby mi na rękę.</p>
<p>Myślę, że dla początkujących CoreEditor to świetny kombajn, pozwalający tworzyć dokumenty w wielu rozszerzeniach i systemach kodowania (utf8 ready!). Co prawda jest to program płatny, przez co liczba potencjalnych użytkowników zniwelowała się na starcie o połowę, ale z racji zawodu warto go okiełznać.</p>
<p>&#8211;> <a href="http://coreeditor.pl">CoreEditor</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ferrante.pl/2007/03/03/coreeditor/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
