Studio Pragmatists

A blog about how we work and what we're recently up to.

Mar
13
I’m speaking at 33rd degree

The whole next week I’m spending in Cracow on the 33rd degree conference. Last year the conference was just great – great speakers, nice venue, and lots of good opportunities to meet people, discuss, and have fun together.

Last year I had a talk about the overall approach to software development – I claimed, that many developers and whole project teams focus way too much on the code only, forgetting the most important – delivering value: “a working software that matters” as Dan North named it. This year I’ll be talking about the role of a software design in agile projects, or more appropriately – a role of designing software, since designing in agile software development is a process and not one-time act. I’ll be talking about techniques that support agile design like CRC cards modeling, or JEDI design sessions. Feel invited ;-)

Feb
20
Otwarte szkolenie TDD

Już za tydzień otwarte szkolenie z Test-Driven Development. 3 dni wykładów i warsztatów to duża dawka wiedzy, kodowania i projektowania, pozwalająca na rozpoczęcie przygody z TDD. Zapraszamy!

Nov
28
Zapisy na Agile Development Day zakończone

Zakończyliśmy zapisy na Agile Development Day. Niedługo wszyscy, którzy się rejestrowali mogą spodziewać się maila z informacją czy załapali się do grupy szczęśliwych wybrańców.
Informacje dotyczące eventu oraz prowadzących pojawiać się będą na stronie eventu oraz na twitterze pod hashem #agiledevday.
W trakcie eventu będzie można śledzić nasze postępy w budowaniu aplikacji – szczegóły wkrótce na powyższej stronie i twitterze.

Nov
25
Zapisy na ADD już tylko dziś!

Dziś zamykamy zapisy na ADD. Wszystkich zainteresowanych zachęcamy do rejestrowania się – każdy ma równe szanse się dostać.
W poniedziałek wyłonimy uczestników i poinformujemy Was mailem o wyniku.

Nov
7
Agile Development Day – darmowe warsztaty Agile i TDD

Z okazji rozpoczęcia współpracy w ramach szkoleń z firmą Sages, 10 grudnia organizujemy całodniowe darmowe warsztaty dotyczące Agile, TDD, Pair-Programming itp. Poniżej szczegóły eventu. Zapraszamy!

Formularz zgłoszeniowy jest tutaj.

Agile Development Day

Agile Development Day to wyjątkowa okazja, aby poćwiczyć programowanie zespołowe z wykorzystaniem praktyk agile’owych, poznać nowe technologie, a także wspólnie stworzyć webową aplikację, z której korzystać będą inni. Warsztaty odbywać się będą z udziałem specjalistów z firm Pragmatists i Sages oraz zaprzyjaźnionych ekspertów, którzy będą dzielić się swoją wiedzą, programować w parach z uczestnikami, pomagać, coachować oraz prezentować kruczki i sztuczki w popularnych technologiach programistycznych.

Co będziemy robić?

Stworzymy aplikację do wspierania rozwoju i automotywacji programistów.

Podzielimy się na małe zespoły i postaramy się zrealizować projekt możliwie zgodnie z metodyką Extreme Programming. Możecie liczyć na bardzo krótkie iteracje, programowanie w parach, Test-Driven Development, Continuous Integration. Postaramy się wdrożyć praktykę Continuous Deployment, a więc każdy poprawny commit będzie automatycznie budowany i wprowadzany do środowiska produkcyjnego. Każda para będzie miała do pomocy osobę doświadczoną w pracy w zwinnym modelu, by popróbować pracy z programistami doświadczonymi w stosowaniu zwinnych praktyk.

Kto może się zgłosić?

Oczekujemy na zgłoszenia od programistów zainteresowanych wykorzystaniem zwinnych metodyk i ich praktyk w zespołowym tworzeniu oprogramowania. Wymaganiem jest dobra znajomość języka i platformy Java oraz technologii webowych.

Z jakich technologii będziemy korzystać?

Java, Spring Core, Spring MVC, Cassandra, Mockito, JUnit.

Ilu będzie uczestników?

