piątek, 19 grudnia 2014

Video z prezentacji na JDD 2014: JPA i DDD

Mapowanie relacyjnono-obiektowe prawdziwych obiektów.

Slajdy: http://prezi.com/fsvd1xnvecff/mapowanie-relacyjno-obiektowe-prawdziwych-obiektow/

Główne tezy:
  • nie używaj lazy loadingu
  • uważaj na typ kolekcji
  • rozważ 3 sposoby optimistic locking
  • wzorzec Repository ma więcej sensu się wydaje
  • CQRS na ratunek

...a tu więcej do poczytania: http://bottega.com.pl/artykuly-i-prezentacje






Jak wciągnąć eksperta domenowego w wir modelowania


Główne tezy:
  • Model jest narzędziem komunikacji
  • Przydawki są ważne:)
  • Można myśleć funkcyjnie i programować obiektowo
  • Proces jest pochodną domeny
  • User story jest słabe - potrzebujesz domain story
  • Refaktoryzacja bez zrozumienia domeny jest zgubna






poniedziałek, 1 grudnia 2014

Devtalk i konkurs

W drodze do pracy możesz posłuchać Devtalków prowadzonych przez Macieja Aniserowicza.
W tym ostatniej publikacji - rozmowy na temat DDD: 04 – O DOMAIN DRIVEN DESIGN ZE SŁAWOMIREM SOBÓTKĄ

Przy okazji rozpisaliśmy mały konkurs (szczegóły w linku) - do wygrania jest książka: Implementing DDD, która czeka już u mnie w domu na zwycięzcę.

Książkę polecam każdemu - nie tylko zainteresowanym tematyką DDD. Można znaleźć w niej syntezę najnowszych trendów architektonicznych i technik programistycznych. Autora poznałem osobiście - zdradził, że książkę oddał do "wygładzenia" autorom serii Head First (którą pewnie wszyscy znają).

środa, 15 października 2014

Relacja z JDD

Do tej pory nie pisałem relacji z konferencji, na których bywam, bo myślałem, że relacji jest tak wiele, że kolejna nic nie wniesie.

Okazało się, że tak było kiedyś... Tradycja relacjonowania zanika w narodzie, zatem pomyślałem, że ją podtrzymam - szczególnie, że tym razem każda prezentacja jaką wybrałem (niestety tylko pierwszego dnia) była wartościowa merytorycznie i świetnie poprowadzona.

Zachęcam do poświęcenia kilku godzin gdy tylko video z konferencji pojawi się na YT.
A póki co mam dla Was slajdy, które zebrałem do prelegentów.


10 THINGS I’D TELL MY YOUNGER SELF ABOUT (JAVA) WEB DEVELOPMENT 

Dykcja, fason, styl...
Historia opowiedziana po mistrzowsku od strony retorycznej: CV Mateusza sprzed 10 lat, wspomnienia technicznych decyzji jakich dokonywał (jak się okazuje) nieświadomie. Piękny przekaz dla młodszych programistów - macie szansę uniknąć błędów jaki my popełniliśmy.

A merytorycznie dużo, dużo mięcha:
  • czym kierować się wybierając framaework webowy i silnik szablonów - nie odcinaj się od HTTP - gdy będziesz chciał/chciała zrobić coś poważnego poczuje ból braku dostępu do "metalu"
  • czy Twój framework webowy i silnik szablonów da się testować wprost?
  • kiedy node.js (ogólnie event looop) ma sens a kiedy nie - masz do czynienia z High IO czy High CPU?
  • kontenery DI - odróżniaj składanie obiektów od zasięgów, to osobne klasy problemów. A tak poza tym od zasięgów są nawiasy w Javie:P
  • loguj na std.out - system operacyjny najlepiej zajmie się IO
  • adnotacje są jak łupież - w sumie Cię nie zabiją, ale brzydko to wygląda (mistrz!)
  • do tego masa przykładów eleganckich, małych bibliotek, które robią jedną rzecz i robią to dobrze - możesz z nich poskładać własny stos
