<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>KIELMAS.COM Kielmas Jarosław</title>
	
	<link>http://www.kielmas.com</link>
	<description>Blog głównie o programowaniu</description>
	<lastBuildDate>Tue, 17 Aug 2010 14:01:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/JarekKielmas" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="jarekkielmas" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>QuickStart Zend Framework’a po polsku</title>
		<link>http://www.kielmas.com/2010/08/17/quickstart-zend-frameworka-po-polsku/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=quickstart-zend-frameworka-po-polsku</link>
		<comments>http://www.kielmas.com/2010/08/17/quickstart-zend-frameworka-po-polsku/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 14:01:13 +0000</pubDate>
		<dc:creator>jarek</dc:creator>
				<category><![CDATA[Ciekawostki]]></category>
		<category><![CDATA[Ogólne]]></category>
		<category><![CDATA[PHP, Narzędzia, Frameworki]]></category>
		<category><![CDATA[Technologie IT]]></category>
		<category><![CDATA[WWW]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[nowy projekt]]></category>
		<category><![CDATA[polski]]></category>
		<category><![CDATA[projekt]]></category>
		<category><![CDATA[quickstart]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://www.kielmas.com/?p=389</guid>
		<description><![CDATA[Dla ludzi, którzy mają problem z wygenerowaniem sobie najnowszej dokumentacji Zend Framework w polskim języku udostępniam  quickstart, pochodzący z   wersji 2.0.0dev1. Oprócz tego dla pozostałych, pracujących na *nix (dla Windows wymagany jest CYGWIN), króciutki opis jak wygenerować sobie pełną  dokumentację ( oczywiście nie wszystko jest przetłumaczone). Wcześniej zainstaluj sobie następujące biblioteki: autoconf make xsltproc xmllint [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.kielmas.com/wp-content/uploads/2010/04/logo-zend-framework.jpg"><img class="alignleft size-thumbnail wp-image-142" title="logo-zend-framework" src="http://www.kielmas.com/wp-content/uploads/2010/04/logo-zend-framework-150x150.jpg" alt="" width="94" height="94" /></a>Dla ludzi, którzy mają problem z wygenerowaniem sobie najnowszej dokumentacji Zend Framework w polskim języku udostępniam  quickstart, pochodzący z   wersji 2.0.0dev1.</p>
<p>Oprócz tego dla pozostałych, pracujących na *nix (dla Windows wymagany jest <a href="http://www.cygwin.com/" target="_self">CYGWIN</a>), króciutki opis jak wygenerować sobie pełną  dokumentację ( oczywiście nie wszystko jest przetłumaczone).</p>
<p>Wcześniej zainstaluj sobie następujące biblioteki:</p>
<ul>
<li>autoconf</li>
<li>make</li>
<li>xsltproc</li>
<li>xmllint</li>
</ul>
<p>Następnie:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ git clone git:<span style="color: #000000; font-weight: bold;">//</span>git.zendframework.com<span style="color: #000000; font-weight: bold;">/</span>zf.git
$ <span style="color: #7a0874; font-weight: bold;">cd</span> ZendFramework-2.0.0dev1<span style="color: #000000; font-weight: bold;">/</span>documentation<span style="color: #000000; font-weight: bold;">/</span>manual<span style="color: #000000; font-weight: bold;">/</span>pl
$ <span style="color: #c20cb9; font-weight: bold;">autoconf</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>zostanie wygenerowany .<span style="color: #000000; font-weight: bold;">/</span>configure<span style="color: #7a0874; font-weight: bold;">&#41;</span>
$ .<span style="color: #000000; font-weight: bold;">/</span>configure
$ <span style="color: #c20cb9; font-weight: bold;">make</span></pre></div></div>

<p>Czekamy chwilkę, w między czasie powstaje sobie _temp_manual.xml, który potem zostanie pokrojony na odpowiednie dokumenty html w katalogu html/</p>
<p>Poniżej dokumentacja w postaci html do ściągnięcia</p>
<ul>
<li><a href="http://www.kielmas.com/wp-content/uploads/2010/08/html.tar.gz">ZF-QuickStartPL</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.kielmas.com/2010/08/17/quickstart-zend-frameworka-po-polsku/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework 2.0 – pierwszy milestone już zamknięty</title>
		<link>http://www.kielmas.com/2010/08/10/zend-framework-2-0-pierwszy-milestone-juz-zamkniety/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=zend-framework-2-0-pierwszy-milestone-juz-zamkniety</link>
		<comments>http://www.kielmas.com/2010/08/10/zend-framework-2-0-pierwszy-milestone-juz-zamkniety/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 11:35:25 +0000</pubDate>
		<dc:creator>jarek</dc:creator>
				<category><![CDATA[Ciekawostki]]></category>
		<category><![CDATA[PHP, Narzędzia, Frameworki]]></category>
		<category><![CDATA[Sieci]]></category>
		<category><![CDATA[Technologie IT]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[namespace]]></category>
		<category><![CDATA[php5]]></category>
		<category><![CDATA[ZF2.0]]></category>
		<category><![CDATA[ZF2.0.0dev1]]></category>

		<guid isPermaLink="false">http://www.kielmas.com/?p=379</guid>
		<description><![CDATA[Od czterech dni dostępna  jest  wersja 2.0.0dev1 tego znakomitego frameworka dla PHP5. W ramach pierwszego   milestone&#8217;a ekipa Zend Frameworka bardzo się napracowała. Rewolucja, przez którą nastapiła  zmiana  z &#8222;1&#8243; na &#8222;2&#8243; w numerze wersji już dla tego wydania, polega przede wszystkim na: usunięciu (niby) wszystkich &#8222;reqiure_once&#8221; z komponentów ZF (uzywamy autoloader), wprowadzenie namespace, poprawa mechanizmu [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.kielmas.com/wp-content/uploads/2010/04/logo-zend-framework.jpg"><img class="alignleft size-thumbnail wp-image-142" title="logo-zend-framework" src="http://www.kielmas.com/wp-content/uploads/2010/04/logo-zend-framework-150x150.jpg" alt="" width="97" height="97" /></a></p>
<p>Od czterech dni dostępna  jest  wersja <a href="http://devzone.zend.com/article/12385-First-Development-Milestone-of-ZF-2.0-Released" target="_self">2.0.0dev1</a> tego znakomitego frameworka dla PHP5. W ramach pierwszego   milestone&#8217;a ekipa Zend Frameworka bardzo się napracowała.</p>
<p>Rewolucja, przez którą nastapiła  zmiana  z &#8222;1&#8243; na &#8222;2&#8243; w numerze wersji już dla tego wydania, polega przede wszystkim na:</p>
<ul>
<li><strong>usunięciu (niby) wszystkich &#8222;reqiure_once&#8221; z komponentów ZF (uzywamy autoloader),</strong></li>
<li><strong>wprowadzenie namespace,</strong></li>
<li><strong>poprawa mechanizmu testów jednostkowych,</strong></li>
<li><strong>przepisanie od zera komponentu Zend/Session (w ramach ticketu powstał nowy nowy komponent Zend/SignalSlot,</strong></li>
<li><strong>wprowadzenie nowej przestrzeni nazw Zend/Stdlib,</strong></li>
</ul>
<p>Wydanie tak naprawdę pokazuje jedynie tyle, że ekipa rozwijająca Zend Framework nie próżnuje i można je traktować  jako możliwość zapoznania się z zaawansowaniem prac, <strong>nie jest to ukończony framework  &#8211; stawianie aplikacji na tym wydaniu, jak oznajmił zespół, jest na własne ryzyko.</strong></p>
<p><a href="http://framework.zend.com/wiki/display/ZFDEV2/Zend+Framework+2.0+Milestones" target="_self">Roadmap</a> ZF z gałęzi 2.0 jest jeszcze daleki do ukończenia.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kielmas.com/2010/08/10/zend-framework-2-0-pierwszy-milestone-juz-zamkniety/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentrumFaktur.pl w lato nie próżnuje – nowa wersja aplikacji</title>
		<link>http://www.kielmas.com/2010/08/04/centrumfaktur-w-lato-nie-proznuje-nowa-wersja-aplikacji/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=centrumfaktur-w-lato-nie-proznuje-nowa-wersja-aplikacji</link>
		<comments>http://www.kielmas.com/2010/08/04/centrumfaktur-w-lato-nie-proznuje-nowa-wersja-aplikacji/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 20:07:39 +0000</pubDate>
		<dc:creator>jarek</dc:creator>
				<category><![CDATA[Ciekawostki]]></category>
		<category><![CDATA[Ogólne]]></category>
		<category><![CDATA[centrumfaktur.pl]]></category>
		<category><![CDATA[aktualizacja]]></category>
		<category><![CDATA[faktury]]></category>
		<category><![CDATA[letnia wersja]]></category>
		<category><![CDATA[nowa werjsa]]></category>

		<guid isPermaLink="false">http://www.kielmas.com/?p=373</guid>
		<description><![CDATA[Miłą niespodziankę, w postaci nowych opcji,  dla swoich klientów  przygotował serwis centrumfaktur.pl,  o którym pisałem tutaj.  W ramach kolejnej wersji oficjalnej pojawiły się bardzo ciekawe możliwości. Między innymi: Mini-CRM (Od teraz wystarczy, że klient odpowie na e-mail z propozycją oferty, a jego wiadomość automatycznie pojawi się w historii oferty) Zaliczaj ile chcesz (ułatwia operacje na [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.kielmas.com/wp-content/uploads/2010/05/header-splash-logo.png"><img class="alignleft" title="header-splash-logo" src="http://www.kielmas.com/wp-content/uploads/2010/05/header-splash-logo-150x33.png" alt="" width="150" height="33" /></a>Miłą niespodziankę, w postaci nowych opcji,  dla swoich klientów  przygotował serwis <a href="http://centrumfaktur.pl" target="_self">centrumfaktur.pl</a>,  o którym pisałem <a href="http://www.kielmas.com/2010/05/25/centrum-faktur-idealne-narzedzie-dla-malych-srednich-i-duzych-firm/" target="_self">tutaj</a>.  W ramach kolejnej wersji oficjalnej pojawiły się bardzo ciekawe możliwości. Między innymi:</p>
<ul>
<li><strong>Mini-CRM</strong> (Od teraz wystarczy, że klient odpowie na e-mail z propozycją oferty, a jego wiadomość automatycznie pojawi się w historii oferty)</li>
<li><strong>Zaliczaj ile chcesz</strong> (ułatwia operacje na zaliczkach)</li>
<li><strong>Cholibcia, machnąłem się</strong> (wystawianie kortekt)</li>
<li><strong>Brak brakowi nierówny</strong> (rozróżnienie stawek VAT)</li>
<li><strong>Ulepszony interfejs</strong> (nowy wygląd oraz bardziej intuicyjny interfejs)</li>
</ul>
<p>Zachęcam do korzystania z tego systemu.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kielmas.com/2010/08/04/centrumfaktur-w-lato-nie-proznuje-nowa-wersja-aplikacji/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sprawa Krzyża, tvp1 vs. tvn</title>
		<link>http://www.kielmas.com/2010/08/04/sprawa-krzyza-tvp1-vs-tvn/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=sprawa-krzyza-tvp1-vs-tvn</link>
		<comments>http://www.kielmas.com/2010/08/04/sprawa-krzyza-tvp1-vs-tvn/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 08:10:33 +0000</pubDate>
		<dc:creator>jarek</dc:creator>
				<category><![CDATA[Ciekawostki]]></category>
		<category><![CDATA[Ogólne]]></category>
		<category><![CDATA[Polityka]]></category>
		<category><![CDATA[Z życia wzięte]]></category>
		<category><![CDATA[demokracja]]></category>
		<category><![CDATA[kościół Św. Anny w warszawie]]></category>
		<category><![CDATA[krzyż]]></category>
		<category><![CDATA[Lech Kaczyński]]></category>
		<category><![CDATA[ludzie]]></category>
		<category><![CDATA[obywatele]]></category>
		<category><![CDATA[pałac]]></category>
		<category><![CDATA[PO]]></category>
		<category><![CDATA[spisek]]></category>
		<category><![CDATA[wolność]]></category>
		<category><![CDATA[wymazać z pamięci]]></category>

		<guid isPermaLink="false">http://www.kielmas.com/?p=358</guid>
		<description><![CDATA[Wczoraj sprawa przeniesienia Krzyża sprzed Pałacu Prezydenckiego do warszawskiego kościoła św. Anny, zaciekawiła  mnie na tyle, że obejrzałem i Fakty na TVN i Wiadomości w TVP1. W moich oczach oba reportaże różniły się między sobą. Na TVN reportaż w ogólności trwał krócej i skupił się przede wszystkim na sensacji. Po tym reportażu nie mogłem zrozumieć [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.kielmas.com/wp-content/uploads/2010/08/tvn-logo-e1280904975144.png"><img class="alignleft size-thumbnail wp-image-359" title="tvn-logo" src="http://www.kielmas.com/wp-content/uploads/2010/08/tvn-logo-150x150.png" alt="" width="150" height="150" /></a>Wczoraj sprawa przeniesienia Krzyża sprzed Pałacu Prezydenckiego do warszawskiego kościoła św. Anny, zaciekawiła  mnie na tyle, że obejrzałem i <strong>Fakty</strong> na <a href="http://www.tvn.pl/" target="_blank">TVN</a> i <strong>Wiadomości</strong> w <a href="http://www.tvp.pl/" target="_blank">TVP1</a>.</p>
<p>W moich oczach oba reportaże różniły się między sobą.</p>
<p>Na TVN reportaż w ogólności trwał krócej i skupił się przede wszystkim na sensacji. Po tym reportażu nie mogłem zrozumieć obu stanowisk ludzi, jedyne co widziałem to dwie strony, które wrzeszczały na siebie z nienawiścią.  Widziałem straż wiejską, napuszczona przez panią prezydent Warszawy <a href="http://bip.warszawa.pl/Menu_podmiotowe/Prezydent/Hanna_Gronkiewicz_Waltz.htm">Hanna Gronkiewicz-Waltz</a> (jak pani nie wstyd? Straż wiejską na ludzi napuszczać), kilku księży, no i oczywiście tłum ludzi, kórzy Krzyża bronili. <strong>Podsumowując:  jedno wielkie zamieszanie,  bardzo szybko przedstawione przez TVN, tak aby widz przed telewizorem zapomniał o tym jak najszybciej, a ci broniący Krzyż to banda staruchów, którym się pomieszało w głowie. Po tym reportażu o całej tej sprawie pewnie zapomniałbym następnego dnia.<br />
</strong></p>
<p><strong>Na TVP1 jednak sprawa wyglądała zupełnie inaczej</strong>. Nie dość, że reportaż aż się roił od wywiadów z przechodniami, głównie  o tym co sądzą (jeden przypadł mi do gustu, gdy <strong>Pan z Ukrainy</strong>, zapytany, o to, co on sądzi na ten temat, odpowiedział, że bardzo mu się to podoba, że ludzie w tym kraju mogą pokazywać w taki sposób swoje niezadowolenie, że publicznie mogą się nie zgodzić z tym co Rząd zadecydował &#8211; właśnie o to w tym chodzi &#8211; to jest państwo demokratyczne, <strong>to ludzie, obywatele tego państwa, decydują co i jak ma być w tym państwie,</strong> a nie jakiś urzędas wysoko na stołku, który w dodatku sepleni jak kaczka i kłamie prosto w oczy, mowa o premierze  <a href="http://pl.wikipedia.org/wiki/Donald_Tusk" target="_self">Tusku</a> ). Spodobała mi się bardzo retrospekcja do dni żałoby narodowej,  gdy zobaczyłem ile ludzi stało przed pałacem, ile ludzi płakało. <strong>Bardzo się ucieszyłem, że ta stacja przypomniała co się stało, przypomniała o bezwątpienia strasznej dla naszego kraju tragedii narodowej.</strong></p>
<p><strong>Podsumowując: jedne wielkie zamieszanie, wzbogacone o liczne wywiady z przechodniami oraz o wspaniałą retrospekcję i w tym przypadku ludzie broniący Krzyż byli tak jakby bohaterami w świetle telewizji &#8211; będzie mi to siedziało w głowie przez kilka dni i poruszę rozmowe na ten temat nie z jedną osobą, czy to pracy czy w gronie rodzinnym.</strong></p>
<p>Nie jestem zwolennikiem teorii spiskowych, jednak to co się dzieje nie daje mi spokoju i w mojej głowie powoli coś zaczyna świtać. <strong>Dlaczego PO chce, aby ten krzyż tak szybko zniknął sprzed pałacu?</strong> Prawdopodobnie dlatego, zeby ludzie zapomnieli o tym co się stało w <strong>Smoleńsku, </strong>zapomnieli o <strong>tragedii narodowej</strong>. Mi osobiście ten Krzyż nie przeszkada. Jestem katolikiem, znam symbolikę Krzyża Świętego i w domu u mnie na ścianie także wisi.</p>
<p>Nie rozumiem tej całej sensacji. Przecież już raz zabrano nam krzyż, zniknął on z urzędów, ze szkół starano się go wymazać z historii Polski. <strong>Jednak nikt nie jest w stanie tego zrobić.</strong> Za Krzyż do tej pory zginęło mnóstwo ludzi, a i teraz w Polsce podejrzewam, że znajdzie się wielu gotowych oddać życie za niego.</p>
<p><strong>Teraz zabiorą krzyż, a później co ? Może znów koronę orłowi ?</strong></p>
<p><strong>Nie rozumiem w czym i  komu ten Krzyż przeszkadza ??? Jeśli są to tylko argumenty dotyczące wolności religijnej, to ci którzy tak twierdzą niech poprostu  na niego nie patrzą. Jeśli innych powodów nie ma to moim zdaniem chodzi poprostu o wymazanie faktu tragedii narodowej z pamięci obywateli tego kraju.<br />
</strong></p>
<p>TVN ma niemieckie powiązania, podobnie zresztą jak Tusk i cała ta mafia z PO. Chcą szybko wymazać to co sie stało z pamięci Polaków &#8211; nie mam co do tego wątpliwości. Ja jednak twierdzę, że nie da się tego tak łatwo zrobić. <strong>Sam jestem gotów jechać do Warszawy i stanąć w proteście i na pewno tak zrobię!</strong> <strong>Będę bojkotował TVN. </strong></p>
<p>Bardzo się cieszę, że zyję w kraju, w którym jeśli komuś coś nie pasuje to można swoje zdanie w ten czy w inny sposób wyrazić. Mamy do tego prawo i korzystajmy z tego &#8211; nikt nas za to nie zastrzeli <img src='http://www.kielmas.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . <strong>Dlatego ja stoję po stronie obrońców krzyża.</strong></p>
<p><strong><br />
</strong></p>
<p><strong>Przy okazji, wszystkim tym, którzy głosowali na Komorowskiego  &#8211; gratuluję wyboru! Plan podwyższenia VAT&#8217;u był gotowy już znacznie wcześniej przed wyborami, tylko pan Komorowski zapomniał o tym wspomnieć</strong>. Rozumiem, że były to wybory na prezydenta, ale chyba każdy z nas wie, że to raczej nie była kampania jednego człowieka, tylko całej partii. Podwyższyć VAT? Tak bez debaty, bez spytania się o pozwolenie obywateli tego kraju? <strong>Kur&#8230; beszczelność!!!</strong></p>
<p><strong>W tym kraju dzieje się coś niedobrego i wszystkich czytających proszę o zainteresowanie się polityką, bo możemy się obudzić za późno.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kielmas.com/2010/08/04/sprawa-krzyza-tvp1-vs-tvn/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mysql – drobny test z zastosowaniem indexów</title>
		<link>http://www.kielmas.com/2010/08/02/mysql-drobny-test-z-zastosowaniem-indexow/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=mysql-drobny-test-z-zastosowaniem-indexow</link>
		<comments>http://www.kielmas.com/2010/08/02/mysql-drobny-test-z-zastosowaniem-indexow/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 21:47:59 +0000</pubDate>
		<dc:creator>jarek</dc:creator>
				<category><![CDATA[Ogólne]]></category>
		<category><![CDATA[Technologie IT]]></category>
		<category><![CDATA[bazy danych]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[baza danych]]></category>
		<category><![CDATA[index]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[wydajność]]></category>

		<guid isPermaLink="false">http://www.kielmas.com/?p=335</guid>
		<description><![CDATA[Zrobiłem malutki teścik zastosowania indexów na wybranej tabeli w bazie Mysql. Chciałem zobaczyć jakie będą  różnice czasowe zapytań podczas zastosowania różnych indexów na mojej tabeli. Tabela ma postać: CREATE TABLE IF NOT EXISTS `media` &#40; `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , `acl_user_id` INT&#40;11&#41; DEFAULT NULL, `parent_id` INT&#40;11&#41; DEFAULT NULL, `size` INT&#40;11&#41; DEFAULT NULL, `extension` [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.kielmas.com/wp-content/uploads/2010/08/logo-mysql-110x57.png"><img class="alignleft size-full wp-image-338" title="logo-mysql-110x57" src="http://www.kielmas.com/wp-content/uploads/2010/08/logo-mysql-110x57.png" alt="" width="110" height="57" /></a>Zrobiłem malutki teścik zastosowania indexów na wybranej tabeli w bazie <a href="http://www.mysql.com/" target="_self">Mysql</a>. Chciałem zobaczyć jakie będą  różnice czasowe zapytań podczas zastosowania różnych indexów na mojej tabeli.</p>
<p>Tabela ma postać:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span>  <span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #993333; font-weight: bold;">IF</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">EXISTS</span> <span style="color: #ff0000;">`media`</span> <span style="color: #66cc66;">&#40;</span>
  <span style="color: #ff0000;">`id`</span> INT <span style="color: #993333; font-weight: bold;">UNSIGNED</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">AUTO_INCREMENT</span> <span style="color: #66cc66;">,</span>
  <span style="color: #ff0000;">`acl_user_id`</span> INT<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">11</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
  <span style="color: #ff0000;">`parent_id`</span> INT<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">11</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
  <span style="color: #ff0000;">`size`</span> INT<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">11</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
  <span style="color: #ff0000;">`extension`</span> ENUM<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'mp3'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'mp4'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'mpg'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'mpeg'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'jpg'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'png'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'bmp'</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
  <span style="color: #ff0000;">`type`</span>  ENUM<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'audio'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'video'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'image'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'avatar'</span><span style="color: #66cc66;">&#41;</span><span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
  <span style="color: #ff0000;">`status`</span> ENUM<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'active'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'inactive'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'deleted'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'processing'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'banned'</span> <span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span>
  <span style="color: #ff0000;">`date_created`</span> TIMESTAMP <span style="color: #993333; font-weight: bold;">DEFAULT</span> CURRENT_TIMESTAMP <span style="color: #66cc66;">,</span>
  <span style="color: #ff0000;">`date_activated`</span> DATETIME <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
  <span style="color: #ff0000;">`date_deleted`</span> DATETIME <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
  <span style="color: #ff0000;">`date_banned`</span> DATETIME <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
  <span style="color: #ff0000;">`name`</span> VARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">255</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
  <span style="color: #ff0000;">`path`</span> VARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">255</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
  <span style="color: #ff0000;">`description`</span> VARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">255</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span>
  <span style="color: #ff0000;">`guid`</span> CHAR<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">255</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
  <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`id`</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
ENGINE <span style="color: #66cc66;">=</span> InnoDB
<span style="color: #993333; font-weight: bold;">DEFAULT</span> CHARACTER <span style="color: #993333; font-weight: bold;">SET</span> <span style="color: #66cc66;">=</span> utf8
COLLATE <span style="color: #66cc66;">=</span> utf8_polish_ci;</pre></div></div>

<p>Użyłem procedury sql do wypełnienia tej tabeli <strong>pół milionem</strong> losowych danych.</p>
<p>W przypadku braku indexów wypełnianie tabeli danymi  trwało: <strong>4 min 17.78 sec</strong></p>
<p>Czas na pytania bez indexów:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> count<span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> media <span style="color: #993333; font-weight: bold;">WHERE</span> <span style="color: #993333; font-weight: bold;">STATUS</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'active'</span>;  <span style="color: #66cc66;">&#40;</span>trwało: <span style="color: #cc66cc;">1.08</span> sec<span style="color: #66cc66;">&#41;</span>
<span style="color: #993333; font-weight: bold;">SELECT</span> id <span style="color: #993333; font-weight: bold;">FROM</span> media <span style="color: #993333; font-weight: bold;">WHERE</span> size <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">30</span>;<span style="color: #66cc66;">&#40;</span>trwało:  <span style="color: #cc66cc;">0.99</span> sec<span style="color: #66cc66;">&#41;</span>
<span style="color: #993333; font-weight: bold;">SELECT</span> count<span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> media <span style="color: #993333; font-weight: bold;">WHERE</span> name <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'nazawa'</span>;  <span style="color: #66cc66;">&#40;</span>trwało: <span style="color: #cc66cc;">0.93</span> sec<span style="color: #66cc66;">&#41;</span>
<span style="color: #993333; font-weight: bold;">SELECT</span> count<span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> media <span style="color: #993333; font-weight: bold;">WHERE</span> size <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">30</span> <span style="color: #993333; font-weight: bold;">AND</span> <span style="color: #993333; font-weight: bold;">STATUS</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'active'</span> <span style="color: #993333; font-weight: bold;">AND</span> name <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'nazawa'</span>; <span style="color: #66cc66;">&#40;</span>trwało: <span style="color: #cc66cc;">1.10</span> sec<span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>Następnie dodałem następujące indexy:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> media <span style="color: #993333; font-weight: bold;">ADD</span> <span style="color: #993333; font-weight: bold;">INDEX</span> idx_media_status <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">STATUS</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> media <span style="color: #993333; font-weight: bold;">ADD</span> <span style="color: #993333; font-weight: bold;">INDEX</span> idx_media_size <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`size`</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> media <span style="color: #993333; font-weight: bold;">ADD</span> <span style="color: #993333; font-weight: bold;">INDEX</span> idx_media_name <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`name`</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>(* dodawanie indeksów do istniejących pół miliona wierszy trwało odpowiednio: <strong>18.11 sec, 23.24 sec oraz 39.00 sec</strong>)</p>
<p>W przypadku, gdy <strong>indexy istniały już w schemacie</strong>, napełnienie tabeli o pół mioliona danych trwało: <strong>5 min 13.60 sec</strong></p>
<p>Ponowiłem zapytania z wprowadzonymi indexami. Oto wyniki:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> count<span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> media <span style="color: #993333; font-weight: bold;">WHERE</span> <span style="color: #993333; font-weight: bold;">STATUS</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'active'</span>; <span style="color: #66cc66;">&#40;</span>trwało: <span style="color: #cc66cc;">0.02</span> sec<span style="color: #66cc66;">&#41;</span>
<span style="color: #993333; font-weight: bold;">SELECT</span> id <span style="color: #993333; font-weight: bold;">FROM</span> media <span style="color: #993333; font-weight: bold;">WHERE</span> size <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">30</span>;<span style="color: #66cc66;">&#40;</span>trwało: <span style="color: #cc66cc;">0.01</span> sec<span style="color: #66cc66;">&#41;</span>
<span style="color: #993333; font-weight: bold;">SELECT</span> count<span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> media <span style="color: #993333; font-weight: bold;">WHERE</span> name <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'nazawa'</span>; <span style="color: #66cc66;">&#40;</span>trwało: <span style="color: #cc66cc;">0.02</span> sec<span style="color: #66cc66;">&#41;</span>
<span style="color: #993333; font-weight: bold;">SELECT</span> count<span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> media <span style="color: #993333; font-weight: bold;">WHERE</span> size <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">30</span> <span style="color: #993333; font-weight: bold;">AND</span> <span style="color: #993333; font-weight: bold;">STATUS</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'active'</span> <span style="color: #993333; font-weight: bold;">AND</span> name <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'nazawa'</span>; <span style="color: #66cc66;">&#40;</span>trwało: <span style="color: #cc66cc;">0.10</span> sec<span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>Dodałem jeszcze jeden klucz, aby zoptymalizować ostatnie zapytanie, z którego bardzo często będę korzystał w aplikacji:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> media <span style="color: #993333; font-weight: bold;">ADD</span> <span style="color: #993333; font-weight: bold;">INDEX</span> idx_media_name_status_size <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`name`</span><span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">STATUS</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">`size`</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>A oto wyniki zapytania:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> count<span style="color: #66cc66;">&#40;</span>id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">FROM</span> media <span style="color: #993333; font-weight: bold;">WHERE</span> size <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">30</span> <span style="color: #993333; font-weight: bold;">AND</span> <span style="color: #993333; font-weight: bold;">STATUS</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'active'</span> <span style="color: #993333; font-weight: bold;">AND</span> name <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'nazawa'</span>; <span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0.03</span> sec<span style="color: #66cc66;">&#41;</span></pre></div></div>

<p>Jak widać z powyższych przykładów stosowanie indexów ma ogromny wpływ na wydajność. Podobne wnioski można zauważyć na wielu blogach, jednak najlepiej wykonać taki prosty test samemu, aby przekonać się o sile <strong>stosowania indexów</strong>. Pamiętajmy jednak, aby stosować indexy z umiarem &#8211; ich wprowadzenie opóźnia zapis danych do bazy. Ponadto, tak jak mówi <a href="http://dev.mysql.com/doc/refman/5.1/en/create-index.html" target="_self">dokumentacja mysql</a>,  należy zauważyć różnicę  pomiędzy indexem dla jednego pola i dla wielu:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> media <span style="color: #993333; font-weight: bold;">ADD</span> <span style="color: #993333; font-weight: bold;">INDEX</span> idx_media_size <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`size`</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>a</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">ALTER</span> <span style="color: #993333; font-weight: bold;">TABLE</span> media <span style="color: #993333; font-weight: bold;">ADD</span> <span style="color: #993333; font-weight: bold;">INDEX</span> idx_media_name_status_size <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">`name`</span><span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">STATUS</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">`size`</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>są to dwa różne klucze, służące różnym typom zapytań.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kielmas.com/2010/08/02/mysql-drobny-test-z-zastosowaniem-indexow/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Zend Framework  1.10.7 już dostępny</title>
		<link>http://www.kielmas.com/2010/07/31/zend-framework-1-10-7-juz-dostepny/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=zend-framework-1-10-7-juz-dostepny</link>
		<comments>http://www.kielmas.com/2010/07/31/zend-framework-1-10-7-juz-dostepny/#comments</comments>
		<pubDate>Sat, 31 Jul 2010 21:46:22 +0000</pubDate>
		<dc:creator>jarek</dc:creator>
				<category><![CDATA[Ciekawostki]]></category>
		<category><![CDATA[PHP, Narzędzia, Frameworki]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[dostępny]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[wydany]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://www.kielmas.com/?p=328</guid>
		<description><![CDATA[W piątek pojawiła się kolejna, już siódma,  wersja Zend Framework&#8217;a z serii 1.10. Poprawiono około 60 bug&#8217;ów, które opisane są w changelog. Zachęcam do aktualizacji Waszych projektów. W ramach wydania wersji  dotknięto następujące pliki: # git status # modified: Application/Bootstrap/BootstrapAbstract.php # modified: Application/Resource/Exception.php &#160; # modified: Auth/Adapter/DbTable.php &#160; # modified: Cache/Backend/Static.php # modified: Cache/Backend/Test.php # [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.kielmas.com/wp-content/uploads/2010/04/logo-zend-framework.jpg"><img class="alignleft size-full wp-image-142" title="logo-zend-framework" src="http://www.kielmas.com/wp-content/uploads/2010/04/logo-zend-framework.jpg" alt="" width="132" /> </a>W piątek pojawiła się kolejna, już siódma,  wersja Zend Framework&#8217;a z serii 1.10. Poprawiono około 60 bug&#8217;ów, które opisane są w <a href="http://framework.zend.com/changelog/1.10.7" target="_self">changelog</a>. Zachęcam do <a href="http://framework.zend.com/download/latest" target="_self">aktualizacji</a> Waszych projektów.</p>
<p>W ramach wydania wersji  dotknięto następujące pliki:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># git status</span>
<span style="color: #666666; font-style: italic;">#	modified:   Application/Bootstrap/BootstrapAbstract.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Application/Resource/Exception.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Auth/Adapter/DbTable.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Cache/Backend/Static.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Cache/Backend/Test.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Cache/Backend/TwoLevels.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Cache/Core.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Cache/Frontend/Class.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Cache/Frontend/Function.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Cache/Manager.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Captcha/Image.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Console/Getopt.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Crypt/Math/BigInteger/Bcmath.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Db/Adapter/Pdo/Pgsql.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Db/Table/Rowset/Abstract.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Feed/Pubsubhubbub/Model/Subscription.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   File/Transfer/Adapter/Http.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Filter/StripTags.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Gdata/App.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Gdata/Gapps.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Http/Client.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Http/Client/Adapter/Socket.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Http/Response.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Json/Decoder.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Ldap.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Loader/PluginLoader.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Locale.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Locale/Format.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Log.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Log/Writer/Abstract.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Log/Writer/Db.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Log/Writer/Syslog.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Log/Writer/ZendMonitor.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Mail/Protocol/Smtp/Auth/Crammd5.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Mail/Protocol/Smtp/Auth/Plain.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   OpenId.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Paginator/AdapterAggregate.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Paginator/SerializableLimitIterator.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Pdf.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Pdf/FileParser/Image/Png.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Pdf/Filter/Ascii85.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Pdf/Resource/Image/Png.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Search/Lucene/Index/SegmentInfo.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Service/Amazon/S3/Stream.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Service/Flickr.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Service/Twitter.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Session.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Test/PHPUnit/Constraint/DomQuery.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Tool/Project/Provider/Manifest.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Translate.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Translate/Adapter.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Translate/Adapter/Gettext.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Translate/Plural.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Uri.php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#	modified:   Validate/Alnum.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/Alpha.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/Barcode.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/Callback.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/CreditCard.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/Date.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/Db/Abstract.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/Digits.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/EmailAddress.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/File/Crc32.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/File/ExcludeExtension.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/File/Extension.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/File/Hash.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/File/ImageSize.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/File/IsCompressed.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/File/IsImage.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/File/Md5.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/File/MimeType.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/File/Sha1.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/File/Size.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/File/WordCount.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/Float.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/Hex.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/Hostname.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/Int.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/Ip.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/Isbn.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/NotEmpty.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/PostCode.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/Regex.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/Sitemap/Changefreq.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/Sitemap/Lastmod.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/Sitemap/Loc.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/Sitemap/Priority.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Validate/StringLength.php</span>
<span style="color: #666666; font-style: italic;">#	modified:   Version.php</span></pre></div></div>

<p>i dodano :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">	Gdata<span style="color: #000000; font-weight: bold;">/</span>Gapps<span style="color: #000000; font-weight: bold;">/</span>Extension<span style="color: #000000; font-weight: bold;">/</span>Property.php
<span style="color: #666666; font-style: italic;">#	Gdata/Gapps/GroupEntry.php</span>
<span style="color: #666666; font-style: italic;">#	Gdata/Gapps/GroupFeed.php</span>
<span style="color: #666666; font-style: italic;">#	Gdata/Gapps/GroupQuery.php</span>
<span style="color: #666666; font-style: italic;">#	Gdata/Gapps/MemberEntry.php</span>
<span style="color: #666666; font-style: italic;">#	Gdata/Gapps/MemberFeed.php</span>
<span style="color: #666666; font-style: italic;">#	Gdata/Gapps/MemberQuery.php</span>
<span style="color: #666666; font-style: italic;">#	Gdata/Gapps/OwnerEntry.php</span>
<span style="color: #666666; font-style: italic;">#	Gdata/Gapps/OwnerFeed.php</span>
<span style="color: #666666; font-style: italic;">#	Gdata/Gapps/OwnerQuery.php</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.kielmas.com/2010/07/31/zend-framework-1-10-7-juz-dostepny/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend_Log pomoże szybko zlokalizować bląd w aplikacji</title>
		<link>http://www.kielmas.com/2010/07/16/zend_log-pomoze-szybko-zlokalizowac-blad-w-aplikacji/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=zend_log-pomoze-szybko-zlokalizowac-blad-w-aplikacji</link>
		<comments>http://www.kielmas.com/2010/07/16/zend_log-pomoze-szybko-zlokalizowac-blad-w-aplikacji/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 13:31:11 +0000</pubDate>
		<dc:creator>jarek</dc:creator>
				<category><![CDATA[PHP, Narzędzia, Frameworki]]></category>
		<category><![CDATA[Technologie IT]]></category>
		<category><![CDATA[WWW]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[błędy]]></category>
		<category><![CDATA[Firebug]]></category>
		<category><![CDATA[firePHP]]></category>
		<category><![CDATA[logowanie błędów]]></category>
		<category><![CDATA[resource]]></category>
		<category><![CDATA[zasoby]]></category>
		<category><![CDATA[Zend_Application]]></category>
		<category><![CDATA[Zend_Log]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://www.kielmas.com/?p=309</guid>
		<description><![CDATA[Logowanie błędów jest kluczowym elementem minitoringu aplikacji. Przekonał się o tym chociażby każdy programista, który pracuje w firmie oferującej dodatkowo dla swoich produktów terminowy support. Dzięki temu, że błędy są logowane jesteśmy w stanie szybko i czasami transparentnie wyeliminować bugi w aplikacji, tak że klient nawet się nie dowie o ich istnieniu:) Jeśli Zend Framework [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.kielmas.com/wp-content/uploads/2010/04/logo-zend-framework.jpg"><img class="alignleft size-full wp-image-142" title="logo-zend-framework" src="http://www.kielmas.com/wp-content/uploads/2010/04/logo-zend-framework.jpg" alt="" width="159" height="107" /></a> Logowanie błędów jest kluczowym elementem <strong>minitoringu aplikacji</strong>. Przekonał się o tym chociażby każdy programista, który pracuje w firmie oferującej dodatkowo dla swoich produktów terminowy <strong>support</strong>.</p>
<p>Dzięki temu, że błędy są logowane jesteśmy w stanie szybko i czasami transparentnie wyeliminować bugi w aplikacji, tak że klient nawet się nie dowie o ich istnieniu:)</p>
<p>Jeśli <strong>Zend Framework</strong> jest podstawą twojego projektu oferuję Tobie bardzo wygodny i przejrzysty sposób na logowanie błędów aplikacji.</p>
<p>Potrzebna będzie jedna klasa, ponieważ aż się prosi aby system logowania błędów był ładowany jako <strong>resource</strong>, przez <strong>Zend_Application</strong>. Zarządzanie zasobów zaprezentowane w<strong> Zend Framework</strong> jest moim zdaniem rewelacyjne, ponieważ bardzo łatwo możemy wydzielić zasoby, dzięki czemu mamy wprowadzoną dodatkową  logikę i ład w naszej aplikacji,  ponadto  dowolny zasób  można łatwo i sprawnie włączyć/wyłączyć.</p>
<p>Przykładowa klasa mogłaby wygłądać następująco:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Zextend_Application_Resource_Log <span style="color: #000000; font-weight: bold;">extends</span> Zend_Application_Resource_ResourceAbstract
<span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> init<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #009933; font-style: italic;">/**
         * Pobranie głównej konfiguracji.
         */</span>
        <span style="color: #000088;">$config</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getBootstrap</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getContainer</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">config</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #009933; font-style: italic;">/**
         * Przygotowanie formatu zapisanej informacji.
         *
         * @example Postać zmiennej $config-&gt;format:
         * &quot;%timestamp% %priorityName%: %message%&quot;
         */</span>
        <span style="color: #000088;">$format</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Log_Formatter_Simple<span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">format</span> <span style="color: #339933;">.</span> PHP_EOL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #009933; font-style: italic;">/**
         * Sprawdzanie, ktory sposób logowania błędów został włączony.
         *
         * @example Postać zmiennej $config-&gt;log-&gt;stream:
         * &quot;../temporary/log/error.log&quot; 
         */</span>
        <span style="color: #000088;">$logger</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Log<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">log</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">file</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
           <span style="color: #000088;">$logger</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addWriter</span><span style="color: #009900;">&#40;</span>
                   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_getStreamWriter<span style="color: #009900;">&#40;</span><span style="color: #000088;">$format</span><span style="color: #339933;">,</span> <span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">log</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">stream</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">log</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">stdoutput</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
           <span style="color: #000088;">$logger</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addWriter</span><span style="color: #009900;">&#40;</span>
                   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_getStreamWriter<span style="color: #009900;">&#40;</span><span style="color: #000088;">$format</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'php://output'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">log</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">firebug</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
           <span style="color: #000088;">$logger</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addWriter</span><span style="color: #009900;">&#40;</span>
                   <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_getFirebugWriter<span style="color: #009900;">&#40;</span><span style="color: #000088;">$format</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">log</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">mail</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$logger</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addWriter</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_getMailWriter<span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #009933; font-style: italic;">/**
         * Używamy tego logger wszędzie w aplikacji.
         */</span>
        Zend_Registry<span style="color: #339933;">::</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'log'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$logger</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$logger</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #009933; font-style: italic;">/**
     * Zwraca obiekt zapisania informacja do Firebug.
     * 
     * @param Zend_Log_Formatter_Simple $format
     * @return Zend_Log_Writer_Firebug
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> _getFirebugWriter<span style="color: #009900;">&#40;</span>Zend_Log_Formatter_Simple <span style="color: #000088;">$format</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$writer</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Log_Writer_Firebug<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$writer</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFormatter</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$format</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$writer</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #009933; font-style: italic;">/**
     * Zwraca obiekt zapisania informacji w postaci emaila.
     *
     * @param Zend_Config_Ini $config
     * @return Zend_Log_Writer_Mail
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> _getMailWriter<span style="color: #009900;">&#40;</span>Zend_Config_Ini <span style="color: #000088;">$config</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$mail</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Mail<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$mail</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setDefaultTransport</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Zend_Mail_Transport_Smtp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$mail</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFrom</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">email</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">from</span><span style="color: #339933;">,</span> <span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">email</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fromAlias</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$mail</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addTo</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">app</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">admin</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">email</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$mail</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addTo</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">app</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">webmaster</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">email</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$mail</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setSubject</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">app</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">' - nastapil nieoczekiwany blad!'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$writer</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Log_Writer_Mail<span style="color: #009900;">&#40;</span><span style="color: #000088;">$mail</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$writer</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addFilter</span><span style="color: #009900;">&#40;</span>Zend_Log<span style="color: #339933;">::</span><span style="color: #004000;">WARN</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$writer</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #009933; font-style: italic;">/**
     * Zwraca obiekt zapisania informacji do PHP stream.
     * 
     * @param Zend_Log_Formatter_Simple $format
     * @param string $stream
     * @return Zend_Log_Writer_Stream
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> _getStreamWriter<span style="color: #009900;">&#40;</span>Zend_Log_Formatter_Simple <span style="color: #000088;">$format</span><span style="color: #339933;">,</span> <span style="color: #000088;">$stream</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$writer</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Log_Writer_Stream<span style="color: #009900;">&#40;</span><span style="color: #000088;">$stream</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$writer</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFormatter</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$format</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$writer</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Jak widać oferuje ona możliwość logowania błędów na kilka sposobów: streaming do pliku, badź na ekran, <strong>JSON&#8217;em</strong> prosto do <a href="http://pl.wikipedia.org/wiki/Firebug" target="_blank">firebug&#8217;a</a> (warunkiem odczytu jest zainstalowanie wtyczki <a href="http://www.firephp.org/HQ/Use.htm" target="_blank">FirePHP</a> w <a href="http://mozilla-europe.org/pl/firefox/" target="_blank">Firefox</a>) lub powiadomienie na email. W przykładzie część konfiguracji znajduje się w pliku <strong>/application/configs/application.ini</strong>, ktory ładowany jest poprzez <strong>Zend_Config_Ini</strong> do rejestru. Odczytany zostaje między innymi email do webmastera oraz do admina, czyli osób odpowiedzialnych za poprawne działanie aplikacji, ponadto zdefiniowane są takie parametry jak scieżka do pliku  z blędami (<strong>error.log</strong>) czy też format komunikatu z błędem.</p>
<p>Oczywiście trzeba tę funkcjonalność dołączyć  do projektu jako  nowy zasób. Nic prostszego &#8211; w pliku konfiguracyjnym <strong>/application/configs/application.ini</strong> dodajemy kolejny <strong>resource</strong> do listy:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;">resources.types      <span style="color: #000066; font-weight:bold;">=</span> <span style="color: #933;">&quot;array()&quot;</span>
resources.view       <span style="color: #000066; font-weight:bold;">=</span> <span style="color: #933;">&quot;array()&quot;</span>
resources.navigation <span style="color: #000066; font-weight:bold;">=</span> <span style="color: #933;">&quot;array()&quot;</span>
resources.log        <span style="color: #000066; font-weight:bold;">=</span> <span style="color: #933;">&quot;array()&quot;</span></pre></div></div>

<p>Dodatkowo musimy zdefniować ustawienia, które załączają odpowiednei przekazanie informacji o błędzie. Czyli znów w<strong> /application/configs/application.ini</strong> dopisujemy:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;">log.file      <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> true</span>
log.firebug   <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> true</span>
log.mail      <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> true</span>
log.stdoutput <span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;"> true</span></pre></div></div>

<p>Rzecz jasna korzystamy z odpowiedniego typu logowania w zależności od potrzeb. Bardzo wygodnie jest w trakcie tworzenia kodu, czy też jego testowania, otrzymywać komunikaty do konsoli FF, wykorzystując <strong>firePHP</strong>, dodatkowo wygodne jest odczytywanie błędów z pliku error.log &#8211; otwieramy konsole i  dajemy polecenie:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"># tail -f error.log</pre></div></div>

<p>i mamy nasz system monitorujacy, w którym dokładnie zapisane jest gdzie wystąpił nieoczekiwany błąd (kupujemy telewizor LCD, który pokazuje te komunikaty przez cały czas <img src='http://www.kielmas.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  oczywiście żartuje <img src='http://www.kielmas.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ).  Jeśli aplikacja jest już w wersji produkcyjnej to bardzo fajne jest rozwiązanie z przychodzącym emailem &#8211; można wtedy szybko interweniować.</p>
<p><strong>Pamiętajmy jednak, że jeśli aplikacja jest już na produkcji, należy zablokować logowanie błędów do FireBug&#8217;a!!</strong></p>
<p>Logowane błędy są tylko dla nas &#8211; developerów, adminów, &#8230;,  i mają stanowić wskazówkę do szybkiego ich  rozwiązania. Jeśli te informacje trafią do niepowołanych rąk to niestety możemy wskazać najsłabsze ogniwo naszej aplikacji, a tym samym stworzyć okazję do włamania się do niej np. hackerowi.</p>
<p>Kolejną sprawą jest miejsce, w którym nasz <strong>logger</strong>, trzymany w rejestrze, może dokonać zapisu błędu. Jednym z lepszym miejsc jest <strong>kontroler</strong> ErrorController.php i w nim metoda <strong>errorAction</strong>,  na którą domyślnie przekierowany jest błąd. Oczywiście gdzie będzie odbywało się logowanie błędów utożsamiony z tą linijką kodu:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>Zend_Registry<span style="color: #339933;">::</span><span style="color: #004000;">isRegistered</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'log'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$logger</span> <span style="color: #339933;">=</span> Zend_Registry<span style="color: #339933;">::</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'log'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">is_null</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_error<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$logger</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">log</span><span style="color: #009900;">&#40;</span>
                    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_error<span style="color: #339933;">-&gt;</span><span style="color: #004000;">exception</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #339933;">.</span>
                    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_error<span style="color: #339933;">-&gt;</span><span style="color: #004000;">exception</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getTraceAsString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
                    Zend_Log<span style="color: #339933;">::</span><span style="color: #004000;">ERR</span>
                <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span></pre></div></div>

<p>jest uzależnione od  potrzeb aplikacji i zaprojektowania jej przez programistę.</p>
<p>Taki sposób logowania błędów  można implementować w każdym projekcie &#8211; nie tylko opartym o <strong>Zend Framework</strong>. Po drobnych modyfikacjach, korzystając tylko z kilku komponentów (w wersji ZF 1.10.6), ﻿Log(20 plików), Wildfire (8 plików),  Json (14 plików), Config (8 plików) + Exception.php, można stworzyć taki sam system logowania błędów.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kielmas.com/2010/07/16/zend_log-pomoze-szybko-zlokalizowac-blad-w-aplikacji/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Subversion: svnsync – pomocne narzędzie nie tylko do backup’u repozytorium</title>
		<link>http://www.kielmas.com/2010/06/22/subversion-svnsync-pomocne-narzedzie-nie-tylko-do-backupu-repozytorium/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=subversion-svnsync-pomocne-narzedzie-nie-tylko-do-backupu-repozytorium</link>
		<comments>http://www.kielmas.com/2010/06/22/subversion-svnsync-pomocne-narzedzie-nie-tylko-do-backupu-repozytorium/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 22:50:30 +0000</pubDate>
		<dc:creator>jarek</dc:creator>
				<category><![CDATA[Ciekawostki]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Technologie IT]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[kopia]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[svnsync]]></category>
		<category><![CDATA[sync]]></category>
		<category><![CDATA[trac]]></category>
		<category><![CDATA[tunel]]></category>
		<category><![CDATA[vps]]></category>

		<guid isPermaLink="false">http://www.kielmas.com/?p=231</guid>
		<description><![CDATA[Svnsync to jeden z wielu programów wchodzący w skład pakietu subversion. Służy do synchronizacji  dwóch  repozytoriów &#8211; pierwotnego i kopii. Ze względu na tę funkcjonalność narzędzie to idealnie może służyć do tworzenia kopii całego repozytorium na innym komputerze. Mi się przydało w osobliwej sytuacji, gdzie do dyspozycji w firmie  miałem &#8222;działowego&#8221; vps. Chciałem wprowadzić trac&#8217;a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.kielmas.com/wp-content/uploads/2010/06/subversion_logo_hor-468x64.png"><img class="alignleft size-full wp-image-257" title="subversion_logo_hor-468x64" src="http://www.kielmas.com/wp-content/uploads/2010/06/subversion_logo_hor-468x64.png" alt="" width="300" height="41" /></a><a href="http://svnbook.red-bean.com/en/1.4/svn.ref.svnsync.html" target="_self"> Svnsync</a> to jeden z wielu programów wchodzący w skład pakietu <a href="http://svnbook.red-bean.com/" target="_self">subversion.</a> Służy do synchronizacji  dwóch  repozytoriów &#8211; pierwotnego i kopii. Ze względu na tę funkcjonalność narzędzie to idealnie może służyć do tworzenia kopii całego repozytorium na innym komputerze.</p>
<p>Mi się przydało w osobliwej sytuacji, gdzie do dyspozycji w firmie  miałem &#8222;działowego&#8221; <a href="http://pl.wikipedia.org/wiki/Virtual_Private_Server" target="_self">vps</a>. Chciałem wprowadzić <a href="http://trac.edgewall.org/" target="_self">trac&#8217;a</a> jako domyślny task manager dla wszystkich projektów z działu. Jednak repozytoria tych projektów znajdują się na innej maszynie, a dostanie się do nich wymusza otwarcie <a href="http://pl.wikipedia.org/wiki/Tunel_%28informatyka%29" target="_self">tunelu.</a> Jednak <strong>obecna, stabilna</strong> wersja <strong>trac</strong> (0.11) nie obsługuje jeszcze <strong>zdalnego repozytorium</strong>, a administrator jest mega zajęty  i nie ma czasu na moje widzi misie <img src='http://www.kielmas.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Z pomocą przyszedł program svnsync.</p>
<p>Zasada jest bardzo prosta &#8211; inicjujemy na komputerze (hostującym <strong>kopię</strong>) projekt kopię :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svnadmin</span> create <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>services<span style="color: #000000; font-weight: bold;">/</span>subversion<span style="color: #000000; font-weight: bold;">/</span>kopia
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>services<span style="color: #000000; font-weight: bold;">/</span>subversion<span style="color: #000000; font-weight: bold;">/</span>kopia
<span style="color: #c20cb9; font-weight: bold;">find</span> <span style="color: #660033;">-type</span> f <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">xargs</span> <span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">666</span>
<span style="color: #c20cb9; font-weight: bold;">find</span> <span style="color: #660033;">-type</span> d <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">xargs</span> <span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">777</span>
<span style="color: #c20cb9; font-weight: bold;">chown</span> <span style="color: #660033;">-Rf</span> svnuser:<span style="color: #c20cb9; font-weight: bold;">svn</span> <span style="color: #000000; font-weight: bold;">*</span></pre></div></div>

<p>Dalej na komputerze <strong>kopii</strong> dodajemy nowego uzytkownika w <strong>svn, </strong>który będzie mial możliwość zapisywania plików w tym repozytorium. Najprościej:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">htpasswd <span style="color: #660033;">-nmb</span> <span style="color: #c20cb9; font-weight: bold;">svnsync</span> moje_haslo <span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #000000; font-weight: bold;">&amp;</span>gt; <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>htpasswd<span style="color: #000000; font-weight: bold;">/</span>svn_dav</pre></div></div>

<p>Następnie w katalogu <strong>/home/services/subversion/kopia/hooks</strong> należy dodać pliki:</p>
<p><strong>start-commit</strong></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
&nbsp;
<span style="color: #007800;">USER</span>=<span style="color: #ff0000;">&quot;$2&quot;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$USER</span>&quot;</span> = <span style="color: #ff0000;">&quot;svnsync&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span> <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">0</span>; <span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Tylko użytkownik svnsync może dodawać nowe rewizje&quot;</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000;">2</span>
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span></pre></div></div>

<p>oraz plik <strong>pre-revprop-change</strong></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
&nbsp;
<span style="color: #007800;">USER</span>=<span style="color: #ff0000;">&quot;$2&quot;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$USER</span>&quot;</span> = <span style="color: #ff0000;">&quot;svnsync&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span> <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">0</span>; <span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Tylko użytkownik svnsync może dodawać nowe rewizje&quot;</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt;<span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000;">2</span>
<span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span></pre></div></div>

<p>Następnie:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">775</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>services<span style="color: #000000; font-weight: bold;">/</span>subversion<span style="color: #000000; font-weight: bold;">/</span>kopia<span style="color: #000000; font-weight: bold;">/</span>hooks<span style="color: #000000; font-weight: bold;">/</span>start-commit
<span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">775</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>services<span style="color: #000000; font-weight: bold;">/</span>subversion<span style="color: #000000; font-weight: bold;">/</span>kopia<span style="color: #000000; font-weight: bold;">/</span>hooks<span style="color: #000000; font-weight: bold;">/</span>pre-revprop-change</pre></div></div>

<p>Przeznaczenie tych plików? Sprawa prosta, <strong>kopia</strong> służy tak naprawdę tylko do odczytu. Nie chcę aby to repozytorium było robocze, ponieważ synchronizacja odbywa się tylko w jedną stronę. Udostępnienie <strong>kopii</strong> w formie roboczej doprowadziło by do powstania dwóch niespójnych repozytoriów.</p>
<p>Jest tylko jeden użytkownik tego repozytorium &#8211; <strong>svnsync</strong>, dzięki temu mam pewność, że nikt nie zaciągnie sobię tego repozytorium i nie będzie nic <strong>commit</strong>&#8216;ował. W rezultacie uzyskam dokładną kopię <strong>repozytorium</strong>, na którym mi zależy.</p>
<p><strong>Bardzo ważna uwaga! svnsync synchronizuje cały projekt, a nie jego rozgałęzienia.</strong> <strong>Nie możemy zatem synchronizować tylko wybranego katalogu.</strong></p>
<p>Następnie musimy zainicjować synchronizację przez wywołanie polecenia <strong>svnsync</strong> z parametrem <strong>initialize</strong>. Jeśli w grę wchodzi kilka repozytoriów najlepiej napisać prosty skrypt np. taki:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
&nbsp;
<span style="color: #007800;">PROJECTNAME_FROM</span>=<span style="color: #ff0000;">&quot;$1&quot;</span>
<span style="color: #007800;">PROJECTNAME_TO</span>=<span style="color: #ff0000;">&quot;$2&quot;</span>
<span style="color: #007800;">SVNSYNC</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">svnsync</span>
<span style="color: #007800;">FROM</span>=https:<span style="color: #000000; font-weight: bold;">//</span>host_oryginal<span style="color: #000000; font-weight: bold;">/</span>PROJECTNAME_FROM
<span style="color: #007800;">TO</span>=https:<span style="color: #000000; font-weight: bold;">//</span>host_kopia<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$PROJECTNAME_TO</span>
<span style="color: #007800;">SYNC_USER</span>=<span style="color: #c20cb9; font-weight: bold;">svnsync</span>
<span style="color: #007800;">SYNC_PASS</span>=skomplikowane_haslo
<span style="color: #007800;">SOURCE_USER</span>=uzytkownik_oryginalu
<span style="color: #007800;">SOURCE_PASS</span>=haslo_uzytkownika_oryginalu
&nbsp;
<span style="color: #007800;">$SVNSYNC</span> initialize <span style="color: #007800;">$TO</span> <span style="color: #007800;">$FROM</span> <span style="color: #660033;">--sync-username</span> <span style="color: #007800;">$SYNC_USER</span> <span style="color: #660033;">--sync-password</span> <span style="color: #007800;">$SYNC_PASS</span>  <span style="color: #660033;">--source-username</span> <span style="color: #007800;">$SOURCE_USER</span> <span style="color: #660033;">--source-password</span> <span style="color: #007800;">$SOURCE_PASS</span> <span style="color: #000000; font-weight: bold;">&amp;</span>amp;  <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">0</span></pre></div></div>

<p>Wtedy wywołanie takiego skryptu sprowadza się jedynie do:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">svnsync_init oryginal kopia</pre></div></div>

<p>Mi się przydał, bo synchronizowałem ok dziesięć projektów.</p>
<p>Nasuwa się dalej pytanie &#8211; jak synchronizować kopię z oryginałem?</p>
<p>Rozwiązań jest kilka. Można np. użyć crona,  który co okręślony interval czasu odpalał by skrypt podobny do tego:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
&nbsp;
<span style="color: #007800;">PROJECTNAME_TO</span>=<span style="color: #ff0000;">&quot;$1&quot;</span>
&nbsp;
<span style="color: #007800;">SVNSYNC</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">svnsync</span>
<span style="color: #007800;">TO</span>=https:<span style="color: #000000; font-weight: bold;">//</span>host_kopia<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$PROJECTNAME_TO</span>
<span style="color: #007800;">SYNC_USER</span>=<span style="color: #c20cb9; font-weight: bold;">svnsync</span>
<span style="color: #007800;">SYNC_PASS</span>=skomplikowane_haslo
<span style="color: #007800;">SOURCE_USER</span>=uzytkownik_oryginalu
<span style="color: #007800;">SOURCE_PASS</span>=haslo_uzytkownik_oryginalu
&nbsp;
<span style="color: #007800;">$SVNSYNC</span> <span style="color: #660033;">--non-interactive</span> <span style="color: #c20cb9; font-weight: bold;">sync</span> <span style="color: #007800;">$TO</span> <span style="color: #660033;">--sync-username</span> <span style="color: #007800;">$SYNC_USER</span> <span style="color: #660033;">--sync-password</span> <span style="color: #007800;">$SYNC_PASS</span> <span style="color: #660033;">--source-username</span> <span style="color: #007800;">$SOURCE_USER</span> <span style="color: #660033;">--source-password</span> <span style="color: #007800;">$SOURCE_PASS</span> <span style="color: #000000; font-weight: bold;">&amp;</span>amp;  <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">0</span>
<span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">775</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>services<span style="color: #000000; font-weight: bold;">/</span>subversion<span style="color: #000000; font-weight: bold;">/</span>kopia<span style="color: #000000; font-weight: bold;">/</span>hooks<span style="color: #000000; font-weight: bold;">/</span>svnsync_init</pre></div></div>

<p>Polecenie <strong>svnsync</strong> z parametrem <strong>sync</strong> służy do synchronizowania repozytorium.</p>
<p>Wywołanie skryptu synchronizującego wyglądało by tak:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">svnsync_sync kopia</pre></div></div>

<p>Takie rozwiązanie jest jednak bardzo niewygodne. Poza tym, że dodatkowo co jakiś określony czas obciążamy maszynę <strong>kopię</strong>, to w dodatku zmiany w repozytorium pojawią się dopiero za chwilę (np. za 5 minut). Ja nie mogę czekać tak długo. Przypominam, że zależy mi na pracy z <strong>trac</strong>&#8216;iem. Każdy <strong>commit</strong> musi być rejestrowany automatycznie. Poza tym w moim przypadku, aby wywolać polecenie svn up, muszę otworzyć tunel. <strong>Mogę to zrobić jedynie z ręki i nie mógłbym wtedy doprowadzić do zamknięcia tego tunelu.</strong></p>
<p>Z pomocą znów przychodzą <strong>hooks</strong> na serwerze <strong>oryginał</strong>. W katalogu <strong>/home/services/subversion/oryginal/hooks</strong> edytujemy plik:</p>
<p><strong>post-commit</strong></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
&nbsp;
<span style="color: #007800;">SVNSYNC</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">svnsync</span>
<span style="color: #007800;">TO</span>=https:<span style="color: #000000; font-weight: bold;">//</span>host_kopia<span style="color: #000000; font-weight: bold;">/</span>kopia
<span style="color: #007800;">SYNC_USER</span>=<span style="color: #c20cb9; font-weight: bold;">svnsync</span>
<span style="color: #007800;">SYNC_PASS</span>=skomplikowane_haslo
<span style="color: #007800;">SOURCE_USER</span>=uzytkownik_oryginal
<span style="color: #007800;">SOURCE_PASS</span>=haslo_uzytkownika_oryginal
&nbsp;
<span style="color: #007800;">$SVNSYNC</span> <span style="color: #660033;">--non-interactive</span> <span style="color: #c20cb9; font-weight: bold;">sync</span> <span style="color: #007800;">$TO</span> <span style="color: #660033;">--sync-username</span> <span style="color: #007800;">$SYNC_USER</span> <span style="color: #660033;">--sync-password</span> <span style="color: #007800;">$SYNC_PASS</span> <span style="color: #660033;">--source-username</span> <span style="color: #007800;">$SOURCE_USER</span> <span style="color: #660033;">--source-password</span> <span style="color: #007800;">$SOURCE_PASS</span> <span style="color: #000000; font-weight: bold;">&amp;</span>amp;  <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">0</span>
<span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">775</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>services<span style="color: #000000; font-weight: bold;">/</span>subversion<span style="color: #000000; font-weight: bold;">/</span>kopia<span style="color: #000000; font-weight: bold;">/</span>hooks<span style="color: #000000; font-weight: bold;">/</span>post-commit</pre></div></div>

<p>Opcja <strong>&#8211;non-interactive</strong> spowoduje, że w razie niepowodzenia synchronizacji użytkownicy pracujący przy repozytrium nie zobaczą żadnego błędu podczas <strong>commit</strong>&#8216;a, jeśli takowy miałby wystąpić. W praktyce takie rozwiązanie działa <strong>błyskawicznie i bezbłędnie</strong>.</p>
<p>Podsumowując, osiągnąłęm swój cel. Na maszynie <strong>kopia</strong> mam zainstalowanego <strong>trac</strong>&#8216;a, który bazuje na repozytorium znajdujące się na maszynie <strong>oryginal</strong>. W praktyce Każdy <strong>commit</strong> w repozytorium oryginal spowoduje zarejestrowanie zmiany w trac&#8217;u.</p>
<p>Super od teraz możemy  zarządzać projektami <img src='http://www.kielmas.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.kielmas.com/2010/06/22/subversion-svnsync-pomocne-narzedzie-nie-tylko-do-backupu-repozytorium/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Miłe zaskoczenie ze strony Xerox – drukarka Phaser 3140</title>
		<link>http://www.kielmas.com/2010/06/05/mile-zaskoczenie-ze-strony-xerox-drukarka-3140/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=mile-zaskoczenie-ze-strony-xerox-drukarka-3140</link>
		<comments>http://www.kielmas.com/2010/06/05/mile-zaskoczenie-ze-strony-xerox-drukarka-3140/#comments</comments>
		<pubDate>Sat, 05 Jun 2010 12:56:24 +0000</pubDate>
		<dc:creator>jarek</dc:creator>
				<category><![CDATA[Ciekawostki]]></category>
		<category><![CDATA[Firma kielmas.com]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[drukarki]]></category>
		<category><![CDATA[openSuse]]></category>
		<category><![CDATA[xerox]]></category>
		<category><![CDATA[xerox 3140]]></category>

		<guid isPermaLink="false">http://www.kielmas.com/?p=233</guid>
		<description><![CDATA[Potrzebowałem małej drukarki, głównie do zastosowań biurowych. Oczywiście zdecydowałem się na drukarkę laserową.  Miłym zaskoczeniem okazała się drukarka Xerox Phaser 3140, którą dziś zakupiłem za jedyne 209 zł z VAT.  Drukarka dość przeciętna. Między innymi oferuje: wydruk do 18 str./min, rozdzielczość wydruku do 600 x 600 dpi (rozdzielczość interpolowana 1200 x 600), maksymalnie do 10 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.kielmas.com/wp-content/uploads/2010/06/xlogo.gif"><img class="alignleft size-full wp-image-232" title="xlogo" src="http://www.kielmas.com/wp-content/uploads/2010/06/xlogo.gif" alt="" width="175" height="50" /></a></p>
<p>Potrzebowałem małej drukarki, głównie do zastosowań biurowych. Oczywiście zdecydowałem się na drukarkę laserową.  Miłym zaskoczeniem okazała się drukarka <a href="http://www.office.xerox.com/printers/laser-printers/phaser-3140/plpl.html" target="_self">Xerox Phaser 3140</a>, którą dziś zakupiłem za jedyne <strong>209 zł z VAT</strong>.  Drukarka dość przeciętna. Między innymi oferuje:</p>
<ul>
<li><strong>wydruk do 18 str./min</strong>,</li>
<li><strong> rozdzielczość wydruku do 600 x 600 dpi (rozdzielczość interpolowana 1200 x 600),</strong></li>
<li><strong>maksymalnie do 10 000 stron na miesiąc</strong></li>
<li><strong>czas wydrukowania pierwszej strony: zaledwie 8 s,</strong></li>
<li><strong></strong><strong>procesor 150 MHz,</strong></li>
<li><strong>urządzenie zgodne z systemami Windows (także Vista), Linux oraz Mac,</strong></li>
</ul>
<p>jednak dla moich zastosowań urządzenia nadaje się idealnie a dodając do tego atrakcyjną cenę stwierdzam, że zakup udany.</p>
<p>Dodatkowo zaskoczyłem się także dostępnościa <strong>sterownika dla linux. </strong>Mam zainstalowane <a href="http://software.opensuse.org/112/pl" target="_self">OpenSuse 11.2</a>, dlatego pierwsze co zrobiłem po podłączeniu drukarki to:</p>
<p><strong>Konfiguracja drukarek</strong> -&gt; <strong>Dodaj  -&gt; Kreator wykrył moją drukarkę, lecz nie dopasował sterownika.</strong></p>
<p>Producent zyskał sobie nowego klienta, w mojej osobie, ponieważ odpowiedni sterownik można znależć <a href="http://www.support.xerox.com/go/getfile.asp?Xlang=en_ZA&amp;XCntry=ZAF&amp;objid=104120&amp;EULA=1&amp;prodID=3140_3155&amp;Family=Phaser&amp;ripId=&amp;langs=Polish&amp;plats=Linux&amp;Xtype=download&amp;uType=" target="_self">tutaj</a>.</p>
<p>Sciągamy plik o nazwie P3140_3155.tar.gz. Następnie:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">:<span style="color: #000000; font-weight: bold;">/&gt;</span> <span style="color: #c20cb9; font-weight: bold;">gzip</span> <span style="color: #660033;">-d</span> P3140_3155.tar.gz
:<span style="color: #000000; font-weight: bold;">/&gt;</span> <span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-xf</span> <span style="color: #c20cb9; font-weight: bold;">gzip</span> <span style="color: #660033;">-d</span> P3140_3155.tar
:<span style="color: #000000; font-weight: bold;">/&gt;</span> <span style="color: #7a0874; font-weight: bold;">cd</span> media<span style="color: #000000; font-weight: bold;">/</span>P3140_3155<span style="color: #000000; font-weight: bold;">/</span>Linux
:<span style="color: #000000; font-weight: bold;">/&gt;</span> .<span style="color: #000000; font-weight: bold;">/</span>install.sh</pre></div></div>

<p>Jeśli uruchamiasz skrypt nie z root&#8217;a to pojawi się komunikat, że tylko użytkownik z uprawnieniami root&#8217;a może zainstalować sterownik.  Gdy już uporamy się z uprawnieniami po uruchomieniu skryput <strong>install.sh</strong> pojawi się gui-kreator, który łatwo poprowadzi nas do ukończenia instalacji (zapyta się nas o użytkowników grupy lp, oraz jeśli zechcesz zablokuje port LPT).</p>
<p>Wystarczy już tylko wydrukować stronę testową i cieszyć się &#8211; tak jak ja, z nowej drukarki.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kielmas.com/2010/06/05/mile-zaskoczenie-ze-strony-xerox-drukarka-3140/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Centrum faktur idealne narzędzie dla małych, średnich i dużych firm</title>
		<link>http://www.kielmas.com/2010/05/25/centrum-faktur-idealne-narzedzie-dla-malych-srednich-i-duzych-firm/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=centrum-faktur-idealne-narzedzie-dla-malych-srednich-i-duzych-firm</link>
		<comments>http://www.kielmas.com/2010/05/25/centrum-faktur-idealne-narzedzie-dla-malych-srednich-i-duzych-firm/#comments</comments>
		<pubDate>Tue, 25 May 2010 22:18:46 +0000</pubDate>
		<dc:creator>jarek</dc:creator>
				<category><![CDATA[Ciekawostki]]></category>
		<category><![CDATA[Ogólne]]></category>
		<category><![CDATA[centrumfaktur.pl]]></category>
		<category><![CDATA[finanse]]></category>
		<category><![CDATA[firma]]></category>
		<category><![CDATA[księgowość]]></category>

		<guid isPermaLink="false">http://www.kielmas.com/?p=223</guid>
		<description><![CDATA[Jeśli prowadzisz własną działalność gospodarczą i szukasz taniego, szybkiego, mobilnego narzędzia do wystawiania faktur to mam dla Ciebie odpowiedź: centrumfaktur.pl Specjalnie dla małych firm ma darmową ofertę wystawiania faktur, ramach której można wystawić 4 faktury miesięcznie.  Dodatkowe oferty płatne to: Mini studio za 49 zł rocznie, Gruba ryba za 69 zł rocznie oraz Rekin biznesu [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.kielmas.com/wp-content/uploads/2010/05/images.jpeg"><img class="alignleft size-full wp-image-222" title="images" src="http://www.kielmas.com/wp-content/uploads/2010/05/images.jpeg" alt="" width="128" height="92" /> </a> Jeśli prowadzisz własną działalność gospodarczą i szukasz taniego, szybkiego, mobilnego narzędzia do wystawiania faktur to mam dla Ciebie odpowiedź: <a href="http://centrumfaktur.pl" target="_self">centrumfaktur.pl</a></p>
<p>Specjalnie dla małych firm ma darmową <a href="http://centrumfaktur.pl/pakiet/" target="_self">ofertę</a> wystawiania faktur, ramach której można wystawić 4 faktury miesięcznie.  Dodatkowe oferty płatne to: <strong>Mini studio</strong> za 49 zł rocznie, <strong>Gruba ryba </strong>za 69 zł rocznie oraz <strong>Rekin biznesu</strong> za 129 zł rocznie (oczywiście wg ceny można wystawiać większą liczbę faktur).</p>
<p>Narzędzie bardzo pomocne &#8211; tworzy archiwum faktur z podziałem na zapłacone oraz niezapłacone. Pozwala trzymać porządek w finansach i pilnować terminów płatności faktur, tak aby w razie co upomnieć kontrahentów.</p>
<p>W ustawieniach w panelu możemy wprowadzić dane naszej firmy, zmodyfikowąc szablon faktury, zmienić pakiet na większy / mniejszy oraz usunąć nasze konto. Ponadto, mamy do dyspozycji mechanizm pamiętania kontrahentów, dla których możemy wystawiać kolejne faktury. Całość opakowana w przyjemny i intuicyjny interfejs, w którym nikt się nie zgubi.</p>
<p>Co ciekawe, programiści tej <strong>webaplikacji</strong> wyprowadzili dla swoich użytkowników <a href="http://centrumfaktur.pl/api/" target="_self">API</a>, dzięki któremu można bardzo łatwo dostać się do swoich zasobów z innej aplikacji.</p>
<p><a href="http://centrumfaktur.pl/" target="_self">CentrumFaktur.pl</a> wspiera projekt <a href="http://openid.pl/" target="_self">openId</a>, <a href="https://login.yahoo.com/config/login_verify2?.intl=us&amp;.src=ygrp&amp;.done=http%3a//groups.yahoo.com%2Fstart" target="_self">yahooId</a>,  <a href="https://www.google.com/accounts/NewAccount" target="_self">googleAccount</a>, <a href="https://my.screenname.aol.com/_cqr/login/login.psp?sitedomain=bill.aol.com&amp;authLev=2&amp;lang=en&amp;locale=us&amp;siteState=OrigUrl%3Dhttps%253A%252F%252Fbill.aol.com%252FSPortal%252Fjsp%252Fmarketing_pref.jsp" target="_self">AOLAccount</a>,  także nawet nie trzeba się rejestrować, aby mieć dostęp do bardzo funcjonalnego panelu zarządzania Twoją księgowością.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kielmas.com/2010/05/25/centrum-faktur-idealne-narzedzie-dla-malych-srednich-i-duzych-firm/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

