<?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>Splatch's devblog &#187; 7 grzechów</title>
	<atom:link href="http://blog.dywicki.pl/category/php/7-grzechow/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.dywicki.pl</link>
	<description>Pragmatyzm kontrolowany</description>
	<lastBuildDate>Fri, 05 Jun 2009 14:30:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>7 grzechów głównych PHP, XML</title>
		<link>http://blog.dywicki.pl/2006/07/18/7-grzechow-glownych-php-xml/</link>
		<comments>http://blog.dywicki.pl/2006/07/18/7-grzechow-glownych-php-xml/#comments</comments>
		<pubDate>Mon, 17 Jul 2006 22:21:10 +0000</pubDate>
		<dc:creator>Łukasz Dywicki</dc:creator>
				<category><![CDATA[7 grzechów]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wiadomości]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://blog.dywicki.pl/2006/07/18/7-grzechow-glownych-php-xml/</guid>
		<description><![CDATA[Na początku odpowiedź na post, który napisał Zyx. 
Aktualnie każdy, kto chce napisać nowe rozszerzenie do PHP, musi tylko znać język C, znać cel swej pracy oraz przeczytać rozdział 46 dokumentacji PHP zatytułowany &#8220;Zend API: Hacking the Core of PHP&#8221; i poświęcony właśnie tworzeniu modułów.
Zend API to nie wszystko. Moduły kompilowane nie są wyjściem super-uniwersalnym. [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Na początku odpowiedź na post, który napisał <a href="http://www.zyxist.com/pokaz.php/7_grzechow_php_komentarz">Zyx</a>. </strong></p>
<p><em>Aktualnie każdy, kto chce napisać nowe rozszerzenie do <acronym title="Pre-Hypertext Processing">PHP</acronym>, musi tylko znać język C, znać cel swej pracy oraz przeczytać rozdział 46 dokumentacji <acronym title="Pre-Hypertext Processing">PHP</acronym> zatytułowany &#8220;Zend API: Hacking the Core of <acronym title="Pre-Hypertext Processing">PHP</acronym>&#8221; i poświęcony właśnie tworzeniu modułów.</em></p>
<p>Zend <acronym title="Application Programming Interface">API</acronym> to nie wszystko. Moduły kompilowane nie są wyjściem super-uniwersalnym. Na co drugim serwerze nie ma opcji by dorzucić własne rozszerzenie. Wiele modułów z PECLa leży tam od lat, są one praktycznie nie rozwijane, także ich ilość niewiele może poświadczyć.</p>
<p><em>Projekt ten nie miał nigdy poprawiać po egoistycznie nastawionych twórcach baz danych oraz ich kreatywnym podejściu do implementacji standardu ANSI <acronym title="Structured Query Language">SQL</acronym>, ale na plus należy zaznaczyć, że niektóre braki bibliotek klienckich są emulowane (np. podpinanie). </em></p>
<p>Nikt nie mówi, że PDO miałoby to poprawiać. Spójrz na JDBC, producenci baz samodzielnie dostarczają sterowników do połączeń i dbają o to by były zgodne z własną bazą oraz kolejnymi standardami w JDBC.</p>
<p><em>Ale głupotą byłoby negowanie go tylko dlatego, że w kwestiach wielkoskalowych ma braki, a Zend ostatnio stosuje dziwne podejście w kwestii doboru priorytetów i debugowania swego sztandarowego projektu.</em></p>
<p>Diabeł tkwi w szczegółach. Brak stosownych narzędzi i rozwiniętych rozwiązań technologicznych jest sporym problemem, który znacznie utrudnia tworzenie aplikacji.</p>
<p><strong><acronym title="eXtensible Markup Language">XML</acronym> i SAX</strong><br />
SAX jest świetnym standardem. Niestety, ustawianie gromady opcji dla parsera to jakaś porażka. Do tego domyślne zmienianie nazw tagów na wielkie litery.. jak by ktoś z tego korzystał.<br />
SAX mógłby być świetnym rozwiązaniem, gdyby istniała klasa domyślnego parsera, która wymuszałaby implementacje tylko 2 metod &#8211; startElement i endElement. Niestety, jesteśmy skazani na to co, jest w PEAR, czyli kod pisany pod <acronym title="Pre-Hypertext Processing">PHP</acronym> 4.<br />
Poza tym problem z SAXem w <acronym title="Pre-Hypertext Processing">PHP</acronym> jest taki, że jeśli ktoś chce korzystać z przestrzeni nazw w dokumencie, którego używa ma niewielkie szanse na to, że cokolwiek uda mu się ugrać, ponieważ parser nie przekazuje do handlera informacji o tym do jakiej przestrzeni nazw należy tag. <span lang="EN-US">Dla przykładu w Javie metoda startElement wygląda w następujący sposób:</span></p>
<p>void startElement(string uri, string localname, string qname, attributes atts)<br />
a w <acronym title="Pre-Hypertext Processing">PHP</acronym><br />
void startElementImpl(resource parser, string localname, array atts)<br />
czyli zupełnie tak samo jak by tych przestrzeni nie było. Jedyny sposób to wyciąganie prefiksu w nazwie (bo otrzymujemy np foo:bar) i sprawdzanie względem wcześniej zdefiniowanych poprzez xmlns.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></p>
<p><strong><acronym title="Document Object Model">DOM</acronym></strong><br />
Za implementację <acronym title="Document Object Model">DOM</acronym> Panom z Zenda należą się gratulacje, przede wszystkim dlatego, że w końcu jest to moduł doprowadzony do standardu, zgodnie z zaleceniami <acronym title="World Wide Web Consortium">W3C</acronym>. Nie będę już narzekał, że jest to <acronym title="Document Object Model">DOM</acronym> Level 2 a nie 3 co by nie było, że się za wiele czepiam ;). Świetnie, że <acronym title="Document Object Model">DOM</acronym> jest częścią Core <acronym title="Pre-Hypertext Processing">PHP</acronym>. Nie ma problemów z tym, czy <acronym title="Document Object Model">DOM</acronym> jest czy nie.</p>
<p>Testując <acronym title="Document Object Model">DOM</acronym> przed napisaniem tej noty trafiłem na błąd w obsłudze encji. Działają one w atrybutach ale nie w treści. Sprawa wygląda w ten sposób, że encje predefiniowane takie jak &quote; są widoczne, zatem gdzie są moje? Uciekły bo się przestraszyły tagów.</p>
<p><strong>SimpleXML</strong><br />
SimpleXML jest bramką pomiędzy <acronym title="Document Object Model">DOM</acronym> a SAX. Oferuje mniejszą funkcjonalność niż <acronym title="Document Object Model">DOM</acronym>, ale wymaga o wiele mniej pracy niż SAX. Po prostu, wczytujesz plik i działa. Niestety, nie jest tak różowo. W nim również znalazłem niedoróbkę. Nie jestem pewien czy nie została ona załatana, problem polegał na gubieniu atrybutu przy kolekcji. Denerwuje mnie również to, że nikną mi informacje o przestrzeni nazw. Jeśli przeglądam dokument iteracyjnie tracę informację o tym z jakiej przestrzeni jest element.</p>
<p><strong><acronym title="eXtensible Stylesheet Language Transformations">XSLT</acronym></strong><br />
Zbyt małe możliwości połączenia <acronym title="Pre-Hypertext Processing">PHP</acronym> i samego procesu transformacji. Do <acronym title="eXtensible Stylesheet Language Transformations">XSLT</acronym> można przekazać tylko ciągi, zatem nie ma mowy o tym by wrzucić tablicę i na jej podstawie wykonać jakąś iterację. Niestety, nie te czasy. Plusem jest to, że można tworzyć funkcje do których parser potrafi się odwołać.. niestety są to albo funkcje albo statyczne odwołania do klas.</p>
<p><strong><acronym title="eXtensible Stylesheet Language">XSL</acronym>-FO</strong><br />
<acronym title="eXtensible Stylesheet Language">XSL</acronym>-FO to standard, który umożliwia przekształcenie dowolnego dokumentu <acronym title="eXtensible Markup Language">XML</acronym> do postaci binarnej takiej jak <acronym title="Portable Document Format">PDF</acronym>. Niestety w <acronym title="Pre-Hypertext Processing">PHP</acronym> nie doczekaliśmy się jeszcze żadnej implementacji tego standardu, poza jedną klasą w PEAR, która usiłuje wykonać transformację przy użyciu Javy.</p>
<p><strong>XSD</strong><br />
Z XSD w <acronym title="Pre-Hypertext Processing">PHP</acronym> jest zasadniczy problem. Nie istnieje. Można sprawdzić czy dokument jest zgodny ze schematem korzystając chociażby z DOMa, niestety nie ma żadnych narzędzi, które umożliwiają tworzenie klas ze schematu. Skala problemu znacznie się powiększa w chwili gdy korzystamy z <acronym title="Web Services Description Language">WSDL</acronym>, które pośrednio korzysta z XSD. Nie ma opcji, żeby stworzyć jakikolwiek typ złożony w <acronym title="Pre-Hypertext Processing">PHP</acronym> bez własnego kodu.</p>
<p>Rozbudowa o przykłady, być może wkrótce.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.dywicki.pl/2006/07/18/7-grzechow-glownych-php-xml/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>7 grzechów głównych PHP, inwokacja.</title>
		<link>http://blog.dywicki.pl/2006/07/15/7-grzechow-glownych-php-inwokacja/</link>
		<comments>http://blog.dywicki.pl/2006/07/15/7-grzechow-glownych-php-inwokacja/#comments</comments>
		<pubDate>Sat, 15 Jul 2006 18:37:49 +0000</pubDate>
		<dc:creator>Łukasz Dywicki</dc:creator>
				<category><![CDATA[7 grzechów]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP6]]></category>
		<category><![CDATA[Wiadomości]]></category>

		<guid isPermaLink="false">http://blog.dywicki.pl/2006/07/15/7-grzechow-glownych-php-inwokacja/</guid>
		<description><![CDATA[Postami w tej kategorii chcę pokazać jak dalekie PHP jest od ideału. Mam nadzieję, że większość z tego co piszę kiedyś zostanie poprawiona, nie mniej póki co, są to grzechy ciężkie, które pokazują słabości PHP.
Zend
Zend jest firmą, która bez wątpienia ma największy wpływ na PHP. To Zend tworzy najważniejszy element PHP jakim jest Zend Engine.
To [...]]]></description>
			<content:encoded><![CDATA[<p>Postami w tej kategorii chcę pokazać jak dalekie <acronym title="Pre-Hypertext Processing">PHP</acronym> jest od ideału. Mam nadzieję, że większość z tego co piszę kiedyś zostanie poprawiona, nie mniej póki co, są to grzechy ciężkie, które pokazują słabości <acronym title="Pre-Hypertext Processing">PHP</acronym>.</p>
<h3>Zend</h3>
<p>Zend jest firmą, która bez wątpienia ma największy wpływ na <acronym title="Pre-Hypertext Processing">PHP</acronym>. To Zend tworzy najważniejszy element <acronym title="Pre-Hypertext Processing">PHP</acronym> jakim jest Zend Engine.</p>
<p>To co mam do zarzucenia Zendowi to nieumiejętność wykorzystania swojej pozycji. Nie potrafi on wykorzystać swojej pozycji by ugrać coś na rzecz <acronym title="Pre-Hypertext Processing">PHP</acronym>. Być może dlatego, że jako firma jest zbyt mały by cokolwiek znaczyć. Od jakiegoś czasu Zend powoli produkuje papkę marketingową, którą wciska, że <acronym title="Pre-Hypertext Processing">PHP</acronym> jest enterprise podczas gdy samemu <acronym title="Pre-Hypertext Processing">PHP</acronym> jest do tego bardzo daleko. To, że został zmieniony silnik obsługujący obiekty, upodobniono składnię do Javy, wydano nową (piątą) wersję <acronym title="Pre-Hypertext Processing">PHP</acronym> nie czyni go enterprise.</p>
<p>Kiedy <acronym title="Pre-Hypertext Processing">PHP</acronym> stanie się językiem Enterprise? Kiedy dostarczy stosownych narzędzi i technologii. Niestety w chwili obecnej nie ma ani jednego ani drugiego. <acronym title="Pre-Hypertext Processing">PHP</acronym> jest wciąż językiem, który ma do tego aspiracje, ale nie ma możliwości (zupełnie tak jak Zend). Mam nadzieję, że z biegiem czasu i not z tej kategorii będę to udowadniał.</p>
<p>Z czym się do tej pory kojarzy <acronym title="Pre-Hypertext Processing">PHP</acronym>? Ze &#8220;stronkami&#8221; produkowanymi przez gimnazjalistów i licealistów. Nie odbiega to od faktów. Pytanie, dlaczego Zend zmierza w kierunku większych klientów? Odpowiedź jest oczywista, większe pieniądze. Tylko, za przeproszeniem, z czym do ludu?!</p>
<p><strong><acronym title="Application Programming Interface">API</acronym>, Technologie</strong></p>
<p>Brak jakiegokolwiek <acronym title="Application Programming Interface">API</acronym> dla rozszerzeń. Parsery <acronym title="eXtensible Markup Language">XML</acronym> to nie tylko SAX, nie tylko <acronym title="Document Object Model">DOM</acronym>. Jeśli ktoś chce zaimplementować cały standard samodzielnie czy też go rozszerzać (choćby w samym <acronym title="Pre-Hypertext Processing">PHP</acronym>!) powinna być taka możliwość, niestety do tej pory jej nie ma i prawdopodobnie nie będzie, ponieważ <acronym title="Pre-Hypertext Processing">PHP</acronym> nie jest porządnie zaprojektowane.<br />
Inną sprawą jest to, że nikt się tym nie zajmował i nie zajmuje. Błędne koło się zamyka, nikt nie myśli nad nowymi, porządnymi rozwiązaniami oraz technologiami opartymi o ten język, ponieważ <acronym title="Pre-Hypertext Processing">PHP</acronym> nie jest gotowe na taki krok. Wystarczy spojrzeć na <a href="http://jcp.org">Javę</a>&#8230; Dla przykładu podam platformę J2EE. Sun publikuje pełną specyfikację i dostarcza przy okazji własny serwer, który w pełni tą specyfikację obsługuje. Nie przeszkadza to by równocześnie na rynku były obecne inne podmioty takie jak JBoss, BEA Web Logic i podstawa wszystkiego &#8211; Apache Foundation z Tomcat`em.</p>
<p><strong>Społeczność i Zend Framework</strong></p>
<p>Jak wiadomo społeczność <acronym title="Pre-Hypertext Processing">PHP</acronym> nie jest mała. Względem innych języków można powiedzieć, że jest ogromna. Nie mniej problemem społeczności jest jej podział i brak konsolidacji. Zend nie sprzyja tworzeniu społeczności wokół <acronym title="Pre-Hypertext Processing">PHP</acronym>. Przykładem może być Sun (który stoi na podobnej pozycji z Javą). Czym najłatwiej zgromadzić społeczność wokół własnej platformy? Oczywiście &#8211; projektami. Im więcej projektów tym więcej zaangażowanych ludzi i osób oraz firm nimi zainteresowanych. Tymczasem, co robi Zend? Prze ślepo w jednym kierunku, mianowicie w stronę własnego Frameworka, który od ideału jest daleki.</p>
<p>Jeden framework nie zdobędzie serc wszystkich programistów tym bardziej, że w <acronym title="Pre-Hypertext Processing">PHP</acronym> korzystanie z gotowych rozwiązań do w dalszym ciągu rzadkość. Zamiast wspierać chociażby konkurencyjne rozwiązania Zend nie robi nic, nawet nie kiwa palcem by przyciągnąć do siebie projekty. Przykładem może być Cake <acronym title="Pre-Hypertext Processing">PHP</acronym>, wokół którego zgromadziła się pokaźna grupka osób oraz Prado, które jest rozwiązaniem zgoła innym, działającym na zupełnie innych zasadach. Czyżby Zend nie wiedział, że w mnogości tkwi siła? Najwyraźniej tak, nie wspierając społeczności <acronym title="Pre-Hypertext Processing">PHP</acronym> wiele traci. To działa w obie strony, tak samo jak Zend może liczyć na takie samo wsparcie społeczności jako ono na jego.<br />
<strong>PDO</strong></p>
<p>PDO jest rozwiązaniem zdecydowanie spóźnionym i niedostatecznym jeśli myślimy o poważnych zastosowaniach. Podczas, gdy na rynku rozwijały się rozwiązania takie jak AdoDB i jego klony Zend nic nie robił w celu zatrzymania tego procesu. Doszło do sytuacji, kiedy <acronym title="Pre-Hypertext Processing">PHP</acronym> obsługuje wiele baz ale przez skrajnie różne rozszerzenia i funkcje. Jeszcze do niedawna było poprawiane rozszerzenie do obsługi PostgreSQL, by przypominało chociaż pozostałe. Do niedawna korzystanie chociażby z dwóch różnych baz danych wymuszało korzystanie z paskudnie napisanego AdoDB bądź implementowania tego samodzielnie.</p>
<p>PDO miało to zmienić, ale niestety nie do końca. PHP5 nie jest jeszcze zainstalowane na wielu serwerach, nie wspominając <acronym title="Pre-Hypertext Processing">PHP</acronym> 5.1 od którego PDO zostało wprowadzone. Wcześniejsze rozwiązania bazujące na &#8220;tradycyjnych&#8221; implementacjach używających funkcji natywnych nie mogą przeskoczyć nagle na PDO a nie mówiąc już o brakach w PDO.<br />
Nie obsługuje ono wszystkich baz jakie do tej pory obsługiwało <acronym title="Pre-Hypertext Processing">PHP</acronym> oraz nie uwalnia definitywnie od różnic pomiędzy bazami. Pod tym względem PDO może przebić chociażby Creole nie mówiąc już o AdoDB, które obsługuje praktycznie wszystkie bazy, jakie do tej pory w <acronym title="Pre-Hypertext Processing">PHP</acronym> się pojawiły.</p>
<h3>PHP6</h3>
<p>Zbyt małe zmiany. Tak jak pisałem wcześniej, to jest powolna ewolucja, podczas gdy <acronym title="Pre-Hypertext Processing">PHP</acronym> jest potrzebna przemiana. Jeśli <acronym title="Pre-Hypertext Processing">PHP</acronym> ma z brzydkiego kaczątka kiedykolwiek stać się łabędziem to w tym tempie jeszcze lata ciężkiej i rzemieślniczej pracy przed nami, tym bardziej, że jesteśmy jeszcze w jajku, z którego się nie wykluliśmy.</p>
<p>Czy dodanie przestrzeni nazw diametralnie zmieni <acronym title="Pre-Hypertext Processing">PHP</acronym>? Zmieni zapewne ale nie na tyle by instytucje takie jak banki zainwestowały w <acronym title="Pre-Hypertext Processing">PHP</acronym>, bo jak wcześniej pisałem, nie jest to powód sam z siebie. <span style="font-weight: bold">Muszą się pojawić narzędzia, które wspomagają, uproszczają, porządkują</span> prace nad bardzo dużymi aplikacjami. Ciągłe luki, niedoróbki, wydania, które są jednodniowe z racji krytycznych błędów bezpieczeństwa. To wszystko nie sprzyja budowaniu pozytywnego wizerunku samego <acronym title="Pre-Hypertext Processing">PHP</acronym>.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.dywicki.pl/2006/07/15/7-grzechow-glownych-php-inwokacja/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
	</channel>
</rss>