Generalnie masa doświadczenia wyniesionego wprost od konsultantów ThoughtWorks.
Człowiek, który programuje z Mateuszem, to musi być szczęśliwy człowiek


W slajdach znajdziecie masę wartościowych informacji: http://www.slideshare.net/kwasniew/10-things-id-tell-my-younger-self-about-java-web-development


"Jak wprowadzić DDD w naszym smutnym projekcie" - często słyszę takie pytanie na szkoleniach... Jest to często problem na poziomie strategii organizacji - w jakim kierunki chce podążać i jak chce kreować swój proces wytwórczy.

Piotrek w przejrzysty sposób pokazał przecięcie 2 aspektów:

  • wspomnianej strategii organizacji
  • technicznych rozwiązań opartych o architekturę Ports&Adapters
jako 4 podejścia architektoniczne.

Ciekawy był również wstęp do DDD - Piotrek podszedł od strony Strategic Design. Sam zawsze obawiałem się mówić od tej strony o DDD na  konferencjach, bo wydaje mi się zbyt abstrakcyjna dla programujących odbiorców, ale w wydaniu Piotrka wyszło fajnie:)

Prezentacja w Prezi (choć wygląda jak zaimportowana z power pointa;P) http://prezi.com/y_1raovqqxc4/using-domain-driven-design-in-legacy-systems/



JEE'ISH DEVELOPMENT WITHOUT HASSLE

Po prostu mistrz sarkazmu:)
Aż zacytuję: "Używamy Spring Boot i jesteśmy lightweight".

Fajny dystans do narzędzi i podejść... generalnie przesłanie: czy na pewno potrzebujesz armaty na muchę?

W prezentacji znajdziecie polecane biblioteki, które w lekki sposób zastępują ciężkie działa. Jest tam również link do kodu - kilku projektów, które implementują TODO list przy pomocy różnych zestawów narzędzi.

Prezentacja: https://speakerdeck.com/kubamarchwicki/jee-without-hassle-pl



WHAT YOU WON'T READ IN BOOKS ABOUT IMPLEMENTING REST SERVICES

Jak zrobić świetną prezentację? Proste: wziąć sexi temat, potraktować od nietrywialnej strony i poprowadzić przez Kubę Kubryńskiego:)

Jeśli wydaje Ci się, że robisz REST, to zajrzyj do slajdów: http://www.slideshare.net/KubaKubryski/what-you-40244393
Znajdziesz tam między innymi:
  • model dojrzałości Twojego api: 
    • kupa XMLa, 
    • zasoby, 
    • czasownik http, 
    • negocjacja kontentu
  • odróżnienie zasobu od jego formy (xml, json) i wersji
  • typowe błędy w wersjonowaniu API
  • trik na paginację zasobów
  • pułapki cache
  • narzędzia dokumentacji i uruchamiania serwisów

//=========================
A tutaj linki do moich prezentacji:

wtorek, 5 sierpnia 2014

Po Confiturze - dzięki!

Chciałbym podziękować wszystkim, którzy głosowali na moją prezentację na Confiturze: http://2014.confitura.pl/#/news a szczególnie tym, którzy zostawili notkę z fidbekiem.
Dostałem dziś do nich dostęp i nieco się wzruszyłem.

Dzięki wszystkim, warto dla Was pracować nad prezentacją.
Za rok przygotuję coś ekstra... powoli rodzi mi się koncepcja, będzie to coś z zupełnie innej beczki, coś czemu poświęcam sporo czasu i energii od 2 lat, znacznie więcej niż Javie i programowaniu kiedykolwiek...

Podziękowania również dla organizatorów konferencji i twórców Prezi.com:)

wtorek, 22 lipca 2014

Everything You Were Taught About Java Is Wrong

