<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-20788302</id><updated>2011-04-22T00:36:59.286+02:00</updated><title type='text'>around the web</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://michal-przytulski.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://michal-przytulski.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Michał Przytulski</name><uri>http://www.blogger.com/profile/00123354682821785226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-20788302.post-114086570959065927</id><published>2006-02-25T11:41:00.000+01:00</published><updated>2006-02-25T12:31:17.746+01:00</updated><title type='text'>Aspect-Oriented Programming i PHP</title><content type='html'>Ostanio mailem okazje natrafic na zagadnienie AOP i jego powiazanie z PHP.&lt;br /&gt;Ale moze na poczatku - czym jest wlasciwie AOP - jak donosi &lt;a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming"&gt;wikipedia&lt;/a&gt; AOP jest to pradygmat programistyczny, ktotrego glowna idea jest modularyzacja i enkapsulacja kodu.&lt;br /&gt;AOP poraz pierwszy zostalo sformulowane w Gregor Kiczales i zespol firmy XEROX, dzielem tego zespolu jest pierwszy i wciaz najpolularniejszy jezyk &lt;a href="http://en.wikipedia.org/wiki/AspectJ"&gt;AspectJ &lt;/a&gt;- rozszerzajacy standardowy jezyk Java o wsparcie dla programowania aspektowego.&lt;br /&gt;Na chwile obecna AOP jest wciaz malo popularne, a praktycznego stosowania AOP w srodowisku PHP prozno szukac, do tej pory powstaly proste implementacje pozwalajace na wykorzystanie pradygmatow AOP w programowaniu PHP:&lt;br /&gt;- &lt;a href="http://phpaspect.org/"&gt;PHPaspect&lt;/a&gt;&lt;br /&gt;-&lt;a href="http://www.aophp.net/"&gt; Aspect-Oriented PHP&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://www.seasar.org/en/php5/index.html"&gt;Seasar.PHP&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://www.phpclasses.org/browse/package/2633.html"&gt;AOP API for PHP&lt;/a&gt;&lt;br /&gt;Niemniej jednak powyzsze rozwiazania sa wlasciwie proteza, ktora ma pozowlic na zapoznanie z mozliowsciami AOP dla programistow PHP, moja osobista nadzieje powiazana jest bardziej z Sebastianem Bergmann'em, ktory wspomnial w swoim &lt;a href="http://www.sebastian-bergmann.de/blog/archives/573-Current-State-of-AOP-for-PHP.html"&gt;blogu&lt;/a&gt; o pracach nad modulem dla PHP, ktorego prezentacje zapowiedzial po powrocie z konfrerencji &lt;a onmouseover="window.status='http://www.sebastian-bergmann.de/blog/archives/572-AOSD-2006-Student-Extravaganza.html';return true;" title="http://www.sebastian-bergmann.de/blog/archives/572-AOSD-2006-Student-Extravaganza.html" onmouseout="window.status='';return true;" href="http://www.sebastian-bergmann.de/blog/exit.php?url_id=8458&amp;amp;entry_id=573"&gt;AOSD 2006 Student Extravaganza&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20788302-114086570959065927?l=michal-przytulski.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michal-przytulski.blogspot.com/feeds/114086570959065927/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20788302&amp;postID=114086570959065927' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/114086570959065927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/114086570959065927'/><link rel='alternate' type='text/html' href='http://michal-przytulski.blogspot.com/2006/02/aspect-oriented-programming-i-php.html' title='Aspect-Oriented Programming i PHP'/><author><name>Michał Przytulski</name><uri>http://www.blogger.com/profile/00123354682821785226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20788302.post-113924490156622610</id><published>2006-02-06T17:47:00.000+01:00</published><updated>2006-02-25T11:41:20.830+01:00</updated><title type='text'>Wielkanocne jajka PHP</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7960/2093/1600/scotch.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/7960/2093/320/scotch.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Nie wiem ilu z was wie o malym psikusie jaki sprezentowali tworcy PHP. Mam namysli specjanle wywolanie przy wykorzystaniu query string'a ktore pozwala na zobaczenie rzeczy ciekawych i wesolych, chodzi o wywolania stron z jednym z ponizszych specjanych stringow:&lt;br /&gt;* PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 - Informacje o tworcach PHP&lt;br /&gt;* PHPE9568F34-D428-11d2-A769-00AA001ACF42 - Logo PHP&lt;br /&gt;* PHPE9568F35-D428-11d2-A769-00AA001ACF42 - Zend Logo&lt;br /&gt;* PHPE9568F36-D428-11d2-A769-00AA001ACF42 - Jajko wielkanocne&lt;br /&gt;a ty przykład uzycia:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://php.net/?=PHPE9568F36-D428-11d2-A769-00AA001ACF42"&gt;http://php.net/?=PHPE9568F36-D428-11d2-A769-00AA001ACF42&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;W chwili obecnej aktualnym jajkiem jest &lt;a href="http://suraski.net/blog/index.php?/archives/6-Scotch-is-gone.html"&gt;Scotch&lt;/a&gt;, pies Zeev Suraski'ego, ktorego fotka jest prezentowana powyzej (oczywisci mam na mysli psa ;-) ) .&lt;br /&gt;Wczesniej moglismy ogladac chodzby:&lt;br /&gt;Nadie - psa &lt;a href="http://www.pvv.ntnu.no/~ssb/"&gt;Stig'a Bakken'a&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7960/2093/1600/nadia.1.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: pointer; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/7960/2093/320/nadia.1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Polecam poszukiwania ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20788302-113924490156622610?l=michal-przytulski.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michal-przytulski.blogspot.com/feeds/113924490156622610/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20788302&amp;postID=113924490156622610' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/113924490156622610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/113924490156622610'/><link rel='alternate' type='text/html' href='http://michal-przytulski.blogspot.com/2006/02/wielkanocne-jajka-php.html' title='Wielkanocne jajka PHP'/><author><name>Michał Przytulski</name><uri>http://www.blogger.com/profile/00123354682821785226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20788302.post-113812681560032697</id><published>2006-01-24T18:56:00.000+01:00</published><updated>2006-01-24T19:23:22.276+01:00</updated><title type='text'>Fluent Interfaces</title><content type='html'>Ostatnio czesto poruszanym tematem na anglojezycznych serwisach i blogach jest temat rozpoczety przez &lt;a target="_blank" href="http://paul-m-jones.com/blog/?p=188"&gt;Paula Jones&lt;/a&gt; i &lt;a target="_blank" href="http://www.mikenaberezny.com/archives/35"&gt;Mike Naberezny&lt;/a&gt; omawiajacy fluent interface (niestety nie znalazlem polskiego odpowiednika), ktorego celem jest udostepnienie logicznego i bardziej spojnego interfejsu dla obiektow. Temat ten zostal poruszony m.in. przez &lt;a target="_blank" href="http://andigutmans.blogspot.com/2005/12/fluent-interfaces.html"&gt;Andi Gutman's&lt;/a&gt; czy &lt;a target="_blank" href="http://www.achievo.org/blog/archives/25-The-danger-of-Fluent-interfaces.html"&gt;Ivo Jansch&lt;/a&gt; . Jak mozna sie przekonac metoda ta ma zarowno swoich zwolennikow jak i przeciwnikow, niemniej jednak w mojej opini stosowana w odpowiednich przypadkach z umiarem moze stanowic ciekawe i wygodne rozwiazanie. Ponizej przedstawiam przyklad wywolania metod na obiekcie implementujacym fluent interface:&lt;br /&gt;&lt;code&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;$sms&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;-&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;to&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0);"&gt;"1650939202"&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;)&lt;br /&gt; -&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;f&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;rom&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0);"&gt;"14082924021"&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;)&lt;br /&gt; -&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;message&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(221, 0, 0);"&gt;"Will meet you at 8pm"&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;&lt;br /&gt; -&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 187);"&gt;send&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(0, 119, 0);"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;Przedstawiony powyzej przyklad przedstawia glowna koncepcje implementacji.&lt;br /&gt;Musze przyznac iz forma wywolania akcji jest zrozumiala i prosta, niemniej jednak odnoszac sie do komentarza Ivo Jansch implementacja ta sprawdza sie w sytuacji gdy do czynienia mamy z elementami stosunkowo prostymi, w przypadku elementow zlozonych, w ktorych zachodza relacji pomiedzy obiektami stosowanie powyzszego moze doprowadzic do zbednego zaciemnienia kodu jak rowniez do dwuznacznosci implementacji.&lt;br /&gt;&lt;br /&gt;Na koniec moge polecic zainteresowanym lekture artykulow powyzszych autorow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20788302-113812681560032697?l=michal-przytulski.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michal-przytulski.blogspot.com/feeds/113812681560032697/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20788302&amp;postID=113812681560032697' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/113812681560032697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/113812681560032697'/><link rel='alternate' type='text/html' href='http://michal-przytulski.blogspot.com/2006/01/fluent-interfaces.html' title='Fluent Interfaces'/><author><name>Michał Przytulski</name><uri>http://www.blogger.com/profile/00123354682821785226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20788302.post-113812528114093721</id><published>2006-01-24T18:44:00.000+01:00</published><updated>2006-01-24T19:22:40.303+01:00</updated><title type='text'>Zestaw bibliotek DHTML</title><content type='html'>Ostatnimi dniami w firmie ktorej pracuje rozpoczeto prace nad rozbudowana kontrolka DHTML, ktorej zadaniem jest zaawansowana obsluga warstw - skalowanie, przesuwanie dynamiczne doladowywanie elementow. Poczatkowe prace nad implementacja wlasnej biblioteki cross-broweser okazaly sie zadaniem praco i czaso chlonnym. Roznice w implementacji przegladarek, jak rowniez ilosc problemow przekonaly nas do poszukiwania gotowego rozwiazania i musze przyznac ze doznalem znacznej ulgi w chwili gdy jeden z kolegow odnalazl &lt;a href="http://www.walterzorn.com/dragdrop/dragdrop_e.htm" target="_blank"&gt;http://www.walterzorn.com/dragdrop/dragdrop_e.htm&lt;/a&gt; jak sie rowniez okazalo na stronie tej umieszczonych jest zestaw innych bibliotek JS pozwalajacych m.in. na generowanie grafiki wektorowej za pomoaca JS, obsluge tooltip's czy rysowanie wykresow.&lt;br /&gt;Podsumowujac biblioteki prezentowane pod powyzszym zakresem z pewnoscia znajda szerokie zastosowanie, a ich dodatkowym atutem jest licencja na ktorej zostaly udostepnione &lt;a href="http://www.gnu.org/copyleft/lesser.html" target="_blank"&gt;LGPL&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20788302-113812528114093721?l=michal-przytulski.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michal-przytulski.blogspot.com/feeds/113812528114093721/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20788302&amp;postID=113812528114093721' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/113812528114093721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/113812528114093721'/><link rel='alternate' type='text/html' href='http://michal-przytulski.blogspot.com/2006/01/zestaw-bibliotek-dhtml.html' title='Zestaw bibliotek DHTML'/><author><name>Michał Przytulski</name><uri>http://www.blogger.com/profile/00123354682821785226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20788302.post-113761903967929121</id><published>2006-01-18T22:10:00.001+01:00</published><updated>2006-01-24T18:44:11.333+01:00</updated><title type='text'>don't kill me XAMPP</title><content type='html'>Ucieszony nowa wersja mojego ulubionego pakietu All-In-One na platforme Windows (i nie tylko), czyli &lt;a href="http://www.apachefriends.org/en/xampp.html"&gt;XAMPP (http://www.apachefriends.org/en/xampp.html)&lt;/a&gt; , a jeszcze bardziej tym, iz wraz z nowa wersja oprocz aktualizajci serwera www &lt;a href="http://httpd.apache.org"&gt;Apache&lt;/a&gt; do wersji z serii 2.2 to dostalem w prezencie nowa wersje PHP 5.1.1 (szkoda ze nie 5.1.2 ale chyba nie mozna byc tak wymagajacym), szczesliwy i pelen optymizmu zainstalowalem w pracy najnowsza wersje. I juz na poczatek problem - stare regoly mod_rewrite apache nie sprawdzaja sie, no co naszczescie drobne zmiany kosmetyczne i wszystko dziala. A tu kolejna niespodzianka - prosty kod w stylu:&lt;br /&gt;&lt;br /&gt;class A {&lt;br /&gt; &lt;br /&gt;   public static function find(){&lt;br /&gt;       $tmp = new B();&lt;br /&gt;       return $tmp;&lt;br /&gt;   }&lt;br /&gt; &lt;br /&gt;   public function __destruct(){&lt;br /&gt;     &lt;br /&gt;   }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class B extends A{&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$B = B::find();&lt;br /&gt;&lt;br /&gt;i efekt tragiczny crash!!! Blad - pamiec nie moze byc read. Jednak jak sie okazalo blad nie jest globalny i tyczy tylko systemow windows 2000 - jak wiec widac ponownie M$ nie sprawdza sie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20788302-113761903967929121?l=michal-przytulski.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michal-przytulski.blogspot.com/feeds/113761903967929121/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20788302&amp;postID=113761903967929121' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/113761903967929121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/113761903967929121'/><link rel='alternate' type='text/html' href='http://michal-przytulski.blogspot.com/2006/01/dont-kill-me-xampp_18.html' title='don&apos;t kill me XAMPP'/><author><name>Michał Przytulski</name><uri>http://www.blogger.com/profile/00123354682821785226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20788302.post-113744021059762305</id><published>2006-01-16T20:28:00.000+01:00</published><updated>2006-01-18T22:10:31.803+01:00</updated><title type='text'>jak ten czas leci - przez oceany, gory i rzeki</title><content type='html'>w pracy nad jednym z projektow spotkalem sie z problemem pomiaru czasu, a mianowicie jak radzic sobie z klientami, ktorzy wprowadzaja dane w roznych strefach czasowych, jak rowniez sama aplikacja moze byc zainstalowana na serwerze w roznej lokalizacji. Podobny problem spotkalem ostatnio na forum php.pl tam przycyna lezala w ucieczce polskich klientow do innych krajow (chodzi o koszty i jaskosc uslug hostingowych). Problem pojawil sie jednak w strefach czasowych - bowiem jesli ktos sie jeszcze nie zorientowal wsrod tysiaca roznic pomiedzy polska a stanami zjednoczonymi jest tez roznica czasu. Teraz pytanie co zrobic aby skrypt dodajcy wpis wiadomosci zawieral godzine naszej strefy czasowej ?&lt;br /&gt;Rozwiazan jest klika, mozna uzyc np. JavaScript do ustawiania wartosci obecnego czasu uzytkownika jako wartosc pola hidden, jednak takie rozwiazanie nie jest dobrym pomyslem - co bedzie jak uzytkownik ma zla strefe czasowa lub zle ustawiony zegar?&lt;br /&gt;Z tej i innych przyczyn rozwiazana oparte o czas klienta zostaly porzucone, innym pomyslem jest czas z serwera ale co zrobic jesli nie mamy mozliwosci zmiany strefy czasowej, naszczescie w nowej wersji PHP 5.1 wszystkie funkcje obslugi czasu wykorzystuja ustawiana przez skrypt strefe czasowa - aby bylizej zapoznac sie z tymi nowymi mozliwosciami zapraszam do manual'a: http://pl2.php.net/manual/en/ref.datetime.php&lt;br /&gt;&lt;br /&gt;kolejna ciekawostka zwiazana z nowa sersja (chodz wprawdzie serii 5 niemniej jednak juz od 5.0.x) sa funkcje obliczajace czas wschodu (http://pl2.php.net/manual/en/function.date-sunrise.php) i zachodu slonca (http://pl2.php.net/manual/en/function.date-sunset.php) ktore moga stanowic ciekawe urozmaicenie serwisu informacyjnego.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20788302-113744021059762305?l=michal-przytulski.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michal-przytulski.blogspot.com/feeds/113744021059762305/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20788302&amp;postID=113744021059762305' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/113744021059762305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/113744021059762305'/><link rel='alternate' type='text/html' href='http://michal-przytulski.blogspot.com/2006/01/jak-ten-czas-leci-przez-oceany-gory-i.html' title='jak ten czas leci - przez oceany, gory i rzeki'/><author><name>Michał Przytulski</name><uri>http://www.blogger.com/profile/00123354682821785226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20788302.post-113734274265785032</id><published>2006-01-15T17:27:00.000+01:00</published><updated>2006-01-15T17:32:22.670+01:00</updated><title type='text'>problemow z ActiveRecord ciag dalszy...</title><content type='html'>Nie minelo wiele czasu od mojego ostatniego posta na temat problemow z implementacja ActiveRecord, jak natrafilem na tego posta: http://blog.joshuaeichorn.com/archives/2006/01/09/zactiverecord-cant-work/ - prawde mowiac z wczesniejsza data niz moj, niemniej jednak kolejnosc w jakiej powstaly w mojej swiadomosci jest odwrotna. O ile moge sie przyznac iz po prezentacji ZActiveRecord na witrynie Zend Collaboration Project liczylem ze uda mi sie udoskonalic moja implementacje ActiveRecord na podstawie kodu lub po analizie pracy frameworka zend, jednak jak sie teraz okazalo tworcy ZAR (ZActiveRecord) natrafili na ten sam problem, jak rowniez mozna wywnioskowac z komentarzy do powyzszego posta, w niedlugiej przyszlosci samo PHP rozwiaze ten problem, ktory jest zgloszony juz od dawna jako bug http://bugs.php.net/bug.php?id=30934 jak tez mozna sie przekonac od dosc dawna ta sytuacja ma miejsce, pozostaje tylko liczyc ze to sie zmieni z czasem, a co bedzie dalej czas pokarze...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20788302-113734274265785032?l=michal-przytulski.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michal-przytulski.blogspot.com/feeds/113734274265785032/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20788302&amp;postID=113734274265785032' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/113734274265785032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/113734274265785032'/><link rel='alternate' type='text/html' href='http://michal-przytulski.blogspot.com/2006/01/problemow-z-activerecord-ciag-dalszy.html' title='problemow z ActiveRecord ciag dalszy...'/><author><name>Michał Przytulski</name><uri>http://www.blogger.com/profile/00123354682821785226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20788302.post-113734014613668485</id><published>2006-01-15T16:35:00.000+01:00</published><updated>2006-01-15T16:49:06.150+01:00</updated><title type='text'>Recenzja: php|architect’s Guide to PHP Security</title><content type='html'>Nigdy nie bylem dobry z jezyka polskiego, dlatego tez nie ma co sie spodziewac wspanialej recenzji na temat "php|architect’s Guide to PHP Security" autorstwa Ilia Alshanetsky. Ksiazka ta dostepna jest poprzez internetowa witryne phparchitect.com dostepna jest w wersji PDF jak rowniez papierowej - osobiscie preferuje wydania drukowane niemniej jednak tutaj postanowilem zrobic wyjatek - i jestem z tego w 100% zadowolony - blisko 200 stronnicowe (po odliczeniu index i okladek) wydanie elektorniczne przetrawilem przez weekend. Ksiazka ta z pewnoscia dostarcza caly arsenal informacji jak zabezpieczyc sie przed problemami, porusza tematy zwiazane z bezpieczenstwem chyba kazdego z elementow aplikacji web. Poczatkowo spodziewalem  sie szerokiej publikacji na temat tego dlaczego zle jest uzywanie registry_globals, i dlaczego warto walidowac dane wejsciowe - jednak juz po pierwszych stronach moglem sie przekonac ze ksiazka porusza temat znacznie szerzej. Omuwione zostaly w niej zagadnienia zwiazane z XSS, SQL Injection, Code Injection, Command Injection oraz bezpieczenstwo sessji i kilka innych nie mniej waznych zadagnien zwiazanych z bezpieczenstwem aplikacji web ( i nie tylko ). Kazdy z 10 rozdzialow prezentuje sie w podobny sposob - omowienie problemu, przyklady atakow, oraz omowienie spsobow zabezpieczania sie przed nimi - poczawszy od prostych wbudowanych w php (ktorych wady sa przedstawiane dokladnie - jesli takowe sa) po indywidualne rozwiazania. Ksiazka ta uklada sie w logiczna calosc, a zapoznanie sie z jej zawartoscia moim zdaniem powinno byc obowiazkiem kazdego programisty PHP. Coz wiecej moge na ten temat powiedzie - ksiazka jest bardzo cennym uzupelnieniem mojej dotychczasowej wiedzy i zapewne kazdy znajdzie cos dla siebie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20788302-113734014613668485?l=michal-przytulski.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michal-przytulski.blogspot.com/feeds/113734014613668485/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20788302&amp;postID=113734014613668485' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/113734014613668485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/113734014613668485'/><link rel='alternate' type='text/html' href='http://michal-przytulski.blogspot.com/2006/01/recenzja-phparchitects-guide-to-php.html' title='Recenzja: php|architect’s Guide to PHP Security'/><author><name>Michał Przytulski</name><uri>http://www.blogger.com/profile/00123354682821785226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20788302.post-113717659900868423</id><published>2006-01-13T19:03:00.000+01:00</published><updated>2006-01-13T19:49:20.660+01:00</updated><title type='text'>gdzie jestem, czym jestem...</title><content type='html'>Ostatnio pracowalem nad implementacja jednego z wzrocow zaproponowanych przez Martina Fowler'a a mianowicie mam na mysli ActiveRecord i jego implementacje w PHP, po przeszukaniu okreslonych zasobo internetu przy pomocy wydajnych narzedzi poszukiwania, znalazlem dwie implementacje tego wzorca, niemeniej jednak, nie spelnily moich oczekiwan - co tez zmobilizowalo mnie do napisania wlasnej implementacji. I tutaj pojawil sie problem - jak rodzic ma poznac ktore dziecko go wola - jesli wszystkie maja identyczny glos ??&lt;br /&gt;&lt;br /&gt;Problem wyglada nastepujaco:&lt;br /&gt;Mamy klase:&lt;br /&gt;&lt;br /&gt;&lt; ? php &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;abstract class ActiveRecord {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* czesc implementacji */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static function find(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* zrob cos */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return new SomeObject();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;? &gt;&lt;br /&gt;&lt;br /&gt;i teraz druga klase ktora ma stanowic obiekt ActiveRecord:&lt;br /&gt;&lt;br /&gt;&lt; ? php  class User extends ActiveRecord {  }  ? &gt;&lt;br /&gt;&lt;br /&gt;i teraz pomijajac cale szczegoly zwiazane z implementacja pojawia sie problem, chcialbym zeby ActiveRecord po znalezieniu danych zwracal albo kolekcje obiektow albo obiekt danego typu, czyli typu obiektu dziedziczacego, w tym przypadku obiekty typu User. Po ponownym przeszukaniu manuala i zasobow internetu, okazalo sie ze nie ma bezposredniego sposobu aby klasa ActiveRecord wiedziala jakiego jest typu. Nie mozna pobrac nazwy poprzez funkcje get_class() ktora moze byc wywolana tylko dla obiektow - tu mamy do czynienia z metoda statyczna, kolejna probla wykorzystania __CLASS__ zostala zdyskwalifikowan, bowiem tu mamy do czynienia z klasa w ktorej znajduje sie obecnie parser. Kolejna proba poszukiwania - a wlasciwie ciekawosc doprowadzila do sprawdzenia sciezki wykonywania czyli uzycie funkcji backtrace_debug(),  ktorej ciekawy wynik pokazal mi, ze w rzeczywistosci wywolanie User::find() nie ma nic wspolnego z User wywolanie metody find prowadzi bezposrednio do obiektu ActiveRecord, dlatego tez zrezygnowalem z dalszego poszukiwania rozwiazania tego problemu w sposob bezposredni.&lt;br /&gt;W miedzy czasie nasunelo mi sie rozwiazanie posrednie, ktore wygladalo podobnie do tego:&lt;br /&gt;&lt; ? php  &lt;br /&gt;abstract class ActiveRecord { &lt;br /&gt;&amp;nbsp;&amp;nbsp;/* czesc implementacji */&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static function find($objectType){&lt;br /&gt;&amp;nbsp;&amp;nbsp;/* zrob cos */&lt;br /&gt;&amp;nbsp;&amp;nbsp;return new $objectType();&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;? &gt;&lt;br /&gt;&lt;br /&gt;i do tego klasa implementujaca:&lt;br /&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;class User extends ActiveRecord {&lt;br /&gt;&amp;nbsp;&amp;nbsp;public static function find(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$args = array_marege(array(__CLASS__), func_get_args());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return call_user_func_array(array(parent, 'find'), $args);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;w efekcie czego przekazujemy do klasy ActiveRecord nazwe klasy ktora wywolala zapytanie, efekt poczesci zostal osiagniety niemniej jednak klasa implementujaca wzorzecz zostala zasmiecona niepotrzebna metoda, ktora na dodatek musi byc implementowana w kazdej z klas dziedziczacych po active record, co jest pewna niedogodnoscia. A coz innego rozwiazanie nie odnalazlem, tu jednak PHP pokazalo swoja slabosc w stosunku do Python'a ktory z tym problemem radzi sobie doskonale.&lt;br /&gt;&lt;br /&gt;W ostatecznej postaci biblioteki Active Record (obecnie w wersji 1.5) niedogodnosc ta zostala troche uproszczona poprzez wprowadzenie klasy posrednie UserDescription, ktora to dziedziczy po ActiveRecord, a w nastepnej kolejnosc to User dziedziczy po UserDescription. Obie klasy te generowane sa za pomoca skryptu uruchamianego w powloce systemowej, skrypt ten przyjmuje jako argument nazwe obiektu do utworzenia, nastepnie na podstawie meta danych bazy danych odczytuje dane na temat odwzorowywanej tabeli i zapisuje je do pliku. Dzieki takiem rozwiazaniu kilkoma kliknieciami otrzymuje obiekt ktorym moge kontrolowac cala tabel, a nawet wiecej po zaimplementowaniu zlaczen stalo sie mozliwe dokonywanie transparentnych zlaczen wiele do wielu, a w polaczeniu z patch'owana biblioteka adodb stalo sie mozliwe uzywanie active record niemal z kazda baza danych.&lt;br /&gt;Niestety wciaz pracuje nad ta biblioteka, moze kiedys pojawia sie jej fragmenty. Na koniec dodam jeszcze ze jedna z implementacji tego typu bibliotek jest phpOnTrax - czyli odpowiedni Ruby On Rails dla PHP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20788302-113717659900868423?l=michal-przytulski.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michal-przytulski.blogspot.com/feeds/113717659900868423/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20788302&amp;postID=113717659900868423' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/113717659900868423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/113717659900868423'/><link rel='alternate' type='text/html' href='http://michal-przytulski.blogspot.com/2006/01/gdzie-jestem-czym-jestem.html' title='gdzie jestem, czym jestem...'/><author><name>Michał Przytulski</name><uri>http://www.blogger.com/profile/00123354682821785226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20788302.post-113692056547939375</id><published>2006-01-10T20:14:00.000+01:00</published><updated>2006-01-10T20:21:39.350+01:00</updated><title type='text'>trzy, dwa, jeden... start</title><content type='html'>I zaczeło się - długo się zastanawiałem, i nadal do końca nie jestem przekonany co do sesnownością calej tej sprawy. No i juz mam tego dosc - od teraz pisze tak jak na codzien - bez ogonkow - coz poradze ze blogger + ie + polskie ogonki sprawia ze kazdorazowa proba napisania ś jest równoznaczna ze skrotem klawiatury, uff coz poradze. W takim razie krotkie slowo wstepu, aby bylo krotkie powinno sie juz konczyc. Na koniec moze jeszcze informacja co tu bedzie i jak czesto sie to bedzie zmienialo. Tak wiec bedzie tu wszystko i zarazem nic na tematy zwiazane z szeroko pojetym programowaniem dla internetu i zmaganiach z jakimi sie spotykam na codzien. Jak czesto - bedzie sie zmieniac - wszystko zalezy od mojej desperacji - mam nadzieje ze przynajmniej raz w tygodniu cos sie pojawi, a jak bedzie w rzeczywistosci czas pokarze.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20788302-113692056547939375?l=michal-przytulski.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://michal-przytulski.blogspot.com/feeds/113692056547939375/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20788302&amp;postID=113692056547939375' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/113692056547939375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20788302/posts/default/113692056547939375'/><link rel='alternate' type='text/html' href='http://michal-przytulski.blogspot.com/2006/01/trzy-dwa-jeden-start.html' title='trzy, dwa, jeden... start'/><author><name>Michał Przytulski</name><uri>http://www.blogger.com/profile/00123354682821785226</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