Chcielibyśmy zagwarantować dostępność prowadzących dla wszystkich uczestników, planujemy więc zaprosić do wspólnego programowania 20 osób.

W jaki sposób zostaną wybrani uczestnicy?

W przypadku, gdy otrzymamy więcej, niż 20 zgłoszeń na warsztaty, wybierzemy 20 najciekawszych zgłoszeń, na podstawie odpowiedzi na pytania zawarte w ankiecie.

Kiedy ogłoszona zostanie ostateczna lista uczestników?

Zgłoszenia w postaci ankiet przyjmować będziemy do 25 listopada br. W dniu 28 listopada wszystkie osoby, które przesłały ankiety otrzymają informację, czy znalazły się w gronie uczestników Agile Development Day.

Ile to kosztuje?

Udział w warsztatach jest bezpłatny. Organizatorzy zapewniają lunch i przerwy kawowe. Ewentualne koszty dojazdu, zakwaterowania w Warszawie ponoszą uczestnicy.

Co muszę wziąć ze sobą?

Komputer przenośny z możliwością konfiguracji bezprzewodowego dostępu do Internetu. Organizatorzy warsztatów NIE zapewniają sprzętu dla uczestników. Na komputerze musi być zainstalowane dowolne IDE, Java SDK, Maven 3, git. Początkowy kod projektu będzie dostępny przed spotkaniem (żeby sobie skompilować, odpalić testy, przygotować środowisko).

Jak długo będą trwać warsztaty?

Warsztaty są jednodniowe, odbędą się w sobotę, 10 grudnia 2011 r., w godzinach 8:00 – 17:00.

Gdzie odbywać się będą warsztaty?

Warsztaty odbędą się w Warszawie w budynku Millenium Plaza, Al. Jerozolimskie 123A.

Oct
5
Sages i Pragmatists rozpoczęły współpracę

Miło nam poinformować, że Sages – lider w dziedzinie specjalistycznych szkoleń w branży IT oraz Pragmatists – eksperci w zakresie zwinnego rozwijania oprogramowania – rozpoczęły współpracę, mającą na celu stworzenie kompleksowej oferty szkoleń, obejmującej najpopularniejsze obecnie metodyki prowadzenia projektów informatycznych. Wspólnym celem Sages i Pragmatists jest dostarczanie wiedzy na najwyższym poziomie poprzez połączenie doświadczenia w prowadzeniu projektów szkoleniowych, kompetencji trenerów i konsultantów z wieloletnią praktyką w prowadzeniu projektów informatycznych w oparciu o podejście Agile.

Od 1 października br. w ofercie Sages dostępne są szkolenia realizowane przez konsultantów firmy Pragmatists:

P/AGILE Agile Software Development
Szkolenie adresowane jest do wszystkich osób biorących udział w projektach programistycznych: kierowników projektów, programistów, architektów, testerów. Uczestnicy szkolenia nauczą się prowadzenia projektów zgodnie ze zwinnymi metodykami. Poznają metodyki Scrum, Kanban oraz Extreme Programming, nauczą się je wykorzystywać we własnych projektach oraz będą mieli okazję wypróbować nowe umiejętności w praktyce w ramach warsztatów i ćwiczeń wykonywanych pod okiem prowadzących.

Termin najbliższego szkolenia otwartego: 28-29 listopada 2011

P/TDD Test-Driven Development w Javie
Szkolenie adresowane jest do programistów Java, chcących podnieść swoje umiejętności tworzenia czystego, testowalnego kodu. Uczestnicy poznają i przyswoją sobie cykl pracy TDD, nauczą się projektować oprogramowanie pod kątem testowalności i tworzyć czytelny kod. Poznają biblioteki ułatwiające stosowanie TDD oraz umożliwiające testowanie na różnych poziomach.

Termin najbliższego szkolenia otwartego: 24-26 października 2011

Jun
12
Piosenka o refaktoryzacji

Parę osób (no większe parę ;-) ) prosiło mnie o udostępnienie mojej tfu-rczości Konfiturowej na YT, co niniejszym uczyniłem. Have Fun!

May
18
Przyjęta propozycja na Software Craftsmanship 2011