Ciekawa prezentacja byłego pracownika Sun: http://vimeo.com/99577260
Nieco sklejona na kolanie, ale poprzez bigerpikczer pokazuje np:

  • skąd wzięła się kuriozalna konwencja JavaBean
  • koncepcja serwera aplikacyjnego pochodzi z czasów gdy RAM liczono w dziesiątkach MB
  • starając się zbyt mocno programować współbieżnie programujemy wbrew współbieżności
Ciekawe...

poniedziałek, 19 maja 2014

Feedback - publikacja artykułów

Zapraszam do lektury nowej serii artykułów z działu Laboratorium Bottega jaki prowadzimy od początku istnienia Magazynu Programista.

Aktualnie dostępne są dwa pierwsze teksty poświęcone naszym eksperymentom z "Brakującym elementem Agile": http://bottega.com.pl/artykuly-i-prezentacje#agile

Paweł Badeński dzieli się swoimi doświadczeniami na temat feedbacku, które zdobył jako coach zespołów w ThoughtWorks, gdzie był odpowiedzialny za "misje ratunkowe" polegające na zmianie systemowej kultury pracy np. w projektach IT rządu UK.

Statystyczny człowiek dostaje w ciągu roku ok 17 minut pozytywnych informacji na temat siebie i swego zachowania. Łatwo przychodzi nam krytykowanie (źle przeprowadzone działa na cały zespół niczym sarin), ale pozytywny feedback dostajemy zwykle jedynie od babci;)

Co może zdziałać pozytywny feedback? Np. wyciska łzy u dorosłych mężczyzn ostatniego dnia warsztatów, odbudowuje morale i motywację... i takie tam... kluczowe ze strategicznego punktu widzenia sprawy:)

//=============================

W kolejnych częściach serii zajmiemy się między innymi:
  • komunikacją z biznesem - miękkie techniki prowadzenia sesji modelowania wspierające DDD
  • odbudową morale i motywacji
  • problemami z utratą pracowników i pozyskaniem na ich miejsce nowych 

wtorek, 13 maja 2014

Microservices w kontekście DDD

Mamy nowy buzowrd: mokroserwis, który zdążył być już w typowy da naszej branży - Montypythonowy - sposób wypaczony:)

Autor artykułu Microservices: Usage Is More Important than Size stawia retoryczne pytanie:
czy mikroserwis to
- SOA, które wreszcie doczekało się poprawnej interpretacji (bez ESB i smutnego SOAP)
- czy może stara "dobra" CORBA i RMI tylko, że podana na REST wraz ze wszystkimi smutnymi konsekwencjami zbytniego rozproszenia?

Kolejne figury retoryczne pojawiają się w tekście Microservices? What about Nanoservices?: Sto linijek to jeszcze makro-serwis czy już nano-serwis (funkcjonalność a nie serwis), który jest antywzorcem?

Mierzenie linijek kodu od linijki to jak zwykle znak, że "coś się dzieje";)

Patrząc z dystansu widać to co zwykle: onanizm techniczny zamiast zrozumienia jaki problem próbujemy rozwiązać.

Wydaje mi się, że gdyby za definicję zakresu mikroserwisu przyjąć: API dla Bounded Context z DDD, to wszystko stałoby się jasne...

środa, 30 kwietnia 2014

Rozrywka intelektualna na długi łikend

MBTI jest prostą typologią stosowaną w różnych celach, np podczas projektowania architektury informacji w dużych serwisach internetowych.

My w IT lubimy proste modele (dają nam złudzenie rozumienia hehe) dlatego proponuję krótką zabawę:

1. Kilkuminutowy test
2. Luźna interpretacji w kontekście programowania http://c2.com/cgi/wiki?MyersBriggsForProgrammers
- ulubiony język programowania
- ulubiona klasa problemów
- ulubiony sposób myślenia
- itd


MBTI bywa krytykowany za metodykę statystyczną. Jako ciekawostkę dodam opinię twórcy portalu jednego z telecomów: nie ważne czy MBTI jest prawdziwy czy nie, i tak prędzej czy później stanie prawdziwy, gdyż zawartość w wielu miejscach jest projektowany pod tym kątem i ludzie po prostu zaczną myśleć wg tych schematów - rodzaj samospełniającej się przepowiedni.

