<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>webbricks &#187; Agile</title>
	<atom:link href="http://blog.grzegorzpawlik.com/tag/agile/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.grzegorzpawlik.com</link>
	<description>Doświadczenie, to coś, co zdobywamy tuż po chwili w której było nam potrzebne ...</description>
	<lastBuildDate>Tue, 07 Feb 2012 10:09:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Świetna książka PHP: Hight quality frameworks and applications</title>
		<link>http://blog.grzegorzpawlik.com/2012/01/swietna-ksiazka-php-hight-quality-frameworks-and-applications/</link>
		<comments>http://blog.grzegorzpawlik.com/2012/01/swietna-ksiazka-php-hight-quality-frameworks-and-applications/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 17:06:00 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[książki]]></category>
		<category><![CDATA[Cont. Integration]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[unit tests]]></category>

		<guid isPermaLink="false">http://blog.grzegorzpawlik.com/?p=1720</guid>
		<description><![CDATA[Świetna dla każdego, kto pracuje na systemach z zaszłościami (Legacy Systems) myśli, że refaktoring takich systemów nie jest możliwy testy automatyczne muszą być równie przyjemne jak hemoroidy boi się, że aplikacja, w którą zainwestował już sporo powoli staje się niemożliwa &#8230; <a href="http://blog.grzegorzpawlik.com/2012/01/swietna-ksiazka-php-hight-quality-frameworks-and-applications/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><div id="attachment_1727" class="wp-caption alignleft" style="width: 310px"><a href="&quot;http://www.amazon.com/gp/product/0470872497/ref=as_li_ss_tl?ie=UTF8&amp;tag=webbricks-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0470872497"><img src="http://blog.grzegorzpawlik.com/wp-content/uploads/2012/01/hqfaa.png" alt="Real-Worls Solutions for Developing High Quality PHP Frameworks and Applications" title="Designing Hight Quality Frameworks and Applications" width="300" height="300" class="size-full wp-image-1727" /></a><p class="wp-caption-text">Real-Worls Solutions for Developing High Quality PHP Frameworks and Applications</p></div><br />
Świetna dla każdego, kto </p>
<ul>
<li>pracuje na systemach z zaszłościami (Legacy Systems)</li>
<li>myśli, że refaktoring takich systemów nie jest możliwy</li>
<li>testy automatyczne muszą być równie przyjemne jak hemoroidy</li>
<li>boi się, że aplikacja, w którą zainwestował już sporo powoli staje się niemożliwa w utrzymaniu</li>
<li>myśli, że system, którego używa od lat trzeba przepisać od zera</li>
</ul>
<p>
Pozycja zdecudowanie nie jest przeznaczona dla tych, którzy zaczynają swoją przygodę z PHP. Jeśli jednak już okrzepłeś i szukasz czegoś więcej &#8211; polecam gorąco.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.grzegorzpawlik.com/2012/01/swietna-ksiazka-php-hight-quality-frameworks-and-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utrzymanie jakości kodu</title>
		<link>http://blog.grzegorzpawlik.com/2010/10/utrzymanie-jakosci-kodu/</link>
		<comments>http://blog.grzegorzpawlik.com/2010/10/utrzymanie-jakosci-kodu/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 13:49:02 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[jakość oprogramowania]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[software quality]]></category>
		<category><![CDATA[zarządzanie projektem]]></category>

		<guid isPermaLink="false">http://blog.grzegorzpawlik.com/?p=1379</guid>
		<description><![CDATA[Właśnie uświadomiłem sobie, że utrzymanie wysokiej jakości kodu to jest ciągła praca. Wiem, że brzmi to może jak banał, ale to nie jest jakaś wytyczna ustalona raz na początku projektu. Zrozumienie tego zajęło mi 4 lata. Nie możesz się umówić, &#8230; <a href="http://blog.grzegorzpawlik.com/2010/10/utrzymanie-jakosci-kodu/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Właśnie uświadomiłem sobie, że utrzymanie wysokiej jakości kodu to jest <strong>ciągła praca</strong>.</p>
<p>Wiem, że brzmi to może jak banał, ale to nie jest jakaś wytyczna ustalona raz na początku projektu. Zrozumienie tego zajęło mi 4 lata. Nie możesz się umówić, że od teraz, od tego projektu, od tej funkcji będziesz pisał kod wysokiej jakości.</p>
<p>Możesz umówić się, że będziesz pisał kod o jakości najlepszej na jaką Cię w tym momencie stać.</p>
<p><span id="more-1379"></span></p>
<p>Jednak w międzyczasie nauczysz się czegoś nowego. Wysokiej jakości kodu to taki, którego <strong>jakość rośnie ciągle</strong>. Nie tylko wraz z dodawaniem nowych linii. Również trafiając na kod z przed roku warto pochylić się nad nim.</p>
<p>Czy masz zespół, który stosuje <a href="http://97rzeczy.devblogi.pl/artykuly/8/zasada-skautow">zasadę skautów</a>?</p>
<p>Chciałbyś być członkiem takiego zespołu?</p>
<p>Jak zawsze &#8211; staraj się myśleć, żeby nie popaść w <a href="http://www.devblogi.pl/2010/05/pozacanie.html">przesadę</a>.</p>
<hr/>
A to wszystko doszło do mnie, gdy próbowałem w projekcie rozładować trochę powiązania między kontrolerami, gdzie ajaxowa lista kierowców generowana była w kontrolerze/akcji cars/list_drivers ;)</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.grzegorzpawlik.com/2010/10/utrzymanie-jakosci-kodu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>10 wskazówek, które scrum masterzy powinni znać (ale prawdopodobnie nie znają)</title>
		<link>http://blog.grzegorzpawlik.com/2010/03/10-wskazowek-ktore-scrum-masterzy-powinni-znac-ale-prawdopodobnie-nie-znaja/</link>
		<comments>http://blog.grzegorzpawlik.com/2010/03/10-wskazowek-ktore-scrum-masterzy-powinni-znac-ale-prawdopodobnie-nie-znaja/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 07:56:48 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Inne]]></category>
		<category><![CDATA[Nigel Baker]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://blog.grzegorzpawlik.com/?p=881</guid>
		<description><![CDATA[Koledzy z Codespritners wrzucili nagranie z prezentacji Nigela Bakera, w którym wspominałem przy okazji wpisu na temat konferencji w Przegorzałach. Gorąco polecam ją wszystkim, nie tylko programistom: Nigel Baker &#8211; 10 tips for ScrumMasters from Andy Brandt on Vimeo.]]></description>
			<content:encoded><![CDATA[<p>Koledzy z <a href="http://www.codesprinters.pl/">Codespritners</a> wrzucili <a href="http://www.codesprinters.pl/blog/113-10-tips-for-scrum-masters.html">nagranie z prezentacji Nigela Bakera</a>, w którym wspominałem przy okazji <a href="/?p=873">wpisu na temat konferencji w Przegorzałach</a>. </p>
<p>Gorąco polecam ją wszystkim, nie tylko programistom:</p>
<p><object width="629" height="354"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=10481187&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=10481187&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="629" height="354"></embed></object>
<p><a href="http://vimeo.com/10481187">Nigel Baker &#8211; 10 tips for ScrumMasters</a> from <a href="http://vimeo.com/user335447">Andy Brandt</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.grzegorzpawlik.com/2010/03/10-wskazowek-ktore-scrum-masterzy-powinni-znac-ale-prawdopodobnie-nie-znaja/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zimowy AgileTuning &#8211; konferencja w Przegorzałach</title>
		<link>http://blog.grzegorzpawlik.com/2010/03/zimowy-agiletuning-konferencja-w-przegorzalach/</link>
		<comments>http://blog.grzegorzpawlik.com/2010/03/zimowy-agiletuning-konferencja-w-przegorzalach/#comments</comments>
		<pubDate>Sat, 20 Mar 2010 21:03:35 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Inne]]></category>

		<guid isPermaLink="false">http://blog.grzegorzpawlik.com/?p=873</guid>
		<description><![CDATA[Jedna prelekcja była naprawdę niezwykła. Nigel Baker z firmy Agile Bear poprowadził wykład, a właściwie show na temat &#8220;10 tips that ScrumMasters should know (but probably don&#8217;t!). Nigdy nie byłem świadkiem tego jak na konferencji technicznej ktoś w tak zabawny &#8230; <a href="http://blog.grzegorzpawlik.com/2010/03/zimowy-agiletuning-konferencja-w-przegorzalach/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://zimowy.agiletuning.pl/"><img src="http://blog.grzegorzpawlik.com/wp-content/uploads/2010/03/agiletuning-300x225.jpg" alt="Zimowy AgileTuning" title="Zimowy AgileTuning" width="300" height="225" class="alignright size-medium wp-image-874" /></a><br />
Jedna prelekcja była naprawdę niezwykła. <a href="http://www.scrumalliance.org/profiles/2025-nigel-baker">Nigel Baker</a> z firmy <a href="http://www.agilebear.com/">Agile Bear</a> poprowadził wykład, a właściwie show na temat &#8220;10 tips that ScrumMasters should know (but probably don&#8217;t!). Nigdy nie byłem świadkiem tego jak na konferencji technicznej ktoś w tak zabawny i inteligentny sposób kontaktuje się ze słuchaczami. Najcięższe przypadki ADHD nie mogły mieć problemów ze skupieniem się na treści dzięki niebagatelnej formie. <del datetime="2010-03-22T09:02:26+00:00">Niedługo napiszę Wam te 10 punktów Nigela.</del> O tych dziesięciu wskazówkach przeczytacie we <a href="http://agilesurfing.pl/2010/agile/zimowy-agile-tuning/">wpisie na blogu agilesurfing</a>.</p>
<p>Drugą moją ulubioną prezentacją była przygoda z testami akceptacyjnymi i narzędziem <a href="http://bitbucket.org/szczepiq/sweetest/">Sweetest</a> <a href="http://pl.linkedin.com/in/bbankowski">Bartek Bańkowski</a> i <a href="http://pl.linkedin.com/in/szczepiq">Szczepan Faber</a> uraczyli nas żywym i ciekawym podejściem do tematu. Aż żałuję, że moja znajomość Javy ogranicza się do znajomości składni. Chciałoby się móc korzystać z ich narzędzi w moim aktualnym środowisku.</p>
<p>To były dwie najlepsze prezentacje z tych, które miałem możliwość zobaczyć. Nie było możliwe uczestniczyć w nich wszystkich z tego względu, że dwie ścieżki odbywały się równolegle. Niestety w takiej konfiguracji ktoś taki jak ja zainteresowany zarówno ścieżką &#8220;Craft&#8221; jak i &#8220;People&#8221; miał ciężki orzech do zgryzienia.</p>
<p>Czekam na letni AgileTuning. Zdecydowanie warto.</p>
<p>Ah! Dodam jeszcze, że lokalizacja też była wybrana świetnie &#8211; piękne miejsce w <a href="http://www.hotelsinpoland.com/przegorz.htm">hotelu</a> koło <a href="http://www.lechfoto.pl/zamki/przegorzaly/index.html">zamku w Przegorzałach</a>. Mimo, że liście zamiast zielone i na drzewach były bure i na ziemi &#8211; miejsce wydało mi się bardzo malownicze. Jeśli o mnie chodzi to letni tuning też powinien się tam odbyć.</p>
<p>Edit:<br />
<a href="http://www.codesprinters.pl/blog/113-10-tips-for-scrum-masters.html">Wideo z tej prezentacji możecie już obejrzeć tutaj</a>.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.grzegorzpawlik.com/2010/03/zimowy-agiletuning-konferencja-w-przegorzalach/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Dług techniczny</title>
		<link>http://blog.grzegorzpawlik.com/2010/03/dlug-techniczny/</link>
		<comments>http://blog.grzegorzpawlik.com/2010/03/dlug-techniczny/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 16:00:45 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Inne]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[dług techniczny]]></category>

		<guid isPermaLink="false">http://blog.grzegorzpawlik.com/?p=844</guid>
		<description><![CDATA[Czasem w moich tekstach piszę o długu technicznym. Znalazłem świetny opis co oznacza to pojęcie, więc chętnie dzielę się linkiem: http://97rzeczy.devblogi.pl/artykuly/1/postepuj-rozwaznie Myślę, że czasem świadomość, że istnieje coś takiego pozwala na bardziej świadome wytwarzanie kodu i zaciąganie ciut mniejszego długu. &#8230; <a href="http://blog.grzegorzpawlik.com/2010/03/dlug-techniczny/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.grzegorzpawlik.com/wp-content/uploads/2010/03/tech-debt.jpg" alt="dług techniczny" title="dług techniczny" width="308" height="243" class="alignright size-full wp-image-851" /><br />
Czasem w moich tekstach <a href="http://blog.grzegorzpawlik.com/?s=dług+techniczny">piszę o długu technicznym</a>. Znalazłem świetny opis co oznacza to pojęcie, więc chętnie dzielę się linkiem:<br />
<a href="http://97rzeczy.devblogi.pl/artykuly/1/postepuj-rozwaznie">http://97rzeczy.devblogi.pl/artykuly/1/postepuj-rozwaznie</a></p>
<p>Myślę, że czasem świadomość, że istnieje coś takiego pozwala na bardziej świadome wytwarzanie kodu i zaciąganie ciut mniejszego długu. Powodzenia!</p>
<p>Poniżej inne ciekawe nowe artykuły, które powinny zainteresować programistów:<br />
projektowanie kodu:<br />
<a href="http://97rzeczy.devblogi.pl/artykuly/2/stosuj-zasady-programowania-funkcjonalnego">Stosuj zasady programowania funkcjonalnego</a><br />
projektowanie interfejsu:<br />
<a href="http://97rzeczy.devblogi.pl/artykuly/3/zapytaj-co-zrobilby-uzytkownik">Zapytaj &#8220;Co zrobiłby użytkownik?</a></p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.grzegorzpawlik.com/2010/03/dlug-techniczny/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Skróć swoje listingi</title>
		<link>http://blog.grzegorzpawlik.com/2010/02/skroc-swoje-listingi/</link>
		<comments>http://blog.grzegorzpawlik.com/2010/02/skroc-swoje-listingi/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 17:00:48 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Inne]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[CakePHP 1.2]]></category>
		<category><![CDATA[DRY]]></category>
		<category><![CDATA[element]]></category>

		<guid isPermaLink="false">http://blog.grzegorzpawlik.com/?p=615</guid>
		<description><![CDATA[Pewnie w niemal każdym swoim widoku index.ctp masz fragment kodu podobny do tego: &#60;?php $i = 0; foreach ($tracks as $track): $class = null; if ($i++ % 2 == 0) { $class = ' class="altrow"'; } ?&#62; &#60;tr&#60;?php echo $class;?&#62;&#62; &#8230; <a href="http://blog.grzegorzpawlik.com/2010/02/skroc-swoje-listingi/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Pewnie w niemal każdym swoim widoku index.ctp masz fragment kodu podobny do tego:</p>
<pre name="code" class="php">
&lt;?php
$i = 0;
foreach ($tracks as $track):
	$class = null;
	if ($i++ % 2 == 0) {
		$class = ' class="altrow"';
	}
?&gt;
	&lt;tr&lt;?php echo $class;?&gt;&gt;
		&lt;td&gt;
			&lt;?php echo $track['Track']['id']; ?&gt;
		&lt;/td&gt;
		&lt;td&gt;
			&lt;?php echo $track['Track']['name']; ?&gt;
		&lt;/td&gt;
		&lt;td&gt;
			&lt;?php echo $track['Car']['name']; ?&gt;
		&lt;/td&gt;
		&lt;td&gt;
			&lt;?php echo $track['Track']['begin']; ?&gt;
		&lt;/td&gt;
		&lt;td&gt;
			&lt;?php echo $track['Track']['end']; ?&gt;
		&lt;/td&gt;
		&lt;td&gt;
			&lt;?php echo $track['Track']['length']; ?&gt;
		&lt;/td&gt;
		&lt;td class="actions"&gt;
			&lt;?php echo $html-&gt;link(
			   __('Edycja', true),
			   array(
			      'action' =&gt; 'edit',
			      $track['Track']['id'] ,
			      $track['Car']['id']
			   )
			  );
			?&gt;

		&lt;/td&gt;
	&lt;/tr&gt;
&lt;?php endforeach; ?&gt;
&lt;/table&gt;
</pre>
<p>Chce Ci się pisać ten kod kilkadziesiąt razy w jednym projekcie? Mnie też nie. Dlatego napisałem prosty element, który to trochę automatyzuje (nazwałem go &#8220;list&#8221;):</p>
<pre name="code" class="php">
// app/views/elements/list.ctp
&lt;?php
   $i = 0;
   foreach($elements as $key =&gt; $element):
   $class = null;
   if ($i++ % 2 == 0) {
      $class = ' class="altrow"';
   }
?&gt;
   &lt;tr &lt;?php echo $class?&gt;&gt;
      &lt;?php foreach($fields as $path): ?&gt;
         &lt;td&gt;
            &lt;?php echo Set::classicExtract($element, $path) ?&gt;
         &lt;/td&gt;
      &lt;?php endforeach; ?&gt;
         &lt;?php if(isset($links)): ?&gt;
            &lt;td&gt;
               &lt;?php foreach($links as $name =&gt; $url): ?&gt;
                  &lt;?php
                     if(!is_array($url["params"])) {
                        $url["params"] = array($url["params"]);
                     }
                     foreach($url["params"] as $key =&gt; $path){
                        $url[$key] = Set::classicExtract(
                           $element,
                           $path
                        );
                     }
                     unset($url["params"]);
                  ?&gt;
                  &lt;?php echo $html-&gt;link($name, $url)?&gt;
               &lt;?php endforeach; ?&gt;
            &lt;/td&gt;
         &lt;?php endif; ?&gt;
   &lt;/tr&gt;
&lt;?php endforeach; ?&gt;
</pre>
<p>Jego użycie jest dość proste. Dla przykładu wygenerujemy ten sam &#8220;output&#8221; dla pierwszego listingu z tego postu:</p>
<pre name="code" class="php">
echo $this->renderElement(
         "list",
         array(
            "elements" => $tracks,
            "fields" => array(
               "Track.name", "Car.name", "Track.begin",
               "Track.end", "Track.length"
            ),
            "links"=> array(
               "edycja" => array(
                  "controller"=> "tracks", "action"=> "edit",
                  "params" => array(
                     "Track.id", "Car.id"
                  )
               )
            )
         )
      )
</pre>
<p>Opiszę poszczególne parametry przekazywane do tego elementu:</p>
<ul>
<li>&#8220;elements&#8221; &#8211; kolekcja (w tym wypadku tablica) elementów zwrócona na przykład przez $this->Track->find(&#8220;all&#8221;)</li>
<li>&#8220;fields&#8221; &#8211; pola, które mają się pojawić w komórkach tabeli</li>
<li>&#8220;links&#8221; &#8211; tu definiujemy jakie linki mają się pojawić w ostatniej kolumnie (zazwyczaj tam znajdują się &#8220;opcje&#8221;). Indeksy kolejnych elementów to nazwy linków (tutaj &#8220;edycja&#8221;).
<ul>
<li>&#8220;controller&#8221; i &#8220;action&#8221; są identycznie używane jak w metodzie <a href="http://api12.cakephp.org/class/html-helper#method-HtmlHelperlink">HtmlHelper::link()</a></li>
<li>&#8220;params&#8221; jest dość ciekawy. Jeśli chcemy w wygenerowanym linku mieć jeden parametr (najczęściej id), robimy to tak:
<pre name="code" class="php">
            "edycja" => array(
               "controller"=> "cars", "action"=> "edit", "params"=>"Car.id"
            ),
</pre>
<p>gdy parametrów ma być więcej &#8211; ścieżki do nich przekazujemy w tablicy (tak jak w przykładzie):</p>
<pre name="code" class="php">
                "edycja" => array(
                   "controller"=> "tracks", "action"=> "edit",
                   "params" => array(
                      "Track.id", "Car.id"
                   )
                )
</pre>
<p>Można także używać parametrów typu <a href="http://book.cakephp.org/pl/view/541/Named-parameters">&#8220;named&#8221;</a>, wystarczy podać dodatkowo indeksy:</p>
<pre name="code" class="php">
                "edycja" => array(
                   "controller"=> "tracks", "action"=> "edit",
                   "params" => array(
                     "parametr_1"=> "Track.id", "parametr_2"=> "Car.id"
                   )
                )
</pre>
</li>
</ul>
</ul>
<p>Zachęcam do korzystania z tego elementu i zgłaszania wszelkich niedociągnięć :)</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.grzegorzpawlik.com/2010/02/skroc-swoje-listingi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zabawy ze SCRUM</title>
		<link>http://blog.grzegorzpawlik.com/2009/10/zabawy-ze-scrum/</link>
		<comments>http://blog.grzegorzpawlik.com/2009/10/zabawy-ze-scrum/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 14:25:09 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[zarządzanie projektem]]></category>

		<guid isPermaLink="false">http://blog.grzegorzpawlik.com/?p=379</guid>
		<description><![CDATA[Jakiś czas temu wystartowaliśmy z nowym projektem (jeszcze nie mogę powiedzieć czego dotyczy), w którym mamy więcej wykorzystanych praktyk z kategorii Agile niż inne do tej pory. Przede wszystkim &#8211; iteracje (trzytygodniowe). Właśnie zakończyliśmy pierwszą. Odbyła się prezentacja iteracji, na &#8230; <a href="http://blog.grzegorzpawlik.com/2009/10/zabawy-ze-scrum/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Jakiś czas temu wystartowaliśmy z nowym projektem (jeszcze nie mogę powiedzieć czego dotyczy), w którym mamy więcej wykorzystanych praktyk z kategorii Agile niż inne do tej pory.</p>
<p>Przede wszystkim &#8211; <strong>iteracje</strong> (trzytygodniowe).<br />
Właśnie zakończyliśmy pierwszą. Odbyła się<strong> prezentacja iteracji</strong>, na której niestety nie było klienta. Był za to szef w roli klienta wewnętrznego- to on bywał na spotkaniach z klientami, więc był najlepszym substytutem na jaki nas było stać.</p>
<p>Ze scrum używamy <strong>dziennika zaległości produktowych</strong> (product backlog), który ciągle się rozrasta. Na razie sukcesem jest to, że przed końcem pierwszej iteracji w dzienniku mieliśmy wystarczająco elementów, żeby zacząć następną.</p>
<p>Tak wygląda wykres burndown dla zakończonej właśnie iteracji:<br />
<img src="http://blog.grzegorzpawlik.com/wp-content/uploads/2009/10/iteracja1_burndown_chart1.png" alt="iteracja1_burndown_chart" title="iteracja1_burndown_chart" width="417" height="245" class="alignnone size-full wp-image-384" /></p>
<p>Staramy się stosować<strong> stopniowe zbieranie wymagań</strong> i <strong>stopniowy rozwój architektury</strong> z tym, że to drugie przetestowaliśmy już wcześniej w mniejszych pod-projektach. Pomijając fakt, że jest to zwyczajnie przyjemne podejście &#8211; gdybyśmy chcieli zebrać wszystkie wymagania, to trwałoby to do końca października. Gdyby jeszcze do tego projektować wszystko &#8220;z góry&#8221; &#8211; następny miesiąc by minął do startu projektu.</p>
<p>Po pierwszej <strong>retrospekcji</strong> doszliśmy do wniosku, że zbyt mało energii zostało włożone w etap planowania iteracji. Tym razem bardziej się na tym skupiliśmy. Jednak efekty, jeśli będą widoczne, to dopiero podczas kolejnej iteracji.</p>
<p>Udało nam się też wykonać krok w kierunku ciągłej integracji (CI):<br />
- używamy MySchemaShell do migracji struktury bazy danych<br />
- własnego narzędzia dla startowych danych testowych (też programik Shell) + do generowania obiektów ACL<br />
- Selenium dla prostych (na razie) testów interfejsu, dla zabezpieczenia się przed sytuacją, gdy jest dwie godziny do prezentacji iteracji, nie ma odważnego do przeklikania systemu w celu znalezienia wpadek. No i te wpadki znajduje klient. Te testy trochę trwają, ale na pewno mniej niż ręczne &#8220;śmiganie po stronie&#8221;.</p>
<p>Co do testów jednostkowych &#8211; na razie jest plan, aby umieszczać je w krytycznych miejscach. Co w praktyce oznacza testowanie reguł biznesowych umieszczonych w warstwie modelu.</p>
<p>Jeśli pojawi się więcej ciekawostek &#8211; na pewno nie omieszkam napisać.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.grzegorzpawlik.com/2009/10/zabawy-ze-scrum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jaką książkę warto przeczytać, aby poznać Agile?</title>
		<link>http://blog.grzegorzpawlik.com/2009/06/jaka-ksiazke-warto-przeczytac-aby-poznac-agile/</link>
		<comments>http://blog.grzegorzpawlik.com/2009/06/jaka-ksiazke-warto-przeczytac-aby-poznac-agile/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 16:21:42 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[książki]]></category>

		<guid isPermaLink="false">http://blog.grzegorzpawlik.com/?p=263</guid>
		<description><![CDATA[Z racji mojej magisterki i zainteresowań trochę książek o tej tematyce mam za sobą (na szczęście &#8220;za&#8221; ;)). Dlatego chętnie podzielę się swoimi doświadczeniami polecając trzy pozycje: Agile Software Development. Gra zespołowa. Alistair Cockburn Bardzo dobra pozycja, choć dość trudna &#8230; <a href="http://blog.grzegorzpawlik.com/2009/06/jaka-ksiazke-warto-przeczytac-aby-poznac-agile/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Z racji mojej magisterki i zainteresowań trochę książek o tej tematyce mam za sobą (na szczęście &#8220;za&#8221; ;)). Dlatego chętnie podzielę się swoimi doświadczeniami polecając trzy pozycje:</p>
<ol>
<li><a href="http://helion.pl/view/4113g/agilsd.htm">Agile Software Development. Gra zespołowa. Alistair Cockburn<br />
                   <div class="wp-caption alignleft" style="width: 191px"><img alt="Agile Software Development. Alistair Cockburn" src="http://helion.pl/okladki/181x236/agilsd.jpg" title="Agile Software Development. Alistair Cockburn" width="181" height="236" /><p class="wp-caption-text">Agile Software Development. Dużo teorii i dużo informacji</p></div><br />
             </a><br />
Bardzo dobra pozycja, choć dość trudna w odbiorze. Charakteryzuje się dość wysokim poziomem abstrakcji. Ale dzięki niej można zrozumieć <u>dlaczego agile działa</u>, a nawet kiedy nie działa i dlaczego. Autor jest też twórcą rodziny metodyk Crystal i z tej książki dowiesz się o nich co nieco. Jeśli na temat stosowania Agile chcesz poznać wszystkie sekrety i mechanizmy stojące za jego siłą &#8211; to pozycja dla Ciebie. Jeśli nie jesteś gotowy na teoretyczną przeprawę &#8211; rzuć okiem na pozycje poniżej.</p>
</li>
<li style="clear: both;"><a href="http://helion.pl/view/4113g/agilde.htm">Agile Development. Filozofia programowania zwinnego. James Shore, Shane Warden<div class="wp-caption alignleft" style="width: 191px"><img alt="Agile Development. Shore, Warden" src="http://helion.pl/okladki/181x236/agilde.jpg" title="Agile Development. Shore, Warden" width="181" height="236" /><p class="wp-caption-text">Agile Development. Równowaga między teorią a praktyką stosowania XP</p></div></a><br />
        To nieco lżejsza pozycja, bardziej traktująca o tym <u>jak używać</u> (w tym przypadku XP), a nie jak działa. Z tej książki poznasz dokładnie wszystkie elementy XP, łącznie z tymi najbardziej subtelnymi. Dowiesz się dlaczego programowanie w parach jest równie skuteczne, co dziwaczne (na pierwszy rzut oka). Jeśli jesteś szefem programistów &#8211; zrozumiesz dokładniej co programiści robią podczas pracy. Dowiesz się, że jeśli nie klepią w klawiaturę, to jeszcze nie oznacza, że nie pracują. Pozycja obowiązkowa dla tych, którzy chcą z powodzeniem stosować XP. Dla osiągnięcia mistrzostwa prawdopodobnie po pół roku używania XP warto by do niej wrócić.
        </li>
<li style="clear: both;"><a href="http://helion.pl/view/4113g/hfsode.htm">Head First Software development. Dan Pilone, Russ Miles<br />
               <div class="wp-caption alignleft" style="width: 191px"><img alt="Head First Software Development. Pilone, Miles" src="http://helion.pl/okladki/181x236/hfsode.jpg" title="Head First Software Development. Pilone, Miles" width="181" height="236" /><p class="wp-caption-text">Head First Software Development. Zestaw praktyk w lekkiej i przystępnej formie</p></div></a><br />
          Najlżejsza pozycja w zestawienia, jednak również wartościowa. Nie przedstawia z sobą żadnej konkretnej metodyki. Choć może raczej nie przedstawia żadnej nazwanej metodyki. Jest to <u>zbiór prostych praktyk</u>, które usprawnią działanie Twojego zespołu. Przykłady zamieszczone są w języku Java, ale pozycja przydatna nawet dla tych co Javy nie znają (jak ja, kiedy zaczynałem tą książkę czytać). Wiele ćwiczeń, pytań i wszystkiego, co sprawi, że nawet jeśli zdiagnozowano u Ciebie ADHD &#8211; wciągnie Cię i niewielkim wysiłkiem poznasz podstawy zwinnego wytwarzania oprogramowania.
        </li>
<p>Miłej lektury. </p>
<p>Ps. jeśli sam(a) chcesz mi coś polecić &#8211; wrzuć to koniecznie do komentarza &#8211; nie mogę się doczekać.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.grzegorzpawlik.com/2009/06/jaka-ksiazke-warto-przeczytac-aby-poznac-agile/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Refactoring pracy magisterskiej</title>
		<link>http://blog.grzegorzpawlik.com/2009/06/refactoring-pracy-magisterskiej/</link>
		<comments>http://blog.grzegorzpawlik.com/2009/06/refactoring-pracy-magisterskiej/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 12:49:08 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[rafactoring]]></category>

		<guid isPermaLink="false">http://blog.grzegorzpawlik.com/?p=253</guid>
		<description><![CDATA[Sobota (wczoraj) http://helion.pl/view/4113g/agilsd.htm To było jak olśnienie. Okazuje się, że refactoring to nie jest coś co tylko programiści mogą robić. Oto jak było. Od miesiąca nie przybyło w mojej pracy magisterskiej więcej niż 2 strony. Nie mogłem się zabrać. Jak &#8230; <a href="http://blog.grzegorzpawlik.com/2009/06/refactoring-pracy-magisterskiej/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Sobota (wczoraj)</p>
<p>http://helion.pl/view/4113g/agilsd.htm</p>
<p>To było jak olśnienie. Okazuje się, że refactoring to nie jest coś co tylko programiści mogą robić. Oto jak było.</p>
<p>Od miesiąca nie przybyło w mojej pracy magisterskiej więcej niż 2 strony. Nie mogłem się zabrać. Jak się zabierałem &#8211; szybko kończyły mi się pomysły, nie miałem ochoty więcej rozwijać wątków. Miałem wrażenie, że nic nowego tam nie dodam. Aż wczoraj wracając z wykładu przedmiotu &#8220;Koncepcje zarządzania&#8221; (o Lean management, banchmarkingu, outsourcingu itp. &#8211; inspirujące tematy) pomyślałem, że trzeba coś z tym zrobić. </p>
<p>Miesiącami już czytam o zwinnym wytwarzaniu oprogramowania. Niedawno w książce <a href="http://helion.pl/view/4113g/agilsd.htm">&#8220;Agile Software Development. Gra zespołowa&#8221;</a> doszedłem do miejsca, w którym autor, Alistair Cockburn, opisał jak wykorzystał podejście zwinne przy rozbudowie domu (!). Wracając ze wspomnianego wykładu pomyślałem- skoro piszę pracę o zwinnym wytwarzaniu (oprogramowania), to może napiszę ją w sposób zwinny?</p>
<p>Po pierwsze postanowiłem znokautować swój pierwszy problem: nie wiedziałem na jakim etapie jestem. Brakowało mi informacji mimo, że mój zespół składał się tylko ze mnie &#8211; potrzebowałem <a href="http://alistair.cockburn.us/Information+radiator">radiatora informacji</a> mimo, że jedynie ja miałbym z niego korzystać. Kupiłem korkową tablicę (miałem ochotę na &#8220;suchościeralną&#8221;, ale a/ była sobota i jeden sklep papierniczy był otwarty w okolicy b/ to wersja ekonomiczna: 60x40cm ok.20zł). Po powrocie do domu, przy pomocy dratwy przymocowałem ją do regału nad monitorem. Jest &#8220;Wystarczająco stabilna&#8221;</p>
<p>Miałem już radiator, teraz pora zacząć od podstaw: ustalić misję, cel projektu. Na niedużej kartce (takiej do notowania) napisałem mazakiem &#8220;Cel pracy&#8221;<br />
i przykleiłem do niej 3 karteczki z powodami dla których w ogóle się tym zajmuję, zamiast na przykład wspinać się po górach. Po chwili uznałem, że warto ustalić im ważność. Dopisałem w nawiasie &#8220;wysokość ma znaczenie&#8221; i narysowałem podziałkę ;). Poniżej wrzucę efekty, jak tylko będę miał w rękach aparat.</p>
<p>Po drugie potrzebowałem &#8220;opowieści&#8221;, głównie po to, aby móc stosować &#8220;energiczną pracę&#8221;. Znam siebie na tyle, że wiem iż kiedy mam niepustą kolejkę zadań do wykonania &#8211; wtedy pracuję wydajniej. Zawsze mogę sięgnąć po następne zadanie &#8211; nie tracę czasu na zastanawianie się &#8220;co teraz?&#8221;. Na tablicy pojawiły się karteczki z nazwami danych obszarów: &#8220;Do zrobienia&#8221;, &#8220;W trakcie&#8221;, &#8220;Zrobione&#8221; :)</p>
<p>Postanowiłem postawić sobie krótkie zadanie do wykonania, aby szybko otrzymać nagrodę w postaci jego wypełnienia. Cały czas tytuł mojej pracy nie był ostateczny. Choć należałoby powiedzieć raczej, że był <u>bardzo wstępny</u>. Źle się z tym czułem, bo też mi się nie podobał, trącił trywialnością. Brzmiał &#8220;Możliwość zastosowania Zwinnej metodyki budowania aplikacji internetowych w firmie X&#8221;. Nawet gdyby zmiana tytułu miała polegać na zmianie błędu &#8220;zwinnej metodyki&#8221; na &#8220;zwinnych metodyk&#8221; &#8211; to był sukces, którego potrzebowałem.<br />
Jednak podczas wypełniania karteczki z opowieścią, w której chciałem opisać mniej więcej co jest do zrobienia pojawił się pomysł i zanotowałem:</p>
<blockquote><p>
Może warto zmienić na &#8220;Nowoczesne metodyki <del datetime="2009-06-14T11:28:00+00:00">wytważania</del> wytwarzania oprogramowania; Agile; możliwość zastosowania w mikroprzedsiębiorstwach na podstawie firmy X&#8221;
</p></blockquote>
<p>Potem dokleiłem karteczkę &#8220;elasyczne, zwinne zamiast *nowoczesne*&#8221; i drugą &#8220;drugi temat pozwala skupić się na Agile zamiast na firmie&#8221;.</p>
<p>Efekty mi się podobały. Pomyślałem, że ta zmiana powinna zostać skonsultowana z moim promotorem. Zmniejszyłem nieco obszar &#8220;Zrobione&#8221;, który nie jest istotny pod względem informacyjnym &#8211; rosnący tam pęk zadań ma sprawiać, że będę się czuł pracowity :D; dodałem obszar &#8220;Skonsultować z promotorem&#8221; i tam wbiłem zadanie z tytułem. </p>
<p>Przyszedł czas na zadanie numer dwa. Jakiś czas temu M (nie wiem, czy pozwoli ujawnić swoje imię), kolega z pracy, zagaił mnie o magisterkę. Sam jest prawie rok po obronie. W dyskusji wyjawił, że gdy już miał spis treści &#8211; bardzo łatwo mu się pisało, gdyż po prostu pisał o tym o czym dany podrozdział miał traktować. Ja miałem odczucie, że mój spis treści jest zabałaganiony. Dlatego zadanie numer 2 brzmiało: &#8220;Uporządkować spis treści&#8221;.</p>
<p>Spis treści jest krajobrazem mojej pracy, dlatego go wydrukowałem, aby móc nad nim kontemplować. Wyglądał mniej więcej tak:</p>
<ol>
	</li>
<p>Wstęp</li>
<li>Zapotrzebowanie na metodyki</li>
<li>Ogólnie o metodykach</li>
<li>Przykłady metodyk zwinnych</li>
<li>Typowe problemy w firmie X</li>
<li>Metodyki zwinne (Agile)</li>
<li>Konfrontacja teorii z rzeczywistością</li>
</ol>
<p>Po pierwsze postanowiłem połączyć rozdział 2 z 3 &#8211; w końcu były niemal o tym samym. A treść zawarta w rozdziale 2 sprawiała, że nie miałem o czym pisać w rozdziale 3. To samo tyczyło się rozdziałów 4 i 6 &#8211; nabazgrałem między nimi linię opatrzoną opisem &#8220;połączyć&#8221;.<br />
Rzuciłem okiem na nowy pomysł tytułu, który mi się spodobał bardziej. Pomyślałem, że fajnie przesunął ciężar pracy z implementacji metodyki w firmie X, na opisanie metodyk zwinnych. Pomyślałem, że spis powinien oddawać kolejność zaproponowaną w tytule, tym bardziej, że tytuł oddawał to o czym chciałem pisać. Nabazgrałem kilka strzałem z przesunięciem rozdziału 5 na przedostatnią pozycję. Teraz spis miał sens &#8211; drzewa były &#8220;zielonym do góry;)&#8221;. Policzyłem jeszcze ile będzie &#8220;nowych&#8221; rozdziałów, żeby ich nie było za mało. Z 8 liczba spadła do 6. Projekt uległ uproszczeniu, stał się bardziej przejrzysty. </p>
<p>Zatem zabrałem się za przenoszenie akapitów w pracy w taki sposób, aby wygenerowany spis treści był taki jak chciałem. W trakcie tych czynności pomyślałem, że przeprowadzam właśnie refactoring mojej pracy magisterskiej. Ucieszyłem się i z tej radości napisałem &#8220;refactoring :)&#8221; na przylepnej, żółtej karteczce i ustawiłem sobie opis na skype &#8220;refactoring pracy magisterskiej&#8221;. Taka była moja radość.</p>
<p>Gdy skończyłem &#8211; wpiąłem zadanie w miejsce &#8220;Skosultować z promotorem&#8221;; wygenerowałem dwa pdfy ze starym i nowym spisem treści i wysłałem maila do doktora B, z nowym pomysłem tytułu, uzasadnieniem i spisami treści. </p>
<p>W międzyczasie pojawił się pomysł na kolejne zadanie. Otóż czytając książki (źródła ;)) nauczony doświadczeniem &#8211; sporo bazgrałem, zaznaczałem ciekawe fragmenty itd. Gdybym tego nie zrobił &#8211; straciłbym przemyślenia, które pojawiały się podczas czytania (często w krakowskich tramwajach). Nie miałbym też ochoty drugi raz brnąć przez lekturę (nie chodzi o to, że nieciekawą &#8211; ale mam znam kilka większych przyjemności niż czytanie dwa razy tej samej książki, na przykład przeczytanie dwóch książek raz :D). </p>
<p>Teraz miałem 6 książek: 2 przeczytane w całości (w tym &#8220;Marsz ku klęsce&#8221; Yourdona), jedną przeczytaną tak daleko jak wydało mi się konieczne, 2 w trakcie czytania oraz jedną ledwie liźniętą. Łącznie mają już w sobie kilka dobrych gram grafitu ołówków z ikei (mały czasem może więcej). Problem polegał na uporządkowaniu tej wiedzy. Trzecie zadanie &#8220;Uporządkowanie źródeł&#8221; zostało wbite w strefę &#8220;do zrobienia&#8221;. Pojawiło się na niej 6 karteczek &#8211; jedna dla każdego tytułu. </p>
<p>W międzyczasie moja ukochana wróciła z zajęć, więc praca była tego dnia skończona. Całe szczęście &#8211; nie przeszkadza jej spora tablica korkowa zasłaniająca pół regału :D</p>
<p>Niedziela.</p>
<p>Zabrałem pierwszą i wkleiłem w miejsce &#8220;W trakcie&#8221;. Przeglądałem wypatrując zakreśleń, gdy je namierzałem &#8211; opisywałem o czym jest i wklejałem zakładkę. Mniej więcej w połowie przyszedł czas na przerwę: picie zimnej kawy, głośne słuchanie muzyki, telefon do przyjaciela (serio). </p>
<p>Teraz karteczka &#8220;Cockburn&#8221; jest skreślona (znaczy skończona) i wróciła na kartkę opowieści. Zabrało mi to nieco ponad 3 godziny. Jednak na pierwszy ogień postanowiłem wziąć zadania trudniejsze, żeby po dwóch największych skarbnicach grafitu mimo zmęczenia móc na luzie dokończyć pracę. &#8220;W trakcie&#8221; jest teraz Shore, ale zanim zacznę &#8211; miałem ochotę napisać ten post.</p>
<p>Teraz wracam do porządkowania źródeł. Gdy w tej sprawie coś się pojawi jeszcze ciekawego, na pewno o tym napiszę. </p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.grzegorzpawlik.com/2009/06/refactoring-pracy-magisterskiej/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

