Posts Tagged Agile
10 wskazówek, które scrum masterzy powinni znać (ale prawdopodobnie nie znają)
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 – 10 tips for ScrumMasters from Andy Brandt on Vimeo.
Zimowy AgileTuning – konferencja w Przegorzałach

Jedna prelekcja była naprawdę niezwykła. Nigel Baker z firmy Agile Bear poprowadził wykład, a właściwie show na temat “10 tips that ScrumMasters should know (but probably don’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. Niedługo napiszę Wam te 10 punktów Nigela. O tych dziesięciu wskazówkach przeczytacie we wpisie na blogu agilesurfing.
Drugą moją ulubioną prezentacją była przygoda z testami akceptacyjnymi i narzędziem Sweetest Bartek Bańkowski i Szczepan Faber 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.
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ą “Craft” jak i “People” miał ciężki orzech do zgryzienia.
Czekam na letni AgileTuning. Zdecydowanie warto.
Ah! Dodam jeszcze, że lokalizacja też była wybrana świetnie – piękne miejsce w hotelu koło zamku w Przegorzałach. Mimo, że liście zamiast zielone i na drzewach były bure i na ziemi – miejsce wydało mi się bardzo malownicze. Jeśli o mnie chodzi to letni tuning też powinien się tam odbyć.
Skróć swoje listingi
Pewnie w niemal każdym swoim widoku index.ctp masz fragment kodu podobny do tego:
<?php
$i = 0;
foreach ($tracks as $track):
$class = null;
if ($i++ % 2 == 0) {
$class = ' class="altrow"';
}
?>
<tr<?php echo $class;?>>
<td>
<?php echo $track['Track']['id']; ?>
</td>
<td>
<?php echo $track['Track']['name']; ?>
</td>
<td>
<?php echo $track['Car']['name']; ?>
</td>
<td>
<?php echo $track['Track']['begin']; ?>
</td>
<td>
<?php echo $track['Track']['end']; ?>
</td>
<td>
<?php echo $track['Track']['length']; ?>
</td>
<td class="actions">
<?php echo $html->link(
__('Edycja', true),
array(
'action' => 'edit',
$track['Track']['id'] ,
$track['Car']['id']
)
);
?>
</td>
</tr>
<?php endforeach; ?>
</table>
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 “list”):
// app/views/elements/list.ctp
<?php
$i = 0;
foreach($elements as $key => $element):
$class = null;
if ($i++ % 2 == 0) {
$class = ' class="altrow"';
}
?>
<tr <?php echo $class?>>
<?php foreach($fields as $path): ?>
<td>
<?php echo Set::classicExtract($element, $path) ?>
</td>
<?php endforeach; ?>
<?php if(isset($links)): ?>
<td>
<?php foreach($links as $name => $url): ?>
<?php
if(!is_array($url["params"])) {
$url["params"] = array($url["params"]);
}
foreach($url["params"] as $key => $path){
$url[$key] = Set::classicExtract(
$element,
$path
);
}
unset($url["params"]);
?>
<?php echo $html->link($name, $url)?>
<?php endforeach; ?>
</td>
<?php endif; ?>
</tr>
<?php endforeach; ?>
Jego użycie jest dość proste. Dla przykładu wygenerujemy ten sam “output” dla pierwszego listingu z tego postu:
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"
)
)
)
)
)
Opiszę poszczególne parametry przekazywane do tego elementu:
- “elements” – kolekcja (w tym wypadku tablica) elementów zwrócona na przykład przez $this->Track->find(“all”)
- “fields” – pola, które mają się pojawić w komórkach tabeli
- “links” – tu definiujemy jakie linki mają się pojawić w ostatniej kolumnie (zazwyczaj tam znajdują się “opcje”). Indeksy kolejnych elementów to nazwy linków (tutaj “edycja”).
- “controller” i “action” są identycznie używane jak w metodzie HtmlHelper::link()
- “params” jest dość ciekawy. Jeśli chcemy w wygenerowanym linku mieć jeden parametr (najczęściej id), robimy to tak:
"edycja" => array( "controller"=> "cars", "action"=> "edit", "params"=>"Car.id" ),gdy parametrów ma być więcej – ścieżki do nich przekazujemy w tablicy (tak jak w przykładzie):
"edycja" => array( "controller"=> "tracks", "action"=> "edit", "params" => array( "Track.id", "Car.id" ) )Można także używać parametrów typu “named”, wystarczy podać dodatkowo indeksy:
"edycja" => array( "controller"=> "tracks", "action"=> "edit", "params" => array( "parametr_1"=> "Track.id", "parametr_2"=> "Car.id" ) )
Zachęcam do korzystania z tego elementu i zgłaszania wszelkich niedociągnięć