//===========
Mój typ to "Puszczyk".

czwartek, 10 kwietnia 2014

Artykuł: Techniki ułatwiające utrzymanie testów

Zapraszam do lektury kolejnego artykułu Rafała Jamroza z serii: Refaktoryzacja testów legacy w kierunku wykonywalnych specyfikacji.

Cytat ze wstępu: "W artykule przedstawiam techniki, które pomogą w pracy z testami w projekcie legacy (i nie tylko), a które profesjonalny programista powinien mieć w swojej „skrzynce z narzędziami”, czyli m.in. Test Data Builder i Assert Object. Mimo to należy pamiętać, że zrozumienie problemu, nad którym pracujemy, jest znacznie ważniejsze niż stosowane techniki i powoduje, że testy posiadają jeszcze większą wartość"

wtorek, 25 marca 2014

Czego mama nigdy nie mówiła Ci na temat testowania automatycznego

Na YT opublikowano moją prezentację z zeszłorocznej konferencji JDD: https://www.youtube.com/watch?v=znRByMgnFSM

Czego możesz się z niej dowiedzieć:
- jeżeli testy używają Mocków "to wiedz, że coś się dzieje"
- jeżeli w typowym projekcie biznesowym dąży się do pokrycia 80% "to wiedz, że coś się dzieje"
- jeżeli testy akceptacyjne są napisane językiem kontrolek UI  "to wiedz, że coś się dzieje"
- jeżeli widzisz (anty) wzorzec Page Object "to wiedz, że coś się dzieje"
a poza tym testy end-to-end powinny mieć warstwy - jak wszystko:)

...oraz jak działają automatyczne skrzynie biegów w super-samochodach.


Materiały: http://prezi.com/cxslyh5sqo_z/czego-mama-nigdy-nie-mowia-ci-na-temat-testowania-automatycznego/

niedziela, 16 marca 2014

Instrukcja obsługi introwertyka

Statystycznie introwertyzm występuje w ok 1/4 populacji, natomiast zetknąłem się z szacunkami, że w IT jest nas 3/4.

Instrukcja obsługi, którą można wydrukować i powiesić na drzwiach aby zwiększyć świadomość odwiedzających Wasz pokój pracowników działów nietechnicznych.



Sprzętowo introwertyzm jest uwarunkowany prze działania tworu siatkowatego w pniu mózgu - tworząc paralelę jest to "zegar taktujący na płycie głównej, który nadaje takty procesorom". U introwertyków ciało to pobudza się samo z siebie - bogate życie wewnętrzne wystarczy do podtrzymania procesorów. U ekstrawertyków wymagane są pobudzenia z zewnątrz - bez nich system wygaśnie.

sobota, 15 marca 2014

Brakujący element Agile

Chciałbym zaprosić czytelników do odwiedzenia zaprzyjaźnionego bloga, który właśnie wystartował: The missing link of Agile. Tytułowy Element, którego brakuje w wielu implementacjach Agile w różnych organizacjach to zwrócenie uwagi na ludzi - wraz z całą ich sferą miękką oraz dynamiką zespołu. W przeważającej ilości przypadków to ten pominięty element a nie technologia decyduje o przebiegu oraz powodzeniu projektu.

Paweł Badeński - autor bloga - będzie dzielił się swoimi doświadczeniami, które zdobył jako programista oraz coach programistów w (nie bójmy się użyć tego słowa) kultowej już firmie jaką jest ThoughtWorks.

niedziela, 9 marca 2014

Dzień dziecka kiedyś się skończy...


Jeżeli myśleliście, że Uncle Bob skończył się na Kill'em All, to zachęcam do obejrzenia prezentacji na temat profesjonalizmu: http://vimeo.com/84676528.

Cytując z pamięci frywolne tłumaczenie:


