<?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>BartoszRychlicki.com &#187; php</title>
	<atom:link href="http://www.BartoszRychlicki.com/category/conieco-dla-nerdow/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.BartoszRychlicki.com</link>
	<description>web developing, mac, design &#38; br-design.pl</description>
	<lastBuildDate>Thu, 28 Jan 2010 10:55:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Koniec</title>
		<link>http://www.BartoszRychlicki.com/2008/06/05/koniec/</link>
		<comments>http://www.BartoszRychlicki.com/2008/06/05/koniec/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 08:38:17 +0000</pubDate>
		<dc:creator>Bartosz 'Bard' Rychlicki</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.BartoszRychlicki.com/2008/06/05/koniec/</guid>
		<description><![CDATA[Skoro już dawno nic tu się nie pokazało, może oznaczać to tylko jedno.
Czas przymknąć tego bloga bo tylko generuje spam na sieci.
]]></description>
			<content:encoded><![CDATA[<p>Skoro już dawno nic tu się nie pokazało, może oznaczać to tylko jedno.<br />
Czas przymknąć tego bloga bo tylko generuje spam na sieci.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.BartoszRychlicki.com/2008/06/05/koniec/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CakePHP &#8211; tutoriale od IBMa.</title>
		<link>http://www.BartoszRychlicki.com/2007/11/06/cakephp-tutoriale-od-ibma/</link>
		<comments>http://www.BartoszRychlicki.com/2007/11/06/cakephp-tutoriale-od-ibma/#comments</comments>
		<pubDate>Mon, 05 Nov 2007 23:56:27 +0000</pubDate>
		<dc:creator>Bartosz 'Bard' Rychlicki</dc:creator>
				<category><![CDATA[Inspiracje]]></category>
		<category><![CDATA[książki]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.BartoszRychlicki.com/2007/11/06/cakephp-tutoriale-od-ibma/</guid>
		<description><![CDATA[
Surfując po sieci natknąłem się na te profesjonalnie przygotowane samouczki do frameworka CakePHP. Mimo iż sam nie używam tego narzędzia, to uważam że takie schludne (i dobre merytorycznie) PDFy mogą się przydać każdemu programiście.

Materiał jest niestety po angielsku, dzieli się na 5 części, z czego każda ma po parędziesiąt stron (20-30), co razem daje nam [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.BartoszRychlicki.com/wp-content/uploads/2007/11/caketuts.jpg' alt='cakephptuts' /><br />
Surfując po sieci natknąłem się na te profesjonalnie przygotowane samouczki do frameworka <a href="http://www.cakephp.org/">CakePHP</a>. Mimo iż sam nie używam tego narzędzia, to uważam że takie schludne (i dobre merytorycznie) PDFy mogą się przydać każdemu programiście.<br />
<span id="more-138"></span><br />
Materiał jest niestety po angielsku, dzieli się na 5 części, z czego każda ma po parędziesiąt stron (20-30), co razem daje nam całkiem sporego e-booka za darmo.<br />
<strong><br />
Linki do treści w serwisu scibd.com:</strong></p>
<ol>
<li><a href="http://www.scribd.com/doc/5503/CakePHP-tutorial-no-1-from-IBM">część I</a></li>
<li><a href="http://www.scribd.com/doc/5545/CakePHP-tutorial-no-2-from-IBM">część II</a></li>
<li><a href="http://www.scribd.com/doc/5546/CakePHP-tutorial-no-3-from-IBM">część III</a></li>
<li><a href="http://www.scribd.com/doc/5542/CakePHP-tutorial-no-4-from-IBM">część IV</a></li>
<li><a href="http://www.scribd.com/doc/5547/CakePHP-tutorial-no-5-from-IBM">część V</a></li>
</ol>
<p>Jeżeli wpierw chcecie się pobieżnie zapoznąć z treścią to tutaj krótki preview pierwszej częsci. </p>
<p><object width="550" height="500"><param name="allowScriptAccess" value="SameDomain" /><param name="movie" value="http://static.scribd.com/FlashPaperS3.swf?guid=1kauvf76bf30y&#038;document_id=5503" /><embed width="450" height="500" src="http://static.scribd.com/FlashPaperS3.swf?guid=1kauvf76bf30y&#038;document_id=5503" type="application/x-shockwave-flash"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.BartoszRychlicki.com/2007/11/06/cakephp-tutoriale-od-ibma/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Zadania na rekrutacje dla programistów PHP.</title>
		<link>http://www.BartoszRychlicki.com/2007/10/29/zadania-na-rekrutacje-dla-programistow-php/</link>
		<comments>http://www.BartoszRychlicki.com/2007/10/29/zadania-na-rekrutacje-dla-programistow-php/#comments</comments>
		<pubDate>Mon, 29 Oct 2007 17:17:57 +0000</pubDate>
		<dc:creator>Bartosz 'Bard' Rychlicki</dc:creator>
				<category><![CDATA[Inspiracje]]></category>
		<category><![CDATA[br-design]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.BartoszRychlicki.com/2007/10/29/zadania-na-rekrutacje-dla-programistow-php/</guid>
		<description><![CDATA[
Będziesz przeprowadzał rekrutacje dla programisty PHP i chciałbyś sprawdzić jego wiedze? Zamieszczam zestaw 7 stosunkowo prostych zadań z PHP do dowolnego użytku.

Technorati Tags: php, programista, rekrutacja, zadania


Zadań jest 7 i są różnego stopnia trudności, oprócz umiejętności programowania zahaczają lekko o HTML i JavaScript.
Standardowo każde zadanie jest punktowane. W moim przypadku zasady testu wyglądają następująco:

Masz 40 [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.BartoszRychlicki.com/wp-content/uploads/2007/10/php.gif' alt='php.gif' /><br />
Będziesz przeprowadzał <strong>rekrutacje</strong> dla programisty PHP i chciałbyś sprawdzić jego wiedze? Zamieszczam zestaw 7 stosunkowo prostych zadań z PHP do dowolnego użytku.</p>
<p><!-- technorati tags start -->
<p style="text-align:right;font-size:10px;">Technorati Tags: <a href="http://www.technorati.com/tag/php" rel="tag">php</a>, <a href="http://www.technorati.com/tag/programista" rel="tag">programista</a>, <a href="http://www.technorati.com/tag/rekrutacja" rel="tag">rekrutacja</a>, <a href="http://www.technorati.com/tag/zadania" rel="tag">zadania</a></p>
<p><!-- technorati tags end --><br />
<span id="more-132"></span><br />
Zadań jest 7 i są różnego stopnia trudności, oprócz umiejętności programowania zahaczają lekko o HTML i JavaScript.<br />
Standardowo każde zadanie jest punktowane. W moim przypadku zasady testu wyglądają następująco:</p>
<ol>
<li>Masz 40 minut na rozwiązywanie zadań,</li>
<li>kolejność jest dowolna (to ważne aby sprawdzić jak kandydat ustawia sobie kolejność zadań),</li>
<li>praktycznie nie ma szans aby w tym czasie rozwiązać wszystkie zadania, dlatego jest to dodatkowy test na &#8220;działanie pod presją czasu&#8221;,</li>
<li>kandydat ma swobodny dostęp do internetu i wszelkich możliwych pomocy naukowych, w tym pomoc osoby prowadzącej,</li>
<li>na stanowisku na którym przeprowadzamy test jest lokalny serwer lokalny gdzie odpalamy i testujemy zadania.</li>
</ol>
<p>Czekam na wasze opinie. Może zadania są za trudne? Załączam również prostą tabele punktacji.</p>
<p>P.S.<br />
Jeżeli ktoś z Was ma zamiar robić karierę w <a href="http://www.br-design.pl" title="Agencja Interaktywna Gdańsk - br-design.pl">br-design.pl</a> to niech proszę nie czyta :-)</p>
<p><a href="http://www.bartoszrychlicki.com/wp-content/uploads/2007/rekrutacja.zip" title="Zadania dla programisty PHP">Pobierz zadania</a></p>
<p><a href="http://www.BartoszRychlicki.com/wp-content/uploads/2007/10/punkty.pdf" onclick="window.open('http://www.BartoszRychlicki.com/wp-content/uploads/2007/10/punkty.pdf','popup','width=645,height=782,scrollbars=no,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=yes,left=0,top=0');return false"><img src="http://www.BartoszRychlicki.com/wp-content/uploads/2007/10/punkty-tm.jpg" height="100" width="82" border="1" hspace="4" vspace="4" alt="Punkty" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.BartoszRychlicki.com/2007/10/29/zadania-na-rekrutacje-dla-programistow-php/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>webfeeds.pl &#8211; portal gromadzący informacje z dziedzin WWW.</title>
		<link>http://www.BartoszRychlicki.com/2007/10/15/webfeedspl-portal-gromadzacy-informacje-z-dziedzin-www/</link>
		<comments>http://www.BartoszRychlicki.com/2007/10/15/webfeedspl-portal-gromadzacy-informacje-z-dziedzin-www/#comments</comments>
		<pubDate>Mon, 15 Oct 2007 13:53:37 +0000</pubDate>
		<dc:creator>Bartosz 'Bard' Rychlicki</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[inne technologie]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[prywatne]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.BartoszRychlicki.com/2007/10/15/webfeedspl-portal-gromadzacy-informacje-z-dziedzin-www/</guid>
		<description><![CDATA[
Odpaliłem swój (no może nie tylko mój) webowy projekt o nazwie webFeeds.pl. Jego głównym i w tej chwili jedynym zadaniem jest agregacja wartościowej treści z tematyki WWW podzielonej na parę kategorii takich jak: css, grafika, flash, agencje interaktywne, JavaScript, php, ruby i inne. 
To co będzie odróżniać webfeeds.pl od Twojego agregatora RSS to skrupulatne moderowanie [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.webfeeds.pl" title="webfeeds.pl php rubyonrails css webdesign"><img src="http://content.screencast.com/media/f2a6128b-492e-448e-80d8-57e3a51df53f_4953f65c-5f6a-4f68-930e-28d52de92468_static_0_0_00000104.png" alt="webfeeds - php, webdesign, grafika, layout, flash, css, rss"/></a></p>
<p>Odpaliłem swój (no może nie tylko mój) webowy projekt o nazwie webFeeds.pl. Jego głównym i w tej chwili jedynym zadaniem jest agregacja wartościowej treści z tematyki WWW podzielonej na parę kategorii takich jak: css, grafika, flash, agencje interaktywne, JavaScript, php, ruby i inne. </p>
<p>To co będzie odróżniać <a href="http://www.webfeeds.pl" title="webdesign php ruby on rails, rss informacje newsy">webfeeds.pl</a> od Twojego agregatora RSS to skrupulatne moderowanie postów, tak aby dostarczać materiały najwyższej jakości, a odrzucać te o małej przydatności, dzięki temu zaoszczędzisz czas normalnie tracony na czytanie zbędnych bloków tekstu.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.BartoszRychlicki.com/2007/10/15/webfeedspl-portal-gromadzacy-informacje-z-dziedzin-www/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>CodeIgniter &#8211; ciekawa propozycja jeżeli chodzi o FrameWorki PHP.</title>
		<link>http://www.BartoszRychlicki.com/2007/06/20/codeigniter-ciekawa-propozycja-jezeli-chodzi-o-frameworki-php/</link>
		<comments>http://www.BartoszRychlicki.com/2007/06/20/codeigniter-ciekawa-propozycja-jezeli-chodzi-o-frameworki-php/#comments</comments>
		<pubDate>Wed, 20 Jun 2007 13:17:26 +0000</pubDate>
		<dc:creator>Bartosz 'Bard' Rychlicki</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.BartoszRychlicki.com/2007/06/20/codeigniter-ciekawa-propozycja-jezeli-chodzi-o-frameworki-php/</guid>
		<description><![CDATA[Ostatnie czasy przekonały mnie że warto być fanem frameworka, naprawdę potrafią ułatwić życie.
Na pewno każdy z Was spotkał się kiedyś z takimi frameworkami jak Zend Framework czy CakePHP, może Prado lub Sympfony. Jeżeli kogoś interesuję obszerniejsza lista frameworków dla PHP to znajdzie ją pod adresem http://www.phpit.net/article/ten-different-php-frameworks/.

Chciałem zaprezentować stosunkowo świeży framework CodeIgniter, uważam że warto się [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.BartoszRychlicki.com/wp-content/uploads/2007/06/ci_logo2.gif' alt='ci_logo2.gif' align="left" style="margin: 0 10px 10px 0;" />Ostatnie czasy przekonały mnie że warto być fanem frameworka, naprawdę potrafią ułatwić życie.<br />
Na pewno każdy z Was spotkał się kiedyś z takimi frameworkami jak Zend Framework czy CakePHP, może Prado lub Sympfony. Jeżeli kogoś interesuję obszerniejsza lista frameworków dla PHP to znajdzie ją pod adresem <a href="http://www.phpit.net/article/ten-different-php-frameworks/">http://www.phpit.net/article/ten-different-php-frameworks/</a>.<br />
<span id="more-121"></span><br />
Chciałem zaprezentować stosunkowo świeży framework CodeIgniter, uważam że warto się z nim zapoznać.<br />
Co wyróżnia CI od innych frameworków? Jeżeli chodzi o mnie to wydaje się być stosunkowo prosty, zasadniczo można się nauczyć podstaw w 20-30 minut. Kompatybilność frameworka wydaje się być nie naganna (pracuję na php4 i php5). Kolejnym miłym aspektem jest doskonała dokumentacja do wszystkich klas oraz jasna struktura plików i katalogów w samej aplikacji. Żeby narobić wam większego smaka powiem że na witrynie <a href="http://codeigniter.com/">codeigniter.com</a> znajdziecie parę video-tutoriali, kompletne wiki i forum. Swoją drogą witryna jest smacznie wykonana. </p>
<p>Myślę że warto poświęcić 20-30 minut pewnego spokojnego wieczoru na zapoznanie się z tym frameworkiem, być może okaże się celnym strzałem w nasze wymagania?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.BartoszRychlicki.com/2007/06/20/codeigniter-ciekawa-propozycja-jezeli-chodzi-o-frameworki-php/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>PHP vs. Rails &#8211; reklama w stylu Maca.</title>
		<link>http://www.BartoszRychlicki.com/2007/05/27/php-vs-rails-reklama-w-stylu-maca/</link>
		<comments>http://www.BartoszRychlicki.com/2007/05/27/php-vs-rails-reklama-w-stylu-maca/#comments</comments>
		<pubDate>Sun, 27 May 2007 18:47:14 +0000</pubDate>
		<dc:creator>Bartosz 'Bard' Rychlicki</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.BartoszRychlicki.com/2007/05/27/php-vs-rails-reklama-w-stylu-maca/</guid>
		<description><![CDATA[Jakiś czas temu pisałem port porównujący PHP i Ruby On Rails. Dziś znalazłem świetne uzupełnienie na You Tubie. Zobacz koniecznie te 4 filmiki (prawdopodobnie nie będą dla Ciebie aż tak śmieszne jeżeli nie widziałeś wcześniej reklam Apple&#8217;a &#8211; Mac vs. Pc).

Ruby On Rails vs Java
Ruby on Rails vs PHP &#8211; Migrations
Ruby on Rails vs PHP [...]]]></description>
			<content:encoded><![CDATA[<p>Jakiś czas temu pisałem port porównujący PHP i Ruby On Rails. Dziś znalazłem świetne uzupełnienie na You Tubie. Zobacz koniecznie te 4 filmiki (prawdopodobnie nie będą dla Ciebie aż tak śmieszne jeżeli nie widziałeś wcześniej <a href="http://www.apple.com/getamac/ads/">reklam Apple&#8217;a &#8211; Mac vs. Pc</a>).</p>
<ul>
<li><a href="http://www.youtube.com/watch?v=PQbuyKUaKFo">Ruby On Rails vs Java</a></li>
<li><a href="http://www.youtube.com/watch?v=n1NVfDlU6yQ">Ruby on Rails vs PHP &#8211; Migrations</a></li>
<li><a href="http://www.youtube.com/watch?v=p5EIrSM8dCA">Ruby on Rails vs PHP &#8211; Organization</a></li>
<li><a href="http://www.youtube.com/watch?v=Ld919lziKgE">Ruby on Rails vs PHP &#8211; Changing Database</a></li>
<ol>
</ol>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.BartoszRychlicki.com/2007/05/27/php-vs-rails-reklama-w-stylu-maca/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Problem z kodowaniem UTF-8 w klasie TextilePHP.</title>
		<link>http://www.BartoszRychlicki.com/2007/05/18/problem-z-kodowaniem-utf-8-w-klasie-textilephp/</link>
		<comments>http://www.BartoszRychlicki.com/2007/05/18/problem-z-kodowaniem-utf-8-w-klasie-textilephp/#comments</comments>
		<pubDate>Fri, 18 May 2007 08:53:39 +0000</pubDate>
		<dc:creator>Bartosz 'Bard' Rychlicki</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.BartoszRychlicki.com/2007/05/18/problem-z-kodowaniem-utf-8-w-klasie-textilephp/</guid>
		<description><![CDATA[Taka krótka notka. Zajęło mi tu dużo czasu aby się tego domyśleć więc dla tych którzy mają ten problem może być przydatne.
Rozwiązanie jest w linii 2657 klasy Textile.php:
Zmieniamy funkcję htmlentities na htmlspecialchars. Mam nadzieje że komuś to ułatwi pracę. 
]]></description>
			<content:encoded><![CDATA[<p>Taka krótka notka. Zajęło mi tu dużo czasu aby się tego domyśleć więc dla tych którzy mają ten problem może być przydatne.</p>
<p>Rozwiązanie jest w linii 2657 klasy Textile.php:</p>
<p>Zmieniamy funkcję <code>htmlentities</code> na <code>htmlspecialchars</code>. Mam nadzieje że komuś to ułatwi pracę. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.BartoszRychlicki.com/2007/05/18/problem-z-kodowaniem-utf-8-w-klasie-textilephp/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Portal startups.pl &#8211; miejsce dla nowych portali</title>
		<link>http://www.BartoszRychlicki.com/2007/04/15/portal-startupspl-miejsce-dla-nowych-portali/</link>
		<comments>http://www.BartoszRychlicki.com/2007/04/15/portal-startupspl-miejsce-dla-nowych-portali/#comments</comments>
		<pubDate>Sun, 15 Apr 2007 21:47:09 +0000</pubDate>
		<dc:creator>Bartosz 'Bard' Rychlicki</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.BartoszRychlicki.com/2007/04/15/portal-startupspl-miejsce-dla-nowych-portali/</guid>
		<description><![CDATA[Ostatnio wystartował nowy godny uwagi serwis. Mianowicie startups.pl.
Jest to typowa produkcja web 2.0 więc wiele inowacji tutaj nie znajdziemy. Jednak mimo wszystko jeżeli portal będzie rzetelnie prowadzony ma szanse stać się ciekawych zródłem wiedzy, zwłaszcza dla web developerów i specjalistów branży www.





]]></description>
			<content:encoded><![CDATA[<p>Ostatnio wystartował nowy godny uwagi serwis. Mianowicie <a href="http://startups.pl/">startups.pl</a>.</p>
<p>Jest to typowa produkcja web 2.0 więc wiele inowacji tutaj nie znajdziemy. Jednak mimo wszystko jeżeli portal będzie rzetelnie prowadzony ma szanse stać się ciekawych zródłem wiedzy, zwłaszcza dla web developerów i specjalistów branży www.<br />
<span id="more-117"></span><br />
<script type="text/javascript"><!--
google_ad_client = "pub-9801436118789909";
google_ad_slot = "7488918763";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<div align="center"><a href="http://www.startups.pl" target="_blank"><img src='http://www.BartoszRychlicki.com/wp-content/uploads/2007/04/screen.jpg' alt='screen.jpg' /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.BartoszRychlicki.com/2007/04/15/portal-startupspl-miejsce-dla-nowych-portali/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autoryzacja serwera Apache &#8211; tutorial.</title>
		<link>http://www.BartoszRychlicki.com/2007/03/22/autoryzacja-serwera-apache-tutorial/</link>
		<comments>http://www.BartoszRychlicki.com/2007/03/22/autoryzacja-serwera-apache-tutorial/#comments</comments>
		<pubDate>Thu, 22 Mar 2007 11:22:38 +0000</pubDate>
		<dc:creator>Bartosz 'Bard' Rychlicki</dc:creator>
				<category><![CDATA[inne technologie]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.BartoszRychlicki.com/2007/03/22/autoryzacja-serwera-apache-tutorial/</guid>
		<description><![CDATA[
Jeżeli chcemy szybko zabezpieczyć dany katalog na serwerze nie ma nic lepszego niż autoryzacja Apache. jak to zrobić w 3 prostych krokach?
1. Logujemy się na shella za pomocą ssh lub telnetu.
2. Wchodzimy do katalogu który chcemy zabezpieczyć.
3. Tworzymy listę haseł za pomocą polecenia:
htpasswd -c ./passwords username
gdzie ./passwords to nazwa pliku w aktualnym katalogu gdzie będą [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.BartoszRychlicki.com/wp-content/uploads/2007/03/apache-logo-security.jpg' alt='logo apache' /></p>
<p>Jeżeli chcemy szybko zabezpieczyć dany katalog na serwerze nie ma nic lepszego niż autoryzacja Apache. jak to zrobić w 3 prostych krokach?</p>
<p>1. Logujemy się na shella za pomocą ssh lub telnetu.<br />
2. Wchodzimy do katalogu który chcemy zabezpieczyć.<br />
3. Tworzymy listę haseł za pomocą polecenia:</p>
<p><code>htpasswd -c ./passwords username</code></p>
<p>gdzie <em>./passwords</em> to nazwa pliku w aktualnym katalogu gdzie będą trzymane zakodowane hasła (prawdopodobnie, lepszym pomysłem będzie umieszczenie tego pliku w innym katalogu, nie dostępnym dla przeglądarki ;-), a <em>username</em> to po prostu login jakim będziemy się logować.</p>
<p>Jeżeli polecenie nie zadziała (nie istnieje w ścieżce systemowe) to podaj z pełną ścieżką (zależy od systemu operacyjnego). Prawdopodobnie:<br />
<code><br />
/usr/local/apache/bin/htpasswd -c ./passwords username</code></p>
<p>System nam wypluję:</p>
<p><code>New password: mypassword<br />
Re-type new password: mypassword<br />
Adding password for user username<br />
</code></p>
<p>Logiczne prawda?</p>
<p>Potem tworzymy plik <em>.htaccess</em> (ten plik musi być w katalogu który chronimy a kropka w nazwie jest istotna) poleceniem:</p>
<p><code>touch .htaccess </code></p>
<p>edytujemy plik <em>.htaccess</em> i podajemy treść</p>
<p><code>AuthType Basic<br />
AuthName "Materiały poufnę"<br />
AuthUserFile /home/bard/secret/passwords<br />
Require valid-user<br />
</code></p>
<p>Ważna jest pełna ścieżka do pliku z hasłami:<br />
<em>AuthUserFile /home/bard/secret/passwords </em></p>
<p>Wszystko na ten temat, prosto i przyjemnie.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-9801436118789909";
google_ad_slot = "7488918763";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p>Dodanie nowego usera wygląda tak samo jak tworzenie pierwszego użytkownika, tylko bez argumentu (-c &#8211; create). Jeżeli chcemy zmienić hasło dla danego usera, po prostu robimy to samo jakbyśmy chcieli go stworzyć od nowa. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.BartoszRychlicki.com/2007/03/22/autoryzacja-serwera-apache-tutorial/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Czy przerzucam się z PHP na Ruby On Rails i dlaczego tak?</title>
		<link>http://www.BartoszRychlicki.com/2007/03/16/czy-przerzucam-sie-z-php-na-ruby-on-rails-i-dlaczego-tak/</link>
		<comments>http://www.BartoszRychlicki.com/2007/03/16/czy-przerzucam-sie-z-php-na-ruby-on-rails-i-dlaczego-tak/#comments</comments>
		<pubDate>Fri, 16 Mar 2007 10:29:52 +0000</pubDate>
		<dc:creator>Bartosz 'Bard' Rychlicki</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[inne technologie]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.BartoszRychlicki.com/2007/03/16/czy-przerzucam-sie-z-php-na-ruby-on-rails-i-dlaczego-tak/</guid>
		<description><![CDATA[
Twardy orzech do zgryzienia przed nami! Jeżeli nie znacie jeszcze Ruby on Rails a póki co siedzicie w PHP to zapnijcie pasy, bo będzie to niezła jazda (na torach oczywiście;-).Dla jasności, nie będę porównywał tutaj nudnych statystyk wydajności obu języków ani nic z tych geekowych wykresów. Nie! Tutaj czekają na Was prawdziwe M&#38;Msy z orzeszkami [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center"><img src="http://www.bartoszrychlicki.com/wp-content/uploads/2007/03/rorvsphp.jpg" title="rubyvsphp" alt="rubyvsphp" vspace="10" /></p>
<p>Twardy orzech do zgryzienia przed nami! Jeżeli nie znacie jeszcze Ruby on Rails a póki co siedzicie w PHP to zapnijcie pasy, bo będzie to niezła jazda (na torach oczywiście;-).Dla jasności, nie będę porównywał tutaj nudnych statystyk wydajności obu języków ani nic z tych <em>geekowych</em> wykresów. Nie! Tutaj czekają na Was prawdziwe M&amp;Msy z orzeszkami jeżeli chodzi o <em>web application developing</em> ;-)</p>
<p>Od ostatnich kilku miesięcy namiętnie testuję Ruby On Rails. Nie będę już tłumaczył co to jest, <a href="http://www.bartoszrychlicki.com/2006/08/26/ruby-on-rails/">pisałem wcześniej</a>, a w sieci też nie brakuje materiałów. Podsumuję tylko jednym zdaniem:</p>
<p>&#8220;Ruby On Rails jest frameworkiem napisanym w języku Ruby. Jest czymś, czym jest np. <a href="http://framework.zend.com">Zend Framework</a> dla PHP.&#8221;<br />
<span id="more-112"></span><br />
Napiszę Wam dlaczego mimo wielkiej &#8220;miłości&#8221; do starego, dobrego PHP mam zamiar pomału przestawiać się na RoR.</p>
<p>W PHP programuję od sławnej trzeciej wersji, czyli rok ok. 2000-2001. Kawał czasu jakby nie patrzeć. Do tego czasu dorobiłem się własnego autorskiego frameworka (na wzorcu MVC), który jest ciągle rozwijany i sprawdza się w zastosowaniach komercyjnych.</p>
<p>Z Ruby On Rails zetknąłem się ponad pół roku temu, ale temat na poważnie traktuję od ok 3 miesięcy.</p>
<p>Przez te ostatnie miesiące bylem non stop wprowadzany w stan zdziwienia, co porządnie wykonany framework z dużym zapleczem w postaci społeczności może dla Ciebie zrobić. Walne prosto z grubej rur(b)y: Ruby On Rails jest genialny, nie wątpliwie jest to najlepszy framework jaki widziałem i miałem okazje testować ale być też najlepsze środowisko developerskie w jakim pracowałem!</p>
<p>Racja! Do rzeczy! Co jest takiego super? Zanim się wyleję to <em>kliknij se</em>&#8230;</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-9801436118789909";
google_ad_slot = "7488918763";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p>Więcej już nie będzie, obiecuje.</p>
<p>Ok, jestem Macowcem (czyli siedzę na Macu ;-), zatem mam system Unixowy, zatem mam konsolę. Po zainstalowaniu RoR w systemie wystarczy wydać komendę:</p>
<p><code>rails tasteslikediggdotcom</code></p>
<p>i mamy już aplikacje na wzór <a href="http://www.digg.com">digg.com</a>. No&#8230; może nie nie zupełnie, ale nie wiele nas dzieli ;-)</p>
<p>Tak czy siak, mamy już kompletną wersje frameworka dla naszej aplikacji w katalogu tasteslikediggdotcom. Teraz fragment dla tych którzy kojarzą wzorzec MVC.</p>
<p>Chcesz utworzyć kontroler? Proszę&#8230;</p>
<p><code>ruby script/generate controller posts</code></p>
<p>Komenda, tworzy nowy plik kontrolera, klasę kontrolera, zestaw unit testów i szablony html używane przez kontroler.</p>
<p>Model? Nic prostszego<br />
<code><br />
ruby script/generate model Post</code></p>
<p>Tworzy nowy model o nazwie Post, oraz wszystko co potrzebne. Ha, co mi się szczególnie spodobało to tak zwane &#8220;migracje&#8221;. Zostańcie ze mną tutaj.<br />
Migracją pozwalają na tworzenie tabel w bazie danych oraz ich ewolucję w czasie rozwijania aplikacji bez używania SQLa! kiedy generujemy nowy model (co za tym idzie, chcemy nową tabele w bazie danych) tworzy się plik migracji w którym parę linijek kodu określa jaką tabela będzie miała strukturę. Możemy migracja cofać do dowolnej wersji, nie tylko tworzyć tabele ale też je modyfikować w osobnych plikach migracji. Normalne cud, miód i orzeszki! Jak zwykle do wszystkiego tylko jedna komenda:</p>
<p><code>rake db:migrate</code></p>
<p>Pokazałem wam najprostsze generatory, a powiem wam że są takie do generowania systemów autoryzacji, ajaxowy scaffolind (automatycznie generowane formularze do obsługi tabel w bazie danych), pluginy, a nawet całe systemy blogów.</p>
<p>A to były tylko generatory! ;-)</p>
<p>Dość o linii poleceń! Co tam jeszcze mamy za szmaczki? Aaaaa tak, soczyste Helpery dla HTML i AJAX.</p>
<p>W szablonie wystarczy wpisać:<br />
<code>&lt; %= link_to_remote 'ajaxowe zapytanko!',  :action: =&gt; 'letMeKnow' %&gt;</code></p>
<p>I ciach! Mamy ajaxowe, w pełni asynchroniczne zapytanko do akcji &#8216;letMeKnow&#8217; w kontrolerze w którym się znajdujemy! RoR używa do tego <a href="http://www.prototypejs.org/">prototype.js</a> i <a href="http://script.aculo.us">script.aculo.us</a>. To najprostszy przykład, w RoR mamy dużo takich poziomek! Od edytowania treści w miejscu (click na pole i mamy okienko do edycji tego co klikneliśmy), po efekty morphingu z najnowszego <a href="http://moofx.mad4milk.net/">moo.fx</a>. I wszystko zapakowane w przyjemne helpery.</p>
<p>To tylko parę przykładowych rzeczy. Jest ich naprawdę mnoga więcej. Nie wspomnę o czystej i bardzo, bardzo &#8220;sympatycznej&#8221; składni języka Ruby. Tak dla przykładu. Napiszę fragment kodu, a wy mi powiecie co on robi.<br />
<code><br />
10 times do |t|<br />
print t<br />
end</code></p>
<p>Albo coś ciekawszego np.:<br />
<code><br />
user = User.find(:first) // znajdz w bazie danych, pierwszego użytkownika z tabeli users.</code></p>
<p>unless user.blank? // czy użytkownik jest pusty?<br />
print user.name // jezeli nie jest to napisz jego imie.<br />
end</p>
<p>Naprawdę przyjemnie się piszę.</p>
<p>Ale rzecz która mi przypadła do gustu najbardziej jest nie namacalna. Jest to swojego rodzaju &#8220;TO&#8221;. Użytkownicy Maców wiedzą co mam na myśli. Po prostu &#8220;It&#8217;s just works&#8221;. Wszystko jest proste i działa. Ma swojego rodzaju smakowitą otoczkę web 2.0 i tych wszystkich modnych haseł w programowaniu, &#8220;DRY&#8221;, &#8220;Convention over Configuration&#8221; and so on&#8230; Modnych, ale i jakże praktycznych!</p>
<p>Jak już wspomniałem wcześniej, do tego dochodzi nam spore zaplecze w postaci społeczności. W Polsce, mimo jeszcze słabej, ale pnącej się popularności RoR mamy znakomity portal <a href="http://rubyonrails.pl/">rubyonrails.pl </a>i bardzo aktywne <a href="http://forum.rubyonrails.pl">forum.rubyonrails.pl</a>. Polecam. W światowej WWW natomiast znajdziemy znakomite podcasty, videocasty, gotowe materiały w PDFie (ściągawki, czyli <em>cheat sheets</em>). Oficjalna strona RubyOnRails.com posiada znakomite WiKi i całą dokumentacji API, plus wiele linków do materiałów, od tutoriali po całe e-booki w PDFie.</p>
<p>Niestety, są i ciemne strony mocy (używam tutaj słowa &#8220;mocy&#8221; w pełni świadomie i dosłownie ;-). Dwa największe minusy to:</p>
<p>1) Mało firm hostinguje RoR w Polsce póki co, ale są już takie. Mój hostigowy faworyt, czyli p<a href="http://progreso.pl">rogreso.pl</a> wprowadza już wersję testową.<br />
2) Co by nie było, musisz się jednak nauczyć nowego języka, jak mądry byś nie był to musisz na to poświęcić trochę czasu.</p>
<p>Ok, dość już o Ruby, trzeba to teraz jakoś odnieść do naszego PHP, w końcu takie jest założenie artykułu.</p>
<p>Czemu więc planuje się przesiąść z PHP na RoR? Oprócz tego co napisałem wyżej? Proste, RubyOnRails wydaje się być po prostu nowym dzieckiem aplikacji internetowych. Pachnie jak książka dopiero co kupiona w księgarni. Aplikacje napisane w RoR wyglądają naprawdę smakowicie i są na pewno krokiem do przodu (vide <a href="http://www.basecamphq.com">BASECAMP</a>, <a href="http://trac.typosphere.org/">Typo</a>, <a href="http://www.rousette.org.uk/projects/">10 Tracks</a>).</p>
<p>PHP wydaje się być już trochę skostniałe. Zaczynają z niego wychodzić błędy młodości. Różne nazewnictwo funkcji itd. Znane frameworki do PHP pomału umierają śmiercią naturalną (w wielu przypadkach ich autorzy po prostu przerzucają się na RoR. Dla przykładu można wziąć <a href="http://framework.zend.com">Zend Framework</a>, o którym było tak głośno jakiś czas temu, miał zmienić wszystko. Osobiście uważam że jest ok, ale ustawienie go zajęło mi chyba z 4 godziny i nie powiem żeby mnie czymś powalił.</p>
<blockquote><p> Ciężko to opisać słowami, ale porównajcie sobie choćby strony oficjalne <a href="http://www.php.net">PHP</a> i <a href="http://www.ruby-lang.org">Ruby</a>. Widzicie teraz do czego zmierzam?</p></blockquote>
<p><strong>Konkluzje</strong><br />
Myślę że ostatnim zdaniem można z powodzeniem zamknąć ten wpis. Dodam małe wytłumaczenie: nie uważam że PHP jest gorszym językiem i ostrzegam że w kodzie Ruby powyżej mogą być błędy, pisałem z własnego, jeszcze całkiem małego zasobu wiedzy.</p>
<p>Zewnętrzne materiały:<br />
* oficjalna strona języka <a href="http://www.ruby-lang.org">Ruby</a> od niedawna także po polsku!<br />
* oficjalna strona frameworka <a href="http://www.rubyonrails.com">RubyOnRails</a><br />
* <a href="http://del.icio.us/brdesign/rubyonrails">moje linki na del.icio.us </a>odnośnie RoR ;-) &#8211; naprawdę sporo materiałów do linków z materiałami ;-)<br />
* oficjalna strona języka <a href="http://www.php.net">PHP</a><br />
* witryna <a href="http://framework.zend.com">Zend Framework</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.BartoszRychlicki.com/2007/03/16/czy-przerzucam-sie-z-php-na-ruby-on-rails-i-dlaczego-tak/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>MD4, MD5, SHA 1 &#8211; online generator.</title>
		<link>http://www.BartoszRychlicki.com/2006/11/27/md4-md5-sha-1-online-generator/</link>
		<comments>http://www.BartoszRychlicki.com/2006/11/27/md4-md5-sha-1-online-generator/#comments</comments>
		<pubDate>Mon, 27 Nov 2006 17:55:34 +0000</pubDate>
		<dc:creator>Bartosz 'Bard' Rychlicki</dc:creator>
				<category><![CDATA[inne technologie]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.blog.br-design.pl/2006/11/27/md4-md5-sha-1-online-generator/</guid>
		<description><![CDATA[Zrobiłem taki generator hashów, bardziej na potrzebny własne, ale może się komuś przydać, jest szybki i &#8220;zawsze pod ręką&#8221;.  Zapraszam do generowania hashów ;-).
MD4, MD5, SHA 1 &#8211; online generator.
Miłą funkcją jest iż możemy zaraz po URL podać string który chcemy zahaszować, ew. po następnym slashu, podać algorytm (wspierane &#8216;md5&#8242; i &#8217;sha1&#8242;).
Np. http://www.md5.br-design.pl/secret/sha1
]]></description>
			<content:encoded><![CDATA[<p>Zrobiłem taki generator hashów, bardziej na potrzebny własne, ale może się komuś przydać, jest szybki i &#8220;zawsze pod ręką&#8221;.  Zapraszam do generowania hashów ;-).</p>
<p><a title="md5 generator" target="_blank" href="http://md5.br-design.co.uk/">MD4, MD5, SHA 1 &#8211; online generator</a>.</p>
<p>Miłą funkcją jest iż możemy zaraz po URL podać string który chcemy zahaszować, ew. po następnym slashu, podać algorytm (wspierane &#8216;md5&#8242; i &#8217;sha1&#8242;).</p>
<p>Np. http://www.md5.br-design.pl/secret/sha1</p>
]]></content:encoded>
			<wfw:commentRss>http://www.BartoszRychlicki.com/2006/11/27/md4-md5-sha-1-online-generator/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Front Controller &#8211; co to jest, po co to jest oraz przykładowa implementacja. Część 1.</title>
		<link>http://www.BartoszRychlicki.com/2006/11/26/front-controller/</link>
		<comments>http://www.BartoszRychlicki.com/2006/11/26/front-controller/#comments</comments>
		<pubDate>Sun, 26 Nov 2006 14:23:53 +0000</pubDate>
		<dc:creator>Bartosz 'Bard' Rychlicki</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.blog.br-design.pl/2006/11/26/front-controller/</guid>
		<description><![CDATA[Jeszcze nie tak bardzo dawno temu sam zadawałem sobie to pytanie. Ciężko było znaleźć odpowiedź. Mało która książka o PHP mówi coś o Front Controllerze. Przyznam się szczerze że booki nie okazały się w tym przypadku pomocne. Sieć okazała się w tym wypadku również mało przydatna. Być może źle szukałem ale googlując za front controllerem [...]]]></description>
			<content:encoded><![CDATA[<p>Jeszcze nie tak bardzo dawno temu sam zadawałem sobie to pytanie. Ciężko było znaleźć odpowiedź. Mało która książka o PHP mówi coś o Front Controllerze. Przyznam się szczerze że booki nie okazały się w tym przypadku pomocne. Sieć okazała się w tym wypadku również mało przydatna. Być może źle szukałem ale googlując za front controllerem natrafiłem na szczątkowe informacje.</p>
<ul>
<li><a target="_blank" title="front controller" href="http://www.phpwact.org/pattern/front_controller">http://www.phpwact.org/pattern/front_controller</a></li>
<li><a target="_blank" title="fonr controller on-lamp" href="http://www.onlamp.com/pub/a/php/2004/07/08/front_controller.html">http://www.onlamp.com/</a></li>
<li><a target="_blank" title="phppatterns - front controller" href="http://www.phppatterns.com/docs/design/the_front_controller_and_php">http://www.phppatterns.com/<br />
</a></li>
</ul>
<p>Polecam te linki osobą które jeszcze nie wiedzą nic na temat wzorca projektowego &#8220;Front Controller&#8221; (nie mówiłem że to wzorzec projektowy? Coż&#8230; to wzorzec projektowy). Jednak materiały te nie za wiele mówią nt. samej implementacji.</p>
<p>Jak można wyczytać w w/w materiałach front controllerem można nazwać nawet takich kawałek kodu:</p>
<p><code>$page = $_GET['page'];<br />
swith($page) {<br />
case 'home':<br />
include_once('index.php');<br />
break;<br />
case 'galeria':<br />
include_once('galleria.php');<br />
break;<br />
case 'onas':<br />
include_once('onas.php');<br />
break;<br />
}</code></p>
<p>Nie trzeba chyba tłumaczyć nikomu że taki mechanizm to żadna Ameryka, to coś co większość z nas robiła na początku przygód z programowaniem w PHP (a jeżeli robi tak dalej to na pewno powinna czytać dalej).</p>
<p>Więc co to jest tak naprawde ten front controller? Może wypiszę w liście co tak naprawdę robi dla nas front controller:</p>
<ul>
<li>Jest miejscem przez które przechodzą wszystkie zapytania do naszej aplikacji.</li>
<li>Możemy w nim wykonywać działania które są wspólne dla wszystkich stron aplikacji (np. autoryzacja, zainicjalizowanie logera itd, zaincludowanie odpowiednich bibliotek).</li>
<li>Przekierowuje &#8220;dalej&#8221; zapytanie, do odpowiedniego pliku/klasy/funkcji według parametrów podanych w URL i odpowiedniej strategi którą obmyśliliśmy i zaimplementowaliśmy w naszej klasie front control</li>
</ul>
<p>Przykładowy plik index.php który implementuje (wykorzystuję) front controller może wyglądać tak:</p>
<p><code>< ?php<br />
// wlaczenie raportowania bledow<br />
ini_set('display_errors','on');<br />
ini_set('html_errors','on');<br />
//error_reporting(E_ALL);<br />
require_once ('./config/config.php'); // ustawianie include_path<br />
ini_set ('include_path', ini_get('include_path').PATH_SEPARATOR.ROOT_DIR.'/library'.PATH_SEPARATOR.ROOT_DIR.'/models'); // ladowanie klas<br />
require_once('FrontController.php');<br />
require_once('Smarty.php');<br />
require_once('Authorize.php'); // ustawiamy smarty<br />
$smarty = new Smarty();<br />
$smarty->compile_dir     = ROOT_DIR.'/appshop/views/compile';<br />
$smarty->template_dir     = ROOT_DIR.'/appshop/views';<br />
Zend::register('smarty',$smarty); // autoryzacja<br />
$authorize = new Authorize();<br />
if (!$authorize->authorize()) {<br />
Zend_Log::log('użytkownik niezalogowany, przekierowanie do logowania');<br />
$_GET['controller'] = 'index';<br />
$_GET['action']        = 'index';<br />
} else {<br />
Zend_Log::log('użytkownik zalogowany');<br />
} // front controller (proces dispatch).<br />
try {<br />
$controller = new FrontController(ROOT_DIR.'/appshop/controllers/');<br />
$controller->dispatch();<br />
} catch (Exception $e) {<br />
echo $e->getMessage();<br />
}<br />
?></code></p>
<p>Przeanalizuj powyższy kod. Tak wiem, może wydawać się trochę dziwne, ale już tłumacze co i jak. Wpierw wykonujemy działania wspólne dla całej aplikacji, grzebiemy trochę w ustawieniach serwera zmieniając wartości w php.ini w czasie &#8220;run time&#8221;, tworzymy i ustawiamy obiekt smarty, przeprowadzamy autoryzacje użytkownika, widzimy też parę wywołań logera (dla czytelności kodu nie będę wnikał w inicjalizację i szczegóły klasy Zend_Log).</p>
<p>Dopiero na końcu, w bloku try&#8230; catch dzieje się magia. Używamy naszej klasy FrontController dla procesu dispatchowania (przepraszam za takie chamskie spolszczenie), czyli wywołania odpowiedniego miejsca naszej aplikacji. Klasa FrontController użyta tutaj pobiera z tablicy GET dwa parametry: controller i action. Controller to nazwa klasy, a action to nazwa metody która kontroler ma wywołać. Używając przy tym pomocy mod_rewrite tworzymy te tzw SEO linki, czyli podając URL np. strona.pl/news/archiwum wywołujemy controller news, action archiwum (wszystko jasne i czytelne). To jest jedna z możliwych strategi dispaczowania, mogę istnieć oczywiście inne np. dwa parametry get, pierwszy to nazwa pliku który wywołujemy a drugi to parametr dla jakieś instrukcji swith, która wie co robić dalej. Ale to zagadnienie wychodzące trochę poza Front Controller a wchodzące na wzorzec projektowy MVC.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-9801436118789909";
google_ad_slot = "7488918763";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p>Dzięki temu wszystkiemu, my mamy scentralizowaną w jednym miejscu nad praktycznie każdym zapytaniem do naszej aplikacji (można np. w łatwy sposób rejestrować w tym miejscu adresy IP hostów itd.) i zautomatyzowany, dzięki klasie FrontController dostęp do całego serwisu. Nie będziemy już musieli więcej dopisywać kolejnych ifów jeżeli w serwisie pojawi się nowa strona. Kierując się paroma zasadami które ustawimy przy inicjalizacji FrontControllera (obiektu klasy Front Controller) możemy sobie zapewnić spokojny sen i mieć pewność że jeżeli dany plik/klasa/funkcja istnieją to użytkownik w łatwy sposób będzie mógł ja wywołać bez naszej dodatkowej pracy.</p>
<p>Postarałem się odpowiedź na pytanie po co, co to i dlaczego. W następnej części zaprezentuje moją klasę FC.<br />
Proszę o konstruktywne komentarze. Chciałbym dodać na koniec że to jest moje podejście, oparte bardziej na doświadczniu niż fachowej literaturze, dlatego mogą znaleźć się tutaj luki.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.BartoszRychlicki.com/2006/11/26/front-controller/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Standardy w sieci &#8211; ciekawostka.</title>
		<link>http://www.BartoszRychlicki.com/2006/11/13/standarty-w-sieci-ciekawostka/</link>
		<comments>http://www.BartoszRychlicki.com/2006/11/13/standarty-w-sieci-ciekawostka/#comments</comments>
		<pubDate>Mon, 13 Nov 2006 09:14:38 +0000</pubDate>
		<dc:creator>Bartosz 'Bard' Rychlicki</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.blog.br-design.pl/2006/11/13/standarty-w-sieci-ciekawostka/</guid>
		<description><![CDATA[Z ciekawości zajrzałem dzisiaj w trzewia naszego polskiego lidera hostingowego home.pl.
Zanim pójdę dalej chciałbym mocno zaznaczyć że nie mam najmniejszego zamiaru szykanowania czy &#8220;obwiniania&#8221; zespołu home.pl. Mam raczej zamiar skłonić do lekkich przemyśleń na temat całego booomu ze standardami który szaleje wokół nas.
Otóż kod strony home.pl to (nie?)standart HTML 4.1 Transitional, a layout oparty jest [...]]]></description>
			<content:encoded><![CDATA[<p>Z ciekawości zajrzałem dzisiaj w trzewia naszego polskiego lidera hostingowego <a title="Home.pl" href="http://www.home.pl">home.pl</a>.</p>
<p>Zanim pójdę dalej chciałbym <strong>mocno </strong>zaznaczyć że nie mam najmniejszego zamiaru szykanowania czy &#8220;obwiniania&#8221; zespołu home.pl. Mam raczej zamiar skłonić do lekkich przemyśleń na temat całego booomu ze standardami który szaleje wokół nas.</p>
<p><span id="more-99"></span>Otóż kod strony home.pl to (nie?)standart HTML 4.1 Transitional, a layout oparty jest na tabelach. Do tego sporo stylów CSS jest &#8220;zaszytych&#8221; bezpośrednio w pliku html, sam kod posiada parę błędów.</p>
<p>Ale jak napisałem wcześnie, chce was umotywować do przemyśleń/dyskusji, bo:</p>
<ul>
<li>Taka firma jak home.pl na pewno zdaje sobie sprawę z korzyści płynących z stosowania standardów.</li>
<li>Taka firma jak home.pl na pewno zdaje sobie sprawę z konsekwencji płynących z nie trzymania się standardów.</li>
<li>Taka firma jak home.pl na pewno ma pieniądze aby móc &#8220;finansować&#8221; trzymanie się standardów.</li>
<li>Większość z nas prawdopodobnie nawet by nie pomyślała że home.pl ma jeszcze długą drogę (w ewolucji swojej witryny) do trzymania się standardów.</li>
</ul>
<p><script type="text/javascript"><!--
google_ad_client = "pub-9801436118789909";
google_ad_slot = "7488918763";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p>A teraz jeszcze ważniejsza sprawa. Dlaczego tak jest? Znalazłem trzy możliwości:</p>
<ol>
<li>Firma home.pl po prostu nie wprowadza u siebie standardów W3C bo nie ma na to funduszy lub nie zdaje sobie sprawy że coś takiego w ogóle istnieje w sieciowym limbo.</li>
<li>Zespół odpowiedzialny ze witrynę WWW po prostu woli spędzać czas w bufecie niż przejmować się standardami sieciowymi.</li>
<li>Firma home.pl nie wprowadza standardów świadomie, bo uważa że nie ma to sensu i przysparza tylko dodatkowych kosztów, a nie wiele zysków.</li>
</ol>
<p>Chciałbym zwłaszcza zwrócić uwagę na punkt 3. Przecież większość z nas nawet by nie pomyślała że świetnie wykonana witryna home.pl nie jest w ogóle zgodna ze standardami. Może po prostu standardy sieciowe dla większych (i rentownych) firm (home.pl to tylko jeden z wielu przykładów) są zwykłym trendem, którym nie warto się przejmować, czymś zupełnie nie marketingowym, czymś czym pasjonują się tylko nie liczni, zdziwaczali studenci informatyki i fanatycy World Wide Web.</p>
<p>Nie wątpię że w sieci jest wiele innych doskonale wykonanych witryn większych firm które doskonale radzą sobie jeszcze ze znacznikiem <font> itd. Pytanie brzmi, dlaczego tak jest? Przecież mając odpowiednie fundusze taką zmianę można wprowadzić w miarę szybko i głatko poczym cieszyć się semantycznym kodem, a sama idea przecież nie już taką nowością.</font></p>
<p><font>To na tyle. Ostatnie słowa: Zdjęcie Pani użyte w artykule jest bez zgody home.pl i jeżeli ta Pani miała by coś przeciwko to proszę o kontakt osobisty ;-). A tak całkiem serio, użyłem go trochę w ciemno i jeżeli firma home.pl sobie nie życzy, to oczywiście je ściągnę, mimo to wygląda ładnie.</font></p>
<p><strong>Edit 26.11.2006:</strong><br />
Ostatecznie, zdjęcie Pani z home.pl, usunęła moja zazdrosna dziewczyna ;-), to chyba kończy definitywnie kwestie sporną. Wypijmy za to ;-).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.BartoszRychlicki.com/2006/11/13/standarty-w-sieci-ciekawostka/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Anglikom gratulujemy MyActiveRecord.</title>
		<link>http://www.BartoszRychlicki.com/2006/10/21/my-activerecord/</link>
		<comments>http://www.BartoszRychlicki.com/2006/10/21/my-activerecord/#comments</comments>
		<pubDate>Sat, 21 Oct 2006 22:05:25 +0000</pubDate>
		<dc:creator>Bartosz 'Bard' Rychlicki</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.blog.br-design.pl/2006/10/21/my-activerecord/</guid>
		<description><![CDATA[Ostatnio opisywałem klase &#8220;upload&#8221;, pana Colina z Francji. Parę osób napisało do mnie z podziękowaniami za przedstawienie takiego miłego i użytecznego narzędzia. Fakt, nie sposób się z nimi nie zgodzić. Francuzom gratulujemy klasy &#8220;upload&#8221;.
Dzisiaj chciałbym wam przedstawić klasę &#8220;MyActiveRecord&#8220;, autorstwa Pana Jake&#8217;a Grimley&#8217;a z UK. Tak jak przy klasie upload, tak i tutaj nazwa chyba [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnio opisywałem <a target="_blank" title="opis klasy upload" href="http://www.blog.br-design.pl/2006/08/15/klasa-upload/">klase &#8220;upload&#8221;</a>, pana Colina z Francji. Parę osób napisało do mnie z podziękowaniami za przedstawienie takiego miłego i użytecznego narzędzia. Fakt, nie sposób się z nimi nie zgodzić. Francuzom gratulujemy klasy &#8220;upload&#8221;.</p>
<p>Dzisiaj chciałbym wam przedstawić klasę &#8220;<a href="http://www.phpclasses.org/browse/package/2990.html">MyActiveRecord</a>&#8220;, autorstwa Pana <a title="Jakes blog." href="http://blog.mademedia.co.uk/">Jake&#8217;a Grimley&#8217;a</a> z UK. Tak jak przy klasie upload, tak i tutaj nazwa chyba wiele mówi. Jeżeli nie mówi tobie nic, zapraszam <a target="_blank" title="opis akctive record" href="http://en.wikipedia.org/wiki/Active_record">tutaj</a> po więcej info nt. metody &#8220;aktywnego rekordu&#8221;.</p>
<p><span id="more-97"></span> Zaczne od: <strong>MyActiveRecord jest &#8220;na wypasie&#8221;!</strong></p>
<p>Tak! Naprawdę jest. Czemu? Bo wybawia cię od pisania żmudnego kodu SQL, tych samych żmudnych instrukcji mysql_conect, mysql_query, mysql_fetch&#8230; itd. itp.  To nie wszystko! Oprócz tego, o wiele łatwiej pozwala zarzadzać relacjami, dodawać nowe rekordy i obsługiwać walidacje danych. A dla programistów RoR miła niespodzianka, klasa jest mocno wzorowana na metodach zastosowanych w Ruby on Rails.<br />
Zanim zacznę pisać jak, powiem o jeden sprawie która może nie których smucić. <a href="http://www.phpclasses.org/browse/package/2990.html">MyActiveRecord </a>obsługuję tylko MySQL. Czy to źle tak naprawdę? Powiem że chyba nie, płacimy nie wielką cenę za wielką funkcjonalność i oszczędność czasu. Bądźmy ze sobą szczerzy, ile osób tak naprawdę programuje aplikacje php na inną bazę danych? 1% to chyba mocno śmiała liczba.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-9801436118789909";
google_ad_slot = "7488918763";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p><strong>Jak to robimy? Już mówię.</strong></p>
<ol>
<li>Musimy stworzyć klasę która odpowiada danej tabeli w bazie (nazwa klasy musi być identyczna jak tabeli) i ustawić dziedziczenie po MyActiveRecord. Np.<br />
<code> class news extends MyActiveRecord {<br />
}</code></li>
<li>Teraz w skrypcie (oczywiście po zaincludowaniu klasy news i ustawieniu stałej
<pre><code>define('MYACTIVERECORD_CONNECTION_STR', 'mysql://user:pass@host/database');</code></pre>
<p>) możemy zrobić takie fajne rzeczy:<br />
<em>Aby pobrać wszystkie newsy:</em><br />
<code> $newsy = MyActiveRecord::FindAll('news');<br />
</code> Dostajemy z powrotem tablice obiektów &#8220;news&#8221; ze wszystkimi newsami.<br />
<em>Aby pobrać news o ID (tabela musi mieć pole &#8216;id&#8217;):</em><br />
<code> $news = MyActiveRecord::FindById('news', 1);<br />
</code> Dostajemy bezpośrednio obiekt (gdyż może być tylko jeden obiekt o danym id).<br />
<em>Aby wstawić nowy news:</em><br />
<code> $news = new news();<br />
$news->tytul = "Testowy news";<br />
$news->tresc = "Testowa treść";<br />
$news->data_dodania = mktime();<br />
$news->save();<br />
</code>Tworzymy obiekt i magicznie ustawiamy jego zmienne (pola w bazie dla nowego rekordu).</li>
<li>To były podstawowe funkcję, oczywiście MAR daje nam o wiele większe możliwości. Np. nadpisując w klasie &#8220;news&#8221; funkcje save możemy wprowadzić walidacje.<br />
<code> class news extends MyActiveRecord {<br />
function save() {<br />
if (empty($this->tytul)) { $this->add_error('tytul', 'Tytuł nie może być pusty.'); }<br />
return parent::save();<br />
}</code></li>
<li>Nie ma sensu przepisywać doskonałego manuala i doskonałej dokumentacji do klasy, więc opiszę pokrótce na co jeszcze pozwala nam MAR:
<ul>
<li>Relacje jeden do jednego.</li>
<li>Relacje jeden do wielu.</li>
<li>Usuwanie obiektów.</li>
<li>&#8220;Eskejpowanie&#8221; wartości.</li>
<li>Cacheowanie wyników.</li>
<li>Logowanie zapytań.</li>
<li>Dziedziczenie tabeli po tabeli (tak!).</li>
<li>Transakcje.</li>
<li>Zwracanie wszelkich informacji o strukturze danej tabeli.</li>
</ul>
<p>And thats not all folks! Naprawdę, zachęcam do <a href="http://www.phpclasses.org/browse/package/2990.html">ściągnięcia </a>klasy o poczytania doskonałej dokumentacji. Na pewno nie będziecie mieć problemów z obsługą. Nie wiem czy to dzięki wzorowaniu się na RoR ale MAR jest jedną z najlepszych klas PHP jakie widziałem, jest przejrzysta, API jest logiczne no i &#8220;it just works&#8221;. Thanks <a title="Jakes blog." href="http://blog.mademedia.co.uk/">Jake</a>!</li>
</ol>
<p>EDIT:<br />
Jest jedna warzna rzecz którą powinniście wiedzieć, mi jej rozgryzienie zajęło trochę czasu, więc chciałbym wam tego oszczędzić. Otóż MAR domyślnie przy zwracaniu tablicy obiektów ustawia indexy tablicy na ID danego rekordu, co może być sporym utrudnieniem dla np. {section} w smarty. Ale można to sobie samemu łatwo zmienić w funkcji &#8220;FindBySql&#8221;, jeżeli ktoś by miał problem, mogę podesłać odpowiedniego hacka.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.BartoszRychlicki.com/2006/10/21/my-activerecord/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Logowanie w Zend Framework.</title>
		<link>http://www.BartoszRychlicki.com/2006/09/07/logowanie-w-zend-framework/</link>
		<comments>http://www.BartoszRychlicki.com/2006/09/07/logowanie-w-zend-framework/#comments</comments>
		<pubDate>Thu, 07 Sep 2006 14:02:33 +0000</pubDate>
		<dc:creator>Bartosz 'Bard' Rychlicki</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.blog.br-design.pl/2006/09/07/logowanie-w-zend-framework/</guid>
		<description><![CDATA[Ciekawy tutorial na temat logowania zdarzeń w Zend Framework&#8217;u. Polecam go również tym którzy nie tym którzy Zend FW nie używają ponieważ zawiera wiele interesujących wskazówek odnośnie samej teorii logowania. Napisany ciekawie i &#8220;zgrabnie&#8221;.
Zapraszam do czytania.
Autor tutoriala: Stefan Koopmanschap
]]></description>
			<content:encoded><![CDATA[<p>Ciekawy tutorial na temat logowania zdarzeń w Zend Framework&#8217;u. Polecam go również tym którzy nie tym którzy Zend FW nie używają ponieważ zawiera wiele interesujących wskazówek odnośnie samej teorii logowania. Napisany ciekawie i &#8220;zgrabnie&#8221;.</p>
<p>Zapraszam do <a target="_blank" title="zend framework tutorial: logowanie" href="http://hades.phparch.com/ceres/public/article/index.php/art::zend_framework::application_level_logging/0">czytania</a>.</p>
<p>Autor tutoriala: Stefan Koopmanschap</p>
]]></content:encoded>
			<wfw:commentRss>http://www.BartoszRychlicki.com/2006/09/07/logowanie-w-zend-framework/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
