<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.3" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>DzbanyIT</title>
	<link>http://dzbanyit.pl</link>
	<description>programownanie obiektowe, wzorce projektowe, php, javascript, jquery</description>
	<pubDate>Sat, 26 Jun 2010 19:37:51 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<language>en</language>
			<item>
		<title>Manifest Agile</title>
		<link>http://dzbanyit.pl/2010/06/26/manifest-agile/</link>
		<comments>http://dzbanyit.pl/2010/06/26/manifest-agile/#comments</comments>
		<pubDate>Sat, 26 Jun 2010 19:37:51 +0000</pubDate>
		<dc:creator>Hubert Marzec</dc:creator>
		
		<category><![CDATA[życie programisty]]></category>

		<guid isPermaLink="false">http://dzbanyit.pl/2010/06/26/manifest-agile/</guid>
		<description><![CDATA[Wszyscy teraz mówią o Agile, stosują zwinne metodyki,  słyszeli o scrum&#8221;ie czy eXtreme programming. Ale mam pytanie: czy  widziałeś w ogóle &#8220;Manifest zwinnego wytwarzania oprogramowania&#8220;?  Jesteś w stanie wymienić przynajmniej dwa nazwiska osób, którego go  podpisały? Albo co lepsze czy wymienisz chociaż połowę z dwunastu zasad  zwinnego programowania?
Jeżeli na wszystkie [...]]]></description>
			<content:encoded><![CDATA[<p>Wszyscy teraz mówią o <strong>Agile</strong>, stosują zwinne metodyki,  słyszeli o scrum&#8221;ie czy eXtreme programming. Ale mam pytanie: czy  widziałeś w ogóle &#8220;<strong>Manifest zwinnego wytwarzania oprogramowania</strong>&#8220;?  Jesteś w stanie wymienić przynajmniej dwa nazwiska osób, którego go  podpisały? Albo co lepsze czy wymienisz chociaż połowę z dwunastu zasad  zwinnego programowania?</p>
<p>Jeżeli na wszystkie pytania odpowiedziałeś tak, to możesz zrezygnować z  czytania reszty tego artykuły, w przeciwnym razie zapraszam do  zapoznania się z podstawami zwinnego podejścia do tworzenia  oprogramowania. Na pierwszy ogień idzie treść manifestu agile  (oryginalna wersja po angielsku jest dostępna na stonie <a href="http://agilemanifesto.org/" title="Manifest Agile">agilemanifesto.org</a>):</p>
<blockquote>
<blockquote>
<h2>Manifest zwinnego wytwarzania oprogramowania</h2>
<p>Odkrywamy lepsze sposoby rozwoju oprogramowania, wytwarzając je  pomagając w tym innym. Dzięki temu nauczyliśmy się cenić:</p>
<ul>
<li><strong>Jednostki i interakcje</strong> bardziej niż procesy i  narzędzi</li>
<li><strong>Działające oprogramowanie</strong> bardziej niż kompletną  dokumentacje</li>
<li><strong>Współpracę z klientem</strong> bardziej niż negocjowanie  kontraktu</li>
<li><strong>Reagowanie na zmiany</strong> bardziej niż postępowanie  zgodnie z planem</li>
</ul>
<p>Oznacza to, że choć pozycje po prawej stronie są ważne, bardziej  cenimy zagadnienia przestawione po stronie lewej.</p>
<ul class="agileAuthors">
<li><a href="http://pl.wikipedia.org/wiki/Kent_Beck" title="Kect Beck">Kent  Beck</a></li>
<li>Mike Beedle</li>
<li>Arie van Bennekum</li>
<li><a href="http://pl.wikipedia.org/wiki/Alistair_Cockburn" title="Alistair CockBurn">Alistair CockBurn</a></li>
<li><a href="http://pl.wikipedia.org/wiki/Ward_Cunningham" title="Ward  Cunningham">Ward Cunningham</a></li>
<li><a href="http://martinfowler.com/" title="Marin Fowler">Martin  Fowler</a></li>
<li><a href="http://www.renaissancesoftware.net/blog/" title="James  Grenning">James Grenning</a></li>
<li><a href="http://en.wikipedia.org/wiki/Jim_Highsmith" title="Jim  Highsmith">Jim Highsmith</a></li>
<li><a href="http://en.wikipedia.org/wiki/Andy_Hunt_%28author%29" title="Andrew Hunt">Andrew Hunt</a></li>
<li>Bon Jeffries</li>
<li>Jon Kern</li>
<li>Brian Marick</li>
<li><a href="http://en.wikipedia.org/wiki/Robert_Cecil_Martin" title="Robert C.Martin">Robert C. Martin</a></li>
<li>Steve Mellor</li>
<li><a href="http://en.wikipedia.org/wiki/Ken_Schwaber" title="Ken  Schwaber">Ken Schwaber</a></li>
<li><a href="http://en.wikipedia.org/wiki/Jeff_Sutherland" title="Jeff  Sutherland">Jeff Sutherland</a></li>
<li>Dave Thomas</li>
</ul>
<p><small class="clear" style="padding-top: 1em; display: block; text-align: center">2001, powyżsi autorzy<br />
Tę deklaracje można swobodnie kopiować w dowolnej postaci, jednak tylko w  całości.</small></p></blockquote>
</blockquote>
<p>W dniach 11-13 lutego 2001 roku w malowniczym kurorcie Snowbird w stanie  Utah zebrała się grupa znajomych, reprezentujących nowe podejścia do  wytwarzania oprogramowania, będące alternatywą dla nieefektywnego <a href="http://pl.wikipedia.org/wiki/Model_kaskadowy" title="Model  kaskadowy na Wikipedii">modelu  kaskadowego</a>. Wynikiem ich spotkania  była deklaracja manifestu zwinnego wytwarzania oprogramowania. Od tego  momentu nowe metodyki zaczęto nazywać mianem metodyk zwinnych (ang. <em>agile</em>).</p>
<p>Nieoderwanym elementem manifestu agile jest również lista zasad  zwinnej filozofii:</p>
<blockquote>
<h2>Zasady stojące u podstaw manifestu zwinności</h2>
<p><strong>Stosujemy się do następujących zasad:</strong></p>
<ul>
<li>Naszym priorytetem jest zapewnienie satysfakcji klientów przez  szybkie i ciągłe udostępniani wartościowego oprogramowania.</li>
<li>Nie obawiamy się zmian wymagań na późnych etapach rozwoju.   Zwinne procesy pozwalają wykorzystywać zmiany do zapewnienia klientom  przewagi konkurencyjnej</li>
<li>Często udostępniamy działające oprogramowanie (w odstępach od  kilku tygodni do kilku miesięcy), przy czym preferujemy jak najkrótsze  terminy.</li>
<li>Odbiorcy i programiści muszą regularnie współpracować ze sobą w  czasie trwania projektu.</li>
<li>Budujemy projekty wokół zmotywowanych jednostek. Należy zapewnić  im środowisko i zaspokoić potrzeby oraz ufać, że wykonują powierzone  zadania.</li>
<li>Najbardziej wydajna i efektowna metoda przekazywania informacji  zespołowi programistycznemu i w obrębie jego to rozmowa twarzą w twarz.</li>
<li>Działające oprogramowanie to główny wyznacznik postępów.</li>
<li>Zwinne procesy promują zrównoważony rozwój. Sponsorzy,  programiści i użytkownicy powinni móc zachować stałe tempo pracy.</li>
<li>Ciągłe poświęcanie uwagi technicznej doskonałości i dobremu  projektowi zwiększa zwinność.</li>
<li>Niezwykle istotna jest prostota, czyli sztuka maksymalizowania  liczby zadań, których nie trzeba wykonywać.</li>
<li>Najlepsze architektury, wymagania i projekty są efektem pracy  samodzielnie organizujących się zespołów.</li>
<li>W stałych odstępach czasu zespół określa, jak może zwiększyć  wydajność, a następnie w odpowiedni sposób usprawnia i dostosowuje swe  działania.</li>
</ul>
</blockquote>
<p>Idee manifestu są wręcz przez niektórych uważane za najważniejszy do  tej pory krok na drodze rozwoju informatyki. Zasady Agile z pewnością  wyznaczają nowy kierunek w myśleniu o projektowaniu i programowaniu  systemów informatycznych. Każdy zespół zaczynający swoją przygodę z <strong>agile</strong>  powinien poznać oraz przyswoić zarówno treść manifestu jak i zasad  zwinnego programowania.</p>
]]></content:encoded>
			<wfw:commentRss>http://dzbanyit.pl/2010/06/26/manifest-agile/feed/</wfw:commentRss>
		</item>
		<item>
		<title>classLogger.js mój mały patent na debugowanie kodu javascript</title>
		<link>http://dzbanyit.pl/2010/01/09/classloggerjs-moj-maly-patent-na-debugowanie-kodu-javascript/</link>
		<comments>http://dzbanyit.pl/2010/01/09/classloggerjs-moj-maly-patent-na-debugowanie-kodu-javascript/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 20:40:35 +0000</pubDate>
		<dc:creator>Hubert Marzec</dc:creator>
		
		<category><![CDATA[ExtJs]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[programowanie]]></category>

		<category><![CDATA[]]></category>

		<category><![CDATA[loger]]></category>

		<guid isPermaLink="false">http://dzbanyit.pl/2010/01/09/classloggerjs-moj-maly-patent-na-debugowanie-kodu-javascript/</guid>
		<description><![CDATA[Ostatnio miałem nieprzyjemność integrowania płatnego komponentu ExtJs. Chodzi  konkretnie o komponent kalendarza, który wyglądem oraz funkcjonalnością naśladował Google Calendar. Niestety kod był napisany fatalnie, powiązania pomiędzy poszczególnymi elementami kalendarza były bardzo zawiłe co strasznie utrudniało integracje z istniejącym systemem.  Śledzenie wywołań poszczególnych metod i ich parametrów przysparzało sporo problemów. Dodatkowo dodawanie linijki console.log(arguments) wewnątrz cudzych [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnio miałem nieprzyjemność integrowania płatnego komponentu <a href="http://www.extjs.com/" title="ExtJs library">ExtJs</a>. Chodzi  konkretnie o komponent kalendarza, który wyglądem oraz funkcjonalnością naśladował <a href="http://www.google.com/calendar/" title="Google Calendar">Google Calendar</a>. Niestety kod był napisany fatalnie, powiązania pomiędzy poszczególnymi elementami kalendarza były bardzo zawiłe co strasznie utrudniało integracje z istniejącym systemem.  Śledzenie wywołań poszczególnych metod i ich parametrów przysparzało sporo problemów. Dodatkowo dodawanie linijki <code>console.log(arguments) </code>wewnątrz cudzych funkcji nie jest eleganckie (choć i tak często to robię&#8230;)</p>
<p>Chcąc ułatwić swoją pracę i jednocześnie rezygnując z niepotrzebnego ingerowania w obcy kod stworzyłem bardzo prostą w działaniu funkcję do monitorowania wywołań metod wskazanych klass i obiektów (W przypadku biblioteki ExtJs sprawuje się ona znakomicie).</p>
<pre class="prettyprint">
/**
 * Klasa monitoruje wywołania metod klas i obiektów
 *
 * @author Hubert Marzec
 * @param {Object} source - klasa/obiekt
 * @param {string} className - nazwa klasy
 * @param {array} methodList - wyszczególniona lista metod
 */
function classLogger(source, className, methodsList){
  if (source &amp;&amp;
    (typeof source == "object" || typeof source == "function")) {
    source = source.prototype || source;
    className = className || '';
    methodsList = methodsList || [];

    var name, method;
    var vLog = (typeof(console) !== 'undefined'
      &amp;&amp; console != null) ? console.log : function(){};

    for (name in source){
     method = source[name];
     if (typeof method == "function" &amp;&amp; (methodsList.length ?
       (inArray(methodsList, name)): true )){

       source[name] = function(name, method){
       return function(){
         var vResult = method.apply(this, arguments);
         vResult = vResult || '';
         vLog(className + '-&gt;' + name,
           arguments, ' = ',
           vResult
         );
         return vResult;
       };

      }(name, method);
     }
    }
  }

  function inArray(pArray, value) {
   pArray = pArray || [];
   for(var i=0, all=pArray.length; i &lt; all; i++) {
     if (pArray[i] == value) {
       return true;
     }
   }
   return false
  }
}</pre>
<p>Działanie jest dość proste: wybrane lub wszystkie (gdy nie wyszczególniono konkretnych) metody danego obiektu/klasy zostają opakowane przez dodatkową funkcje, która jest odpowiedzialna za wyświetlanie nazwy, parametrów wejściowych oraz wyniku funkcji oryginalnej.</p>
<p style="text-align: center" class="img"><a href="http://dzbanyit.pl/wp-content/uploads/2010/01/firebug.jpg" title="firebug_small.jpg"><img src="http://dzbanyit.pl/wp-content/uploads/2010/01/firebug_small.jpg" alt="firebug.jpg" /></a></p>
<p>Całość jest wyświetlana przy pomocy konsoli przeglądarki. W przypadku gdy konsola nie jest zaimplementowana, logi nie są wyświetlane. Przykładowe sposoby użycia classLoggera:</p>
<pre class="prettyprint">
var mainWindow = new Ext.Window({
  title: 'okno'
});
classLogger(Ext.Panel, 'Ext.Panel');
classLogger(mainWindow, 'mainWindow');</pre>
<p>Będzie mi bardzo miło, jeżeli ten fragment kodu się komuś przyda. Jednocześnie jestem otwarty na uwagi i waszą opinię.</p>
]]></content:encoded>
			<wfw:commentRss>http://dzbanyit.pl/2010/01/09/classloggerjs-moj-maly-patent-na-debugowanie-kodu-javascript/feed/</wfw:commentRss>
		</item>
		<item>
		<title>NetDay Lublin #1</title>
		<link>http://dzbanyit.pl/2008/12/22/netday-lublin-1/</link>
		<comments>http://dzbanyit.pl/2008/12/22/netday-lublin-1/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 15:23:34 +0000</pubDate>
		<dc:creator>Hubert Marzec</dc:creator>
		
		<category><![CDATA[życie programisty]]></category>

		<category><![CDATA[netday]]></category>

		<category><![CDATA[spotkanie]]></category>

		<guid isPermaLink="false">http://dzbanyit.pl/2008/12/22/netday-lublin-1/</guid>
		<description><![CDATA[W końcu Lublin ma swoją imprezę branży internetowej &#8220;NetDay Lublin&#8220;. Nawet Zamość ze swoim ZamCamp nas wyprzedził, ale lepiej późno  niż wcale. Za całą imprezę odpowiada firma Enzo za co należą im się brawa, mam nadzieje, że do następnych edycji dołączy się więcej firm.

Pomimo choroby postanowiłem być twardy i nie opuścić pierwszego spotkania.  Moja [...]]]></description>
			<content:encoded><![CDATA[<p>W końcu Lublin ma swoją imprezę branży internetowej &#8220;<a href="http://netday.lublin.pl/">NetDay Lublin</a>&#8220;. Nawet Zamość ze swoim <a href="zamcamp.pcinside.pl">ZamCamp</a> nas wyprzedził, ale lepiej późno  niż wcale. Za całą imprezę odpowiada firma <a href="http://www.enzo.pl">Enzo</a> za co należą im się brawa, mam nadzieje, że do następnych edycji dołączy się więcej firm.</p>
<p style="text-align: center" class="img"><img src="http://dzbanyit.pl/wp-content/uploads/2008/12/netday_mini.jpg" alt="netday_mini.jpg" /></p>
<p>Pomimo choroby postanowiłem być twardy i nie opuścić pierwszego spotkania.  Moja gorączka niestety stłumiła odbieranie bodźców zewnętrznych i pozwoliła dotrwać jedynie do końca części oficjalnej (z darmowego piwka i rozmów kuluarowych musiałem zrezygnować).</p>
<p>Impreza bardzo była udana i dobrze zorganizowana. W prawdzie wynikło 20 minutowe opóźnienie spowodowane nie punktualnością większości słuchaczy. Sam zjawiłem się tuż przed 15-stą i byłem jedną z pierwszych osób na sali. Pomimo awarii mikrofonu wszystko było słychać wyraźnie i nie wpłynęło to negatywnie na całą imprezę.  Były trzy zapowiedziane prezentacje (materiały z nich są dostępne na <a href="http://netday.lublin.pl">oficjalnej stronie</a>) oraz dwa spontaniczne wystąpienia bez oprawy graficznej, również  bardzo ciekawe. Organizatorzy zapewnili gorące napoje oraz kupon na darmowe piwko :)</p>
<p>Moje uwagi co do imprezy: zaczynać zgodnie z planem, zwiększyć ilość prezentacji do 4 i organizować zebrania częściej niż raz na dwa miesiące.</p>
]]></content:encoded>
			<wfw:commentRss>http://dzbanyit.pl/2008/12/22/netday-lublin-1/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Jak wygląda rekrutacja programisty</title>
		<link>http://dzbanyit.pl/2008/12/17/jak-wyglada-rekrutacja-programisty/</link>
		<comments>http://dzbanyit.pl/2008/12/17/jak-wyglada-rekrutacja-programisty/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 19:00:43 +0000</pubDate>
		<dc:creator>Hubert Marzec</dc:creator>
		
		<category><![CDATA[życie programisty]]></category>

		<category><![CDATA[programista]]></category>

		<category><![CDATA[rekrutacja]]></category>

		<guid isPermaLink="false">http://dzbanyit.pl/2008/12/17/jak-wyglada-rekrutacja-programisty/</guid>
		<description><![CDATA[Najciekawszym zadaniem w mojej ostatniej pracy było przeprowadzenie procesu rekrutacji na stanowisko programisty i webmastera.  Było to dla mnie zupełnie nowym doświadczeniem, do tej pory stałem po drugiej stronie barykady i nie miałem pojęcia co mnie czeka. Teraz bogatszy o ciężko zdobyte doświadczenia chciałbym się z Wami podzielić moimi obserwacjami i wnioskami z perspektywy [...]]]></description>
			<content:encoded><![CDATA[<p>Najciekawszym zadaniem w mojej ostatniej pracy było przeprowadzenie procesu rekrutacji na stanowisko programisty i webmastera.  Było to dla mnie zupełnie nowym doświadczeniem, do tej pory stałem po drugiej stronie barykady i nie miałem pojęcia co mnie czeka. Teraz bogatszy o ciężko zdobyte doświadczenia chciałbym się z Wami podzielić moimi obserwacjami i wnioskami z perspektywy osoby rekrutującej (jednocześnie programisty). Zaznaczam jednak, że moje przemyslenia będą odnosić się do rekrutacji w małej firmie.</p>
<p><strong>Obalenie mitu, że nie ma pracy</strong></p>
<p>Jak to jest, że wszyscy narzekają, że nie pracy, że brakuje poważnych i ciekawych ofert, a z drugiej strony pracodawcy (no i po części ja ;) narzekają, że nie można znaleźć dobrego pracownika? Praca jest i czeka, ale aby ją wykonać trzeba coś umieć! A z tym jest duży problem. Rozumiem, że Ci lepsi i bardziej mobilni wyjechali do Krakowa czy Warszawy (mieszkam i pracuje w Lublinie), ale ktoś na pewno musiał zostać.</p>
<p><strong>Błędy popełniane przez szukających pracy</strong></p>
<p>Przede wszystkim strasznie niski poziom i jakość nadsyłanych CV! Jest to szczególnie przykre, ale po informatykach spodziewałem przyzwoitych aplikacji, a tu lipa z nędzą. CV ma  zachęcić, zainteresować a nie odstraszać! Ludzie opisują doświadczenie w zawodach w ogóle nie związanych ze stanowiskiem na jakie się ubiegają. Niektórzy uważali, ze na stanowisko webmastera na pewno przyda się doświadczenie w Żabce, Stokrotce czy jako operatora wózka widłowego (sic!). Do tego dochodzi notoryczne pomijanie informacji o wykonywanych obowiązkach czy posiadanych umiejętnościach. Nigdy nie uważałem siebie jako eksperta w przygotowywaniu CV, ale wiele godzin spędzonych na czytaniu o tym jak powinien, a jak nie powinien wyglądać życiorys, pozwoliło mi poznać przynajmniej podstawy tej trudnej sztuki. Widać, że dla większości ciągle jest to za trudne. O tym jak według mnie powinno wyglądać CV programisty napiszę innym razem.</p>
<p>Kolejna sprawa to nie potwierdzenia i nie stawianie się na umówione spotkania. Wystarczy poinformować, że nie jest się już zainteresowanym. Innym ciekawym zjawiskiem jest &#8216;wbijanie się na harpuna&#8217; do siedziby firmy bez zaproszenie, bez wysłania cv - takim mówi się od razu do widzenia.</p>
<p>Z wiedzą, nawet tą podstawową także jest duży problem. Wiem, że nie można wszystkiego nauczyć się na pamięć i zawsze można znaleźć odpowiedz w internecie, ale jeżeli startujesz na stanowisko programisty i proste zapytanie sql z sumowaniem i agregacją jest ponad twoje siły, zastanów się czy aby na pewno wybrałeś sobie dobry sposób na zarabiania na życie.</p>
<p><strong>Sama rozmowa</strong></p>
<p>Nie uznaje żadnych pseudo-psychologicznych testów osobowych, czy pytań w stylu: pokój jest wypełniony różnokolorowymi piłeczkami, gdybyś mógł, jaką chciałbyś zostać rośliną? WTF. Dlatego rozmowa, pomijając części formalne, była czysto techniczna. <strong>Bardzo ważne: </strong>niezależnie jakim doświadczeniem może się pochwalić aplikant, <strong>zawsze</strong> należy zweryfikować jego wiedzę. W przeciągu 20 minut rozmowy można się zorientować czy dana osoba zna się na rzeczy, czy tylko wpisuje głupoty w swoim życiorysie, aby go jakoś wypełnić. Pozwoli to uniknąć przykrych niespodzianek.</p>
<p>W przypadku wymagań finansowych, też było ciekawie. Z jednej strony osoby mniej doświadczone nie potrafiły się wycenić, z drugiej strony zdarzały się dzbany, które mimo bardzo malej wiedzy i doświadczenia żądały dość astronomicznych sum (uwierzcie,  ciężko zachować powagę jak gość, który nie odróżnia javy od javascriptu, kod html opiera tylko na tabelkach, a na koniec żąda 2500zł netto - no nie wiem,  może w Warszawie by tyle dostał&#8230;)</p>
<p>Jak ciekawostkę wspomnę, że kiedy CV mi się podobało i byłem zainteresowany, prosiłem również o próbki kodu. W ten sposób wystraszyłem 50% zaproszonych osób na rozmowę. Albo kontakt się urywał, albo przekładali ciągle spotkania, tłumacząc się, że nie zdążyli przygotować tych próbek!? Żenada. Twój kod to twoja wizytówka. Bez niej nie pokazuj się ludziom ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://dzbanyit.pl/2008/12/17/jak-wyglada-rekrutacja-programisty/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Dzban IT #2: Jak nie korzystać z svn&#8217;a.</title>
		<link>http://dzbanyit.pl/2008/10/28/dzban-it-2-jak-nie-korzystac-svna/</link>
		<comments>http://dzbanyit.pl/2008/10/28/dzban-it-2-jak-nie-korzystac-svna/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 09:26:37 +0000</pubDate>
		<dc:creator>Hubert Marzec</dc:creator>
		
		<category><![CDATA[dzbany]]></category>

		<guid isPermaLink="false">http://dzbanyit.pl/2008/10/28/dzban-it-2-jak-nie-korzystac-svna/</guid>
		<description><![CDATA[Pierwszy post z jakże ciekawej serii &#8220;co za idiota napisał ten kod&#8221; mogliście przeczytać tutaj. W kontynuacji tej kategorii będę opisywał błędy, idiotyczne rozwiązania z jakimi  spotykam się na co dzień.  A powstają one z różnych powodów:

bo coś źle się wgrało
bo się pomyliłem
bo wgrałem pliki z innego projektu
bo właśnie robiłem kupę i tak [...]]]></description>
			<content:encoded><![CDATA[<p>Pierwszy post z jakże ciekawej serii &#8220;co za idiota napisał ten kod&#8221; mogliście przeczytać <a href="http://dzbanyit.pl/2008/08/05/dzban-it-1-jak-nie-przygotowywac-formularzy/">tutaj</a>. W kontynuacji tej kategorii będę opisywał błędy, idiotyczne rozwiązania z jakimi  spotykam się na co dzień.  A powstają one z różnych powodów:</p>
<ul>
<li>bo coś źle się wgrało</li>
<li>bo się pomyliłem</li>
<li>bo wgrałem pliki z innego projektu</li>
<li>bo właśnie robiłem kupę i tak wyszło&#8230;</li>
</ul>
<p>Dzisiaj zajmiemy się sprawą korzystania z repozytorium SVN. Obecnie system kontroli wersji jest narzędziem codziennego użytku w każdym polskim domu, co za tym idzie korzystanie z niego nie powinno przysparzać problemów. Jakże mylne jest to stwierdzenie.</p>
<p>Na pierwszy ogień idzie tworzeniu wielu głównych katalogów (modułów) w ramach jednego repozytorium svn. I tak powstają kwiatki typu: /trunk/dzbany, /trunk/dzbanek, /trunk/dzbany2, /trunk/DZBANY.</p>
<p>Druga sprawa to wrzucanie plików tymczasowych do repozytorium, a w szczgólności Thumb.db pod windosem.  Wybrane pliki można dodać do ignorowanych i problem mamy z głowy.</p>
<p>Apropos  wgrywania niepotrzebnych plików na serwer, oddzielną kategoria są pliki konfiguracyjne (np. config.ini). Te pliki również powinny być ignorowane. Można jedynie zamieścić szablon pliki konfiguracyjnego np. pod nazwą config.sample</p>
<p>I na miłość boską, rozwiązaniem konfliktu nie jest &#8216;prawy przycisk i mark as merget&#8217;. Jeżeli wystąpił konflikt sprawdź co go spowodowało i popraw go ręcznie.</p>
]]></content:encoded>
			<wfw:commentRss>http://dzbanyit.pl/2008/10/28/dzban-it-2-jak-nie-korzystac-svna/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Przytul programiste</title>
		<link>http://dzbanyit.pl/2008/09/28/przytul-programiste/</link>
		<comments>http://dzbanyit.pl/2008/09/28/przytul-programiste/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 16:41:55 +0000</pubDate>
		<dc:creator>Hubert Marzec</dc:creator>
		
		<category><![CDATA[programowanie]]></category>

		<category><![CDATA[życie programisty]]></category>

		<category><![CDATA[programista życie przytul]]></category>

		<guid isPermaLink="false">http://dzbanyit.pl/2008/09/28/przytul-programiste/</guid>
		<description><![CDATA[Kapitalne video pokazujące z jakimi problemami musi sobie radzić programista przez całe życie.  
]]></description>
			<content:encoded><![CDATA[<p>Kapitalne video pokazujące z jakimi problemami musi sobie radzić programista przez całe życie.  <embed src="http://blip.tv/play/gYwjwZJqjdEh" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500"></embed></p>
]]></content:encoded>
			<wfw:commentRss>http://dzbanyit.pl/2008/09/28/przytul-programiste/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Jak przy pomocy jQuery zmusić radiobutton aby zachowywał się jak checkbox.</title>
		<link>http://dzbanyit.pl/2008/09/23/jak-przy-pomocy-jquery-zmusic-radiobutton-aby-zachowywal-sie-jak-checkbox/</link>
		<comments>http://dzbanyit.pl/2008/09/23/jak-przy-pomocy-jquery-zmusic-radiobutton-aby-zachowywal-sie-jak-checkbox/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 12:25:14 +0000</pubDate>
		<dc:creator>Hubert Marzec</dc:creator>
		
		<category><![CDATA[javascript]]></category>

		<category><![CDATA[jquery]]></category>

		<category><![CDATA[jquery javascript radiobutton checkbox]]></category>

		<guid isPermaLink="false">http://dzbanyit.pl/2008/09/23/jak-przy-pomocy-jquery-zmusic-radiobutton-aby-zachowywal-sie-jak-checkbox/</guid>
		<description><![CDATA[Zadanie  było jasno określone: po dwukrotnym kliknięciu radiobuttona miał się on odznaczać. Czyli miał się zachowywać dokładnie jak checkbox. Po krótkich poszukiwaniach odnalazłem ten plugin - wszystko fajnie, radiobutton się odznacza, ale przy submicie formularza i tak pamiętana jest stara wartość zaznaczonego radiobuttona :/
Zgodnie z zasadą - jeżeli coś ma być zrobione dobrze, zrób [...]]]></description>
			<content:encoded><![CDATA[<p>Zadanie  było jasno określone: po dwukrotnym kliknięciu radiobuttona miał się on odznaczać. Czyli miał się zachowywać dokładnie jak checkbox. Po krótkich poszukiwaniach odnalazłem ten <a HREF="http://plugins.jquery.com/files/jquery.radio.checkbox.behave.js_1.txt">plugin</a> - wszystko fajnie, radiobutton się odznacza, ale przy submicie formularza i tak pamiętana jest stara wartość zaznaczonego radiobuttona :/</p>
<p>Zgodnie z zasadą - jeżeli coś ma być zrobione dobrze, zrób to sam - napisałem prosty plugin, który przy dwukrotnym kliknięciu odznacza radiobutton, a przy wysyłaniu formularza usuwa wcześniej nadaną wartość.</p>
<pre CLASS="prettyprint">
/**
 * Behave like Checkbox
 *
 * @autor Hubert Marzec
 * @link dzbanyit.pl
 */
(function(){
jQuery.fn.likeCheckbox = function() {
    return $(this).each(function(){
        $(":radio", this).dblclick(function(){
            $(this).clone().hide().val('').insertAfter(this);
        });
    });
}
})(jQuery);</pre>
<p>Jest to najprostsza wersja, bez limitu na liczbę tworzonych klonów- uznałem to za zbędne. A działanie jest bardzo proste, tworzymy klon naszego radiobuttona, ustawiamy pustą wartość, ukrywamy i wstawiamy za oryginalnym obiektem. Testowane pod IE 6,7 oraz FF 2,3.</p>
]]></content:encoded>
			<wfw:commentRss>http://dzbanyit.pl/2008/09/23/jak-przy-pomocy-jquery-zmusic-radiobutton-aby-zachowywal-sie-jak-checkbox/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Jak przyspieszyć wolnego Zend Frameworka: Zend_Loader::registerAutoload.</title>
		<link>http://dzbanyit.pl/2008/09/01/jak-przyspieszyc-wolnego-zend-frameworka-zend_loaderregisterautoload/</link>
		<comments>http://dzbanyit.pl/2008/09/01/jak-przyspieszyc-wolnego-zend-frameworka-zend_loaderregisterautoload/#comments</comments>
		<pubDate>Mon, 01 Sep 2008 03:32:53 +0000</pubDate>
		<dc:creator>Hubert Marzec</dc:creator>
		
		<category><![CDATA[php]]></category>

		<category><![CDATA[programowanie]]></category>

		<category><![CDATA[zend framework]]></category>

		<category><![CDATA[optymalizacja]]></category>

		<guid isPermaLink="false">http://dzbanyit.pl/2008/09/01/jak-przyspieszyc-wolnego-zend-frameworka-zend_loaderregisterautoload/</guid>
		<description><![CDATA[Zend Framework to oczywiście najlepszy framework php ;) ale ma bardzo duże problemy co do wydajności. Przy prostych stronach można to jeszcze przeżyć, ale dla aplikacji, które są przewidziane na duże obciążenie staje się to już drzazgą w tyłku.
Na pierwszy ogień pójdzie funkcja Zend_Loader::registerAutoload() - korzystanie z niej jest bardzo wygodne, ale wpływa bardzo negatywnie [...]]]></description>
			<content:encoded><![CDATA[<p>Zend Framework to oczywiście najlepszy framework php ;) ale ma bardzo duże problemy co do wydajności. Przy prostych stronach można to jeszcze przeżyć, ale dla aplikacji, które są przewidziane na duże obciążenie staje się to już drzazgą w tyłku.</p>
<p>Na pierwszy ogień pójdzie funkcja <a href="http://framework.zend.com/manual/en/zend.loader.html#zend.loader.load.autoload" title="przeczytaj więcej o registerAutoload()">Zend_Loader::registerAutoload()</a> - korzystanie z niej jest bardzo wygodne, ale wpływa bardzo negatywnie na szybkość i ilość pamięci wykorzystywanej przez skrypt.</p>
<h3>Przeprowadźmy test</h3>
<p>Aby test miał więcej wspólnego z rzeczywistością zostanie wykonany na już przygotowanym frameworka do pracy. Z grubsza będą to:</p>
<ul>
<li>Inicjacja i sprawdzenie autoryzacji na podstawie Zend_Acl (lista praw trzymana w pliku php)</li>
<li>Wykryciu i ustawieniu odpowiedniego <em>locale</em> (Zend_Locale)</li>
<li>Ustawienia widoku</li>
<li>Nawiązanie połączenia z bazą danych MySql</li>
<li>Ustawieniu routes na podstawie plików <em>ini</em></li>
<li>Inicjacji Zend_Mail_Transport_Smtp</li>
</ul>
<p>Akcja indexAction() jest pusta, nie jest wykonywane żadne zapytanie do bazy danych. Do profilowania kodu użyłem zmodyfikowanego Profiler&#8217;a z Magento Ecommerce. Kod został podzielony na odpowiednie bloki: application, setup, dispatch, action. Na mojej maszynie mam:</p>
<ul>
<li>PHP 5.2.4</li>
<li>XDebug 2</li>
<li>Apache 2</li>
<li>MySql 5</li>
</ul>
<p>Samych parametrów mojego komputera nie będę podawał, bo nie ma to sensu, nie będziemy zwracać uwagi na same liczby, a raczej na różnice procentowe.</p>
<p align="center" class="img"><a href="http://dzbanyit.pl/wp-content/uploads/2008/08/zf_autoload_without_require.png" title="zf_autoload_without_require_mini.png"><img src="http://dzbanyit.pl/wp-content/uploads/2008/08/zf_autoload_without_require_mini.png" alt="zf_autoload_without_require_mini.png" /></a></p>
<p>Nas najbardziej interesuje pierwszy rząd  &#8216;Application&#8217; obejmująca całą aplikacje. Najbardziej przykuwającą oko rzeczą jest pożerana pamięć<strong> 5MB</strong>.</p>
<p>Teraz przygotujemy plik <strong>require.php</strong>, który dołączamy jak najwcześniej w bootstrapie. Plik zawiera dołączenia wszystkich klas aplikacji (Zend i nasze własne), które były potrzebne do uruchomienia strony testowej.</p>
<p><code>require_once 'Zend/Session.php';<br />
require_once 'Zend/Session/Abstract.php';<br />
require_once 'Zend/Session/Namespace.php';<br />
require_once 'Zend/Session/SaveHandler/Interface.php';<br />
require_once 'Zend/Session/Exception.php';<br />
require_once 'Zend/Exception.php';<br />
require_once 'Zend/Acl/Role/Interface.php';<br />
require_once 'Zend/Config.php';<br />
itd...</code></p>
<p style="text-align: center" class="img"><a href="http://dzbanyit.pl/wp-content/uploads/2008/08/zf_autoload_with_require.png" title="zf_autoload_with_require.png"><img src="http://dzbanyit.pl/wp-content/uploads/2008/08/zf_autoload_with_require_mi.png" alt="zf_autoload_with_require_mi.png" /></a></p>
<p>Pomimo prawie <strong>3-krotnie zmniejszonego</strong> czasu (<strong>0.25 vs 0.09</strong>), pamięć wykorzystana przez skrypt zmalała z <strong>5 MB</strong> do <strong>326 KB</strong>, to ponad 1<strong>0-krotnie mniej!!!</strong> Nawet sobie nie wyobrażacie jaka to ulga dla serwer.</p>
<p>Listę plików ładowanych podczas działania aplikacji można otrzymać dzięki informacji jakie klasy zostały załadowane (w ZF jedna klasa to jeden plik), a tę informacje dostajemy dzięki funkcji <strong>get_declared_classes().</strong></p>
<h3>Wniosek</h3>
<p>Na etapie tworzenia aplikacji spokojnie możemy ze względu na wygodę używać <code>Zend_Loader::registerAutoload()</code>, zaś już w czasie wdrażana zdecydowanie sugeruję rozwiązanie podobne do mojego.</p>
]]></content:encoded>
			<wfw:commentRss>http://dzbanyit.pl/2008/09/01/jak-przyspieszyc-wolnego-zend-frameworka-zend_loaderregisterautoload/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Dzban IT #1: Jak nie przygotowywać formularzy.</title>
		<link>http://dzbanyit.pl/2008/08/05/dzban-it-1-jak-nie-przygotowywac-formularzy/</link>
		<comments>http://dzbanyit.pl/2008/08/05/dzban-it-1-jak-nie-przygotowywac-formularzy/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 10:13:44 +0000</pubDate>
		<dc:creator>Hubert Marzec</dc:creator>
		
		<category><![CDATA[dzbany]]></category>

		<category><![CDATA[programowanie]]></category>

		<category><![CDATA[życie programisty]]></category>

		<guid isPermaLink="false">http://dzbanyit.pl/2008/08/05/dzban-it-1-jak-nie-przygotowywac-formularzy/</guid>
		<description><![CDATA[Prosty projekcik (to nie znaczy, że nie pracochłonny): formularz z ponad 130 polami, podzielonymi na około 75 kroków. Ktoś miał się zając przygotowanie formularza: html, css i walidacją na poziomie javascript!? Ja miałem to obsłużyć w php (jak będzie o tym w kolejnym wpisie, bo problem jest nawet ciekawy).

No i otrzymuje z pewnym opóźnieniem nie [...]]]></description>
			<content:encoded><![CDATA[<p>Prosty projekcik (to nie znaczy, że nie pracochłonny): formularz z ponad 130 polami, podzielonymi na około 75 kroków. Ktoś miał się zając przygotowanie formularza: html, css i walidacją na poziomie javascript!? Ja miałem to obsłużyć w php (jak będzie o tym w kolejnym wpisie, bo problem jest nawet ciekawy).</p>
<p style="text-align: center" class="img"><a href="http://dzbanyit.pl/wp-content/uploads/2008/08/bad_code.png" title="bad_code_mini.png"><img src="http://dzbanyit.pl/wp-content/uploads/2008/08/bad_code_mini.png" alt="bad_code_mini.png" /></a></p>
<p>No i otrzymuje z pewnym opóźnieniem nie gotowy &#8216;formularz&#8217;. A tam lista pytań z nazwami pól: q1, q2, q3&#8230;q45&#8230;q99&#8230; a często miedzy nimi q9a, q9b, q9c WTF? Formularz był nie kompletny i musiałbym jeszcze między q9a a q9b wsadzić jeszcze 20 pytań. Gdybym sam umieścił w bazie danych pola o takich wartościach - to potem stałbym się bohaterem podobnego wpisu, a programista zajmujący się tym później  projektem wyzywałbym mnie od dzbanów.</p>
<p>Nie pozostało mi nic innego jak samemu wszystko robić od nowa.</p>
<p><strong>Wniosek</strong>: czasem lepiej zrobić wszystko od początku niż korzystać z czyiś rozwiązań.</p>
]]></content:encoded>
			<wfw:commentRss>http://dzbanyit.pl/2008/08/05/dzban-it-1-jak-nie-przygotowywac-formularzy/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Jak ustawić wirtualne hosty w apachu</title>
		<link>http://dzbanyit.pl/2008/07/21/jak-ustawic-wirtualne-hosty-w-apachu-pod-windowsem/</link>
		<comments>http://dzbanyit.pl/2008/07/21/jak-ustawic-wirtualne-hosty-w-apachu-pod-windowsem/#comments</comments>
		<pubDate>Mon, 21 Jul 2008 11:31:06 +0000</pubDate>
		<dc:creator>Hubert Marzec</dc:creator>
		
		<category><![CDATA[programowanie]]></category>

		<category><![CDATA[życie programisty]]></category>

		<guid isPermaLink="false">http://dzbanyit.pl/2008/07/21/jak-ustawic-wirtualne-hosty-w-apachu-pod-windowsem/</guid>
		<description><![CDATA[Chciałem ustawić kilka wirtualnych hostów pod apache, przy czym zachowująć możliwość przeglądania głównego drzewa katalogów poprzez 127.0.0.1.

Największy problem był w tym, że działał tylko jeden wirtualny host, jak dodawałem kolejny wszystko się sypało. Strasznie długo szukałem rozwiązania tego problemu. Żadne (nie)oficjalne materiały nie pomagały. Ale udało się. Mam nadzieje, że oszczędzi wam to dużo czasu.
Rozwiązanie
Konfiguracje [...]]]></description>
			<content:encoded><![CDATA[<p>Chciałem ustawić kilka wirtualnych hostów pod apache, przy czym zachowująć możliwość przeglądania głównego drzewa katalogów poprzez <em>127.0.0.1</em>.</p>
<p style="text-align: center" class="img"><a href="http://dzbanyit.pl/wp-content/uploads/2008/07/apache_logo_medium.png" title="apache_logo_medium.png"><img src="http://dzbanyit.pl/wp-content/uploads/2008/07/apache_logo_mini.png" alt="apache_logo_medium.png" /></a></p>
<p>Największy problem był w tym, że działał tylko jeden wirtualny host, jak dodawałem kolejny wszystko się sypało. Strasznie długo szukałem rozwiązania tego problemu. Żadne (nie)oficjalne materiały nie pomagały. Ale udało się. Mam nadzieje, że oszczędzi wam to dużo czasu.</p>
<h3>Rozwiązanie</h3>
<p>Konfiguracje  opieram na apachu 2.x dostępnym w super paczce <a href="http://www.apachefriends.org/en/xampp.html">xampp</a> i system win xp. Przy innym zestawieniu nazwy plików mogą się różnić, ale filozofia jest taka sama. Otwieramy plik <code>\apache\conf\extra</code> i umieszczamy kod podobny do tego:</p>
<p>NameVirtualHost *:80</p>
<p>&lt;virtualhost *:80&gt;<br />
ServerName localhost<br />
DocumentRoot  E:/projects/<br />
&lt;/virtualhost&gt;</p>
<p>&lt;virtualhost *:80&gt;<br />
ServerName photos.dzbanyit.pl<br />
DocumentRoot E:/projects/krci<br />
&lt;/virtualhost&gt;</p>
<p>&lt;virtualhost *:80&gt;<br />
ServerName projects.dzbanyit.pl<br />
DocumentRoot E:/projects/margo/www<br />
&lt;/virtualhost&gt;</p>
<p>Następnie edytujemy pliku <code>C:\Windows\system32\drivers\etc\hosts</code>:</p>
<p>127.0.0.1       localhost</p>
<p>127.0.0.1       photos.dzbanyit.pl</p>
<p>127.0.0.1       projects.dzbanyit.pl</p>
<p>Restartujemy apacha i możemy się cieszyć poprawnie skonfigurowanymi wirtualnymi hostami ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://dzbanyit.pl/2008/07/21/jak-ustawic-wirtualne-hosty-w-apachu-pod-windowsem/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