~~Pewnego dnia jakiś mierny programista popełni jakiś głupi błąd, który spowoduje śmierć tysięcy ludzi. To nieuniknione. Wówczas politycy zaczną się nam przyglądać i zadadzą pytanie: jak mogliście do tego dopuścić (...) A później zrobią coś czego byście nie chcieli, zajmą się wprowadzaniem norm, standardów, ustaw, będą mówić nam w jakich technologiach możemy programować.~~

Tak więc Panie i Panowie: skupcie się, bo kiedyś wszyscy będziemy musieli programować w technologiach najmocniejszego lobbysty (który produkuje doskonałe klawiatury i przeciętne systemy operacyjne)  i merdżować kodzik w CVS;)

//=====================================

Akcje rządowe typu "każdy powinien programować" można by jednak przemyśleć...

sobota, 8 marca 2014

Artykuł: Zarządzanie transakcjami w systemach klasy enterprise

Kilka istotnych szczegółów odnośnie transakcji, które mogą uchronić Cię przed katastrofą znajdziesz w artykule Zarządzanie transakcjami w systemach klasy enterprise, który opublikowałem w lutowym numerze programistamag.

Do pobrania tutaj:  http://bottega.com.pl/artykuly-i-prezentacje#tx.

Niepoczątkujący czytelnicy mogą śmiało pominąć wstęp, następnie nakreślamy pokrótce generalne strategie zarządzania transakcjami aby wreszcie zająć się najprostszą z nich:) Mimo, że najprostsza to wciąż czycha tam na nas wiele pułapek, szczególnie w połączeniu z JPA.

Uzupełnieniem lektury jest artykuł Mapowanie relacyjno-obiektowe prawdziwych obiektów http://bottega.com.pl/pdf/materialy/receptury/orm.pdf. Temat rozwinę na prezentacji pod tym samym tutłem podczas zbliżającej się konferencji 4Developers - abstrakt tutaj.

środa, 5 lutego 2014

Przykład rzetelości w IT

"Jak zaprojektowałbyś eksperyment aby sprawdzić swoją tezę?" - gdyby każda prezentacja w naszej branży zaczynał się od takiego stwierdzenia, to świat byłby lepszy:)

Merytorycznie świetna prezentacja, nawet jeżeli nie interesujesz się wydajnością, to warto obejrzeć pierwsze 4 minuty jak wzorcowy przykład krytycznego myślenia (myślenia nad tym co się myśli?)
http://www.infoq.com/presentations/top-10-performance-myths

niedziela, 19 stycznia 2014

O empatii

Dziś pierwszy próbny post z kategorii "na miękko". Próbny, bo jeżeli znajdzie zainteresowanie, to będę wrzucał więcej tego typu tematyki.

Zewsząd słyszymy, że w naszej branży brakuje empatii - zarówno w relacjach między członkami zespołu jak i w relacjach naszych z tak zwanym "biznesem". (Być może jest to główny powód dla którego obiecujące metodyki prowadzenia projektów nie dają obiecanych rezultatów...)

Jeżeli się czegoś nie ma, to zwykle ciężko sobie uświadomić, że się tego nie ma:P
Więc co to jest?
Podczas "porannej" niedzielnej sesji riserczowej trafiłem na ciekawy artykuł: O empatii i jeszcze ciekawszy (bo napisany w "naszym" stylu) komentarz do niego:

"(...)mamy dwa rodzaje empatii. Kognitywna i emocjonalna. Czyli Jasiu wie, ze jak walnie Marysie po glowie lopatka to Marysi bedzie przykro, albo - Marysi jest przykro to Jasiowi tez sie robi przykro. Zazwyczaj mamy je obie. Dlatego nie walimy Marysi lopatka po glowie, bo wiemy ze wtedy Marysia placze i nam sie tez robi przykro. Oczywiscie jak juz dojrzejemy do posiadania empatii, co zajmuje jakies 3 lata