Mnie w tym roku na Confiturze nie będzie, ale zazdroszcząc Pawłowi i Piotrowi zgłosiłem swoją sesję na inną konferencję. I została przyjęta! Będę więc godnie reprezentować Pragmatists na Wyspach.

Sesja będzie polegać na pisaniu kodu przy zachowaniu zasad ekstremalnego projektowania obiektowego. Pisał o nich niegdyś Paweł na swoim blogu.
Opis i link do wideo na stronie ze szczegółami wszystkich sesji SC 2011.
Jeśli chcecie się dowiedzieć więcej o samej konferencji, zapraszam na oficjalną stronę Software Craftsmanship 2011.
May
18
Propozycje na Confiturę przyjęte

Zarówno moja propozycja prezentacji na temat zaawansowanych refaktoryzacji, jak i temat Piotrka Przybylaka o korzystaniu z mózgownicy zostały przyjęte. Teraz Wam pozostaje się na nich pojawić, a nam dobrze je przygotować ;-)

May
16
JUnitParams

Niedawno dopisałem do Tumblera możliwość definiowania scenariuszy parametryzowanych. Chodzi o to, żeby móc zdefiniować parę zestawów parametrów scenariusza i mieć ten sam jeden scenariusz wykonany dla wszystkich zestawów, weryfikując w ten sposób jego poprawność dla różnych danych. Ale jako, że nie wszyscy chcą używać Tumblera (i nie zawsze jest sens), przepisałem tę funkcjonalność do czystego JUnit’a. Po co? Głównie dlatego, że testy parametryzowane w JUnit to porażka. Z runnerem Parameterized Testy są wg. mnie mniej czytelne, tworzy się dużo klas, generalnie kiszka. Na dodatek do Parameterized są też teorie, które miały rozwiązać parę problemów, ale chyba nikt ich nie używa.
Ostatnio jednak mieliśmy w projekcie sytuację, w której testy parametryzowane byłyby wygodne… gdyby były wygodne. Więc wyciągnąłem ten kawałek Tumbler’a na zewnątrz i tak powstał JUnitParams. Teraz testy parametryzowane w JUnit są dużo przyjemniejsze.

Jak to działa?
1. Trzeba zdefiniować runner (JUnitParamsRunner) –  bo JUnit nie umie wykonać tego samego testu parę razy, a przecież o to nam chodzi.
2. Stworzyć metodę testową z parametrami metody testowej oraz zadnotować ją za pomocą @Parameters podając parametry bezpośrednio w adnotacji, lub podając klasę dostarczającą te wartości z zewnątrz. Jeśli chcemy podać parametry bezpośrednio, to podajemy je jako tablicę String’ów, której każdy element jest jednym zestawem parametrów:
@Parameters({“1, Jaś, true”, “2, Andżelika, false” })
Tak podane parametry są następnie parsowane i rzutowane na odpowiednie podstawowe typy javowe.
Jeśli zaś zestawów parametrów ma być więcej, lub chcemy je pobrać dynamicznie np. z pliku bądź bazy, możemy podać klasę dostarczającą wartości parametrów:
@Parameters(source=NamesParamsProvider.class)
Co do tej klasy nie ma żadnych wymagań poza posiadaniem przynajmniej jednej publicznej statycznej bezparametrowej metody zaczynającej się od provide. Wszystkie takie metody są uruchamiane, ich wyniki zbierane i dostarczane do metody testowej.
Można też przekazywać parametry bez zewnętrznej klasy – podając metodę testu zwracającą dane w adnotacji:
@Parameters(method=”samplePeople”)
3. Już. Żadnych konstruktorów, pól w klasie testowej, czy innych zbędnych dodatków.

Przykładowy test z parametrami wygląda np. tak:

@RunWith(JUnitParamsRunner.class)
public class PersonTest {

  @Test
  @Parameters(method = "adultValues")
  public void isAdult(int age, boolean valid) {
    assertThat(new Person(age).isAdult(), is(valid));
  }

  private Object[] adultValues() {
    return $(
      $(17, false),
      $(22, true)
    );
  }
}

Więcej przykładów na stronie projektu.