Psychopatom brakuje tej emocjonalnej - moga spokojnie patrzec na czyjas krzywde i ich to nie rusza. Kognitywna maja swietnie rozwinieta, dzieki temu wiedza co inni czuja i moga nimi manipulowac. To samo dotyczy osob narcystycznych, moze pojawiac sie w stanach dysocjacyjnych (np ostra reakcja na stres - czlowiek w momencie wypadku zamiast ratowac rannego pasazera zbiera swoje notatki z pobocza) W pewnym sensie rowniez schizofrenia i urazy glowy - platy czolowe.

Autystykom brakuje tej kognitywnej. Nie potrafia rozpoznac emocji u
innych, rowniez i u siebie. Niestety emocjonalnie "czuja" innych, nawet
jak nie potrafia tego nazwac, co czesto jest dla nich powodem stresu.(...)"

//=========================================

btw: drugi akapit jest szczególnie ważny w świetle głośnych badań sprzed 2 lat: 1 in 25 Business Leaders May Be Psychopaths - w skrótowym tekście link do badań.




niedziela, 12 stycznia 2014

Artykuł: Building Blocks dla Twojej lewej półkuli

Redaktor naukowy Iain Mcgilchrist w swej książce The Master and His Emissary (będącej podsumowaniem ostatnich 10 lat badań nad mózgiem) posłużył się wymowną metaforą lewej półkuli mózgu jako "salonu luster" - jeżeli wpadnie do niego promień światła, to będzie odbijał się w salonie po ustalonej przez ustawienie luster drodze, zawsze takiej samej.


Lewa półkula myśli indukcyjnie (nota bene: znana ze szkoły indukcja matematyczna jest rodzajem dedukcji:), posługując się "foremkami" na myśli. Tworzy ona narrację rzeczywistości używając tylko takich foremek jakie "zna".

Dlaczego piszę o tym w kontekście programowania?

Bo jeżeli jedyne foremki jakie zna nasza lewa półkula to serwis i anemiczna encja, to jest ona w stanie zamodelować cały świat serwisem i encją (rekordem i procedurą jeżeli wciąż programujesz w Turbo Pascalu lub strukturą i funkcją jeżeli w C).

Da się - wiem, bo tak robiłem:)

Jeżeli jedyna foremka jaką zna nasza półkula to Hashmapa, to wszystko będzie Hashmapą-hashmap:P

Lewa półkula jest również specjalistą w stworzeniu paranoi, że jest to najlepszy z możliwych modeli - bo mój (hmm ciekawe co neuro-naukowcy powiedzieliby na umiejscowienie ego w mózgu...).

Do tej pory wiele pisałem o Building Blocks z wachlarza technik DDD. Tym razem zapraszam do lektury artykułu, który jest poświęcony bardziej ogólnym BB, które można wyróżniać w każdym projekcie, nie stosując nawet DDD: "Building Blocks dla Twojej lewej półkuli: połączenia podejścia obiektowego, proceduralnego, funkcyjnego w codziennej pracy z kodem". Artykuł ukazał się w najnowszym wydaniu Programistamag.

Generalnie chodzi o to aby poszerzyć wachlarz "foremek" jakie stosuje nasza lew półkula do modelowania problemów. Dzięki temu modele staną się bardziej realistycznie (bez sztucznych ograniczeń) i giętkie.

piątek, 10 stycznia 2014

Śmiech przez łzy #1

Pewien człowiek przeprowadził się na wieś aby rozkręcić tam interes. Dużo słyszał na salonach o tym, że "teraz wartość wejść w kury". Pozyskał zatem dofinansowanie i postawił wspaniałe kurniki przemysłowe oparte o najnowsze rozwiązania architektoniczne i wytyczne dostawców podsystemów, zastosował wszystkie modne metodyki (niektóre nawet dwa razy) i wdrożył frameworki hodowli oraz szyny dystrybucji paszy, zaczął nawet mówić do drobiu w najnowszych językach co chwilę wtrącając nawias wąsaty "{".

Pewnego dnia odwiedził go autochtoniczny sąsiad i zapytał: "Dlaczego zamiast jajek zbiera Pan gówna?"