{"id":10124,"date":"2021-06-17T16:00:00","date_gmt":"2021-06-17T14:00:00","guid":{"rendered":"https:\/\/vived.io\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/"},"modified":"2022-09-19T13:11:00","modified_gmt":"2022-09-19T11:11:00","slug":"przeczytalem-technology-radar-zebys-ty-juz-nie-musial","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/","title":{"rendered":"Przeczyta\u0142em Technology Radar vol. 24&#8230; i chc\u0119 Ci opowiedzie\u0107 co w nim znalaz\u0142em"},"content":{"rendered":"<p>Je\u017celi mia\u0142bym wskaza\u0107 najwi\u0119ksze problemy, z jakimi boryka si\u0119 bran\u017ca IT, to opr\u00f3cz oczywistych oczywisto\u015bci takich jak \u017ale zarz\u0105dzane projekty, czy hype driven development itp., to moim osobistym \u201cb\u00f3lem\u201d jest fakt, \u017ce jak na dziedzin\u0119, kt\u00f3ra lubi przypisywa\u0107 sobie in\u017cyniersko\u015b\u0107, mamy pot\u0119\u017cny problem z weryfikowalno\u015bci naszych decyzji. Powiedzmy sobie szczerze, w tworzonych przez nas projektach bardzo cz\u0119sto potrzebujemy wybra\u0107 jedn\u0105 z wachlarza dost\u0119pnych opcji, maj\u0105c cz\u0119sto do\u015b\u0107 mgliste poj\u0119cie, kt\u00f3ra z alternatyw b\u0119dzie lepsza d\u0142ugoterminowo. Nie bez kozery m\u00f3wi si\u0119, \u017ce w IT wszystko jest \u201ctradeoffem\u201c, ale pal licho, je\u015bli byliby\u015bmy jeszcze w stanie po czasie cokolwiek oceni\u0107 i nauczy\u0107 si\u0119 na b\u0142\u0119dach. Bardzo cz\u0119sto tak niestety nie jest &#8211; nawet je\u015bli b\u0119dziemy w stanie spojrze\u0107 po czasie na powsta\u0142e rozwi\u0105zanie i zrozumie\u0107 jego dobre i z\u0142e strony, to tak naprawd\u0119 dalej daje nam tylko to mgliste poj\u0119cie, czy alternatywa by\u0142aby lepsza. <\/p>\n<p>Nie da si\u0119 d\u0142ugoterminowo i r\u00f3wnolegle rozwija\u0107 np. dw\u00f3ch r\u00f3\u017cnych architektur, \u017ceby po roku zaobserwowa\u0107, kt\u00f3ra daje lepsze rezultaty. Dodatkowo, tak naprawd\u0119 ka\u017cdy z nas ma szans\u0119 w swojej karierze \u201czaliczy\u0107\u201d kilka wi\u0119kszych projekt\u00f3w, rzadko kiedy maj\u0105c okazj\u0119 pracowa\u0107 przy dw\u00f3ch r\u00f3wnocze\u015bnie i mie\u0107 mo\u017cliwo\u015b\u0107 por\u00f3wnywania r\u00f3\u017cnych podej\u015b\u0107. Bardzo wiele reperkusji przychodzi po czasie, co nieraz przy du\u017cej rotacji, jaka jednak panuje w bran\u017cy sprawi, \u017ce nigdy nie dowiemy si\u0119, czy nie pope\u0142nili\u015bmy b\u0142\u0119du, trudno si\u0119 nam wi\u0119c na takowych nauczy\u0107. Dlatego te\u017c tak cenny jest fakt, \u017ce pojawiaj\u0105 si\u0119 opracowania pokroju Technology Radaru &#8211; publikacje pomagaj\u0105ce oceni\u0107 przydatno\u015b\u0107 poszczeg\u00f3lnych technik i narz\u0119dzi.<\/p>\n<p><strong>Spis Tre\u015bci <\/strong><\/p>\n<p><!--kg-card-begin: html--><\/p>\n<aside class=\"toc\"><\/aside>\n<p><!--kg-card-end: html--><\/p>\n<h2 id=\"czym-jest-technology-radar\" data-num=1>Czym jest Technology Radar?<\/h2>\n<p>Dobra, wydaje si\u0119 jednak \u017ce niekt\u00f3rym z Was czytaj\u0105cych ten tekst nale\u017cy si\u0119 ma\u0142e wyja\u015bnienie, czym tak naprawd\u0119 Technology Radar jest. Ot\u00f3\u017c jest to wydawana semi-regularnie (zwykle ok. dwa razy do roku) analiza i ocena trend\u00f3w wyr\u00f3\u017cniaj\u0105cych si\u0119 w technologicznym \u015bwiecie, dokonywana przez firm\u0119 ThoughtWorks. W firmie pracuj\u0105 takie uznane osobisto\u015bci naszej bran\u017cy jak cho\u0107by Martin Fowler czy Rebecca Parson, a sama firma jest agencj\u0105 konsultingow\u0105, pracuj\u0105c\u0105 z wieloma du\u017cymi klientami na ca\u0142ym \u015bwiecie przy cz\u0119sto kluczowych dla tych firm projektach. Daje im to do\u015b\u0107 unikaln\u0105 perspektyw\u0119 &#8211; s\u0105 w stanie zar\u00f3wno przetestowa\u0107 r\u00f3\u017cne rozwi\u0105zania konkretnych problem\u00f3w np. por\u00f3wnuj\u0105c, jak sprawdzi\u0142y si\u0119 poszczeg\u00f3lne podej\u015bcia u poszczeg\u00f3lnych klient\u00f3w, jak i maj\u0105 widoczno\u015b\u0107 na szerokie spektrum problem\u00f3w, z jakimi du\u017ce firmy musz\u0105 si\u0119 mierzy\u0107.<\/p>\n<p>S\u0105 osoby, kt\u00f3re maj\u0105 do Radaru nieco krytyczne podej\u015bcie, traktuj\u0105c go jako nieco skrzywiony pod k\u0105tem wy\u0142\u0105cznie wi\u0119kszych organizacji &#8211; co jest pok\u0142osiem tego, \u017ce z takimi podmiotami zwykle pracuje ThoughtWorks &#8211; ale z mojej perspektywy ka\u017cdorazowo jest on zbiorem trafnych obserwacji, pozwalaj\u0105cych na mocne poszerzenie horyzont\u00f3w i \u201cwy\u0142uskanie\u201d \u00a0dla siebie technik i narz\u0119dzi, kt\u00f3re mo\u017ce w innym wypadku przesz\u0142yby pod naszym (nomen omen) radarem. <\/p>\n<p>Dlatego te\u017c mam dla Was przegl\u0105d tego, co w Radarze mo\u017cna znale\u017a\u0107, pogrupowany w specjalne sekcje tematyczne (pewnego rodzaju hmmm\u2026 podzia\u0142 funkcjonalny zamiast domenowego jest najtrudniejsz\u0105 rzecz\u0105 przy konsumpcji Radaru). Mam nadzieje, \u017ce dzi\u0119ki temu opracowaniu docenicie kapitaln\u0105 robot\u0119, jak\u0105 wykonuj\u0105 in\u017cynierowie z ThoughtWorks.<\/p>\n<h2 id=\"jezeli-jestes-programista-mobilnym\" data-num=2>Je\u017celi jeste\u015b programist\u0105 mobilnym&#8230;.<\/h2>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-11.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"281\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-11.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-11.png 900w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Czytaj\u0105c Technology Radar od d\u0142u\u017cszego czasu, bardzo ciekawym jest obserwowanie tego, jak coraz mniej miejsca z ka\u017cd\u0105 edycj\u0105 po\u015bwi\u0119cone jest wszelakim technologiom mobilnym. Z pewno\u015bci\u0105 pow\u00f3d jest taki, a nie inny charakter klient\u00f3w ThoughtWorks (du\u017ce podmioty, raczej z bardziej \u201ctradycyjnych\u201d bran\u017c &#8211; nowoczesne startupy czy FAANG nie korzystaj\u0105 z tego typu konsultingu), pokazuje to jednak, \u017ce o ile spokojnie mo\u017cemy si\u0119 zgodzi\u0107, \u017ce przeci\u0119tny konsument dawno wszed\u0142 w er\u0119 Post-PC, to r\u00f3wnocze\u015bnie aplikacje mobilne przesta\u0142y by\u0107 przestrzeni\u0105, o kt\u00f3r\u0105 szczeg\u00f3lnie si\u0119 walczy, a rynek dokona\u0142 ju\u017c swoistego \u201cpodzia\u0142u \u0142up\u00f3w\u201d. Coraz trudniej si\u0119 wypromowa\u0107, coraz trudniej zach\u0119ci\u0107 ludzi do u\u017cywania dedykowanej aplikacji, jest to r\u00f3wnie\u017c do\u015b\u0107 droga fanaberia poniewa\u017c klienci oczekuj\u0105 r\u00f3wnie\u017c istnienia r\u00f3wnoleg\u0142ego dobrego \u201cwebowego\u201d do\u015bwiadczenia. Tym razem jednak sytuacja wygl\u0105da troch\u0119 inaczej &#8211; Radar dostarczy\u0142 nam kilka ciekawych projekt\u00f3w i technik zwi\u0105zanych z tym segmentem rynku.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-30.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1419\" height=\"339\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-30.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-30.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-30.png 1419w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Jako \u017ce nawi\u0105za\u0142em przed momentem do faktu, \u017ce na dzisiejszym rynku niezb\u0119dne jest posiadanie zar\u00f3wno mobilnej, jak i webowej aplikacji, pozwol\u0119 sobie zacz\u0105\u0107 od tego tematu. Ot\u00f3\u017c w nowym Radarze znale\u017a\u0107 mo\u017cemy dwa hmmm\u2026 ekosystemy, kt\u00f3re maj\u0105 nam w tym pom\u00f3c. Zar\u00f3wno <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104128\">Flutter<\/a>, jak i <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104042\">Kotlin Multiplatform<\/a> od dawna staraj\u0105 si\u0119 spe\u0142ni\u0107 obietnice \u201cWrite Once, Deploy Everywhere\u201d, poszerzaj\u0105c zakres dost\u0119pnych \u015brodowisk docelowych. Nowy Radar zauwa\u017ca to i sugeruje, \u017ce ka\u017cdy z ekosystem\u00f3w warty jest cho\u0107by rozwa\u017cenia. Ja od siebie doda\u0142bym, \u017ce zar\u00f3wno Flutter, jak i Kotlin celuj\u0105 jeszcze dalej, w ostatnich miesi\u0105cach chc\u0105c sta\u0107 si\u0119 ca\u0142kowicie \u201cuniwersalnymi\u201d, celuj\u0105c r\u00f3wnie\u017c w aplikacje desktopowe. Spe\u0142nia si\u0119 wi\u0119c powoli nasze marzenie o pisaniu \u201cuniwersalnych aplikacji\u201d &#8211; co ciekawe, powoli zaczyna wydawa\u0107 si\u0119, \u017ce to pomys\u0142 przepakowywania stron internetowych by\u0142 \u015blep\u0105 uliczk\u0105. Po\u017cyjemy zobaczymy, ale na pewno jeste\u015bmy na etapie agresywnego poszukiwania alternatyw.<\/p>\n<p>Z tym te\u017c pewnie wi\u0105\u017ce si\u0119 ma\u0142y radarowy \u201crenesans\u201d bibliotek i rozwi\u0105za\u0144 powi\u0105zanych z dwoma najwi\u0119kszymi graczami rynku &#8211; Androidem i IOSem. Radar po\u015bwi\u0119ca bowiem zaskakuj\u0105co du\u017co miejsca np. narz\u0119dziom do wygodniejszego utrzymania mobilkowych appek. Trafi\u0142y do niego uniwersalne <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104115\">TrustKit<\/a> (umo\u017cliwiaj\u0105cy zarz\u0105dzanie kluczami SSL), <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104089\">Flipper<\/a> (uniwersalny debugger, potrafi\u0105cy pracowa\u0107 z Androidem, iOSem, ale te\u017c np. React Native), czy te\u017c bardziej nakierowany na konkretn\u0105 platform\u0119 <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=1173\">LeakCanary<\/a> &#8211; narz\u0119dzie umo\u017cliwiaj\u0105ce wykrycie przyczyny wyciek\u00f3w pami\u0119ci w aplikacjach androidowych. Pod uwag\u0119 wzi\u0119ty zosta\u0142 te\u017c fakt, \u017ce w dzisiejszych czasach co\u015b, co kiedy\u015b by\u0142o ma\u0142\u0105 aplikacj\u0105 mog\u0142o przerodzi\u0107 si\u0119 w z\u0142o\u017cony projekt &#8211; swoje miejsce w bie\u017c\u0105cej edycji znalaz\u0142a technika modularyzacji dla androidowych aplikacji (on-demand modules), a tak\u017ce narz\u0119dzia do utrzymywaniu w ryzach plik\u00f3w XCode, kt\u00f3re nieraz potrafi\u0105 wymkn\u0105\u0107 si\u0119 spod kontroli programisty. Ca\u0142o\u015b\u0107 zamyka te\u017c oficjalne applowskie rozwi\u0105zanie hmmm\u2026 reaktywne &#8211; <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104031\">Combine<\/a>, b\u0119d\u0105ce Swiftowym API do zarz\u0105dzania strumieniami zdarze\u0144. <\/p>\n<p>Ciekawe, czy taka nadreprezentacja rozwi\u0105za\u0144 do tworzenia aplikacji natywnych, to \u00a0jednorazowy wybryk czy odwr\u00f3cenie d\u0142ugoletniego trendu. B\u0119dziemy obserwowa\u0107 <\/p>\n<h2 id=\"jezeli-nie-wiesz-co-sie-dzieje-w-twoich-systemach\" data-num=3>Je\u017celi nie wiesz co si\u0119 dzieje w Twoich systemach&#8230;<\/h2>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-14.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"281\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-14.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-14.png 900w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Maj\u0105c w swojej karierze troch\u0119 do czynienia z systemami Legacy, mam wra\u017cenie \u017ce to, co w najwi\u0119kszym stopniu odr\u00f3\u017cnia tworzone dzisiaj oprogramowania, to \u00a0(do\u015b\u0107 optymistycznie, wiem) lekcje, jakie odrobili\u015bmy w oparciu o b\u0142\u0119dy przesz\u0142o\u015bci. Dzisiaj dobrze zdajemy sobie spraw\u0119 z faktu, \u017ce napisanie systemu to jedno, ale tak naprawd\u0119 trudn\u0105 cz\u0119\u015bci\u0105 ca\u0142o\u015bci jest jego utrzymanie i p\u00f3\u017aniejsza ewolucja wraz ze zmieniaj\u0105cymi si\u0119 wymaganiami rynku. W systemach odziedziczonych po wcze\u015bniejszych pokoleniach niejednokrotnie bardzo trudno jest zmapowa\u0107 powi\u0105zania pomi\u0119dzy poszczeg\u00f3lnymi komponentami czy zale\u017cno\u015bci czasowe. Niejednokrotnie znalezienie g\u0142upich log\u00f3w nastr\u0119cza problem\u00f3w. Pewnie st\u0105d te\u017c tak du\u017cy nacisk po\u0142o\u017cony na tak zwane \u201cobservability\u201d &#8211; odzwierciedlone jest to r\u00f3wnie\u017c w Radarze, w kt\u00f3rym mo\u017cemy znale\u017a\u0107 kilka narz\u0119dzi tego typu.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/blog.vived.io\/content\/ima\nges\/2021\/06\/image-31.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1271\" height=\"300\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-31.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-31.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-31.png 1271w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>O ile po stronie serwerowej stosunkowo \u0142atwo agreguje si\u0119 zdarzenia do wsp\u00f3lnego systemu, o tyle w czasach, gdy coraz wi\u0119cej logiki znajduje si\u0119 po stronie klienta, krytycznym staje si\u0119 mo\u017cliwo\u015b\u0107 zebrania informacji o potencjalnych b\u0142\u0119dach, kt\u00f3rymi niejednokrotnie zalewane s\u0105 DevToolsy przegl\u0105darek. Nie mo\u017cemy \u0142udzi\u0107 si\u0119, \u017ce u\u017cytkownik zg\u0142osi nam problem &#8211; zwykle po prostu ju\u017c do nas nie wr\u00f3ci, a w bardziej pesymistycznym scenariuszu stanie si\u0119 naszym publicznym krytykiem. Sami przez lata szukali\u015bmy dobrego narz\u0119dzia do szybkiego wykrywania takich potencjalnych usterek, i z przyjemno\u015bci\u0105 mo\u017cemy stwierdzi\u0107, \u017ce wyb\u00f3r, kt\u00f3rego dokonali\u015bmy nie by\u0142 chyba najgorszy. <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=1232\">Sentry<\/a>, kt\u00f3ry zbiera dla nas b\u0142\u0119dy u\u017cytkownik\u00f3w Vived, jest r\u00f3wnie\u017c polecany przez edytor\u00f3w nowego Radaru.<\/p>\n<p>Co ciekawy, Sentry jest jednym z klient\u00f3w drugiego z rozwi\u0105za\u0144 pomagaj\u0105cych nam odnale\u017a\u0107 si\u0119 w nawale danych. Nie sztuka bowiem zebra\u0107 mnogo\u015b\u0107 log\u00f3w i zdarze\u0144 z systemu &#8211; trzeba umie\u0107 si\u0119 w nich odnale\u017a\u0107. W takim wypadku przydatnym mo\u017ce okaza\u0107 si\u0119 <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104051\">ReDash<\/a>. Pozwala on przegl\u0105da\u0107 eventy z naszego systemu w adhocowy spos\u00f3b, przy pomocy SQLa. Po latach pracy z wszelkiej ma\u015bci wariacjami w\u0142asno\u015bciowych, jsonowych API do wszelkiej ma\u015bci system\u00f3w, zobaczenie starego dobrego SQLa jest dosy\u0107 od\u015bwie\u017caj\u0105ce.<\/p>\n<p>Z systemami do observability wi\u0105\u017ce si\u0119 te\u017c smutny fakt &#8211; przy odpowiednio z\u0142o\u017conym systemie zawsze pojawi si\u0119 co\u015b wymagaj\u0105cego naszej uwagi. St\u0105d te\u017c, je\u017celi chcemy zadba\u0107 o zdrowie psychiczne nasze i naszych zespo\u0142\u00f3w, niezb\u0119dny jest system pozwalaj\u0105cy na zarz\u0105dzanie zdarzeniami w spos\u00f3b kontrolowany i uporz\u0105dkowany. Takie narz\u0119dzie te\u017c znajdziemy w Radarze &#8211; b\u0119dzie nim <a href=\"https:\/\/www.thoughtworks.com\/radar\/platforms?blipid=202104104\">Opstrace<\/a>. Jest to rozwi\u0105zanie typu Low-Code (w dodatku OpenSource), pozwalaj\u0105ce nam pospina\u0107 r\u00f3\u017cnego rodzaju us\u0142ugi w jeden, \u0142atwo zarz\u0105dzalny interfejs, dzi\u0119ki kt\u00f3remu mo\u017cemy szybko zareagowa\u0107 w wypadku jakiegokolwiek problemu. Pozwala on na zarz\u0105dzanie alarmami, heltcheckami i og\u00f3lnie pe\u0142nym \u201cdevopsowym\u201d procesem. Wygl\u0105da bardzo interesuj\u0105co i takim te\u017c zosta\u0142 uznany przez in\u017cynier\u00f3w z Thoughtworks.<\/p>\n<p>Ko\u0144cz\u0105c t\u0105 sekcje, nale\u017cy pami\u0119ta\u0107, \u017ce nie wszystko nale\u017cy \u201cobserwowa\u0107\u201d. W czasach coraz wi\u0119kszego nacisku na prywatno\u015b\u0107 ze strony u\u017cytkownik\u00f3w niezb\u0119dne jest, aby pami\u0119ta\u0107 o tym aspekcie projektuj\u0105c nasze systemy \u201cobserwowalno\u015bciowe\u201d. ThoughtWorks podkre\u015bla w nowej edycji, \u017ce szczeg\u00f3lnie istotne jest to zw\u0142aszcza w przypadku serwis\u00f3w dzia\u0142aj\u0105cych bezpo\u015brednio z klientem &#8211; czy to mowa o przywo\u0142anym ju\u017c Sentrym, czy te\u017c np. Web Analyticsach pokroju rozwi\u0105zania google\u2019owskiego. Ja od siebie doda\u0142bym tylko, \u017ce nawet zachowuj\u0105c pe\u0142ni\u0119 anonimowo\u015bci nie trudno o kontrowersj\u0119 &#8211; ostatnie rozwi\u0105zania pokroju FLOC od Google pokazuj\u0105, \u017ce je\u017celi chodzi o prywatno\u015b\u0107 u\u017cytkownik\u00f3w, przed nami jeszcze d\u0142uga droga. <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104086\">Ethical Explorer<\/a>, r\u00f3wnie\u017c pojawiaj\u0105ce si\u0119 w obecnym Radarze rozwini\u0119cie przywo\u0142ywanego ju\u017c EthicalOS, wydaje si\u0119 by\u0107 warto\u015bciowym przewodnikiem po tym do\u015b\u0107 grz\u0105skim gruncie, nie raz wymagaj\u0105cym od nas eksperyment\u00f3w my\u015blowych z etyki.<\/p>\n<h2 id=\"przeczytaj-ta-sekcje-jesli-musisz-sie-zmodernizowac-szybko-i-skutecznie\" data-num=4>Przeczytaj t\u0105 sekcje je\u015bli musisz si\u0119 zmodernizowa\u0107&#8230; szybko i skutecznie<\/h2>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-13.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"280\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-13.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-13.png 900w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Jako \u017ce przywo\u0142a\u0142em ju\u017c Legacy, jak pewnie domy\u015blacie si\u0119, temat modernizacji system\u00f3w jest mi dosy\u0107 bliski. Dlatego te\u017c nie mog\u0119 sobie odm\u00f3wi\u0107 w naszym ma\u0142ym podsumowaniu przypatrzeniu si\u0119 r\u00f3wnie\u017c temu, co Radar ma do powiedzenia w tym kontek\u015bcie.<\/p>\n<p>I moje serduszko cieplej zabi\u0142o, gdy tylko zobaczy\u0142em, \u017ce przywo\u0142ana zosta\u0142a technika modernizacji oparta na hipotezach. Jest to moja ulubiona, kt\u00f3rej sam po\u015bwi\u0119ci\u0142em sporo miejsca w napisanym przeze mnie niedawno <a href=\"https:\/\/virtuslab.com\/digital-transformation-free-ebook\/\">ebooku<\/a>. Ot\u00f3\u017c faktem jest, \u017ce tak naprawd\u0119 prac\u0119 ze starymi systemami naprawd\u0119 trudno jest dobrze zaplanowa\u0107. Kto mia\u0142 okazj\u0119 pobawi\u0107 si\u0119 w tego typu archeologie wie, \u017ce ca\u0142y czas rzucaj\u0105 nam k\u0142ody pod nogi, a rzeczy, kt\u00f3re pozornie wydawa\u0142y si\u0119 by\u0107 proste okazuj\u0105 si\u0119 kry\u0107 tajemnice, kt\u00f3rych rozwik\u0142anie nieraz wykracza poza ramy zwyk\u0142ego, dwutygodniowego sprintu. Dlatego te\u017c in\u017cynierowie od Technology Radaru zalecaj\u0105 iteracyjno\u015b\u0107, eksperymentowanie i niejako odkrywanie na nowo tego, jak system dzia\u0142a, kieruj\u0105c si\u0119 nie z g\u00f3ry zaplanowanym backlogiem, a na bie\u017c\u0105co potwierdzonymi lub obalanymi hipotezami. Taki prawdziwy \u201cagile\u201d u\u017cyty w do\u015b\u0107 nieortodoksyjny spos\u00f3b. Jest to w oparciu o moje do\u015bwiadczenie tak naprawd\u0119 jedyna skuteczna metoda i ciesz\u0119 si\u0119, \u017ce technika ta zosta\u0142a teraz ubrana w tak elegancki termin. Nazywanie rzeczy pomaga budowa\u0107 wsp\u00f3lny, zrozumia\u0142y dla wszystkich s\u0142ownik.<\/p>\n<p>Mam te\u017c troch\u0119 ubaw z faktu, \u017ce <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104012\">Single Page Application<\/a> te\u017c ju\u017c podchodz\u0105 pod bycie \u201clegacy\u201d. Po pocz\u0105tkowym zach\u0142y\u015bni\u0119ciu si\u0119 nowymi mo\u017cliwo\u015bciami, relatywnie szybko odkryli\u015bmy jako bran\u017ca, \u017ce skomplikowany kod kliencki posiada jednak sporo wad i jest bardzo trudny w utrzymaniu. Je\u017celi nasza strona sta\u0142a si\u0119 nieutrzymywaln\u0105 kul\u0105 b\u0142ocka, ThoughtWorks sugeruje \u201czaduszanie\u201d &#8211; technik\u0119 znan\u0105 m.in. w\u0142a\u015bnie z zast\u0119powania przestarza\u0142ych ju\u017c system\u00f3w. Ostrzegaj\u0105 oni co prawda, \u017ce niekt\u00f3re z podej\u015b\u0107 mog\u0105 wi\u0105za\u0107 si\u0119 z zepsuciem wydajno\u015bci dla u\u017cytkownika ko\u0144cowego, ale niejednokrotnie jest to jedyne wyj\u015bcie z sytuacji, gdy nasz kod sta\u0142 si\u0119 na tyle nieutrzymywalny, \u017ce ka\u017cda zmiana staje si\u0119 katorg\u0105 &#8211; sam mia\u0142em okazj\u0119 pracowa\u0107 z (i pewnie te\u017c pisa\u0107\u2026) tego typu narz\u0119dziami tortur, gdzie ka\u017cda zmiana CSSa powodowa\u0142a palpitacje serca. Dobrze, \u017ce Frontend te\u017c uczy si\u0119 zalet modularyzacji.<\/p>\n<h2 id=\"co-ciekawego-znajdzie-dla-siebie-frontendowiec\" data-num=5>Co ciekawego znajdzie dla siebie Frontendowiec? <\/h2>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-15.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1200\" height=\"374\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-15.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-15.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-15.png 1200w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Jest to ta cz\u0119\u015b\u0107 ekosystemu, kt\u00f3ra zwykle rozwija si\u0119 dosy\u0107 dynamicznie, co oczywi\u015bcie nie umyka tw\u00f3rcom Radaru. Sprawia to, \u017ce jak zwykle mamy ca\u0142kiem spor\u0105 nadreprezentacj\u0119 tematyczn\u0105.<\/p>\n<p>Tak jak ju\u017c mieli\u015bmy okazj\u0119 wspomnie\u0107, przy tematach zwi\u0105zanych z modernizacj\u0105, wsp\u00f3\u0142czesne aplikacje klienckie posiadaj\u0105 mas\u0119 logiki, zbli\u017con\u0105 do system\u00f3w dzia\u0142aj\u0105cych \u201cpod mask\u0105\u201d. Dlatego te\u017c coraz wi\u0119cej energii po\u015bwi\u0119ca si\u0119 frontendowej architekturze. \u015amiem twierdzi\u0107, \u017ce w \u015bwiecie, w kt\u00f3rym ustabilizowa\u0142a si\u0119 nam wielka tr\u00f3jca framework\u00f3w (Angular, React, Vue), to w\u0142a\u015bnie do \u015bwiata Microfrontend\u00f3w przenios\u0142y si\u0119 najwi\u0119ksze bo<br \/>\nje o rynkow\u0105 pozycj\u0119. Poza ju\u017c wspomnianym <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104012\">SPA Injection<\/a> (kt\u00f3re do tematu bardzo pasuje) Radar przynosi rozpychaj\u0105ce si\u0119 \u0142okciami Webpackowe rozwi\u0105zanie &#8211; <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104116\">Federacje Modu\u0142\u00f3w<\/a>, ale tak\u017ce nieco zbli\u017cone w koncepcji, a rozwijane jako standard przez Web Incubator Community Group mapy import\u00f3w, opieraj\u0105cej si\u0119 na \u201cklejeniu\u201d aplikacji z mniejszych kawa\u0142k\u00f3w za pomoc\u0105 standardowego systemu modu\u0142\u00f3w EcmaScript. <\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-32.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1276\" height=\"305\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-32.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-32.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-32.png 1276w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Przyznam jednak, \u017ce o ile tamte dwa rozwi\u0105zania z pewno\u015bci\u0105 znajd\u0105 szersz\u0105 rzesz\u0119 fan\u00f3w, to mnie najbardziej uj\u0105\u0142 <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104066\">hotwire<\/a> &#8211; aronim HTML over the Wire. Podej\u015bcie to zosta\u0142o rozpropagowane przez Basecamp, znany ze swojej mi\u0142o\u015bci do statycznie renderowanych stron (czego\u015b innego spodziewa\u0107 si\u0119 zreszt\u0105 od tw\u00f3rc\u00f3w Ruby on Rails), przenosz\u0105ce je w \u015bwiat asynchronicznego do\u0142adowywania kontentu. Ot\u00f3\u017c sugeruj\u0105 oni, \u017ce systemy templatingu po stronie klienta, to kod w \u015blep\u0105 uliczk\u0119 i tak naprawd\u0119\u2026 najlepiej jest przesy\u0142a\u0107 do frontu HTMLa \u00a0wyrenderowanego po stronie serwera. Nie da si\u0119 ich argumentacji (kt\u00f3r\u0105 znale\u017a\u0107 mo\u017cecie <a href=\"https:\/\/hotwire.dev\/\">pod linkiem<\/a>) odm\u00f3wi\u0107 sporej ilo\u015bci sensu, a dodatkowo dostarczaj\u0105c do\u015b\u0107 bogaty zestaw narz\u0119dzi. Mo\u017ce kto\u015b z Was si\u0119 skusi?<\/p>\n<p>TypeScript dzieli i rz\u0105dzi frontentdowym \u015bwiatem, dlatego te\u017c nikogo nie powinna dziwi\u0107 jego mo\u017ce nie najwi\u0119ksza, ale z pewno\u015bci\u0105 interesuj\u0105ca reprezentacja w bie\u017c\u0105cym Radarze. W \u015bwiecie, gdzie Deno (alternatywa do NodeJS traktuj\u0105ca TypeScripta jako obywatela pierwszej kategorii) pr\u00f3buje przebi\u0107 si\u0119 do \u015bwiadomo\u015bci programist\u00f3w, a i sam kr\u00f3l Node coraz przychylniejszym okiem spogl\u0105da na dziecko Microsoftu, technika polegaj\u0105ca na dzieleniu typ\u00f3w mi\u0119dzy Frontentedem i Backendem (dla Frontendu) wydaje si\u0119 by\u0107 do\u015b\u0107 oczywistym kierunkiem &#8211; aczkolwiek zawsze dobrze, jak o tego typu rzeczach si\u0119 wspomnia.<\/p>\n<p>Nieco mniej oczywistym rozwi\u0105zaniem komunikacji Frontend\/Backend (zw\u0142aszcza w \u015bwiecie, gdy rozwi\u0105zanie serwerowe nie jest napisane w TypeScripcie). Jest to zestaw narz\u0119dzi (Encoder\u00f3w\/Decoder\u00f3w), kt\u00f3rych zadaniem jest sprawdza\u0107 poprawno\u015b\u0107 otrzymanych danych nie tylko na poziomie kompilacji, ale r\u00f3wnie\u017c w runtimie. Brak wsparcia TypeScripta dla dynamicznego typowania jest zrozumia\u0142\u0105 decyzj\u0105 projektow\u0105, bior\u0105c pod uwag\u0119 ch\u0119\u0107 zachowania kompatyblino\u015bci z JSem, ale dobrze mie\u0107 w arsenale narz\u0119dzia, kt\u00f3re zapewni\u0105 sp\u00f3jno\u015b\u0107 aplikacji r\u00f3wnie\u017c poza momentem kompilacji. \u00a0<\/p>\n<p>Nie mog\u0142o w Radarze zabrakn\u0105\u0107 r\u00f3wnie\u017c podsumowania nowo\u015bci ze \u015bwiata frontendowych framework\u00f3w. Wyj\u0105tkowo nadreprezentowany jest tutaj React, kt\u00f3ry mo\u017ce pochwali\u0107 si\u0119 naprawd\u0119 spor\u0105 ilo\u015bci\u0105 rozbudowuj\u0105cych go narz\u0119dzi. Z rzeczy, kt\u00f3re mnie najbardziej zaskoczy\u0142y wymienie z pewno\u015bci\u0105 jotai i zustand &#8211; dwa r\u00f3\u017cne projekty maj\u0105ce na celu okie\u0142znanie zarz\u0105dzania stanem w Reactcie, podchodz\u0105ce do tematu z nieco odmiennej perspektywy. To, co jest do\u015b\u0107 unikalne, to to, \u017ce mimo \u017ce stanowi\u0105 wobec siebie wzajemn\u0105 konkurencj\u0119, wspiera je ta sama grupa &#8211; Poimandres.<\/p>\n<p>Narz\u0119dzia do zarz\u0105dzania stanem (to musi by\u0107 straszliwie z\u0142o\u017cony problem w Recie, skoro w ka\u017cdej edycji Radaru mamy wr\u0119cz zatrz\u0119sienie jego rozwi\u0105za\u0144) reprezentuje te\u017c <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202010091\">SWR<\/a> (stale-while-revalidate) &#8211; rozwi\u0105zanie opieraj\u0105ce si\u0119 w zupe\u0142no\u015bci na Reactowych Hookach, a kt\u00f3rego celem jest bycie cache nad requestami HTTP &#8211; automatycznego ograniczenia ilo\u015bci zapyta\u0144 do serwera, co prowadzi do \u0142adniejszego i czytelniejszego kodu, bez if\u00f3w sprawdzaj\u0105cych, czy nie posiadamy ju\u017c danego zestawu informacji. Ograniczy\u0107 ono te\u017c mo\u017ce ilo\u015b\u0107 \u201crepaint\u00f3w\u201d aplikacji, czyli niepotrzebnego m\u0119czenia przegl\u0105darki ponownym rysowaniem komponent\u00f3w ze wzgl\u0119du na nadmiar zmiany w strukturze danych &#8211; w wykryciu takowych za\u015b pom\u00f3c mo\u017ce nam did-you-render &#8211; ma\u0142e narz\u0119dzie informuj\u0105ce nas w wypadku wykrycia tego typu nie optymalno\u015bci. Na hookach tak\u017ce <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104050\">React Hook Form<\/a> &#8211; rozwi\u0105zanie staj\u0105ce si\u0119 powoli standardem w \u015bwiecie zarz\u0105dzanie formularzami w Reactcie.<\/p>\n<p>Nie mo\u017cna te\u017c nie wspomnie\u0107 o <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=201904030\">Next.js<\/a> &#8211; \u201cbrakuj\u0105cym\u201d frameworku dla Reacta. Next.js prezentuje \u201copinionated\u201d zestaw bibliotek i praktyk, pozwalaj\u0105cych na szybkie zasetupowanie, a p\u00f3\u017aniej r\u00f3wnie\u017c te\u017c pisanie aplikacji reactowej. Wprawdzie to \u015brodowisko zawsze ceni\u0142o sobie t\u0119 swobod\u0119 w\u0142asnor\u0119cznego dobierania odpowiednich \u201cbaterii\u201d, ale cho\u0107by ostatnie dofinansowania do Next.js udowadniaj\u0105, jaki potencja\u0142 maj\u0105 narz\u0119dzia jego pokroju.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-33.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1338\" height=\"320\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-33.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-33.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-33.png 1338w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Angular jest w nowym Radarze reprezentowany znacznie w\u0119ziej &#8211; mamy bowiem do czynienia tylko z pojedyncz\u0105 bibliotek\u0105 &#8211; \u00a0<a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104118\">Angular Testing Library<\/a>. Ta kopia React Testing Library zyskuje na popularno\u015bci, w czym z pewno\u015bci\u0105 nie przeszkadzaj\u0105 ostatnie zapowiedzi zabicia projektu Protractor, stanowi\u0105cego przez lata standard tego, jak testuje si\u0119 angularowe aplikacje. <\/p>\n<p>Ca\u0142ego frontentdowego obrazku niech dope\u0142ni fakt, \u017ce coraz wi\u0119cej miejsca po\u015bwi\u0119cone jest WebAssembly. Mamy bowiem w nowym Technology Radarze <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202010022\">Blazora<\/a> od Microsoftu oraz s\u0142u\u017c\u0105ce do jego tesowania <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104029\">bUnit<\/a>. Niby nie tak wiele, ale w dalszym ci\u0105gu nale\u017cy pami\u0119ta\u0107, \u017ce angularowi po\u015bwi\u0119cono o po\u0142ow\u0119 mniej miejsca.<\/p>\n<h2 id=\"nowe-rzeczy-w-temacie-konteneryzacji\" data-num=6>Nowe rzeczy w temacie konteneryzacji<\/h2>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-17.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1200\" height=\"586\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-17.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-17.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-17.png 1200w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Szeroko poj\u0119ta konteneryzacja jest tematem, kt\u00f3ry zwykle do\u015b\u0107 licznie reprezentowany jest w ramach Technology Radaru. Tym razem zaskakuj\u0105co nie mamy nawa\u0142u r\u00f3\u017cnego rodzaju kubernetesowych tooli, ale te\u017c znajdziemy sporo interesuj\u0105cych projekt\u00f3w.<\/p>\n<p>Od lat mo\u017cna zauwa\u017cy\u0107 proces coraz wi\u0119kszego odchudzania obraz\u00f3w dockerowych. Pocz\u0105tkowo do obraz\u00f3w wrzucane tam by\u0142y najnormalniejsze, pe\u0142ne dystrybucje Linuxa, nast\u0119pnym krokiem by\u0142o stopniowe ich odchudzanie, wyrzucanie mo\u017cliwo\u015bci logowania si\u0119 do obrazu itd. Czasem motywacj\u0105 by\u0142 rozmiar, a czasem ograniczenie potencjalnych wektor\u00f3w ataku. Je\u017celi motywuje nas to ostatnie, to kolejnym krokiem s\u0105 tak zwane <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=1330\">\u2018&#8221;Distroless&#8221; Docker Images\u2019<\/a>. S\u0105 to doci\u0119te do minimum wersje Linuxa rozpropagowane przez Google\u2019a, posiadaj\u0105ce wy\u0142\u0105cznie aplikacje i sam trzon systemu operacyjnego. Nie znajdziemy w nich pow\u0142oki czy mened\u017cer\u00f3w pakiet\u00f3w. Pewnie do debuggingu lokalnego nie chcia\u0142bym musie\u0107 tego u\u017cywa\u0107, ale jako artefakt do Kubernetesa, brzmi\u0105 ju\u017c one ca\u0142kiem interesuj\u0105co.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-34.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1339\" height=\"320\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-34.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-34.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-34.png 1339w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Je\u017celi ju\u017c jeste\u015bmy w temacie bezpiecze\u0144stwa &#8211; mo\u017ce szukacie lepszej pod tym wzgl\u0119dem alternatywy do Dockera? Je\u015bli tak, mo\u017ce zainteresujecie si\u0119 <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104064\">podmanem<\/a>. Jest to w pe\u0142ni zgodny z API Dockera (do poziomu, gdzie jego tw\u00f3rcy zalecaj\u0105 dla wygody zaliasowanie go w shellu komend\u0105 docker) tool, umo\u017cliwiaj\u0105cy uruchamianie obraz\u00f3w z kontekstem u\u017cytkownika nie b\u0119d\u0105cego rootem. Jak \u0142atwo si\u0119 domy\u015bli\u0107, jest to dobra dodatkowa ochrona. Do tego ma bardzo \u201ccute\u201d ikonk\u0119. Czego chcie\u0107 wi\u0119cej \u00a0od toola devopsowego? <strong>#FokiPonadWielorybami<\/strong>  <\/p>\n<p>Je\u017celi za\u015b u\u017cywamy ju\u017c Kuberenetesa i chcemy w ramach tej platformy uruchamia\u0107 wszystkie niezb\u0119dne fragmenty naszej infrastruktury, najlepsz\u0105 metod\u0105 mo\u017ce by\u0107 u\u017cycie tak zwanych \u201coperator\u00f3w\u201d. Ten parasolkowy standard umo\u017cliwia uruchamianie w ramach klastra popularnych aplikacji. Niech przyk\u0142adem b\u0119dzie tutaj Jenkins Operator, u\u017cywany u nas w firmie. A je\u017celi spodoba Wam si\u0119 takie podej\u015bcie, to ostatnim narz\u0119dzie kt\u00f3re mo\u017cecie znale\u017a\u0107 w Radarze jest <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104019\">Longhorn<\/a> &#8211; kubernetesowy odpowiednik S3. Persystencja w ramach K8s nigdy nie by\u0142a prosta, Longhorn za\u015b chyba rozwi\u0105za\u0142 ten problem ca\u0142kiem nie\u017ale. Wydaje si\u0119, \u017ce mo\u017ce by\u0107 interesuj\u0105c\u0105 alternatyw\u0105, je\u015bli nie chcemy rozwi\u0105za\u0144 \u201cmanaged\u201d lub naszym celem jest zamkni\u0119cie wszystkiego w ramach w\u0142asnej podsieci.<\/p>\n<h2 id=\"thoughtworks-pamieta-o-designerach\" data-num=7>ThoughtWorks pami\u0119ta o designerach<\/h2>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d095a720cc.png\" class=\"kg-image\" alt loading=\"lazy\"><\/figure>\n<p>Oni te\u017c znajd\u0105 dla siebie co\u015b w nowym Radarze.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-35.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1337\" height=\"317\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-35.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-35.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-35.png 1337w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>To, \u017ce Design Systemy (zestawy gotowych do u\u017cycia komponent\u00f3w, kt\u00f3re programi\u015bci mog\u0105 \u0142atwo zainkorporowa\u0107 w swoich projektach) s\u0105 przydatne, jest ju\u017c niejako truizmem. S\u0105 one, co prawda spor\u0105 inwestycj\u0105, ale z gatunku takich wp\u0142ywaj\u0105cych na d\u0142ugoterminow\u0105 produktywno\u015b\u0107 zespo\u0142\u00f3w programistycznych &#8211; a wi\u0119c z takich, co do\u015b\u0107 szybko si\u0119 sp\u0142acaj\u0105. Co jednak przyku\u0142o moj\u0105 uwag\u0119 w nowym Radarze, to fakt pojawienia si\u0119 <a href=\"https:\/\/www.thoughtworks.com\/radar\/platforms?blipid=202104028\">Bit.dev<\/a> &#8211; platformy low-code, pozwalaj\u0105cej na po\u0142\u0105czenie UIowych klock\u00f3w z r\u00f3\u017cnego rodzaju dostarczycielami danych, w efekcie pozwalaj\u0105c na \u0142atwe spinanie do kupy rzeczonych komponent\u00f3w w funkcjonalne aplikacje. Co wyr\u00f3\u017cnia <a href=\"https:\/\/www.thoughtworks.com\/radar\/platforms?blipid=202104028\">Bit.dev<\/a> z nawa\u0142u innych platform to fakt, \u017ce pozwala na dzia\u0142anie zar\u00f3wno w ramach hostowanej przez nich platformy, jak i mo\u017ce by\u0107 zainstalowana po prostu jako zewn\u0119trzna zale\u017cno\u015b\u0107 &#8211; bardzo lubi\u0119 narz\u0119dzia daj\u0105ce tego typu elastyczno\u015b\u0107.<\/p>\n<p>Jak ju\u017c jeste\u015bmy w temacie low-code, to ciekawym rozwi\u0105zaniem jest <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104017\">imgcook<\/a>. Ta chi\u0144ska biblioteka maj\u0105ca swoje korzenie w Alibabie pozwala na automatyczne wygenerowanie strony z plik\u00f3w Sketch \/ Photoshop, u\u017cywaj\u0105c do tego Deep Learningu. O ile efekty nie s\u0105 jeszcze idealne i wymagaj\u0105 od projektant\u00f3w nieco porzucenia kreatywnej wolno\u015bci (aczkolwiek w stopniu pono\u0107 akceptowalnym dla wi\u0119kszo\u015bci), to ca\u0142o\u015b\u0107 zdaje si\u0119 dzia\u0142a\u0107 . A przynajmniej \u015bwiadczy o tym fakt, \u017ce Alibaba Group sporo swoich prostych, eventowych stronek w\u0142a\u015bnie tak wypu\u015bci\u0142o na produkcj\u0119. W ciekawych czasach \u017cyjemy, oj ciekawych.<\/p>\n<h2 id=\"jak-powinnismy-testowac-oprogramowanie\" data-num=8>Jak powinni\u015bmy testowa\u0107 oprogramowanie?<\/h2>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d095bc9af7.png\" class=\"kg-image\" alt loading=\"lazy\"><\/figure>\n<p>Testowanie to zwykle ta cz\u0119\u015b\u0107, kt\u00f3ra bywa mocno \u201ctechnologio specyficzna\u201d, ale akurat obecna edycja Radaru daje nam kilka tooli relatywnie agnostycznych do naszego stacku.<\/p>\n<p>Pami\u0119tam czasy, kiedy w zasadzie de facto standardem do testowania wydajno\u015bci aplikacji by\u0142 Gatling. Jego panowanie chyba powoli odchodzi w cie\u0144, bo coraz cz\u0119\u015bciej to w\u0142a\u015bnie <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202010078\">k6<\/a> jest przywo\u0142ywany jako nowy z\u0142oty standard dla tego typu rozwi\u0105za\u0144. Wynika to z faktu, \u017ce tw\u00f3rcy zauwa\u017cyli, jak kluczowym dla tego typu toola jest mnogo\u015bci integracji i \u0142atwo\u015b\u0107 po\u0142\u0105czenia go z us\u0142ugami zewn\u0119trznymi. \u017byjemy w czasach, gdy rozwi\u0105zania technologiczne si\u0119 ze sob\u0105 mocno przeplataj\u0105, dlatego te\u017c nie dziwi fakt \u017ce dla wielu programist\u00f3w jest to kluczowa funkcjonalno\u015b\u0107.<\/p>\n<p>Testowanie UI to nieko\u0144cz\u0105ca si\u0119 historia. W\u0142a\u015bciwie przez ca\u0142\u0105 moj\u0105 dotychczasow\u0105 karier\u0119 mam okazj\u0119 obserwowa\u0107 powoli zmieniaj\u0105ce si\u0119 technologie, obiecuj\u0105ce kolejne usprawnienia tego do\u015b\u0107 niestabilnego (zar\u00f3wno poprzez potrzeb\u0119 uruchomienia zewn\u0119trznej aplikacji, jak i fakt, \u017ce po prostu nie \u0142atwo jest napisa\u0107 utrzymywalne testy dla UI). Kolejnym wa\u017cnym graczem w tej przestrzeni wydaje si\u0119 by\u0107 <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202010056\">Playwright<\/a> &#8211; narz\u0119dzie stworzone przez tw\u00f3rc\u00f3w Puppetera, kt\u00f3rzy nauczeni tym co dzia\u0142a\u0142o si\u0119, a co nie dzia\u0142a\u0142o w ich poprzednim narz\u0119dziu, postanowili stworzy\u0107 kolejne. W poprzedniej edycji Radaru, Playwright znajdowa\u0142 si\u0119 w sekcji Asses, teraz przeszed\u0142 to Trial &#8211; wida\u0107, \u017ce zdobywa coraz wi\u0119ksze zaufanie ThoughtWorksowych Developer\u00f3w.<\/p>\n<p>A wiecie, co jeszcze ci\u0119\u017cko si\u0119 testuje? Infrastruktur\u0119. Dlatego te\u017c dobrze wiedzie\u0107, \u017ce powstaj\u0105 narz\u0119dzia pozwalaj\u0105ce nam nabra\u0107 pewno\u015bci r\u00f3wnie\u017c do tego fragmentu procesu developerskiego. <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=201904011\">Terratest<\/a>, przeznaczony do popularnego Terraforma, przeszed\u0142 bardzo podobn\u0105 drog\u0119 jak Playwright -&gt; w poprzedniej edycji by\u0142 w Asses, teraz trafi\u0142 do sekcji Trial. Zobaczymy, jak jego losy b\u0119d\u0105 si\u0119 rysowa\u0142y w kolejnych miesi\u0105cach.<\/p>\n<h2 id=\"simplicity-matters\" data-num=9>Simplicity Matters<\/h2>\n<p>Dla tych kt\u00f3rzy o tym zapominaj\u0105, Radar ma dwie przypominajki.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d095c9736d.png\" class=\"kg-image\" alt loading=\"lazy\"><\/figure>\n<p>Po pierwsze, przypomina \u017ce jednak skomplikowane Design Doci s\u0105 ju\u017c pozosta\u0142o\u015bci\u0105 epoki, kt\u00f3ra min\u0119\u0142a. Komunikacja pisemna, zw\u0142aszcza w czasach kiedy ci\u0105gle jeszcze praca zdalna jest mocno rozpowszechniona, jest niezb\u0119dna &#8211; nie bez kozery m\u00f3wi si\u0119, \u017ce umiej\u0119tno\u015b\u0107 szeroko poj\u0119tego \u201ctechnicznego pisania\u201d jest jedn\u0105 z nieodzownych cech dobrego in\u017cyniera Anno Domini 2021. Dobre edytor to za\u015b taki, kt\u00f3ry czas z ty\u0142u g\u0142owy odbiorc\u0119 komunikatu. Design Doci ze starych epok by\u0142y \u015bwietne jako baza wiedzy (ale naprawd\u0119, zdarza\u0142o<br \/>\n si\u0119 \u017ce uratowa\u0142y mi sk\u00f3r\u0119 przy pr\u00f3bie zrozumienia starych system\u00f3w), ale je\u015bli naszym celem jest otrzymanie feedbacku od zespo\u0142u z kt\u00f3rym musimy wsp\u00f3\u0142pracowa\u0107, to prawdopodobnie powinni\u015bmy si\u0119 skupi\u0107 na jak najkr\u00f3tszej formie, maj\u0105cej na uwadz\u0119 zar\u00f3wno \u201cattention span\u201d, jak i po prostu nawa\u0142 obowi\u0105zk\u00f3w z drugiej strony. Dlatego te\u017c Radar zach\u0119ca do jak najbardziej <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104044\">zwi\u0119z\u0142ej formy tak zwanych Request-for-comments<\/a>, kt\u00f3re lepiej znane s\u0105 pod postaci\u0105 skr\u00f3tu RFC.<\/p>\n<p>Podobnie prezentuje si\u0119 sytuacja w kontek\u015bcie Machine Learningu. Nietrudno jest bowiem zabra\u0107 si\u0119 za szerokie zbieranie danych, pr\u00f3b\u0119 stworzenia datasetu w celu u\u017cycia kt\u00f3rej\u015b z nowoczesnych technik. Jednak kluczowe jest wzi\u0119cie tutaj pod uwag\u0119, na ile pozwoli nam to uzyska\u0107 efekt ko\u0144cowy o tyle lepszy, \u017ce rekompensuj\u0105cy odpalenie olbrzymiej, cz\u0119sto bardzo drogiej machiny. Nowa edycja Radaru radzi pr\u00f3bowa\u0107 <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104070\">podej\u015b\u0107 do tematu prostymi metodami<\/a>, typu bazowe modele naklepane w Pythonie, a dopiero gdy to nie zadzia\u0142a pr\u00f3bowanie z bardziej skomplikowanymi metodami i algorytmami state-of-the-art.<\/p>\n<h2 id=\"od-remote-nie-uciekniemy-trzeba-go-wykorzystac\" data-num=10>Od Remote nie uciekniemy, trzeba go wykorzysta\u0107<\/h2>\n<p>Bior\u0105c pod uwag\u0119, jak przez wszystkie przypadki odmieniana by\u0142a praca zdalna w ostatnim p\u00f3\u0142roczu, przebitki tej dyskusji mo\u017cemy te\u017c znale\u017a\u0107 w publikacji ThoughtWorks.<\/p>\n<p>Okazuje si\u0119, \u017ce praca zdalna ma pewne oryginalne zalety. Ot\u00f3\u017c w momencie, gdy jeste\u015bmy w biurze, wsp\u00f3lna praca nad jednym problemem jest ograniczona przez\u2026 fizyczn\u0105 przestrze\u0144. Monitory s\u0105 ma\u0142e, salki czasem ci\u0119\u017cko zarezerwowa\u0107 (za tym aspektem biura na pewno nikt nie t\u0119skni). Na wideokonferencji za\u015b mo\u017cna udost\u0119pni\u0107 ekran dladowolnie du\u017cej ilo\u015bci koleg\u00f3w z pracy. Dlatego te\u017c jedn\u0105 z technik, kt\u00f3r\u0105 wed\u0142ug tw\u00f3rc\u00f3w Radaru warto cho\u0107by mie\u0107 w arsenale, jest <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104052\">Remote Mob Programming<\/a>. Jest to rozwini\u0119cie Mob Programmingu, gdzie t\u0142um ludzi pracuje nad jednym kodem, regularnie zmieniaj\u0105c osob\u0119 maj\u0105c\u0105 dost\u0119p do klawiatury. Okazuje si\u0119, \u017ce nasze narz\u0119dzia s\u0105 ju\u017c na tyle dojrza\u0142e, \u017ce jest to w sytuacji pracy zdalnej po prostu wygodniejsze i \u0142atwiejsze do przeprowadzenia. To co, kto\u015b z Was kiedykolwiek mob programowa\u0142 lub zamierza to robi\u0107?<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d095d40e46.png\" class=\"kg-image\" alt loading=\"lazy\"><\/figure>\n<p>Apropo wspomnianych coraz lepszych narz\u0119dzi &#8211; w nowym Radarze pojawia si\u0119 Tuple. W czasie pandemii in\u017cynierowie z Thoughtworks przetestowali wiele r\u00f3\u017cnych aplikacji i w\u0142a\u015bnie Tuple wed\u0142ug nich najlepiej sprawdza si\u0119 w sytuacji wsp\u00f3lnej pracy zdalnej nad jednym kodem. Jako jedn\u0105 ze szczeg\u00f3lnych zalet tego rozwi\u0105zania wskazuj\u0105 oni unikaln\u0105 mo\u017cliwo\u015b\u0107 sterowania jednym kursorem przez dwie osoby.<\/p>\n<h2 id=\"kilka-interesujacych-technik-jak-dbac-o-nasze-zespoly\" data-num=11>Kilka interesuj\u0105cych technik, jak dba\u0107 o nasze zespo\u0142y<\/h2>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-18.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"280\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-18.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-18.png 900w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Bardzo ciekawym aspektem, ju\u017c w zasadzie kilku poprzednich Radar\u00f3w, jest du\u017cy nacisk jaki ludzie z ThoughtWorks k\u0142ad\u0105 na produktowe podej\u015bcie do rozwoju ka\u017cdego oprogramowania, tak\u017ce wewn\u0119trznego &#8211; zar\u00f3wno przeznaczonego do biznesu, jak i b\u0119d\u0105cego \u201cinfr\u0105\u201d dla pozosta\u0142ych zespo\u0142\u00f3w. W aktualnym Radarze przeciwstawiaj\u0105 oni bardzo mocno to podej\u015bcie, w kt\u00f3rym wszyscy ludzie s\u0105 bardzo mocno zaanga\u017cowani w rozw\u00f3j us\u0142ugi daj\u0105cej konkretn\u0105 warto\u015b\u0107 dla klienta, typowym <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104110\">\u201csilosowym\u201d organizacjom<\/a> i zespo\u0142om, okre\u015blanym tutaj jako layered platform teams. Sugeruj\u0105 oni, \u017ce bardzo \u0142atwo ukry\u0107 klasyczne klastrowanie, nazywaj\u0105c poszczeg\u00f3lne zespo\u0142y np. <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104043\">DBA\u00f3w \u201cplatformowymi\u201d<\/a> i udaj\u0105c, \u017ce jeste\u015bmy nowocze\u015bni i interoperacyjni. Zauwa\u017caj\u0105 za to, \u017ceby podzia\u0142u organizacji, zw\u0142aszcza zespo\u0142\u00f3w przynosz\u0105cych \u201cwarto\u015b\u0107\u201d, dokonywa\u0107 w spos\u00f3b szanuj\u0105cy \u201c\u0142adunek kognitywny\u201d ludzi w nich pracuj\u0105cych. Chodzi o to, \u017ceby zesp\u00f3\u0142 realnie m\u00f3g\u0142 skupi\u0107 si\u0119 nad jednym problemem, w miar\u0119 jednolitym stosie technologicznym &#8211; inaczej mo\u017cemy doprowadzi\u0107 do przem\u0119czenia ludzi i sprawienia, \u017ce b\u0119d\u0105 oni nieszcz\u0119\u015bliwi oraz ma\u0142o wydajni. <\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-42.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1339\" height=\"318\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-42.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-42.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-42.png 1339w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Ciekaw\u0105 rzecz\u0105 jest fakt, \u017ce do\u015b\u0107 krytycznie Thoughtworks wypowiada si\u0119 o oprogramowaniu <a href=\"https:\/\/www.thoughtworks.com\/radar\/platforms?blipid=202010066\">Backstage<\/a>. Jest to, zbieraj\u0105ca spore ilo\u015bci pozytywnego buzzu aplikacja do tworzenia tak zwanych wewn\u0119trznych \u201cdeveloper portali\u201d, b\u0119d\u0105cych w zasadzie kolejn\u0105 warstw\u0105 abstrakcji np. nad dostawcami chmurowymi. In\u017cynierowie tworz\u0105cy Radar ze swojego do\u015bwiadczenia twierdz\u0105, \u017ce wymuszaj\u0105 one cz\u0119sto bardzo ograniczaj\u0105c\u0105 standaryzacje. Z podobnych powod\u00f3w maj\u0105 oni te\u017c do\u015b\u0107 jasn\u0105 opini\u0119, co do <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=793\">SAFE<\/a> (Skalowalnego Agile). Jest ona zgodna ze starym powiedzeniem: \u201cG\u0142\u00f3wna zasada skalowania: Nie\u201d. U\u017cywanie ustandaryzowanych framework\u00f3w z konkretnymi frameworkami mo\u017ce by\u0107 jakim\u015b startem, ale kurczowe trzymanie si\u0119 generycznych powoduje, \u017ce cz\u0119sto trzeba nagina\u0107 styl pracy pasuj\u0105cy do problemu w celu dopasowania si\u0119 do frameworka, co jest zar\u00f3wno frustruj\u0105ce jak i ma\u0142o efektywne.<\/p>\n<h2 id=\"wszystkie-rzeczy-ktore-dzieja-sie-continuous\" data-num=12>Wszystkie rzeczy kt\u00f3re dziej\u0105 si\u0119 &#8222;Continuous&#8221;<\/h2>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-24.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1024\" height=\"342\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/4_image-24.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-24.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-24.png 1024w\" sizes=\"auto, (min-width: 720px) 720px\"><figcaption>Ukradzione z https:\/\/www.spritecloud.com\/test-automation-with-ci-cd-pipeline\/, ale nie mog\u0142em si\u0119 powstrzyma\u0107 <\/figcaption><\/figure>\n<p>W tej edycji, wszystko kr\u0119ci si\u0119 w zasadzie w oko\u0142o Gita.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-37.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1337\" height=\"318\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-37.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-37.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-37.png 1337w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Dla wszystkich, kt\u00f3rzy \u015bledz\u0105 rynek system\u00f3w CI\/CD, nie jest tajemnic\u0105 \u017ce Thoughtworks posiadaj\u0105 w\u0142asne rozwi\u0105zanie tego typu. GoCD, swego czasu jedne z najciekawszych dost\u0119pnych na rynku. Z tej perspektywy interesuj\u0105cym jest fakt, \u017ce w nowej edycji Radaru sugeruj\u0105 oni spr\u00f3bowanie chyba najl\u017cejszego ze wszystkich dost\u0119pnych rozwi\u0105za\u0144 do Continuous Delivery &#8211; <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104005\">GitHub Actions<\/a>. Chwal\u0105 oni wygod\u0119, prostot\u0119 i (jak\u017ce by inaczej) integracj\u0119 z repozytorium kodu. U\u017cywanie GitHub Actions broni nas te\u017c przed jednym z antypattern\u00f3w jakie odnale\u017a\u0107 mo\u017cemy w nowym Radarze &#8211; utrzymanie kodu \u017ar\u00f3d\u0142owego aplikacji i kodu \u017ar\u00f3d\u0142owego pipeline przez dwa niezale\u017cne zespo\u0142y. Radar bardzo jasno wypowiada si\u0119, \u017ce jest to bardzo, bardzo z\u0142a praktyka.<\/p>\n<p>A skoro o antypatternach, to og\u00f3lnie du\u017co wi\u0119cej znale\u017a\u0107 mo\u017cemy wskaz\u00f3wek czego nie robi\u0107 ni\u017c co robi\u0107. Przyk\u0142adowo, raczej odradzane s\u0105 tak zwane <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104006\">GitOpsy<\/a>. Jest to opisywane jako rozwini\u0119cie Infrastructure as a Code polegaj\u0105ce na automatycznym \u015bci\u0105ganiu z repozytorium bie\u017c\u0105cego stanu infrastruktury, kt\u00f3ry to specjalny pooler potem implementuje w ramach produkcyjnego \u015brodowiska. Wed\u0142ug ludzi z ThoughtWorks, ta dosy\u0107 sprytna idea ko\u0144czy si\u0119 szybko sytuacjami, \u017ce branche dla poszczeg\u00f3lnych \u015brodowisk rozje\u017cd\u017caj\u0105 si\u0119. Wynikowo wi\u0119cej z tego szkody ni\u017c po\u017cytku (zreszt\u0105, r\u00f3wnie\u017c w wypadku samych deployowanych artefakt\u00f3w te\u017c zwr\u00f3cono uwag\u0119 na ten problem, sugeruj\u0105c automatyczne mierzenie poziomu \u201crozjazdu\u201d \u015brodowisk) . Dodatkowo, pandemia pokaza\u0142a nam, \u017ce model Gitowych PullRequest\u00f3w przy wszystkich swoich zaletach, potrafi by\u0107 bardzo blokuj\u0105cy dla zespo\u0142\u00f3w. Dlatego te\u017c in\u017cynierowie tworz\u0105cy Radar sugeruj\u0105, aby w swoim arsenale posiada\u0107 tak\u017ce inne metody utrzymywania jako\u015bci (i znajomo\u015bci) kodu &#8211; inaczej tak naprawd\u0119 dostajemy d\u0142ugo\u017cyj\u0105ce bran\u017ce i ca\u0142a mityczna, ci\u0105g\u0142a integracja bierze w \u0142eb. <\/p>\n<p>Schodz\u0105c troch\u0119 z tematu Gita, Technology Radar jest kolejnym miejscem do\u015b\u0107 jasno wypowiadaj\u0105cym si\u0119, \u017ce czego jak czego, ale <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104002\">AWSowego CodePipeline<\/a> lepiej kijem nie rusza\u0107. Jak wida\u0107 nie wszystko z\u0142oto, czego si\u0119 Amazon dotknie.<\/p>\n<h2 id=\"co-slychac-w-swiecie-infrastructure-as-a-code\" data-num=13>Co s\u0142ycha\u0107 w \u015bwiecie Infrastructure-as-a-Code<\/h2>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-22.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"286\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-22.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-22.png 900w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Pierwsza sugestia przypomina nieco rad\u0119, kt\u00f3r\u0105 znaj\u0105 domoro\u015bli eksperymentatorzy, pr\u00f3buj\u0105cy stworzy\u0107 w\u0142asn\u0105 bibliotek\u0119 do kryptografii &#8211; je\u015bli nie jeste\u015b specjalist\u0105, kt\u00f3ry buduje tego typu rozwi\u0105zanie dla spo\u0142eczno\u015bci (a nie na potrzeb\u0119 kilku zespo\u0142\u00f3w), zdaj si\u0119 na jedno z istniej\u0105cych rozwi\u0105za\u0144. Rynek Cloud Computingu jest za szybki, zbyt dynamiczny i w d\u0142u\u017cszej perspektywie albo rozwijanie w\u0142asnego rozwi\u0105zania b\u0119dzie za drogie i b\u0119dziesz musia\u0142 si\u0119 przenie\u015b\u0107 np. na Terraforma, albo zostaniesz z ty\u0142u za rozwi\u0105zaniami chmurowymi, kt\u00f3re (jak to ju\u017c w tym artykule wspomnieli\u015bmy) po prostu rozwijaj\u0105 si\u0119 zbyt dynamicznie. Ma\u0142o kt\u00f3ra firma ma na tyle unikalne potrzeby, \u017ceby nie bra\u0107 czego\u015b istniej\u0105cego \u201cz p\u00f3\u0142ki\u201d &#8211; mimo \u017ce wielu wydaje si\u0119, \u017ce tak w\u0142a\u015bnie jest u nich.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-38.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1340\" height=\"322\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-38.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-38.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-38.png 1340w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>A jakie rozwi\u0105zania Radar wskazuje jako interesuj\u0105ce? Je\u017celi nie przeszkadza Ci Vendor Lock-In (tutaj masz dobry artyku\u0142 dlaczego tak naprawd\u0119 nie powinien) i u\u017cywasz AWSa, ichniejszy <a href=\"https:\/\/www.thoughtworks.com\/radar\/platforms?blipid=201911007\">Cloud Development Kit<\/a> zdobywa corazwi\u0119ksz\u0105 popularno\u015b\u0107. Sam pami\u0119tam, jak rozwi\u0105zanie to wchodzi\u0142o na, ju\u017c wydaje si\u0119 do\u015b\u0107 nasycony, rynek i interesuj\u0105ce jest, jak w odr\u00f3\u017cnieniu od np. <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104002\">CodePipelines<\/a>, ono akurat zdoby\u0142o naprawd\u0119 szerok\u0105 aprobat\u0119 u\u017cytkownik\u00f3w. Je\u017celi za\u015b nie u\u017cywasz AWSa, mo\u017cesz spr\u00f3bowa\u0107 <a href=\"https:\/\/www.thoughtworks.com\/radar\/platforms?blipid=1283\">Pulumi<\/a>. Oba rozwi\u0105zania przyj\u0119\u0142y do\u015b\u0107 nietypow\u0105 par\u0119 lat temu filozofi\u0119 &#8211; stwierdzi\u0142y one, \u017ce tak naprawd\u0119 \u015bwiat infrastruktury sta\u0142 si\u0119 na tyle skomplikowany, \u017ce deklaratywne rozwi\u0105zania nie w ka\u017cdym przypadku s\u0105 najlepszym pomys\u0142em i do opisywania \u015brodowiska warto zaprz\u0119gn\u0105\u0107 j\u0119zyki Turing Complete &#8211; z ich wszystkimi p\u0119tlami, ifami i zmiennymi. Mam wra\u017cenie, \u017ce to akurat jest ci\u0105g\u0142y cykl (zalet\u0105 deklaratywne rozwi\u0105za\u0144 mia\u0142o by\u0107 w\u0142a\u015bnie zmniejszenie niepotrzebnej z\u0142o\u017cono\u015bci, kt\u00f3r\u0105 cechowa\u0142y oparte na bashu skrypty do deploymentu), ale jak widzimy historia lubi zatoczy\u0107 ko\u0142o. <\/p>\n<p>Dla tych za\u015b, kt\u00f3rzy potrzebuj\u0105 maksymalnego platform-agnostycyzmu, mamy za\u015b <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202010032\">Open Appliaction Model (OAM)<\/a> &#8211; kolejne ju\u017c podej\u015bcie do tworzenia abstrakcji nad chmurami, tym razem oparte mocno oparte o Kubernetesa. Po\u017cyjemy, zobaczymy <\/p>\n<h2 id=\"kto-powinien-rzadzic-chmura-w-firmie\" data-num=14>Kto powinien rz\u0105dzi\u0107 chmur\u0105 w firmie?<\/h2>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-21.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"281\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-21.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-21.png 900w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>W poprzedniej sekcji opisywali\u015bmy, \u017ce tworzenie w\u0142asnych narz\u0119dzi do zarz\u0105dzania chmurami to syzyfowa praca, gdy\u017c gonienie wszystkich zmian, kt\u00f3re wprowadzaj\u0105 dostawcy chmur po prostu jest ma\u0142o efektywne. Nieco podobny problem jest z wszystkimi narz\u0119dziami do symulacji ich zachowa\u0144 w \u015brodowisku lokalnym. Ka\u017cdy, kto ich u\u017cywa\u0142 wie, \u017ce zwykle dzia\u0142aj\u0105 \u201cprawie dobrze\u201d, a nawet je\u015bli nad\u0105\u017caj\u0105 za tym, co dzieje si\u0119 w chmurze, to wraz z ka\u017cd\u0105 now\u0105 wersj\u0105 niezb\u0119dne s\u0105 operacje po stronie u\u017cytkownika jak np. update jarzm testowych u\u017cywanych do symulowania zachowania chmury. <\/p>\n<p>Skoro abstrakcje przeciekaj\u0105, Radar ma interesuj\u0105ce rozwi\u0105zanie &#8211; ola\u0107 abstrakcje, i bior\u0105c pod uwag\u0119 szybko\u015b\u0107 internetu i wzgl\u0119dn\u0105 tanio\u015b\u0107 zasob\u00f3w chmurowych w por\u00f3wnaniu do czasu in\u017cynier\u00f3w, tworzy\u0107 indywidualne <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104009\">Cloud Sandboxy<\/a> na potrzeby ka\u017cdego z in\u017cynier\u00f3w. Przy okazji, taki Sandbox rzeczony in\u017cynier powinien m\u00f3c wyklika\u0107 sobie samemu &#8211; jedn\u0105 z odradzanych praktyk jest operowanie chmur\u0105 w oparciu o \u201ctickety\u201d do \u201cplatform teamu\u201d. Nie pozwala to w realnym \u015bwiecie oszacowa\u0107 koszt\u00f3w (to mo\u017cna lepiej ogarn\u0105\u0107 poprzez prawid\u0142owe tagowanie maszynek), a powoduje tylko frustracje i wieczne op\u00f3\u017anienia &#8211; og\u00f3lnie mam wra\u017cenie, \u017ce szybko\u015b\u0107 proces\u00f3w jest jedn\u0105 z my\u015bli prz<br \/>\newodnich samego Radaru.<\/p>\n<h2 id=\"co-radar-przynosi-dla-programistow-jvm\" data-num=15>Co Radar przynosi dla programist\u00f3w JVM?<\/h2>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-16.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"284\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-16.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-16.png 900w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>No jak to co &#8211; Kotlin  Aczkolwiek nie w takich ilo\u015bciach, jak w ostatnich edycjach. <\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-39.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1338\" height=\"320\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-39.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-39.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-39.png 1338w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Poza Kotlin Multiplatform Mobile, o kt\u00f3rym ju\u017c wspomnieli\u015bmy w sekcji o aplikacjach mobilnych, w Radarze znalaz\u0142 si\u0119 <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104041\">Kotlin Flow<\/a> &#8211; abstrakcje nad bardzo popularnymi korutynami, kt\u00f3re niejedn\u0105 osob\u0119 przyci\u0105gn\u0119\u0142y do tego j\u0119zyka. Dobra passa Kotlina si\u0119 nie ko\u0144czy &#8211; Flow r\u00f3wnie\u017c bowiem uwa\u017cany jest za bardzo ciekawe podej\u015bcie do pisania asynchronicznego kodu. <\/p>\n<p>Co mnie jednak cieszy nawet bardziej ni\u017c Kotlin (bo jak ju\u017c wspomnia\u0142em, Kotlina nigdy w Radarze nie brakuje), to fakt zauwa\u017cenia <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104122\">GraalVM<\/a>. Osoby, kt\u00f3re czytaj\u0105 nasze JVMowe przegl\u0105dy na pewno zauwa\u017cy\u0142y, \u017ce rozwi\u0105zanie to coraz bardziej przebija si\u0119 mo\u017ce nie do mainstreamu, ale na pewno znajduje sobie wczesnych adopter\u00f3w. Sam mocno kibicuje tej platformie (mia\u0142em j\u0105 okazj\u0119 z niez\u0142ym skutkiem u\u017cy\u0107 w jednym z projekt\u00f3w), dlatego te\u017c mi\u0142o widzie\u0107, \u017ce r\u00f3wnie\u017c in\u017cynierowie z ThoughtWorks zauwa\u017caj\u0105 jej potencja\u0142.<\/p>\n<h2 id=\"czy-ty-tez-lubisz-lintery\" data-num=16>Czy Ty te\u017c lubisz lintery?<\/h2>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-23.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1200\" height=\"369\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-23.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/4_image-23.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-23.png 1200w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Lubi je bran\u017ca, lubi\u0119 te\u017c je i ja, dlatego uda\u0142o mi si\u0119 wy\u0142uska\u0107 dwa rozwi\u0105zania tego typu. Oba te\u017c zajmuj\u0105 si\u0119 \u201clintowaniem\u201d bardzo podobnego zakresu &#8211; specyfikacji naszego API i jego zgodno\u015bci ze standardem OpenAPI. <\/p>\n<p>Rozwi\u0105zania r\u00f3\u017cni\u0105 si\u0119 troch\u0119 swoj\u0105 filozofi\u0105 &#8211; o ile <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104055\">Spectral<\/a> jest szalenie generyczny &#8211; o tyle wspomniane OpenAPI jest jego najcz\u0119stszym przypadkiem u\u017cycia. Jest to komercyjny projekt, kt\u00f3rego u\u017cy\u0107 mo\u017cna np. r\u00f3wnie\u017c do walidacji konfiguracji Kubernetesa, a samo narz\u0119dzie posiada edytor pozwalaj\u0105cy na granularne okre\u015blenie konkretnych zasad. W odr\u00f3\u017cnieniu od niego, <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104058\">Zally<\/a> jest znacznie bardziej \u201copinionated\u201d, opieraj\u0105c si\u0119 na standardach wobec API wypracowanych przez firm\u0119 Zalando. W zale\u017cno\u015bci od Waszych potrzeb, mo\u017cecie u\u017cy\u0107 jednego z dw\u00f3ch rozwi\u0105za\u0144 &#8211; dla ka\u017cdego co\u015b mi\u0142ego.<\/p>\n<h2 id=\"dla-tworzacych-api-w-pythonie\" data-num=17>Dla tworz\u0105cych API w Pythonie<\/h2>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-25.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"439\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/4_image-25.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-25.png 900w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>R\u00f3wnie\u017c dla Was znajd\u0105 si\u0119 dwa ciekawe narz\u0119dzia. <\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-41.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1338\" height=\"317\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-41.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-41.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-41.png 1338w\" sizes=\"auto, (min-width: 720px) 720px\"><\/figure>\n<p>Pierwszym z nich jest <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104069\">Pyright<\/a> &#8211; TypeChecker, kt\u00f3ry potrafi walidowa\u0107 kod w oparciu o adnotacje zg\u0142oszone jako proposale do j\u0119zyka (Python Enhancement Proposals). Jego tw\u00f3rcy (a stoi za nim firma Microsoft &#8211; mo\u017ce kojarzycie?) chwal\u0105 si\u0119, \u017ce ich rozwi\u0105zanie pozostaje szybkie nawet w wypadku pracy z olbrzymimi repozytoriami kodu.<\/p>\n<p>Szybko\u015b\u0107 jest te\u017c s\u0142owem kluczowym w wypadku drugiego z prezentowanych pythonowych rozwi\u0105za\u0144. <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104087\">FastAPI<\/a> to framework, kt\u00f3rego in\u017cynierowie od Radaru wskazuj\u0105 jako najlepsze obecne rozwi\u0105zania do tworzenia API w Pythonie &#8211; w odr\u00f3\u017cnieniu od takiego Django jest lekkie, wydajne i elastyczne, a przede wszystkim \u0142atwe do zrozumienia &#8211; nie wprowadza kilogram\u00f3w niepotrzebnej magii.<\/p>\n<p><strong>No c\u00f3\u017c, to by by\u0142o na tyle! <a href=\"https:\/\/blog.vived.io\/#subscribe\">Zasubskrybujcie si\u0119<\/a>, aby nie przegapi\u0107 przysz\u0142ych przegl\u0105d\u00f3w tego typu. Dodatkowo, zapraszamy do naszych regularnych edycji &#8222;Weekly&#8221;, gdzie we <\/strong><a href=\"https:\/\/blog.vived.io\/tag\/jvm\/\"><strong>wtorki<\/strong><\/a><strong>, <\/strong><a href=\"https:\/\/blog.vived.io\/tag\/frontend\/\"><strong>czwartki<\/strong><\/a><strong> i <\/strong><a href=\"https:\/\/blog.vived.io\/tag\/craftmanship\/\"><strong>soboty<\/strong><\/a><strong> opisujemy na bie\u017c\u0105co to, czym \u017cyje nasza bran\u017ca .<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Je\u017celi mia\u0142bym wskaza\u0107 najwi\u0119ksze problemy, z jakimi boryka si\u0119 bran\u017ca IT, to opr\u00f3cz oczywistych oczywisto\u015bci takich jak \u017ale zarz\u0105dzane projekty, czy hype driven development itp., to moim osobistym \u201cb\u00f3lem\u201d jest fakt, \u017ce jak na dziedzin\u0119, kt\u00f3ra lubi przypisywa\u0107 sobie in\u017cyniersko\u015b\u0107, mamy pot\u0119\u017cny problem z weryfikowalno\u015bci naszych decyzji. Powiedzmy sobie szczerze, w tworzonych przez nas projektach [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259],"tags":[],"class_list":["post-10124","post","type-post","status-publish","format-standard","hentry","category-jvm-pl"],"acf":{"weekly_summary":true,"estimated_reading_time":"32"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Przeczyta\u0142em Technology Radar vol. 24... i chc\u0119 Ci opowiedzie\u0107 co w nim znalaz\u0142em - Vived<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Przeczyta\u0142em Technology Radar vol. 24... i chc\u0119 Ci opowiedzie\u0107 co w nim znalaz\u0142em - Vived\" \/>\n<meta property=\"og:description\" content=\"Je\u017celi mia\u0142bym wskaza\u0107 najwi\u0119ksze problemy, z jakimi boryka si\u0119 bran\u017ca IT, to opr\u00f3cz oczywistych oczywisto\u015bci takich jak \u017ale zarz\u0105dzane projekty, czy hype driven development itp., to moim osobistym \u201cb\u00f3lem\u201d jest fakt, \u017ce jak na dziedzin\u0119, kt\u00f3ra lubi przypisywa\u0107 sobie in\u017cyniersko\u015b\u0107, mamy pot\u0119\u017cny problem z weryfikowalno\u015bci naszych decyzji. Powiedzmy sobie szczerze, w tworzonych przez nas projektach [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2021-06-17T14:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:11:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-11.png\" \/>\n<meta name=\"author\" content=\"Artur Skowro\u0144ski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Przeczyta\u0142em Technology Radar vol. 24&#8230; i chc\u0119 Ci opowiedzie\u0107 co w nim znalaz\u0142em\",\"datePublished\":\"2021-06-17T14:00:00+00:00\",\"dateModified\":\"2022-09-19T11:11:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/\"},\"wordCount\":6487,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-11.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/\",\"url\":\"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/\",\"name\":\"Przeczyta\u0142em Technology Radar vol. 24... i chc\u0119 Ci opowiedzie\u0107 co w nim znalaz\u0142em - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-11.png\",\"datePublished\":\"2021-06-17T14:00:00+00:00\",\"dateModified\":\"2022-09-19T11:11:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-11.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-11.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Przeczyta\u0142em Technology Radar vol. 24&#8230; i chc\u0119 Ci opowiedzie\u0107 co w nim znalaz\u0142em\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vived.io\/pl\/#website\",\"url\":\"https:\/\/vived.io\/pl\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vived.io\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vived.io\/pl\/#organization\",\"name\":\"Vived\",\"url\":\"https:\/\/vived.io\/pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"width\":136,\"height\":45,\"caption\":\"Vived\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\",\"name\":\"Artur Skowro\u0144ski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"caption\":\"Artur Skowro\u0144ski\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Przeczyta\u0142em Technology Radar vol. 24... i chc\u0119 Ci opowiedzie\u0107 co w nim znalaz\u0142em - Vived","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/","og_locale":"pl_PL","og_type":"article","og_title":"Przeczyta\u0142em Technology Radar vol. 24... i chc\u0119 Ci opowiedzie\u0107 co w nim znalaz\u0142em - Vived","og_description":"Je\u017celi mia\u0142bym wskaza\u0107 najwi\u0119ksze problemy, z jakimi boryka si\u0119 bran\u017ca IT, to opr\u00f3cz oczywistych oczywisto\u015bci takich jak \u017ale zarz\u0105dzane projekty, czy hype driven development itp., to moim osobistym \u201cb\u00f3lem\u201d jest fakt, \u017ce jak na dziedzin\u0119, kt\u00f3ra lubi przypisywa\u0107 sobie in\u017cyniersko\u015b\u0107, mamy pot\u0119\u017cny problem z weryfikowalno\u015bci naszych decyzji. Powiedzmy sobie szczerze, w tworzonych przez nas projektach [&hellip;]","og_url":"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/","og_site_name":"Vived","article_published_time":"2021-06-17T14:00:00+00:00","article_modified_time":"2022-09-19T11:11:00+00:00","og_image":[{"url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-11.png","type":"","width":"","height":""}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Przeczyta\u0142em Technology Radar vol. 24&#8230; i chc\u0119 Ci opowiedzie\u0107 co w nim znalaz\u0142em","datePublished":"2021-06-17T14:00:00+00:00","dateModified":"2022-09-19T11:11:00+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/"},"wordCount":6487,"commentCount":0,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-11.png","articleSection":["JVM"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/","url":"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/","name":"Przeczyta\u0142em Technology Radar vol. 24... i chc\u0119 Ci opowiedzie\u0107 co w nim znalaz\u0142em - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-11.png","datePublished":"2021-06-17T14:00:00+00:00","dateModified":"2022-09-19T11:11:00+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-11.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-11.png"},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/przeczytalem-technology-radar-zebys-ty-juz-nie-musial\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Przeczyta\u0142em Technology Radar vol. 24&#8230; i chc\u0119 Ci opowiedzie\u0107 co w nim znalaz\u0142em"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3","name":"Artur Skowro\u0144ski","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","caption":"Artur Skowro\u0144ski"}}]}},"blocks_vived":[{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"<p>Je\u017celi mia\u0142bym wskaza\u0107 najwi\u0119ksze problemy, z jakimi boryka si\u0119 bran\u017ca IT, to opr\u00f3cz oczywistych oczywisto\u015bci takich jak \u017ale zarz\u0105dzane projekty, czy hype driven development itp., to moim osobistym \u201cb\u00f3lem\u201d jest fakt, \u017ce jak na dziedzin\u0119, kt\u00f3ra lubi przypisywa\u0107 sobie in\u017cyniersko\u015b\u0107, mamy pot\u0119\u017cny problem z weryfikowalno\u015bci naszych decyzji. Powiedzmy sobie szczerze, w tworzonych przez nas projektach bardzo cz\u0119sto potrzebujemy wybra\u0107 jedn\u0105 z wachlarza dost\u0119pnych opcji, maj\u0105c cz\u0119sto do\u015b\u0107 mgliste poj\u0119cie, kt\u00f3ra z alternatyw b\u0119dzie lepsza d\u0142ugoterminowo. Nie bez kozery m\u00f3wi si\u0119, \u017ce w IT wszystko jest \u201ctradeoffem\u201c, ale pal licho, je\u015bli byliby\u015bmy jeszcze w stanie po czasie cokolwiek oceni\u0107 i nauczy\u0107 si\u0119 na b\u0142\u0119dach. Bardzo cz\u0119sto tak niestety nie jest - nawet je\u015bli b\u0119dziemy w stanie spojrze\u0107 po czasie na powsta\u0142e rozwi\u0105zanie i zrozumie\u0107 jego dobre i z\u0142e strony, to tak naprawd\u0119 dalej daje nam tylko to mgliste poj\u0119cie, czy alternatywa by\u0142aby lepsza. <\/p><p>Nie da si\u0119 d\u0142ugoterminowo i r\u00f3wnolegle rozwija\u0107 np. dw\u00f3ch r\u00f3\u017cnych architektur, \u017ceby po roku zaobserwowa\u0107, kt\u00f3ra daje lepsze rezultaty. Dodatkowo, tak naprawd\u0119 ka\u017cdy z nas ma szans\u0119 w swojej karierze \u201czaliczy\u0107\u201d kilka wi\u0119kszych projekt\u00f3w, rzadko kiedy maj\u0105c okazj\u0119 pracowa\u0107 przy dw\u00f3ch r\u00f3wnocze\u015bnie i mie\u0107 mo\u017cliwo\u015b\u0107 por\u00f3wnywania r\u00f3\u017cnych podej\u015b\u0107. Bardzo wiele reperkusji przychodzi po czasie, co nieraz przy du\u017cej rotacji, jaka jednak panuje w bran\u017cy sprawi, \u017ce nigdy nie dowiemy si\u0119, czy nie pope\u0142nili\u015bmy b\u0142\u0119du, trudno si\u0119 nam wi\u0119c na takowych nauczy\u0107. Dlatego te\u017c tak cenny jest fakt, \u017ce pojawiaj\u0105 si\u0119 opracowania pokroju Technology Radaru - publikacje pomagaj\u0105ce oceni\u0107 przydatno\u015b\u0107 poszczeg\u00f3lnych technik i narz\u0119dzi.<\/p><p><strong>Spis Tre\u015bci <\/strong><\/p><!--kg-card-begin: html--><aside class=\"toc\"><\/aside>\n<!--kg-card-end: html--><h2 id=\"czym-jest-technology-radar\">Czym jest Technology Radar?<\/h2><p>Dobra, wydaje si\u0119 jednak \u017ce niekt\u00f3rym z Was czytaj\u0105cych ten tekst nale\u017cy si\u0119 ma\u0142e wyja\u015bnienie, czym tak naprawd\u0119 Technology Radar jest. Ot\u00f3\u017c jest to wydawana semi-regularnie (zwykle ok. dwa razy do roku) analiza i ocena trend\u00f3w wyr\u00f3\u017cniaj\u0105cych si\u0119 w technologicznym \u015bwiecie, dokonywana przez firm\u0119 ThoughtWorks. W firmie pracuj\u0105 takie uznane osobisto\u015bci naszej bran\u017cy jak cho\u0107by Martin Fowler czy Rebecca Parson, a sama firma jest agencj\u0105 konsultingow\u0105, pracuj\u0105c\u0105 z wieloma du\u017cymi klientami na ca\u0142ym \u015bwiecie przy cz\u0119sto kluczowych dla tych firm projektach. Daje im to do\u015b\u0107 unikaln\u0105 perspektyw\u0119 - s\u0105 w stanie zar\u00f3wno przetestowa\u0107 r\u00f3\u017cne rozwi\u0105zania konkretnych problem\u00f3w np. por\u00f3wnuj\u0105c, jak sprawdzi\u0142y si\u0119 poszczeg\u00f3lne podej\u015bcia u poszczeg\u00f3lnych klient\u00f3w, jak i maj\u0105 widoczno\u015b\u0107 na szerokie spektrum problem\u00f3w, z jakimi du\u017ce firmy musz\u0105 si\u0119 mierzy\u0107.<\/p><p>S\u0105 osoby, kt\u00f3re maj\u0105 do Radaru nieco krytyczne podej\u015bcie, traktuj\u0105c go jako nieco skrzywiony pod k\u0105tem wy\u0142\u0105cznie wi\u0119kszych organizacji - co jest pok\u0142osiem tego, \u017ce z takimi podmiotami zwykle pracuje ThoughtWorks - ale z mojej perspektywy ka\u017cdorazowo jest on zbiorem trafnych obserwacji, pozwalaj\u0105cych na mocne poszerzenie horyzont\u00f3w i \u201cwy\u0142uskanie\u201d \u00a0dla siebie technik i narz\u0119dzi, kt\u00f3re mo\u017ce w innym wypadku przesz\u0142yby pod naszym (nomen omen) radarem. <\/p><p>Dlatego te\u017c mam dla Was przegl\u0105d tego, co w Radarze mo\u017cna znale\u017a\u0107, pogrupowany w specjalne sekcje tematyczne (pewnego rodzaju hmmm\u2026 podzia\u0142 funkcjonalny zamiast domenowego jest najtrudniejsz\u0105 rzecz\u0105 przy konsumpcji Radaru). Mam nadzieje, \u017ce dzi\u0119ki temu opracowaniu docenicie kapitaln\u0105 robot\u0119, jak\u0105 wykonuj\u0105 in\u017cynierowie z ThoughtWorks.<\/p><h2 id=\"je%C5%BCeli-jeste%C5%9B-programist%C4%85-mobilnym\">Je\u017celi jeste\u015b programist\u0105 mobilnym....<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-11.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"281\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-11.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-11.png 900w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Czytaj\u0105c Technology Radar od d\u0142u\u017cszego czasu, bardzo ciekawym jest obserwowanie tego, jak coraz mniej miejsca z ka\u017cd\u0105 edycj\u0105 po\u015bwi\u0119cone jest wszelakim technologiom mobilnym. Z pewno\u015bci\u0105 pow\u00f3d jest taki, a nie inny charakter klient\u00f3w ThoughtWorks (du\u017ce podmioty, raczej z bardziej \u201ctradycyjnych\u201d bran\u017c - nowoczesne startupy czy FAANG nie korzystaj\u0105 z tego typu konsultingu), pokazuje to jednak, \u017ce o ile spokojnie mo\u017cemy si\u0119 zgodzi\u0107, \u017ce przeci\u0119tny konsument dawno wszed\u0142 w er\u0119 Post-PC, to r\u00f3wnocze\u015bnie aplikacje mobilne przesta\u0142y by\u0107 przestrzeni\u0105, o kt\u00f3r\u0105 szczeg\u00f3lnie si\u0119 walczy, a rynek dokona\u0142 ju\u017c swoistego \u201cpodzia\u0142u \u0142up\u00f3w\u201d. Coraz trudniej si\u0119 wypromowa\u0107, coraz trudniej zach\u0119ci\u0107 ludzi do u\u017cywania dedykowanej aplikacji, jest to r\u00f3wnie\u017c do\u015b\u0107 droga fanaberia poniewa\u017c klienci oczekuj\u0105 r\u00f3wnie\u017c istnienia r\u00f3wnoleg\u0142ego dobrego \u201cwebowego\u201d do\u015bwiadczenia. Tym razem jednak sytuacja wygl\u0105da troch\u0119 inaczej - Radar dostarczy\u0142 nam kilka ciekawych projekt\u00f3w i technik zwi\u0105zanych z tym segmentem rynku.<\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-30.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1419\" height=\"339\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-30.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-30.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-30.png 1419w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Jako \u017ce nawi\u0105za\u0142em przed momentem do faktu, \u017ce na dzisiejszym rynku niezb\u0119dne jest posiadanie zar\u00f3wno mobilnej, jak i webowej aplikacji, pozwol\u0119 sobie zacz\u0105\u0107 od tego tematu. Ot\u00f3\u017c w nowym Radarze znale\u017a\u0107 mo\u017cemy dwa hmmm\u2026 ekosystemy, kt\u00f3re maj\u0105 nam w tym pom\u00f3c. Zar\u00f3wno <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104128\">Flutter<\/a>, jak i <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104042\">Kotlin Multiplatform<\/a> od dawna staraj\u0105 si\u0119 spe\u0142ni\u0107 obietnice \u201cWrite Once, Deploy Everywhere\u201d, poszerzaj\u0105c zakres dost\u0119pnych \u015brodowisk docelowych. Nowy Radar zauwa\u017ca to i sugeruje, \u017ce ka\u017cdy z ekosystem\u00f3w warty jest cho\u0107by rozwa\u017cenia. Ja od siebie doda\u0142bym, \u017ce zar\u00f3wno Flutter, jak i Kotlin celuj\u0105 jeszcze dalej, w ostatnich miesi\u0105cach chc\u0105c sta\u0107 si\u0119 ca\u0142kowicie \u201cuniwersalnymi\u201d, celuj\u0105c r\u00f3wnie\u017c w aplikacje desktopowe. Spe\u0142nia si\u0119 wi\u0119c powoli nasze marzenie o pisaniu \u201cuniwersalnych aplikacji\u201d - co ciekawe, powoli zaczyna wydawa\u0107 si\u0119, \u017ce to pomys\u0142 przepakowywania stron internetowych by\u0142 \u015blep\u0105 uliczk\u0105. Po\u017cyjemy zobaczymy, ale na pewno jeste\u015bmy na etapie agresywnego poszukiwania alternatyw.<\/p><p>Z tym te\u017c pewnie wi\u0105\u017ce si\u0119 ma\u0142y radarowy \u201crenesans\u201d bibliotek i rozwi\u0105za\u0144 powi\u0105zanych z dwoma najwi\u0119kszymi graczami rynku - Androidem i IOSem. Radar po\u015bwi\u0119ca bowiem zaskakuj\u0105co du\u017co miejsca np. narz\u0119dziom do wygodniejszego utrzymania mobilkowych appek. Trafi\u0142y do niego uniwersalne <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104115\">TrustKit<\/a> (umo\u017cliwiaj\u0105cy zarz\u0105dzanie kluczami SSL), <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104089\">Flipper<\/a> (uniwersalny debugger, potrafi\u0105cy pracowa\u0107 z Androidem, iOSem, ale te\u017c np. React Native), czy te\u017c bardziej nakierowany na konkretn\u0105 platform\u0119 <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=1173\">LeakCanary<\/a> - narz\u0119dzie umo\u017cliwiaj\u0105ce wykrycie przyczyny wyciek\u00f3w pami\u0119ci w aplikacjach androidowych. Pod uwag\u0119 wzi\u0119ty zosta\u0142 te\u017c fakt, \u017ce w dzisiejszych czasach co\u015b, co kiedy\u015b by\u0142o ma\u0142\u0105 aplikacj\u0105 mog\u0142o przerodzi\u0107 si\u0119 w z\u0142o\u017cony projekt - swoje miejsce w bie\u017c\u0105cej edycji znalaz\u0142a technika modularyzacji dla androidowych aplikacji (on-demand modules), a tak\u017ce narz\u0119dzia do utrzymywaniu w ryzach plik\u00f3w XCode, kt\u00f3re nieraz potrafi\u0105 wymkn\u0105\u0107 si\u0119 spod kontroli programisty. Ca\u0142o\u015b\u0107 zamyka te\u017c oficjalne applowskie rozwi\u0105zanie hmmm\u2026 reaktywne - <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104031\">Combine<\/a>, b\u0119d\u0105ce Swiftowym API do zarz\u0105dzania strumieniami zdarze\u0144. <br \/><br \/>Ciekawe, czy taka nadreprezentacja rozwi\u0105za\u0144 do tworzenia aplikacji natywnych, to \u00a0jednorazowy wybryk czy odwr\u00f3cenie d\u0142ugoletniego trendu. B\u0119dziemy obserwowa\u0107 <\/p><h2 id=\"je%C5%BCeli-nie-wiesz-co-si%C4%99-dzieje-w-twoich-systemach\">Je\u017celi nie wiesz co si\u0119 dzieje w Twoich systemach...<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-14.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"281\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-14.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-14.png 900w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Maj\u0105c w swojej karierze troch\u0119 do czynienia z systemami Legacy, mam wra\u017cenie \u017ce to, co w najwi\u0119kszym stopniu odr\u00f3\u017cnia tworzone dzisiaj oprogramowania, to \u00a0(do\u015b\u0107 optymistycznie, wiem) lekcje, jakie odrobili\u015bmy w oparciu o b\u0142\u0119dy przesz\u0142o\u015bci. Dzisiaj dobrze zdajemy sobie spraw\u0119 z faktu, \u017ce napisanie systemu to jedno, ale tak naprawd\u0119 trudn\u0105 cz\u0119\u015bci\u0105 ca\u0142o\u015bci jest jego utrzymanie i p\u00f3\u017aniejsza ewolucja wraz ze zmieniaj\u0105cymi si\u0119 wymaganiami rynku. W systemach odziedziczonych po wcze\u015bniejszych pokoleniach niejednokrotnie bardzo trudno jest zmapowa\u0107 powi\u0105zania pomi\u0119dzy poszczeg\u00f3lnymi komponentami czy zale\u017cno\u015bci czasowe. Niejednokrotnie znalezienie g\u0142upich log\u00f3w nastr\u0119cza problem\u00f3w. Pewnie st\u0105d te\u017c tak du\u017cy nacisk po\u0142o\u017cony na tak zwane \u201cobservability\u201d - odzwierciedlone jest to r\u00f3wnie\u017c w Radarze, w kt\u00f3rym mo\u017cemy znale\u017a\u0107 kilka narz\u0119dzi tego typu.<\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/blog.vived.io\/content\/ima\nges\/2021\/06\/image-31.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1271\" height=\"300\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-31.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-31.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-31.png 1271w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>O ile po stronie serwerowej stosunkowo \u0142atwo agreguje si\u0119 zdarzenia do wsp\u00f3lnego systemu, o tyle w czasach, gdy coraz wi\u0119cej logiki znajduje si\u0119 po stronie klienta, krytycznym staje si\u0119 mo\u017cliwo\u015b\u0107 zebrania informacji o potencjalnych b\u0142\u0119dach, kt\u00f3rymi niejednokrotnie zalewane s\u0105 DevToolsy przegl\u0105darek. Nie mo\u017cemy \u0142udzi\u0107 si\u0119, \u017ce u\u017cytkownik zg\u0142osi nam problem - zwykle po prostu ju\u017c do nas nie wr\u00f3ci, a w bardziej pesymistycznym scenariuszu stanie si\u0119 naszym publicznym krytykiem. Sami przez lata szukali\u015bmy dobrego narz\u0119dzia do szybkiego wykrywania takich potencjalnych usterek, i z przyjemno\u015bci\u0105 mo\u017cemy stwierdzi\u0107, \u017ce wyb\u00f3r, kt\u00f3rego dokonali\u015bmy nie by\u0142 chyba najgorszy. <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=1232\">Sentry<\/a>, kt\u00f3ry zbiera dla nas b\u0142\u0119dy u\u017cytkownik\u00f3w Vived, jest r\u00f3wnie\u017c polecany przez edytor\u00f3w nowego Radaru.<\/p><p>Co ciekawy, Sentry jest jednym z klient\u00f3w drugiego z rozwi\u0105za\u0144 pomagaj\u0105cych nam odnale\u017a\u0107 si\u0119 w nawale danych. Nie sztuka bowiem zebra\u0107 mnogo\u015b\u0107 log\u00f3w i zdarze\u0144 z systemu - trzeba umie\u0107 si\u0119 w nich odnale\u017a\u0107. W takim wypadku przydatnym mo\u017ce okaza\u0107 si\u0119 <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104051\">ReDash<\/a>. Pozwala on przegl\u0105da\u0107 eventy z naszego systemu w adhocowy spos\u00f3b, przy pomocy SQLa. Po latach pracy z wszelkiej ma\u015bci wariacjami w\u0142asno\u015bciowych, jsonowych API do wszelkiej ma\u015bci system\u00f3w, zobaczenie starego dobrego SQLa jest dosy\u0107 od\u015bwie\u017caj\u0105ce.<\/p><p>Z systemami do observability wi\u0105\u017ce si\u0119 te\u017c smutny fakt - przy odpowiednio z\u0142o\u017conym systemie zawsze pojawi si\u0119 co\u015b wymagaj\u0105cego naszej uwagi. St\u0105d te\u017c, je\u017celi chcemy zadba\u0107 o zdrowie psychiczne nasze i naszych zespo\u0142\u00f3w, niezb\u0119dny jest system pozwalaj\u0105cy na zarz\u0105dzanie zdarzeniami w spos\u00f3b kontrolowany i uporz\u0105dkowany. Takie narz\u0119dzie te\u017c znajdziemy w Radarze - b\u0119dzie nim <a href=\"https:\/\/www.thoughtworks.com\/radar\/platforms?blipid=202104104\">Opstrace<\/a>. Jest to rozwi\u0105zanie typu Low-Code (w dodatku OpenSource), pozwalaj\u0105ce nam pospina\u0107 r\u00f3\u017cnego rodzaju us\u0142ugi w jeden, \u0142atwo zarz\u0105dzalny interfejs, dzi\u0119ki kt\u00f3remu mo\u017cemy szybko zareagowa\u0107 w wypadku jakiegokolwiek problemu. Pozwala on na zarz\u0105dzanie alarmami, heltcheckami i og\u00f3lnie pe\u0142nym \u201cdevopsowym\u201d procesem. Wygl\u0105da bardzo interesuj\u0105co i takim te\u017c zosta\u0142 uznany przez in\u017cynier\u00f3w z Thoughtworks.<\/p><p>Ko\u0144cz\u0105c t\u0105 sekcje, nale\u017cy pami\u0119ta\u0107, \u017ce nie wszystko nale\u017cy \u201cobserwowa\u0107\u201d. W czasach coraz wi\u0119kszego nacisku na prywatno\u015b\u0107 ze strony u\u017cytkownik\u00f3w niezb\u0119dne jest, aby pami\u0119ta\u0107 o tym aspekcie projektuj\u0105c nasze systemy \u201cobserwowalno\u015bciowe\u201d. ThoughtWorks podkre\u015bla w nowej edycji, \u017ce szczeg\u00f3lnie istotne jest to zw\u0142aszcza w przypadku serwis\u00f3w dzia\u0142aj\u0105cych bezpo\u015brednio z klientem - czy to mowa o przywo\u0142anym ju\u017c Sentrym, czy te\u017c np. Web Analyticsach pokroju rozwi\u0105zania google\u2019owskiego. Ja od siebie doda\u0142bym tylko, \u017ce nawet zachowuj\u0105c pe\u0142ni\u0119 anonimowo\u015bci nie trudno o kontrowersj\u0119 - ostatnie rozwi\u0105zania pokroju FLOC od Google pokazuj\u0105, \u017ce je\u017celi chodzi o prywatno\u015b\u0107 u\u017cytkownik\u00f3w, przed nami jeszcze d\u0142uga droga. <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104086\">Ethical Explorer<\/a>, r\u00f3wnie\u017c pojawiaj\u0105ce si\u0119 w obecnym Radarze rozwini\u0119cie przywo\u0142ywanego ju\u017c EthicalOS, wydaje si\u0119 by\u0107 warto\u015bciowym przewodnikiem po tym do\u015b\u0107 grz\u0105skim gruncie, nie raz wymagaj\u0105cym od nas eksperyment\u00f3w my\u015blowych z etyki.<\/p><h2 id=\"przeczytaj-t%C4%85-sekcje-je%C5%9Bli-musisz-si%C4%99-zmodernizowa%C4%87-szybko-i-skutecznie\">Przeczytaj t\u0105 sekcje je\u015bli musisz si\u0119 zmodernizowa\u0107... szybko i skutecznie<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-13.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"280\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-13.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-13.png 900w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Jako \u017ce przywo\u0142a\u0142em ju\u017c Legacy, jak pewnie domy\u015blacie si\u0119, temat modernizacji system\u00f3w jest mi dosy\u0107 bliski. Dlatego te\u017c nie mog\u0119 sobie odm\u00f3wi\u0107 w naszym ma\u0142ym podsumowaniu przypatrzeniu si\u0119 r\u00f3wnie\u017c temu, co Radar ma do powiedzenia w tym kontek\u015bcie.<\/p><p>I moje serduszko cieplej zabi\u0142o, gdy tylko zobaczy\u0142em, \u017ce przywo\u0142ana zosta\u0142a technika modernizacji oparta na hipotezach. Jest to moja ulubiona, kt\u00f3rej sam po\u015bwi\u0119ci\u0142em sporo miejsca w napisanym przeze mnie niedawno <a href=\"https:\/\/virtuslab.com\/digital-transformation-free-ebook\/\">ebooku<\/a>. Ot\u00f3\u017c faktem jest, \u017ce tak naprawd\u0119 prac\u0119 ze starymi systemami naprawd\u0119 trudno jest dobrze zaplanowa\u0107. Kto mia\u0142 okazj\u0119 pobawi\u0107 si\u0119 w tego typu archeologie wie, \u017ce ca\u0142y czas rzucaj\u0105 nam k\u0142ody pod nogi, a rzeczy, kt\u00f3re pozornie wydawa\u0142y si\u0119 by\u0107 proste okazuj\u0105 si\u0119 kry\u0107 tajemnice, kt\u00f3rych rozwik\u0142anie nieraz wykracza poza ramy zwyk\u0142ego, dwutygodniowego sprintu. Dlatego te\u017c in\u017cynierowie od Technology Radaru zalecaj\u0105 iteracyjno\u015b\u0107, eksperymentowanie i niejako odkrywanie na nowo tego, jak system dzia\u0142a, kieruj\u0105c si\u0119 nie z g\u00f3ry zaplanowanym backlogiem, a na bie\u017c\u0105co potwierdzonymi lub obalanymi hipotezami. Taki prawdziwy \u201cagile\u201d u\u017cyty w do\u015b\u0107 nieortodoksyjny spos\u00f3b. Jest to w oparciu o moje do\u015bwiadczenie tak naprawd\u0119 jedyna skuteczna metoda i ciesz\u0119 si\u0119, \u017ce technika ta zosta\u0142a teraz ubrana w tak elegancki termin. Nazywanie rzeczy pomaga budowa\u0107 wsp\u00f3lny, zrozumia\u0142y dla wszystkich s\u0142ownik.<\/p><p>Mam te\u017c troch\u0119 ubaw z faktu, \u017ce <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104012\">Single Page Application<\/a> te\u017c ju\u017c podchodz\u0105 pod bycie \u201clegacy\u201d. Po pocz\u0105tkowym zach\u0142y\u015bni\u0119ciu si\u0119 nowymi mo\u017cliwo\u015bciami, relatywnie szybko odkryli\u015bmy jako bran\u017ca, \u017ce skomplikowany kod kliencki posiada jednak sporo wad i jest bardzo trudny w utrzymaniu. Je\u017celi nasza strona sta\u0142a si\u0119 nieutrzymywaln\u0105 kul\u0105 b\u0142ocka, ThoughtWorks sugeruje \u201czaduszanie\u201d - technik\u0119 znan\u0105 m.in. w\u0142a\u015bnie z zast\u0119powania przestarza\u0142ych ju\u017c system\u00f3w. Ostrzegaj\u0105 oni co prawda, \u017ce niekt\u00f3re z podej\u015b\u0107 mog\u0105 wi\u0105za\u0107 si\u0119 z zepsuciem wydajno\u015bci dla u\u017cytkownika ko\u0144cowego, ale niejednokrotnie jest to jedyne wyj\u015bcie z sytuacji, gdy nasz kod sta\u0142 si\u0119 na tyle nieutrzymywalny, \u017ce ka\u017cda zmiana staje si\u0119 katorg\u0105 - sam mia\u0142em okazj\u0119 pracowa\u0107 z (i pewnie te\u017c pisa\u0107\u2026) tego typu narz\u0119dziami tortur, gdzie ka\u017cda zmiana CSSa powodowa\u0142a palpitacje serca. Dobrze, \u017ce Frontend te\u017c uczy si\u0119 zalet modularyzacji.<\/p><h2 id=\"co-ciekawego-znajdzie-dla-siebie-frontendowiec\">Co ciekawego znajdzie dla siebie Frontendowiec? <\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-15.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1200\" height=\"374\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-15.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-15.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-15.png 1200w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Jest to ta cz\u0119\u015b\u0107 ekosystemu, kt\u00f3ra zwykle rozwija si\u0119 dosy\u0107 dynamicznie, co oczywi\u015bcie nie umyka tw\u00f3rcom Radaru. Sprawia to, \u017ce jak zwykle mamy ca\u0142kiem spor\u0105 nadreprezentacj\u0119 tematyczn\u0105.<\/p><p>Tak jak ju\u017c mieli\u015bmy okazj\u0119 wspomnie\u0107, przy tematach zwi\u0105zanych z modernizacj\u0105, wsp\u00f3\u0142czesne aplikacje klienckie posiadaj\u0105 mas\u0119 logiki, zbli\u017con\u0105 do system\u00f3w dzia\u0142aj\u0105cych \u201cpod mask\u0105\u201d. Dlatego te\u017c coraz wi\u0119cej energii po\u015bwi\u0119ca si\u0119 frontendowej architekturze. \u015amiem twierdzi\u0107, \u017ce w \u015bwiecie, w kt\u00f3rym ustabilizowa\u0142a si\u0119 nam wielka tr\u00f3jca framework\u00f3w (Angular, React, Vue), to w\u0142a\u015bnie do \u015bwiata Microfrontend\u00f3w przenios\u0142y si\u0119 najwi\u0119ksze bo\nje o rynkow\u0105 pozycj\u0119. Poza ju\u017c wspomnianym <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104012\">SPA Injection<\/a> (kt\u00f3re do tematu bardzo pasuje) Radar przynosi rozpychaj\u0105ce si\u0119 \u0142okciami Webpackowe rozwi\u0105zanie - <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104116\">Federacje Modu\u0142\u00f3w<\/a>, ale tak\u017ce nieco zbli\u017cone w koncepcji, a rozwijane jako standard przez Web Incubator Community Group mapy import\u00f3w, opieraj\u0105cej si\u0119 na \u201cklejeniu\u201d aplikacji z mniejszych kawa\u0142k\u00f3w za pomoc\u0105 standardowego systemu modu\u0142\u00f3w EcmaScript. <\/p>\n<figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-32.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1276\" height=\"305\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-32.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-32.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-32.png 1276w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Przyznam jednak, \u017ce o ile tamte dwa rozwi\u0105zania z pewno\u015bci\u0105 znajd\u0105 szersz\u0105 rzesz\u0119 fan\u00f3w, to mnie najbardziej uj\u0105\u0142 <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104066\">hotwire<\/a> - aronim HTML over the Wire. Podej\u015bcie to zosta\u0142o rozpropagowane przez Basecamp, znany ze swojej mi\u0142o\u015bci do statycznie renderowanych stron (czego\u015b innego spodziewa\u0107 si\u0119 zreszt\u0105 od tw\u00f3rc\u00f3w Ruby on Rails), przenosz\u0105ce je w \u015bwiat asynchronicznego do\u0142adowywania kontentu. Ot\u00f3\u017c sugeruj\u0105 oni, \u017ce systemy templatingu po stronie klienta, to kod w \u015blep\u0105 uliczk\u0119 i tak naprawd\u0119\u2026 najlepiej jest przesy\u0142a\u0107 do frontu HTMLa \u00a0wyrenderowanego po stronie serwera. Nie da si\u0119 ich argumentacji (kt\u00f3r\u0105 znale\u017a\u0107 mo\u017cecie <a href=\"https:\/\/hotwire.dev\/\">pod linkiem<\/a>) odm\u00f3wi\u0107 sporej ilo\u015bci sensu, a dodatkowo dostarczaj\u0105c do\u015b\u0107 bogaty zestaw narz\u0119dzi. Mo\u017ce kto\u015b z Was si\u0119 skusi?<\/p><p>TypeScript dzieli i rz\u0105dzi frontentdowym \u015bwiatem, dlatego te\u017c nikogo nie powinna dziwi\u0107 jego mo\u017ce nie najwi\u0119ksza, ale z pewno\u015bci\u0105 interesuj\u0105ca reprezentacja w bie\u017c\u0105cym Radarze. W \u015bwiecie, gdzie Deno (alternatywa do NodeJS traktuj\u0105ca TypeScripta jako obywatela pierwszej kategorii) pr\u00f3buje przebi\u0107 si\u0119 do \u015bwiadomo\u015bci programist\u00f3w, a i sam kr\u00f3l Node coraz przychylniejszym okiem spogl\u0105da na dziecko Microsoftu, technika polegaj\u0105ca na dzieleniu typ\u00f3w mi\u0119dzy Frontentedem i Backendem (dla Frontendu) wydaje si\u0119 by\u0107 do\u015b\u0107 oczywistym kierunkiem - aczkolwiek zawsze dobrze, jak o tego typu rzeczach si\u0119 wspomnia.<\/p><p>Nieco mniej oczywistym rozwi\u0105zaniem komunikacji Frontend\/Backend (zw\u0142aszcza w \u015bwiecie, gdy rozwi\u0105zanie serwerowe nie jest napisane w TypeScripcie). Jest to zestaw narz\u0119dzi (Encoder\u00f3w\/Decoder\u00f3w), kt\u00f3rych zadaniem jest sprawdza\u0107 poprawno\u015b\u0107 otrzymanych danych nie tylko na poziomie kompilacji, ale r\u00f3wnie\u017c w runtimie. Brak wsparcia TypeScripta dla dynamicznego typowania jest zrozumia\u0142\u0105 decyzj\u0105 projektow\u0105, bior\u0105c pod uwag\u0119 ch\u0119\u0107 zachowania kompatyblino\u015bci z JSem, ale dobrze mie\u0107 w arsenale narz\u0119dzia, kt\u00f3re zapewni\u0105 sp\u00f3jno\u015b\u0107 aplikacji r\u00f3wnie\u017c poza momentem kompilacji. \u00a0<\/p><p>Nie mog\u0142o w Radarze zabrakn\u0105\u0107 r\u00f3wnie\u017c podsumowania nowo\u015bci ze \u015bwiata frontendowych framework\u00f3w. Wyj\u0105tkowo nadreprezentowany jest tutaj React, kt\u00f3ry mo\u017ce pochwali\u0107 si\u0119 naprawd\u0119 spor\u0105 ilo\u015bci\u0105 rozbudowuj\u0105cych go narz\u0119dzi. Z rzeczy, kt\u00f3re mnie najbardziej zaskoczy\u0142y wymienie z pewno\u015bci\u0105 jotai i zustand - dwa r\u00f3\u017cne projekty maj\u0105ce na celu okie\u0142znanie zarz\u0105dzania stanem w Reactcie, podchodz\u0105ce do tematu z nieco odmiennej perspektywy. To, co jest do\u015b\u0107 unikalne, to to, \u017ce mimo \u017ce stanowi\u0105 wobec siebie wzajemn\u0105 konkurencj\u0119, wspiera je ta sama grupa - Poimandres.<br \/><br \/>Narz\u0119dzia do zarz\u0105dzania stanem (to musi by\u0107 straszliwie z\u0142o\u017cony problem w Recie, skoro w ka\u017cdej edycji Radaru mamy wr\u0119cz zatrz\u0119sienie jego rozwi\u0105za\u0144) reprezentuje te\u017c <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202010091\">SWR<\/a> (stale-while-revalidate) - rozwi\u0105zanie opieraj\u0105ce si\u0119 w zupe\u0142no\u015bci na Reactowych Hookach, a kt\u00f3rego celem jest bycie cache nad requestami HTTP - automatycznego ograniczenia ilo\u015bci zapyta\u0144 do serwera, co prowadzi do \u0142adniejszego i czytelniejszego kodu, bez if\u00f3w sprawdzaj\u0105cych, czy nie posiadamy ju\u017c danego zestawu informacji. Ograniczy\u0107 ono te\u017c mo\u017ce ilo\u015b\u0107 \u201crepaint\u00f3w\u201d aplikacji, czyli niepotrzebnego m\u0119czenia przegl\u0105darki ponownym rysowaniem komponent\u00f3w ze wzgl\u0119du na nadmiar zmiany w strukturze danych - w wykryciu takowych za\u015b pom\u00f3c mo\u017ce nam did-you-render - ma\u0142e narz\u0119dzie informuj\u0105ce nas w wypadku wykrycia tego typu nie optymalno\u015bci. Na hookach tak\u017ce <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104050\">React Hook Form<\/a> - rozwi\u0105zanie staj\u0105ce si\u0119 powoli standardem w \u015bwiecie zarz\u0105dzanie formularzami w Reactcie.<\/p><p>Nie mo\u017cna te\u017c nie wspomnie\u0107 o <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=201904030\">Next.js<\/a> - \u201cbrakuj\u0105cym\u201d frameworku dla Reacta. Next.js prezentuje \u201copinionated\u201d zestaw bibliotek i praktyk, pozwalaj\u0105cych na szybkie zasetupowanie, a p\u00f3\u017aniej r\u00f3wnie\u017c te\u017c pisanie aplikacji reactowej. Wprawdzie to \u015brodowisko zawsze ceni\u0142o sobie t\u0119 swobod\u0119 w\u0142asnor\u0119cznego dobierania odpowiednich \u201cbaterii\u201d, ale cho\u0107by ostatnie dofinansowania do Next.js udowadniaj\u0105, jaki potencja\u0142 maj\u0105 narz\u0119dzia jego pokroju.<\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-33.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1338\" height=\"320\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-33.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-33.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-33.png 1338w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Angular jest w nowym Radarze reprezentowany znacznie w\u0119ziej - mamy bowiem do czynienia tylko z pojedyncz\u0105 bibliotek\u0105 - \u00a0<a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104118\">Angular Testing Library<\/a>. Ta kopia React Testing Library zyskuje na popularno\u015bci, w czym z pewno\u015bci\u0105 nie przeszkadzaj\u0105 ostatnie zapowiedzi zabicia projektu Protractor, stanowi\u0105cego przez lata standard tego, jak testuje si\u0119 angularowe aplikacje. <\/p><p>Ca\u0142ego frontentdowego obrazku niech dope\u0142ni fakt, \u017ce coraz wi\u0119cej miejsca po\u015bwi\u0119cone jest WebAssembly. Mamy bowiem w nowym Technology Radarze <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202010022\">Blazora<\/a> od Microsoftu oraz s\u0142u\u017c\u0105ce do jego tesowania <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104029\">bUnit<\/a>. Niby nie tak wiele, ale w dalszym ci\u0105gu nale\u017cy pami\u0119ta\u0107, \u017ce angularowi po\u015bwi\u0119cono o po\u0142ow\u0119 mniej miejsca.<\/p><h2 id=\"nowe-rzeczy-w-temacie-konteneryzacji\">Nowe rzeczy w temacie konteneryzacji<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-17.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1200\" height=\"586\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-17.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-17.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-17.png 1200w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Szeroko poj\u0119ta konteneryzacja jest tematem, kt\u00f3ry zwykle do\u015b\u0107 licznie reprezentowany jest w ramach Technology Radaru. Tym razem zaskakuj\u0105co nie mamy nawa\u0142u r\u00f3\u017cnego rodzaju kubernetesowych tooli, ale te\u017c znajdziemy sporo interesuj\u0105cych projekt\u00f3w.<\/p><p>Od lat mo\u017cna zauwa\u017cy\u0107 proces coraz wi\u0119kszego odchudzania obraz\u00f3w dockerowych. Pocz\u0105tkowo do obraz\u00f3w wrzucane tam by\u0142y najnormalniejsze, pe\u0142ne dystrybucje Linuxa, nast\u0119pnym krokiem by\u0142o stopniowe ich odchudzanie, wyrzucanie mo\u017cliwo\u015bci logowania si\u0119 do obrazu itd. Czasem motywacj\u0105 by\u0142 rozmiar, a czasem ograniczenie potencjalnych wektor\u00f3w ataku. Je\u017celi motywuje nas to ostatnie, to kolejnym krokiem s\u0105 tak zwane <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=1330\">\u2018\"Distroless\" Docker Images\u2019<\/a>. S\u0105 to doci\u0119te do minimum wersje Linuxa rozpropagowane przez Google\u2019a, posiadaj\u0105ce wy\u0142\u0105cznie aplikacje i sam trzon systemu operacyjnego. Nie znajdziemy w nich pow\u0142oki czy mened\u017cer\u00f3w pakiet\u00f3w. Pewnie do debuggingu lokalnego nie chcia\u0142bym musie\u0107 tego u\u017cywa\u0107, ale jako artefakt do Kubernetesa, brzmi\u0105 ju\u017c one ca\u0142kiem interesuj\u0105co.<\/p>\n<figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-34.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1339\" height=\"320\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-34.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-34.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-34.png 1339w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Je\u017celi ju\u017c jeste\u015bmy w temacie bezpiecze\u0144stwa - mo\u017ce szukacie lepszej pod tym wzgl\u0119dem alternatywy do Dockera? Je\u015bli tak, mo\u017ce zainteresujecie si\u0119 <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104064\">podmanem<\/a>. Jest to w pe\u0142ni zgodny z API Dockera (do poziomu, gdzie jego tw\u00f3rcy zalecaj\u0105 dla wygody zaliasowanie go w shellu komend\u0105 docker) tool, umo\u017cliwiaj\u0105cy uruchamianie obraz\u00f3w z kontekstem u\u017cytkownika nie b\u0119d\u0105cego rootem. Jak \u0142atwo si\u0119 domy\u015bli\u0107, jest to dobra dodatkowa ochrona. Do tego ma bardzo \u201ccute\u201d ikonk\u0119. Czego chcie\u0107 wi\u0119cej \u00a0od toola devopsowego? <strong>#FokiPonadWielorybami<\/strong>  <\/p><p>Je\u017celi za\u015b u\u017cywamy ju\u017c Kuberenetesa i chcemy w ramach tej platformy uruchamia\u0107 wszystkie niezb\u0119dne fragmenty naszej infrastruktury, najlepsz\u0105 metod\u0105 mo\u017ce by\u0107 u\u017cycie tak zwanych \u201coperator\u00f3w\u201d. Ten parasolkowy standard umo\u017cliwia uruchamianie w ramach klastra popularnych aplikacji. Niech przyk\u0142adem b\u0119dzie tutaj Jenkins Operator, u\u017cywany u nas w firmie. A je\u017celi spodoba Wam si\u0119 takie podej\u015bcie, to ostatnim narz\u0119dzie kt\u00f3re mo\u017cecie znale\u017a\u0107 w Radarze jest <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104019\">Longhorn<\/a> - kubernetesowy odpowiednik S3. Persystencja w ramach K8s nigdy nie by\u0142a prosta, Longhorn za\u015b chyba rozwi\u0105za\u0142 ten problem ca\u0142kiem nie\u017ale. Wydaje si\u0119, \u017ce mo\u017ce by\u0107 interesuj\u0105c\u0105 alternatyw\u0105, je\u015bli nie chcemy rozwi\u0105za\u0144 \u201cmanaged\u201d lub naszym celem jest zamkni\u0119cie wszystkiego w ramach w\u0142asnej podsieci.<\/p><h2 id=\"thoughtworks-pami%C4%99ta-o-designerach\">ThoughtWorks pami\u0119ta o designerach<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d095a720cc.png\" class=\"kg-image\" alt loading=\"lazy\"><\/figure><p>Oni te\u017c znajd\u0105 dla siebie co\u015b w nowym Radarze.<\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-35.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1337\" height=\"317\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-35.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-35.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-35.png 1337w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>To, \u017ce Design Systemy (zestawy gotowych do u\u017cycia komponent\u00f3w, kt\u00f3re programi\u015bci mog\u0105 \u0142atwo zainkorporowa\u0107 w swoich projektach) s\u0105 przydatne, jest ju\u017c niejako truizmem. S\u0105 one, co prawda spor\u0105 inwestycj\u0105, ale z gatunku takich wp\u0142ywaj\u0105cych na d\u0142ugoterminow\u0105 produktywno\u015b\u0107 zespo\u0142\u00f3w programistycznych - a wi\u0119c z takich, co do\u015b\u0107 szybko si\u0119 sp\u0142acaj\u0105. Co jednak przyku\u0142o moj\u0105 uwag\u0119 w nowym Radarze, to fakt pojawienia si\u0119 <a href=\"https:\/\/www.thoughtworks.com\/radar\/platforms?blipid=202104028\">Bit.dev<\/a> - platformy low-code, pozwalaj\u0105cej na po\u0142\u0105czenie UIowych klock\u00f3w z r\u00f3\u017cnego rodzaju dostarczycielami danych, w efekcie pozwalaj\u0105c na \u0142atwe spinanie do kupy rzeczonych komponent\u00f3w w funkcjonalne aplikacje. Co wyr\u00f3\u017cnia <a href=\"https:\/\/www.thoughtworks.com\/radar\/platforms?blipid=202104028\">Bit.dev<\/a> z nawa\u0142u innych platform to fakt, \u017ce pozwala na dzia\u0142anie zar\u00f3wno w ramach hostowanej przez nich platformy, jak i mo\u017ce by\u0107 zainstalowana po prostu jako zewn\u0119trzna zale\u017cno\u015b\u0107 - bardzo lubi\u0119 narz\u0119dzia daj\u0105ce tego typu elastyczno\u015b\u0107.<\/p><p>Jak ju\u017c jeste\u015bmy w temacie low-code, to ciekawym rozwi\u0105zaniem jest <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104017\">imgcook<\/a>. Ta chi\u0144ska biblioteka maj\u0105ca swoje korzenie w Alibabie pozwala na automatyczne wygenerowanie strony z plik\u00f3w Sketch \/ Photoshop, u\u017cywaj\u0105c do tego Deep Learningu. O ile efekty nie s\u0105 jeszcze idealne i wymagaj\u0105 od projektant\u00f3w nieco porzucenia kreatywnej wolno\u015bci (aczkolwiek w stopniu pono\u0107 akceptowalnym dla wi\u0119kszo\u015bci), to ca\u0142o\u015b\u0107 zdaje si\u0119 dzia\u0142a\u0107 . A przynajmniej \u015bwiadczy o tym fakt, \u017ce Alibaba Group sporo swoich prostych, eventowych stronek w\u0142a\u015bnie tak wypu\u015bci\u0142o na produkcj\u0119. W ciekawych czasach \u017cyjemy, oj ciekawych.<\/p><h2 id=\"jak-powinni%C5%9Bmy-testowa%C4%87-oprogramowanie\">Jak powinni\u015bmy testowa\u0107 oprogramowanie?<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d095bc9af7.png\" class=\"kg-image\" alt loading=\"lazy\"><\/figure><p>Testowanie to zwykle ta cz\u0119\u015b\u0107, kt\u00f3ra bywa mocno \u201ctechnologio specyficzna\u201d, ale akurat obecna edycja Radaru daje nam kilka tooli relatywnie agnostycznych do naszego stacku.<\/p><p>Pami\u0119tam czasy, kiedy w zasadzie de facto standardem do testowania wydajno\u015bci aplikacji by\u0142 Gatling. Jego panowanie chyba powoli odchodzi w cie\u0144, bo coraz cz\u0119\u015bciej to w\u0142a\u015bnie <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202010078\">k6<\/a> jest przywo\u0142ywany jako nowy z\u0142oty standard dla tego typu rozwi\u0105za\u0144. Wynika to z faktu, \u017ce tw\u00f3rcy zauwa\u017cyli, jak kluczowym dla tego typu toola jest mnogo\u015bci integracji i \u0142atwo\u015b\u0107 po\u0142\u0105czenia go z us\u0142ugami zewn\u0119trznymi. \u017byjemy w czasach, gdy rozwi\u0105zania technologiczne si\u0119 ze sob\u0105 mocno przeplataj\u0105, dlatego te\u017c nie dziwi fakt \u017ce dla wielu programist\u00f3w jest to kluczowa funkcjonalno\u015b\u0107.<\/p><p>Testowanie UI to nieko\u0144cz\u0105ca si\u0119 historia. W\u0142a\u015bciwie przez ca\u0142\u0105 moj\u0105 dotychczasow\u0105 karier\u0119 mam okazj\u0119 obserwowa\u0107 powoli zmieniaj\u0105ce si\u0119 technologie, obiecuj\u0105ce kolejne usprawnienia tego do\u015b\u0107 niestabilnego (zar\u00f3wno poprzez potrzeb\u0119 uruchomienia zewn\u0119trznej aplikacji, jak i fakt, \u017ce po prostu nie \u0142atwo jest napisa\u0107 utrzymywalne testy dla UI). Kolejnym wa\u017cnym graczem w tej przestrzeni wydaje si\u0119 by\u0107 <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202010056\">Playwright<\/a> - narz\u0119dzie stworzone przez tw\u00f3rc\u00f3w Puppetera, kt\u00f3rzy nauczeni tym co dzia\u0142a\u0142o si\u0119, a co nie dzia\u0142a\u0142o w ich poprzednim narz\u0119dziu, postanowili stworzy\u0107 kolejne. W poprzedniej edycji Radaru, Playwright znajdowa\u0142 si\u0119 w sekcji Asses, teraz przeszed\u0142 to Trial - wida\u0107, \u017ce zdobywa coraz wi\u0119ksze zaufanie ThoughtWorksowych Developer\u00f3w.<\/p><p>A wiecie, co jeszcze ci\u0119\u017cko si\u0119 testuje? Infrastruktur\u0119. Dlatego te\u017c dobrze wiedzie\u0107, \u017ce powstaj\u0105 narz\u0119dzia pozwalaj\u0105ce nam nabra\u0107 pewno\u015bci r\u00f3wnie\u017c do tego fragmentu procesu developerskiego. <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=201904011\">Terratest<\/a>, przeznaczony do popularnego Terraforma, przeszed\u0142 bardzo podobn\u0105 drog\u0119 jak Playwright -&gt; w poprzedniej edycji by\u0142 w Asses, teraz trafi\u0142 do sekcji Trial. Zobaczymy, jak jego losy b\u0119d\u0105 si\u0119 rysowa\u0142y w kolejnych miesi\u0105cach.<\/p><h2 id=\"simplicity-matters\">Simplicity Matters<\/h2><p>Dla tych kt\u00f3rzy o tym zapominaj\u0105, Radar ma dwie przypominajki.<\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d095c9736d.png\" class=\"kg-image\" alt loading=\"lazy\"><\/figure><p>Po pierwsze, przypomina \u017ce jednak skomplikowane Design Doci s\u0105 ju\u017c pozosta\u0142o\u015bci\u0105 epoki, kt\u00f3ra min\u0119\u0142a. Komunikacja pisemna, zw\u0142aszcza w czasach kiedy ci\u0105gle jeszcze praca zdalna jest mocno rozpowszechniona, jest niezb\u0119dna - nie bez kozery m\u00f3wi si\u0119, \u017ce umiej\u0119tno\u015b\u0107 szeroko poj\u0119tego \u201ctechnicznego pisania\u201d jest jedn\u0105 z nieodzownych cech dobrego in\u017cyniera Anno Domini 2021. Dobre edytor to za\u015b taki, kt\u00f3ry czas z ty\u0142u g\u0142owy odbiorc\u0119 komunikatu. Design Doci ze starych epok by\u0142y \u015bwietne jako baza wiedzy (ale naprawd\u0119, zdarza\u0142o\n si\u0119 \u017ce uratowa\u0142y mi sk\u00f3r\u0119 przy pr\u00f3bie zrozumienia starych system\u00f3w), ale je\u015bli naszym celem jest otrzymanie feedbacku od zespo\u0142u z kt\u00f3rym musimy wsp\u00f3\u0142pracowa\u0107, to prawdopodobnie powinni\u015bmy si\u0119 skupi\u0107 na jak najkr\u00f3tszej formie, maj\u0105cej na uwadz\u0119 zar\u00f3wno \u201cattention span\u201d, jak i po prostu nawa\u0142 obowi\u0105zk\u00f3w z drugiej strony. Dlatego te\u017c Radar zach\u0119ca do jak najbardziej <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104044\">zwi\u0119z\u0142ej formy tak zwanych Request-for-comments<\/a>, kt\u00f3re lepiej znane s\u0105 pod postaci\u0105 skr\u00f3tu RFC.<\/p><p>Podobnie prezentuje si\u0119 sytuacja w kontek\u015bcie Machine Learningu. Nietrudno jest bowiem zabra\u0107 si\u0119 za szerokie zbieranie danych, pr\u00f3b\u0119 stworzenia datasetu w celu u\u017cycia kt\u00f3rej\u015b z nowoczesnych technik. Jednak kluczowe jest wzi\u0119cie tutaj pod uwag\u0119, na ile pozwoli nam to uzyska\u0107 efekt ko\u0144cowy o tyle lepszy, \u017ce rekompensuj\u0105cy odpalenie olbrzymiej, cz\u0119sto bardzo drogiej machiny. Nowa edycja Radaru radzi pr\u00f3bowa\u0107 <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104070\">podej\u015b\u0107 do tematu prostymi metodami<\/a>, typu bazowe modele naklepane w Pythonie, a dopiero gdy to nie zadzia\u0142a pr\u00f3bowanie z bardziej skomplikowanymi metodami i algorytmami state-of-the-art.<\/p><h2 id=\"od-remote-nie-uciekniemy-trzeba-go-wykorzysta%C4%87\">Od Remote nie uciekniemy, trzeba go wykorzysta\u0107<\/h2><p>Bior\u0105c pod uwag\u0119, jak przez wszystkie przypadki odmieniana by\u0142a praca zdalna w ostatnim p\u00f3\u0142roczu, przebitki tej dyskusji mo\u017cemy te\u017c znale\u017a\u0107 w publikacji ThoughtWorks.<\/p><p>Okazuje si\u0119, \u017ce praca zdalna ma pewne oryginalne zalety. Ot\u00f3\u017c w momencie, gdy jeste\u015bmy w biurze, wsp\u00f3lna praca nad jednym problemem jest ograniczona przez\u2026 fizyczn\u0105 przestrze\u0144. Monitory s\u0105 ma\u0142e, salki czasem ci\u0119\u017cko zarezerwowa\u0107 (za tym aspektem biura na pewno nikt nie t\u0119skni). Na wideokonferencji za\u015b mo\u017cna udost\u0119pni\u0107 ekran dladowolnie du\u017cej ilo\u015bci koleg\u00f3w z pracy. Dlatego te\u017c jedn\u0105 z technik, kt\u00f3r\u0105 wed\u0142ug tw\u00f3rc\u00f3w Radaru warto cho\u0107by mie\u0107 w arsenale, jest <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104052\">Remote Mob Programming<\/a>. Jest to rozwini\u0119cie Mob Programmingu, gdzie t\u0142um ludzi pracuje nad jednym kodem, regularnie zmieniaj\u0105c osob\u0119 maj\u0105c\u0105 dost\u0119p do klawiatury. Okazuje si\u0119, \u017ce nasze narz\u0119dzia s\u0105 ju\u017c na tyle dojrza\u0142e, \u017ce jest to w sytuacji pracy zdalnej po prostu wygodniejsze i \u0142atwiejsze do przeprowadzenia. To co, kto\u015b z Was kiedykolwiek mob programowa\u0142 lub zamierza to robi\u0107?<\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d095d40e46.png\" class=\"kg-image\" alt loading=\"lazy\"><\/figure><p>Apropo wspomnianych coraz lepszych narz\u0119dzi - w nowym Radarze pojawia si\u0119 Tuple. W czasie pandemii in\u017cynierowie z Thoughtworks przetestowali wiele r\u00f3\u017cnych aplikacji i w\u0142a\u015bnie Tuple wed\u0142ug nich najlepiej sprawdza si\u0119 w sytuacji wsp\u00f3lnej pracy zdalnej nad jednym kodem. Jako jedn\u0105 ze szczeg\u00f3lnych zalet tego rozwi\u0105zania wskazuj\u0105 oni unikaln\u0105 mo\u017cliwo\u015b\u0107 sterowania jednym kursorem przez dwie osoby.<\/p><h2 id=\"kilka-interesuj%C4%85cych-technik-jak-dba%C4%87-o-nasze-zespo%C5%82y\">Kilka interesuj\u0105cych technik, jak dba\u0107 o nasze zespo\u0142y<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-18.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"280\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-18.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-18.png 900w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Bardzo ciekawym aspektem, ju\u017c w zasadzie kilku poprzednich Radar\u00f3w, jest du\u017cy nacisk jaki ludzie z ThoughtWorks k\u0142ad\u0105 na produktowe podej\u015bcie do rozwoju ka\u017cdego oprogramowania, tak\u017ce wewn\u0119trznego - zar\u00f3wno przeznaczonego do biznesu, jak i b\u0119d\u0105cego \u201cinfr\u0105\u201d dla pozosta\u0142ych zespo\u0142\u00f3w. W aktualnym Radarze przeciwstawiaj\u0105 oni bardzo mocno to podej\u015bcie, w kt\u00f3rym wszyscy ludzie s\u0105 bardzo mocno zaanga\u017cowani w rozw\u00f3j us\u0142ugi daj\u0105cej konkretn\u0105 warto\u015b\u0107 dla klienta, typowym <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104110\">\u201csilosowym\u201d organizacjom<\/a> i zespo\u0142om, okre\u015blanym tutaj jako layered platform teams. Sugeruj\u0105 oni, \u017ce bardzo \u0142atwo ukry\u0107 klasyczne klastrowanie, nazywaj\u0105c poszczeg\u00f3lne zespo\u0142y np. <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104043\">DBA\u00f3w \u201cplatformowymi\u201d<\/a> i udaj\u0105c, \u017ce jeste\u015bmy nowocze\u015bni i interoperacyjni. Zauwa\u017caj\u0105 za to, \u017ceby podzia\u0142u organizacji, zw\u0142aszcza zespo\u0142\u00f3w przynosz\u0105cych \u201cwarto\u015b\u0107\u201d, dokonywa\u0107 w spos\u00f3b szanuj\u0105cy \u201c\u0142adunek kognitywny\u201d ludzi w nich pracuj\u0105cych. Chodzi o to, \u017ceby zesp\u00f3\u0142 realnie m\u00f3g\u0142 skupi\u0107 si\u0119 nad jednym problemem, w miar\u0119 jednolitym stosie technologicznym - inaczej mo\u017cemy doprowadzi\u0107 do przem\u0119czenia ludzi i sprawienia, \u017ce b\u0119d\u0105 oni nieszcz\u0119\u015bliwi oraz ma\u0142o wydajni. <\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-42.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1339\" height=\"318\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-42.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-42.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-42.png 1339w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Ciekaw\u0105 rzecz\u0105 jest fakt, \u017ce do\u015b\u0107 krytycznie Thoughtworks wypowiada si\u0119 o oprogramowaniu <a href=\"https:\/\/www.thoughtworks.com\/radar\/platforms?blipid=202010066\">Backstage<\/a>. Jest to, zbieraj\u0105ca spore ilo\u015bci pozytywnego buzzu aplikacja do tworzenia tak zwanych wewn\u0119trznych \u201cdeveloper portali\u201d, b\u0119d\u0105cych w zasadzie kolejn\u0105 warstw\u0105 abstrakcji np. nad dostawcami chmurowymi. In\u017cynierowie tworz\u0105cy Radar ze swojego do\u015bwiadczenia twierdz\u0105, \u017ce wymuszaj\u0105 one cz\u0119sto bardzo ograniczaj\u0105c\u0105 standaryzacje. Z podobnych powod\u00f3w maj\u0105 oni te\u017c do\u015b\u0107 jasn\u0105 opini\u0119, co do <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=793\">SAFE<\/a> (Skalowalnego Agile). Jest ona zgodna ze starym powiedzeniem: \u201cG\u0142\u00f3wna zasada skalowania: Nie\u201d. U\u017cywanie ustandaryzowanych framework\u00f3w z konkretnymi frameworkami mo\u017ce by\u0107 jakim\u015b startem, ale kurczowe trzymanie si\u0119 generycznych powoduje, \u017ce cz\u0119sto trzeba nagina\u0107 styl pracy pasuj\u0105cy do problemu w celu dopasowania si\u0119 do frameworka, co jest zar\u00f3wno frustruj\u0105ce jak i ma\u0142o efektywne.<\/p><h2 id=\"wszystkie-rzeczy-kt%C3%B3re-dziej%C4%85-si%C4%99-continuous\">Wszystkie rzeczy kt\u00f3re dziej\u0105 si\u0119 \"Continuous\"<\/h2><figure class=\"kg-card kg-image-card kg-card-hascaption\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-24.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1024\" height=\"342\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/4_image-24.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-24.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-24.png 1024w\" sizes=\"(min-width: 720px) 720px\"><figcaption>Ukradzione z https:\/\/www.spritecloud.com\/test-automation-with-ci-cd-pipeline\/, ale nie mog\u0142em si\u0119 powstrzyma\u0107 <\/figcaption><\/figure><p>W tej edycji, wszystko kr\u0119ci si\u0119 w zasadzie w oko\u0142o Gita.<\/p>\n<figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-37.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1337\" height=\"318\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-37.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-37.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-37.png 1337w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Dla wszystkich, kt\u00f3rzy \u015bledz\u0105 rynek system\u00f3w CI\/CD, nie jest tajemnic\u0105 \u017ce Thoughtworks posiadaj\u0105 w\u0142asne rozwi\u0105zanie tego typu. GoCD, swego czasu jedne z najciekawszych dost\u0119pnych na rynku. Z tej perspektywy interesuj\u0105cym jest fakt, \u017ce w nowej edycji Radaru sugeruj\u0105 oni spr\u00f3bowanie chyba najl\u017cejszego ze wszystkich dost\u0119pnych rozwi\u0105za\u0144 do Continuous Delivery - <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104005\">GitHub Actions<\/a>. Chwal\u0105 oni wygod\u0119, prostot\u0119 i (jak\u017ce by inaczej) integracj\u0119 z repozytorium kodu. U\u017cywanie GitHub Actions broni nas te\u017c przed jednym z antypattern\u00f3w jakie odnale\u017a\u0107 mo\u017cemy w nowym Radarze - utrzymanie kodu \u017ar\u00f3d\u0142owego aplikacji i kodu \u017ar\u00f3d\u0142owego pipeline przez dwa niezale\u017cne zespo\u0142y. Radar bardzo jasno wypowiada si\u0119, \u017ce jest to bardzo, bardzo z\u0142a praktyka.<\/p><p>A skoro o antypatternach, to og\u00f3lnie du\u017co wi\u0119cej znale\u017a\u0107 mo\u017cemy wskaz\u00f3wek czego nie robi\u0107 ni\u017c co robi\u0107. Przyk\u0142adowo, raczej odradzane s\u0105 tak zwane <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104006\">GitOpsy<\/a>. Jest to opisywane jako rozwini\u0119cie Infrastructure as a Code polegaj\u0105ce na automatycznym \u015bci\u0105ganiu z repozytorium bie\u017c\u0105cego stanu infrastruktury, kt\u00f3ry to specjalny pooler potem implementuje w ramach produkcyjnego \u015brodowiska. Wed\u0142ug ludzi z ThoughtWorks, ta dosy\u0107 sprytna idea ko\u0144czy si\u0119 szybko sytuacjami, \u017ce branche dla poszczeg\u00f3lnych \u015brodowisk rozje\u017cd\u017caj\u0105 si\u0119. Wynikowo wi\u0119cej z tego szkody ni\u017c po\u017cytku (zreszt\u0105, r\u00f3wnie\u017c w wypadku samych deployowanych artefakt\u00f3w te\u017c zwr\u00f3cono uwag\u0119 na ten problem, sugeruj\u0105c automatyczne mierzenie poziomu \u201crozjazdu\u201d \u015brodowisk) . Dodatkowo, pandemia pokaza\u0142a nam, \u017ce model Gitowych PullRequest\u00f3w przy wszystkich swoich zaletach, potrafi by\u0107 bardzo blokuj\u0105cy dla zespo\u0142\u00f3w. Dlatego te\u017c in\u017cynierowie tworz\u0105cy Radar sugeruj\u0105, aby w swoim arsenale posiada\u0107 tak\u017ce inne metody utrzymywania jako\u015bci (i znajomo\u015bci) kodu - inaczej tak naprawd\u0119 dostajemy d\u0142ugo\u017cyj\u0105ce bran\u017ce i ca\u0142a mityczna, ci\u0105g\u0142a integracja bierze w \u0142eb. <\/p><p>Schodz\u0105c troch\u0119 z tematu Gita, Technology Radar jest kolejnym miejscem do\u015b\u0107 jasno wypowiadaj\u0105cym si\u0119, \u017ce czego jak czego, ale <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104002\">AWSowego CodePipeline<\/a> lepiej kijem nie rusza\u0107. Jak wida\u0107 nie wszystko z\u0142oto, czego si\u0119 Amazon dotknie.<\/p><h2 id=\"co-s%C5%82ycha%C4%87-w-%C5%9Bwiecie-infrastructure-as-a-code\">Co s\u0142ycha\u0107 w \u015bwiecie Infrastructure-as-a-Code<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-22.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"286\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-22.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-22.png 900w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Pierwsza sugestia przypomina nieco rad\u0119, kt\u00f3r\u0105 znaj\u0105 domoro\u015bli eksperymentatorzy, pr\u00f3buj\u0105cy stworzy\u0107 w\u0142asn\u0105 bibliotek\u0119 do kryptografii - je\u015bli nie jeste\u015b specjalist\u0105, kt\u00f3ry buduje tego typu rozwi\u0105zanie dla spo\u0142eczno\u015bci (a nie na potrzeb\u0119 kilku zespo\u0142\u00f3w), zdaj si\u0119 na jedno z istniej\u0105cych rozwi\u0105za\u0144. Rynek Cloud Computingu jest za szybki, zbyt dynamiczny i w d\u0142u\u017cszej perspektywie albo rozwijanie w\u0142asnego rozwi\u0105zania b\u0119dzie za drogie i b\u0119dziesz musia\u0142 si\u0119 przenie\u015b\u0107 np. na Terraforma, albo zostaniesz z ty\u0142u za rozwi\u0105zaniami chmurowymi, kt\u00f3re (jak to ju\u017c w tym artykule wspomnieli\u015bmy) po prostu rozwijaj\u0105 si\u0119 zbyt dynamicznie. Ma\u0142o kt\u00f3ra firma ma na tyle unikalne potrzeby, \u017ceby nie bra\u0107 czego\u015b istniej\u0105cego \u201cz p\u00f3\u0142ki\u201d - mimo \u017ce wielu wydaje si\u0119, \u017ce tak w\u0142a\u015bnie jest u nich.<\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-38.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1340\" height=\"322\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-38.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-38.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-38.png 1340w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>A jakie rozwi\u0105zania Radar wskazuje jako interesuj\u0105ce? Je\u017celi nie przeszkadza Ci Vendor Lock-In (tutaj masz dobry artyku\u0142 dlaczego tak naprawd\u0119 nie powinien) i u\u017cywasz AWSa, ichniejszy <a href=\"https:\/\/www.thoughtworks.com\/radar\/platforms?blipid=201911007\">Cloud Development Kit<\/a> zdobywa corazwi\u0119ksz\u0105 popularno\u015b\u0107. Sam pami\u0119tam, jak rozwi\u0105zanie to wchodzi\u0142o na, ju\u017c wydaje si\u0119 do\u015b\u0107 nasycony, rynek i interesuj\u0105ce jest, jak w odr\u00f3\u017cnieniu od np. <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104002\">CodePipelines<\/a>, ono akurat zdoby\u0142o naprawd\u0119 szerok\u0105 aprobat\u0119 u\u017cytkownik\u00f3w. Je\u017celi za\u015b nie u\u017cywasz AWSa, mo\u017cesz spr\u00f3bowa\u0107 <a href=\"https:\/\/www.thoughtworks.com\/radar\/platforms?blipid=1283\">Pulumi<\/a>. Oba rozwi\u0105zania przyj\u0119\u0142y do\u015b\u0107 nietypow\u0105 par\u0119 lat temu filozofi\u0119 - stwierdzi\u0142y one, \u017ce tak naprawd\u0119 \u015bwiat infrastruktury sta\u0142 si\u0119 na tyle skomplikowany, \u017ce deklaratywne rozwi\u0105zania nie w ka\u017cdym przypadku s\u0105 najlepszym pomys\u0142em i do opisywania \u015brodowiska warto zaprz\u0119gn\u0105\u0107 j\u0119zyki Turing Complete - z ich wszystkimi p\u0119tlami, ifami i zmiennymi. Mam wra\u017cenie, \u017ce to akurat jest ci\u0105g\u0142y cykl (zalet\u0105 deklaratywne rozwi\u0105za\u0144 mia\u0142o by\u0107 w\u0142a\u015bnie zmniejszenie niepotrzebnej z\u0142o\u017cono\u015bci, kt\u00f3r\u0105 cechowa\u0142y oparte na bashu skrypty do deploymentu), ale jak widzimy historia lubi zatoczy\u0107 ko\u0142o. <\/p><p>Dla tych za\u015b, kt\u00f3rzy potrzebuj\u0105 maksymalnego platform-agnostycyzmu, mamy za\u015b <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202010032\">Open Appliaction Model (OAM)<\/a> - kolejne ju\u017c podej\u015bcie do tworzenia abstrakcji nad chmurami, tym razem oparte mocno oparte o Kubernetesa. Po\u017cyjemy, zobaczymy <\/p><h2 id=\"kto-powinien-rz%C4%85dzi%C4%87-chmur%C4%85-w-firmie\">Kto powinien rz\u0105dzi\u0107 chmur\u0105 w firmie?<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-21.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"281\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-21.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-21.png 900w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>W poprzedniej sekcji opisywali\u015bmy, \u017ce tworzenie w\u0142asnych narz\u0119dzi do zarz\u0105dzania chmurami to syzyfowa praca, gdy\u017c gonienie wszystkich zmian, kt\u00f3re wprowadzaj\u0105 dostawcy chmur po prostu jest ma\u0142o efektywne. Nieco podobny problem jest z wszystkimi narz\u0119dziami do symulacji ich zachowa\u0144 w \u015brodowisku lokalnym. Ka\u017cdy, kto ich u\u017cywa\u0142 wie, \u017ce zwykle dzia\u0142aj\u0105 \u201cprawie dobrze\u201d, a nawet je\u015bli nad\u0105\u017caj\u0105 za tym, co dzieje si\u0119 w chmurze, to wraz z ka\u017cd\u0105 now\u0105 wersj\u0105 niezb\u0119dne s\u0105 operacje po stronie u\u017cytkownika jak np. update jarzm testowych u\u017cywanych do symulowania zachowania chmury. <\/p><p>Skoro abstrakcje przeciekaj\u0105, Radar ma interesuj\u0105ce rozwi\u0105zanie - ola\u0107 abstrakcje, i bior\u0105c pod uwag\u0119 szybko\u015b\u0107 internetu i wzgl\u0119dn\u0105 tanio\u015b\u0107 zasob\u00f3w chmurowych w por\u00f3wnaniu do czasu in\u017cynier\u00f3w, tworzy\u0107 indywidualne <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104009\">Cloud Sandboxy<\/a> na potrzeby ka\u017cdego z in\u017cynier\u00f3w. Przy okazji, taki Sandbox rzeczony in\u017cynier powinien m\u00f3c wyklika\u0107 sobie samemu - jedn\u0105 z odradzanych praktyk jest operowanie chmur\u0105 w oparciu o \u201ctickety\u201d do \u201cplatform teamu\u201d. Nie pozwala to w realnym \u015bwiecie oszacowa\u0107 koszt\u00f3w (to mo\u017cna lepiej ogarn\u0105\u0107 poprzez prawid\u0142owe tagowanie maszynek), a powoduje tylko frustracje i wieczne op\u00f3\u017anienia - og\u00f3lnie mam wra\u017cenie, \u017ce szybko\u015b\u0107 proces\u00f3w jest jedn\u0105 z my\u015bli prz\newodnich samego Radaru.<\/p><h2 id=\"co-radar-przynosi-dla-programist%C3%B3w-jvm\">Co Radar przynosi dla programist\u00f3w JVM?<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-16.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"284\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-16.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-16.png 900w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>No jak to co - Kotlin  Aczkolwiek nie w takich ilo\u015bciach, jak w ostatnich edycjach. <\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-39.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1338\" height=\"320\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-39.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-39.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-39.png 1338w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Poza Kotlin Multiplatform Mobile, o kt\u00f3rym ju\u017c wspomnieli\u015bmy w sekcji o aplikacjach mobilnych, w Radarze znalaz\u0142 si\u0119 <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104041\">Kotlin Flow<\/a> - abstrakcje nad bardzo popularnymi korutynami, kt\u00f3re niejedn\u0105 osob\u0119 przyci\u0105gn\u0119\u0142y do tego j\u0119zyka. Dobra passa Kotlina si\u0119 nie ko\u0144czy - Flow r\u00f3wnie\u017c bowiem uwa\u017cany jest za bardzo ciekawe podej\u015bcie do pisania asynchronicznego kodu. <\/p><p>Co mnie jednak cieszy nawet bardziej ni\u017c Kotlin (bo jak ju\u017c wspomnia\u0142em, Kotlina nigdy w Radarze nie brakuje), to fakt zauwa\u017cenia <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104122\">GraalVM<\/a>. Osoby, kt\u00f3re czytaj\u0105 nasze JVMowe przegl\u0105dy na pewno zauwa\u017cy\u0142y, \u017ce rozwi\u0105zanie to coraz bardziej przebija si\u0119 mo\u017ce nie do mainstreamu, ale na pewno znajduje sobie wczesnych adopter\u00f3w. Sam mocno kibicuje tej platformie (mia\u0142em j\u0105 okazj\u0119 z niez\u0142ym skutkiem u\u017cy\u0107 w jednym z projekt\u00f3w), dlatego te\u017c mi\u0142o widzie\u0107, \u017ce r\u00f3wnie\u017c in\u017cynierowie z ThoughtWorks zauwa\u017caj\u0105 jej potencja\u0142.<\/p><h2 id=\"czy-ty-te%C5%BC-lubisz-lintery\">Czy Ty te\u017c lubisz lintery?<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-23.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1200\" height=\"369\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-23.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/4_image-23.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-23.png 1200w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Lubi je bran\u017ca, lubi\u0119 te\u017c je i ja, dlatego uda\u0142o mi si\u0119 wy\u0142uska\u0107 dwa rozwi\u0105zania tego typu. Oba te\u017c zajmuj\u0105 si\u0119 \u201clintowaniem\u201d bardzo podobnego zakresu - specyfikacji naszego API i jego zgodno\u015bci ze standardem OpenAPI. <\/p><p>Rozwi\u0105zania r\u00f3\u017cni\u0105 si\u0119 troch\u0119 swoj\u0105 filozofi\u0105 - o ile <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104055\">Spectral<\/a> jest szalenie generyczny - o tyle wspomniane OpenAPI jest jego najcz\u0119stszym przypadkiem u\u017cycia. Jest to komercyjny projekt, kt\u00f3rego u\u017cy\u0107 mo\u017cna np. r\u00f3wnie\u017c do walidacji konfiguracji Kubernetesa, a samo narz\u0119dzie posiada edytor pozwalaj\u0105cy na granularne okre\u015blenie konkretnych zasad. W odr\u00f3\u017cnieniu od niego, <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104058\">Zally<\/a> jest znacznie bardziej \u201copinionated\u201d, opieraj\u0105c si\u0119 na standardach wobec API wypracowanych przez firm\u0119 Zalando. W zale\u017cno\u015bci od Waszych potrzeb, mo\u017cecie u\u017cy\u0107 jednego z dw\u00f3ch rozwi\u0105za\u0144 - dla ka\u017cdego co\u015b mi\u0142ego.<\/p><h2 id=\"dla-tworz%C4%85cych-api-w-pythonie\">Dla tworz\u0105cych API w Pythonie<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-25.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"439\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/4_image-25.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-25.png 900w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>R\u00f3wnie\u017c dla Was znajd\u0105 si\u0119 dwa ciekawe narz\u0119dzia. <\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-41.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1338\" height=\"317\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-41.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-41.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-41.png 1338w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Pierwszym z nich jest <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104069\">Pyright<\/a> - TypeChecker, kt\u00f3ry potrafi walidowa\u0107 kod w oparciu o adnotacje zg\u0142oszone jako proposale do j\u0119zyka (Python Enhancement Proposals). Jego tw\u00f3rcy (a stoi za nim firma Microsoft - mo\u017ce kojarzycie?) chwal\u0105 si\u0119, \u017ce ich rozwi\u0105zanie pozostaje szybkie nawet w wypadku pracy z olbrzymimi repozytoriami kodu.<\/p><p>Szybko\u015b\u0107 jest te\u017c s\u0142owem kluczowym w wypadku drugiego z prezentowanych pythonowych rozwi\u0105za\u0144. <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104087\">FastAPI<\/a> to framework, kt\u00f3rego in\u017cynierowie od Radaru wskazuj\u0105 jako najlepsze obecne rozwi\u0105zania do tworzenia API w Pythonie - w odr\u00f3\u017cnieniu od takiego Django jest lekkie, wydajne i elastyczne, a przede wszystkim \u0142atwe do zrozumienia - nie wprowadza kilogram\u00f3w niepotrzebnej magii.<\/p><p><strong>No c\u00f3\u017c, to by by\u0142o na tyle! <a href=\"https:\/\/blog.vived.io\/#subscribe\">Zasubskrybujcie si\u0119<\/a>, aby nie przegapi\u0107 przysz\u0142ych przegl\u0105d\u00f3w tego typu. Dodatkowo, zapraszamy do naszych regularnych edycji \"Weekly\", gdzie we <\/strong><a href=\"https:\/\/blog.vived.io\/tag\/jvm\/\"><strong>wtorki<\/strong><\/a><strong>, <\/strong><a href=\"https:\/\/blog.vived.io\/tag\/frontend\/\"><strong>czwartki<\/strong><\/a><strong> i <\/strong><a href=\"https:\/\/blog.vived.io\/tag\/craftmanship\/\"><strong>soboty<\/strong><\/a><strong> opisujemy na bie\u017c\u0105co to, czym \u017cyje nasza bran\u017ca .<\/strong><\/p>","innerContent":["<p>Je\u017celi mia\u0142bym wskaza\u0107 najwi\u0119ksze problemy, z jakimi boryka si\u0119 bran\u017ca IT, to opr\u00f3cz oczywistych oczywisto\u015bci takich jak \u017ale zarz\u0105dzane projekty, czy hype driven development itp., to moim osobistym \u201cb\u00f3lem\u201d jest fakt, \u017ce jak na dziedzin\u0119, kt\u00f3ra lubi przypisywa\u0107 sobie in\u017cyniersko\u015b\u0107, mamy pot\u0119\u017cny problem z weryfikowalno\u015bci naszych decyzji. Powiedzmy sobie szczerze, w tworzonych przez nas projektach bardzo cz\u0119sto potrzebujemy wybra\u0107 jedn\u0105 z wachlarza dost\u0119pnych opcji, maj\u0105c cz\u0119sto do\u015b\u0107 mgliste poj\u0119cie, kt\u00f3ra z alternatyw b\u0119dzie lepsza d\u0142ugoterminowo. Nie bez kozery m\u00f3wi si\u0119, \u017ce w IT wszystko jest \u201ctradeoffem\u201c, ale pal licho, je\u015bli byliby\u015bmy jeszcze w stanie po czasie cokolwiek oceni\u0107 i nauczy\u0107 si\u0119 na b\u0142\u0119dach. Bardzo cz\u0119sto tak niestety nie jest - nawet je\u015bli b\u0119dziemy w stanie spojrze\u0107 po czasie na powsta\u0142e rozwi\u0105zanie i zrozumie\u0107 jego dobre i z\u0142e strony, to tak naprawd\u0119 dalej daje nam tylko to mgliste poj\u0119cie, czy alternatywa by\u0142aby lepsza. <\/p><p>Nie da si\u0119 d\u0142ugoterminowo i r\u00f3wnolegle rozwija\u0107 np. dw\u00f3ch r\u00f3\u017cnych architektur, \u017ceby po roku zaobserwowa\u0107, kt\u00f3ra daje lepsze rezultaty. Dodatkowo, tak naprawd\u0119 ka\u017cdy z nas ma szans\u0119 w swojej karierze \u201czaliczy\u0107\u201d kilka wi\u0119kszych projekt\u00f3w, rzadko kiedy maj\u0105c okazj\u0119 pracowa\u0107 przy dw\u00f3ch r\u00f3wnocze\u015bnie i mie\u0107 mo\u017cliwo\u015b\u0107 por\u00f3wnywania r\u00f3\u017cnych podej\u015b\u0107. Bardzo wiele reperkusji przychodzi po czasie, co nieraz przy du\u017cej rotacji, jaka jednak panuje w bran\u017cy sprawi, \u017ce nigdy nie dowiemy si\u0119, czy nie pope\u0142nili\u015bmy b\u0142\u0119du, trudno si\u0119 nam wi\u0119c na takowych nauczy\u0107. Dlatego te\u017c tak cenny jest fakt, \u017ce pojawiaj\u0105 si\u0119 opracowania pokroju Technology Radaru - publikacje pomagaj\u0105ce oceni\u0107 przydatno\u015b\u0107 poszczeg\u00f3lnych technik i narz\u0119dzi.<\/p><p><strong>Spis Tre\u015bci <\/strong><\/p><!--kg-card-begin: html--><aside class=\"toc\"><\/aside>\n<!--kg-card-end: html--><h2 id=\"czym-jest-technology-radar\">Czym jest Technology Radar?<\/h2><p>Dobra, wydaje si\u0119 jednak \u017ce niekt\u00f3rym z Was czytaj\u0105cych ten tekst nale\u017cy si\u0119 ma\u0142e wyja\u015bnienie, czym tak naprawd\u0119 Technology Radar jest. Ot\u00f3\u017c jest to wydawana semi-regularnie (zwykle ok. dwa razy do roku) analiza i ocena trend\u00f3w wyr\u00f3\u017cniaj\u0105cych si\u0119 w technologicznym \u015bwiecie, dokonywana przez firm\u0119 ThoughtWorks. W firmie pracuj\u0105 takie uznane osobisto\u015bci naszej bran\u017cy jak cho\u0107by Martin Fowler czy Rebecca Parson, a sama firma jest agencj\u0105 konsultingow\u0105, pracuj\u0105c\u0105 z wieloma du\u017cymi klientami na ca\u0142ym \u015bwiecie przy cz\u0119sto kluczowych dla tych firm projektach. Daje im to do\u015b\u0107 unikaln\u0105 perspektyw\u0119 - s\u0105 w stanie zar\u00f3wno przetestowa\u0107 r\u00f3\u017cne rozwi\u0105zania konkretnych problem\u00f3w np. por\u00f3wnuj\u0105c, jak sprawdzi\u0142y si\u0119 poszczeg\u00f3lne podej\u015bcia u poszczeg\u00f3lnych klient\u00f3w, jak i maj\u0105 widoczno\u015b\u0107 na szerokie spektrum problem\u00f3w, z jakimi du\u017ce firmy musz\u0105 si\u0119 mierzy\u0107.<\/p><p>S\u0105 osoby, kt\u00f3re maj\u0105 do Radaru nieco krytyczne podej\u015bcie, traktuj\u0105c go jako nieco skrzywiony pod k\u0105tem wy\u0142\u0105cznie wi\u0119kszych organizacji - co jest pok\u0142osiem tego, \u017ce z takimi podmiotami zwykle pracuje ThoughtWorks - ale z mojej perspektywy ka\u017cdorazowo jest on zbiorem trafnych obserwacji, pozwalaj\u0105cych na mocne poszerzenie horyzont\u00f3w i \u201cwy\u0142uskanie\u201d \u00a0dla siebie technik i narz\u0119dzi, kt\u00f3re mo\u017ce w innym wypadku przesz\u0142yby pod naszym (nomen omen) radarem. <\/p><p>Dlatego te\u017c mam dla Was przegl\u0105d tego, co w Radarze mo\u017cna znale\u017a\u0107, pogrupowany w specjalne sekcje tematyczne (pewnego rodzaju hmmm\u2026 podzia\u0142 funkcjonalny zamiast domenowego jest najtrudniejsz\u0105 rzecz\u0105 przy konsumpcji Radaru). Mam nadzieje, \u017ce dzi\u0119ki temu opracowaniu docenicie kapitaln\u0105 robot\u0119, jak\u0105 wykonuj\u0105 in\u017cynierowie z ThoughtWorks.<\/p><h2 id=\"je%C5%BCeli-jeste%C5%9B-programist%C4%85-mobilnym\">Je\u017celi jeste\u015b programist\u0105 mobilnym....<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-11.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"281\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-11.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-11.png 900w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Czytaj\u0105c Technology Radar od d\u0142u\u017cszego czasu, bardzo ciekawym jest obserwowanie tego, jak coraz mniej miejsca z ka\u017cd\u0105 edycj\u0105 po\u015bwi\u0119cone jest wszelakim technologiom mobilnym. Z pewno\u015bci\u0105 pow\u00f3d jest taki, a nie inny charakter klient\u00f3w ThoughtWorks (du\u017ce podmioty, raczej z bardziej \u201ctradycyjnych\u201d bran\u017c - nowoczesne startupy czy FAANG nie korzystaj\u0105 z tego typu konsultingu), pokazuje to jednak, \u017ce o ile spokojnie mo\u017cemy si\u0119 zgodzi\u0107, \u017ce przeci\u0119tny konsument dawno wszed\u0142 w er\u0119 Post-PC, to r\u00f3wnocze\u015bnie aplikacje mobilne przesta\u0142y by\u0107 przestrzeni\u0105, o kt\u00f3r\u0105 szczeg\u00f3lnie si\u0119 walczy, a rynek dokona\u0142 ju\u017c swoistego \u201cpodzia\u0142u \u0142up\u00f3w\u201d. Coraz trudniej si\u0119 wypromowa\u0107, coraz trudniej zach\u0119ci\u0107 ludzi do u\u017cywania dedykowanej aplikacji, jest to r\u00f3wnie\u017c do\u015b\u0107 droga fanaberia poniewa\u017c klienci oczekuj\u0105 r\u00f3wnie\u017c istnienia r\u00f3wnoleg\u0142ego dobrego \u201cwebowego\u201d do\u015bwiadczenia. Tym razem jednak sytuacja wygl\u0105da troch\u0119 inaczej - Radar dostarczy\u0142 nam kilka ciekawych projekt\u00f3w i technik zwi\u0105zanych z tym segmentem rynku.<\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-30.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1419\" height=\"339\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-30.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-30.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-30.png 1419w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Jako \u017ce nawi\u0105za\u0142em przed momentem do faktu, \u017ce na dzisiejszym rynku niezb\u0119dne jest posiadanie zar\u00f3wno mobilnej, jak i webowej aplikacji, pozwol\u0119 sobie zacz\u0105\u0107 od tego tematu. Ot\u00f3\u017c w nowym Radarze znale\u017a\u0107 mo\u017cemy dwa hmmm\u2026 ekosystemy, kt\u00f3re maj\u0105 nam w tym pom\u00f3c. Zar\u00f3wno <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104128\">Flutter<\/a>, jak i <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104042\">Kotlin Multiplatform<\/a> od dawna staraj\u0105 si\u0119 spe\u0142ni\u0107 obietnice \u201cWrite Once, Deploy Everywhere\u201d, poszerzaj\u0105c zakres dost\u0119pnych \u015brodowisk docelowych. Nowy Radar zauwa\u017ca to i sugeruje, \u017ce ka\u017cdy z ekosystem\u00f3w warty jest cho\u0107by rozwa\u017cenia. Ja od siebie doda\u0142bym, \u017ce zar\u00f3wno Flutter, jak i Kotlin celuj\u0105 jeszcze dalej, w ostatnich miesi\u0105cach chc\u0105c sta\u0107 si\u0119 ca\u0142kowicie \u201cuniwersalnymi\u201d, celuj\u0105c r\u00f3wnie\u017c w aplikacje desktopowe. Spe\u0142nia si\u0119 wi\u0119c powoli nasze marzenie o pisaniu \u201cuniwersalnych aplikacji\u201d - co ciekawe, powoli zaczyna wydawa\u0107 si\u0119, \u017ce to pomys\u0142 przepakowywania stron internetowych by\u0142 \u015blep\u0105 uliczk\u0105. Po\u017cyjemy zobaczymy, ale na pewno jeste\u015bmy na etapie agresywnego poszukiwania alternatyw.<\/p><p>Z tym te\u017c pewnie wi\u0105\u017ce si\u0119 ma\u0142y radarowy \u201crenesans\u201d bibliotek i rozwi\u0105za\u0144 powi\u0105zanych z dwoma najwi\u0119kszymi graczami rynku - Androidem i IOSem. Radar po\u015bwi\u0119ca bowiem zaskakuj\u0105co du\u017co miejsca np. narz\u0119dziom do wygodniejszego utrzymania mobilkowych appek. Trafi\u0142y do niego uniwersalne <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104115\">TrustKit<\/a> (umo\u017cliwiaj\u0105cy zarz\u0105dzanie kluczami SSL), <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104089\">Flipper<\/a> (uniwersalny debugger, potrafi\u0105cy pracowa\u0107 z Androidem, iOSem, ale te\u017c np. React Native), czy te\u017c bardziej nakierowany na konkretn\u0105 platform\u0119 <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=1173\">LeakCanary<\/a> - narz\u0119dzie umo\u017cliwiaj\u0105ce wykrycie przyczyny wyciek\u00f3w pami\u0119ci w aplikacjach androidowych. Pod uwag\u0119 wzi\u0119ty zosta\u0142 te\u017c fakt, \u017ce w dzisiejszych czasach co\u015b, co kiedy\u015b by\u0142o ma\u0142\u0105 aplikacj\u0105 mog\u0142o przerodzi\u0107 si\u0119 w z\u0142o\u017cony projekt - swoje miejsce w bie\u017c\u0105cej edycji znalaz\u0142a technika modularyzacji dla androidowych aplikacji (on-demand modules), a tak\u017ce narz\u0119dzia do utrzymywaniu w ryzach plik\u00f3w XCode, kt\u00f3re nieraz potrafi\u0105 wymkn\u0105\u0107 si\u0119 spod kontroli programisty. Ca\u0142o\u015b\u0107 zamyka te\u017c oficjalne applowskie rozwi\u0105zanie hmmm\u2026 reaktywne - <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104031\">Combine<\/a>, b\u0119d\u0105ce Swiftowym API do zarz\u0105dzania strumieniami zdarze\u0144. <br \/><br \/>Ciekawe, czy taka nadreprezentacja rozwi\u0105za\u0144 do tworzenia aplikacji natywnych, to \u00a0jednorazowy wybryk czy odwr\u00f3cenie d\u0142ugoletniego trendu. B\u0119dziemy obserwowa\u0107 <\/p><h2 id=\"je%C5%BCeli-nie-wiesz-co-si%C4%99-dzieje-w-twoich-systemach\">Je\u017celi nie wiesz co si\u0119 dzieje w Twoich systemach...<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-14.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"281\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-14.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-14.png 900w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Maj\u0105c w swojej karierze troch\u0119 do czynienia z systemami Legacy, mam wra\u017cenie \u017ce to, co w najwi\u0119kszym stopniu odr\u00f3\u017cnia tworzone dzisiaj oprogramowania, to \u00a0(do\u015b\u0107 optymistycznie, wiem) lekcje, jakie odrobili\u015bmy w oparciu o b\u0142\u0119dy przesz\u0142o\u015bci. Dzisiaj dobrze zdajemy sobie spraw\u0119 z faktu, \u017ce napisanie systemu to jedno, ale tak naprawd\u0119 trudn\u0105 cz\u0119\u015bci\u0105 ca\u0142o\u015bci jest jego utrzymanie i p\u00f3\u017aniejsza ewolucja wraz ze zmieniaj\u0105cymi si\u0119 wymaganiami rynku. W systemach odziedziczonych po wcze\u015bniejszych pokoleniach niejednokrotnie bardzo trudno jest zmapowa\u0107 powi\u0105zania pomi\u0119dzy poszczeg\u00f3lnymi komponentami czy zale\u017cno\u015bci czasowe. Niejednokrotnie znalezienie g\u0142upich log\u00f3w nastr\u0119cza problem\u00f3w. Pewnie st\u0105d te\u017c tak du\u017cy nacisk po\u0142o\u017cony na tak zwane \u201cobservability\u201d - odzwierciedlone jest to r\u00f3wnie\u017c w Radarze, w kt\u00f3rym mo\u017cemy znale\u017a\u0107 kilka narz\u0119dzi tego typu.<\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/blog.vived.io\/content\/ima\nges\/2021\/06\/image-31.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1271\" height=\"300\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-31.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-31.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-31.png 1271w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>O ile po stronie serwerowej stosunkowo \u0142atwo agreguje si\u0119 zdarzenia do wsp\u00f3lnego systemu, o tyle w czasach, gdy coraz wi\u0119cej logiki znajduje si\u0119 po stronie klienta, krytycznym staje si\u0119 mo\u017cliwo\u015b\u0107 zebrania informacji o potencjalnych b\u0142\u0119dach, kt\u00f3rymi niejednokrotnie zalewane s\u0105 DevToolsy przegl\u0105darek. Nie mo\u017cemy \u0142udzi\u0107 si\u0119, \u017ce u\u017cytkownik zg\u0142osi nam problem - zwykle po prostu ju\u017c do nas nie wr\u00f3ci, a w bardziej pesymistycznym scenariuszu stanie si\u0119 naszym publicznym krytykiem. Sami przez lata szukali\u015bmy dobrego narz\u0119dzia do szybkiego wykrywania takich potencjalnych usterek, i z przyjemno\u015bci\u0105 mo\u017cemy stwierdzi\u0107, \u017ce wyb\u00f3r, kt\u00f3rego dokonali\u015bmy nie by\u0142 chyba najgorszy. <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=1232\">Sentry<\/a>, kt\u00f3ry zbiera dla nas b\u0142\u0119dy u\u017cytkownik\u00f3w Vived, jest r\u00f3wnie\u017c polecany przez edytor\u00f3w nowego Radaru.<\/p><p>Co ciekawy, Sentry jest jednym z klient\u00f3w drugiego z rozwi\u0105za\u0144 pomagaj\u0105cych nam odnale\u017a\u0107 si\u0119 w nawale danych. Nie sztuka bowiem zebra\u0107 mnogo\u015b\u0107 log\u00f3w i zdarze\u0144 z systemu - trzeba umie\u0107 si\u0119 w nich odnale\u017a\u0107. W takim wypadku przydatnym mo\u017ce okaza\u0107 si\u0119 <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104051\">ReDash<\/a>. Pozwala on przegl\u0105da\u0107 eventy z naszego systemu w adhocowy spos\u00f3b, przy pomocy SQLa. Po latach pracy z wszelkiej ma\u015bci wariacjami w\u0142asno\u015bciowych, jsonowych API do wszelkiej ma\u015bci system\u00f3w, zobaczenie starego dobrego SQLa jest dosy\u0107 od\u015bwie\u017caj\u0105ce.<\/p><p>Z systemami do observability wi\u0105\u017ce si\u0119 te\u017c smutny fakt - przy odpowiednio z\u0142o\u017conym systemie zawsze pojawi si\u0119 co\u015b wymagaj\u0105cego naszej uwagi. St\u0105d te\u017c, je\u017celi chcemy zadba\u0107 o zdrowie psychiczne nasze i naszych zespo\u0142\u00f3w, niezb\u0119dny jest system pozwalaj\u0105cy na zarz\u0105dzanie zdarzeniami w spos\u00f3b kontrolowany i uporz\u0105dkowany. Takie narz\u0119dzie te\u017c znajdziemy w Radarze - b\u0119dzie nim <a href=\"https:\/\/www.thoughtworks.com\/radar\/platforms?blipid=202104104\">Opstrace<\/a>. Jest to rozwi\u0105zanie typu Low-Code (w dodatku OpenSource), pozwalaj\u0105ce nam pospina\u0107 r\u00f3\u017cnego rodzaju us\u0142ugi w jeden, \u0142atwo zarz\u0105dzalny interfejs, dzi\u0119ki kt\u00f3remu mo\u017cemy szybko zareagowa\u0107 w wypadku jakiegokolwiek problemu. Pozwala on na zarz\u0105dzanie alarmami, heltcheckami i og\u00f3lnie pe\u0142nym \u201cdevopsowym\u201d procesem. Wygl\u0105da bardzo interesuj\u0105co i takim te\u017c zosta\u0142 uznany przez in\u017cynier\u00f3w z Thoughtworks.<\/p><p>Ko\u0144cz\u0105c t\u0105 sekcje, nale\u017cy pami\u0119ta\u0107, \u017ce nie wszystko nale\u017cy \u201cobserwowa\u0107\u201d. W czasach coraz wi\u0119kszego nacisku na prywatno\u015b\u0107 ze strony u\u017cytkownik\u00f3w niezb\u0119dne jest, aby pami\u0119ta\u0107 o tym aspekcie projektuj\u0105c nasze systemy \u201cobserwowalno\u015bciowe\u201d. ThoughtWorks podkre\u015bla w nowej edycji, \u017ce szczeg\u00f3lnie istotne jest to zw\u0142aszcza w przypadku serwis\u00f3w dzia\u0142aj\u0105cych bezpo\u015brednio z klientem - czy to mowa o przywo\u0142anym ju\u017c Sentrym, czy te\u017c np. Web Analyticsach pokroju rozwi\u0105zania google\u2019owskiego. Ja od siebie doda\u0142bym tylko, \u017ce nawet zachowuj\u0105c pe\u0142ni\u0119 anonimowo\u015bci nie trudno o kontrowersj\u0119 - ostatnie rozwi\u0105zania pokroju FLOC od Google pokazuj\u0105, \u017ce je\u017celi chodzi o prywatno\u015b\u0107 u\u017cytkownik\u00f3w, przed nami jeszcze d\u0142uga droga. <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104086\">Ethical Explorer<\/a>, r\u00f3wnie\u017c pojawiaj\u0105ce si\u0119 w obecnym Radarze rozwini\u0119cie przywo\u0142ywanego ju\u017c EthicalOS, wydaje si\u0119 by\u0107 warto\u015bciowym przewodnikiem po tym do\u015b\u0107 grz\u0105skim gruncie, nie raz wymagaj\u0105cym od nas eksperyment\u00f3w my\u015blowych z etyki.<\/p><h2 id=\"przeczytaj-t%C4%85-sekcje-je%C5%9Bli-musisz-si%C4%99-zmodernizowa%C4%87-szybko-i-skutecznie\">Przeczytaj t\u0105 sekcje je\u015bli musisz si\u0119 zmodernizowa\u0107... szybko i skutecznie<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-13.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"280\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-13.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-13.png 900w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Jako \u017ce przywo\u0142a\u0142em ju\u017c Legacy, jak pewnie domy\u015blacie si\u0119, temat modernizacji system\u00f3w jest mi dosy\u0107 bliski. Dlatego te\u017c nie mog\u0119 sobie odm\u00f3wi\u0107 w naszym ma\u0142ym podsumowaniu przypatrzeniu si\u0119 r\u00f3wnie\u017c temu, co Radar ma do powiedzenia w tym kontek\u015bcie.<\/p><p>I moje serduszko cieplej zabi\u0142o, gdy tylko zobaczy\u0142em, \u017ce przywo\u0142ana zosta\u0142a technika modernizacji oparta na hipotezach. Jest to moja ulubiona, kt\u00f3rej sam po\u015bwi\u0119ci\u0142em sporo miejsca w napisanym przeze mnie niedawno <a href=\"https:\/\/virtuslab.com\/digital-transformation-free-ebook\/\">ebooku<\/a>. Ot\u00f3\u017c faktem jest, \u017ce tak naprawd\u0119 prac\u0119 ze starymi systemami naprawd\u0119 trudno jest dobrze zaplanowa\u0107. Kto mia\u0142 okazj\u0119 pobawi\u0107 si\u0119 w tego typu archeologie wie, \u017ce ca\u0142y czas rzucaj\u0105 nam k\u0142ody pod nogi, a rzeczy, kt\u00f3re pozornie wydawa\u0142y si\u0119 by\u0107 proste okazuj\u0105 si\u0119 kry\u0107 tajemnice, kt\u00f3rych rozwik\u0142anie nieraz wykracza poza ramy zwyk\u0142ego, dwutygodniowego sprintu. Dlatego te\u017c in\u017cynierowie od Technology Radaru zalecaj\u0105 iteracyjno\u015b\u0107, eksperymentowanie i niejako odkrywanie na nowo tego, jak system dzia\u0142a, kieruj\u0105c si\u0119 nie z g\u00f3ry zaplanowanym backlogiem, a na bie\u017c\u0105co potwierdzonymi lub obalanymi hipotezami. Taki prawdziwy \u201cagile\u201d u\u017cyty w do\u015b\u0107 nieortodoksyjny spos\u00f3b. Jest to w oparciu o moje do\u015bwiadczenie tak naprawd\u0119 jedyna skuteczna metoda i ciesz\u0119 si\u0119, \u017ce technika ta zosta\u0142a teraz ubrana w tak elegancki termin. Nazywanie rzeczy pomaga budowa\u0107 wsp\u00f3lny, zrozumia\u0142y dla wszystkich s\u0142ownik.<\/p><p>Mam te\u017c troch\u0119 ubaw z faktu, \u017ce <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104012\">Single Page Application<\/a> te\u017c ju\u017c podchodz\u0105 pod bycie \u201clegacy\u201d. Po pocz\u0105tkowym zach\u0142y\u015bni\u0119ciu si\u0119 nowymi mo\u017cliwo\u015bciami, relatywnie szybko odkryli\u015bmy jako bran\u017ca, \u017ce skomplikowany kod kliencki posiada jednak sporo wad i jest bardzo trudny w utrzymaniu. Je\u017celi nasza strona sta\u0142a si\u0119 nieutrzymywaln\u0105 kul\u0105 b\u0142ocka, ThoughtWorks sugeruje \u201czaduszanie\u201d - technik\u0119 znan\u0105 m.in. w\u0142a\u015bnie z zast\u0119powania przestarza\u0142ych ju\u017c system\u00f3w. Ostrzegaj\u0105 oni co prawda, \u017ce niekt\u00f3re z podej\u015b\u0107 mog\u0105 wi\u0105za\u0107 si\u0119 z zepsuciem wydajno\u015bci dla u\u017cytkownika ko\u0144cowego, ale niejednokrotnie jest to jedyne wyj\u015bcie z sytuacji, gdy nasz kod sta\u0142 si\u0119 na tyle nieutrzymywalny, \u017ce ka\u017cda zmiana staje si\u0119 katorg\u0105 - sam mia\u0142em okazj\u0119 pracowa\u0107 z (i pewnie te\u017c pisa\u0107\u2026) tego typu narz\u0119dziami tortur, gdzie ka\u017cda zmiana CSSa powodowa\u0142a palpitacje serca. Dobrze, \u017ce Frontend te\u017c uczy si\u0119 zalet modularyzacji.<\/p><h2 id=\"co-ciekawego-znajdzie-dla-siebie-frontendowiec\">Co ciekawego znajdzie dla siebie Frontendowiec? <\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-15.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1200\" height=\"374\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-15.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-15.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-15.png 1200w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Jest to ta cz\u0119\u015b\u0107 ekosystemu, kt\u00f3ra zwykle rozwija si\u0119 dosy\u0107 dynamicznie, co oczywi\u015bcie nie umyka tw\u00f3rcom Radaru. Sprawia to, \u017ce jak zwykle mamy ca\u0142kiem spor\u0105 nadreprezentacj\u0119 tematyczn\u0105.<\/p><p>Tak jak ju\u017c mieli\u015bmy okazj\u0119 wspomnie\u0107, przy tematach zwi\u0105zanych z modernizacj\u0105, wsp\u00f3\u0142czesne aplikacje klienckie posiadaj\u0105 mas\u0119 logiki, zbli\u017con\u0105 do system\u00f3w dzia\u0142aj\u0105cych \u201cpod mask\u0105\u201d. Dlatego te\u017c coraz wi\u0119cej energii po\u015bwi\u0119ca si\u0119 frontendowej architekturze. \u015amiem twierdzi\u0107, \u017ce w \u015bwiecie, w kt\u00f3rym ustabilizowa\u0142a si\u0119 nam wielka tr\u00f3jca framework\u00f3w (Angular, React, Vue), to w\u0142a\u015bnie do \u015bwiata Microfrontend\u00f3w przenios\u0142y si\u0119 najwi\u0119ksze bo\nje o rynkow\u0105 pozycj\u0119. Poza ju\u017c wspomnianym <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104012\">SPA Injection<\/a> (kt\u00f3re do tematu bardzo pasuje) Radar przynosi rozpychaj\u0105ce si\u0119 \u0142okciami Webpackowe rozwi\u0105zanie - <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104116\">Federacje Modu\u0142\u00f3w<\/a>, ale tak\u017ce nieco zbli\u017cone w koncepcji, a rozwijane jako standard przez Web Incubator Community Group mapy import\u00f3w, opieraj\u0105cej si\u0119 na \u201cklejeniu\u201d aplikacji z mniejszych kawa\u0142k\u00f3w za pomoc\u0105 standardowego systemu modu\u0142\u00f3w EcmaScript. <\/p>\n<figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-32.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1276\" height=\"305\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-32.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-32.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-32.png 1276w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Przyznam jednak, \u017ce o ile tamte dwa rozwi\u0105zania z pewno\u015bci\u0105 znajd\u0105 szersz\u0105 rzesz\u0119 fan\u00f3w, to mnie najbardziej uj\u0105\u0142 <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104066\">hotwire<\/a> - aronim HTML over the Wire. Podej\u015bcie to zosta\u0142o rozpropagowane przez Basecamp, znany ze swojej mi\u0142o\u015bci do statycznie renderowanych stron (czego\u015b innego spodziewa\u0107 si\u0119 zreszt\u0105 od tw\u00f3rc\u00f3w Ruby on Rails), przenosz\u0105ce je w \u015bwiat asynchronicznego do\u0142adowywania kontentu. Ot\u00f3\u017c sugeruj\u0105 oni, \u017ce systemy templatingu po stronie klienta, to kod w \u015blep\u0105 uliczk\u0119 i tak naprawd\u0119\u2026 najlepiej jest przesy\u0142a\u0107 do frontu HTMLa \u00a0wyrenderowanego po stronie serwera. Nie da si\u0119 ich argumentacji (kt\u00f3r\u0105 znale\u017a\u0107 mo\u017cecie <a href=\"https:\/\/hotwire.dev\/\">pod linkiem<\/a>) odm\u00f3wi\u0107 sporej ilo\u015bci sensu, a dodatkowo dostarczaj\u0105c do\u015b\u0107 bogaty zestaw narz\u0119dzi. Mo\u017ce kto\u015b z Was si\u0119 skusi?<\/p><p>TypeScript dzieli i rz\u0105dzi frontentdowym \u015bwiatem, dlatego te\u017c nikogo nie powinna dziwi\u0107 jego mo\u017ce nie najwi\u0119ksza, ale z pewno\u015bci\u0105 interesuj\u0105ca reprezentacja w bie\u017c\u0105cym Radarze. W \u015bwiecie, gdzie Deno (alternatywa do NodeJS traktuj\u0105ca TypeScripta jako obywatela pierwszej kategorii) pr\u00f3buje przebi\u0107 si\u0119 do \u015bwiadomo\u015bci programist\u00f3w, a i sam kr\u00f3l Node coraz przychylniejszym okiem spogl\u0105da na dziecko Microsoftu, technika polegaj\u0105ca na dzieleniu typ\u00f3w mi\u0119dzy Frontentedem i Backendem (dla Frontendu) wydaje si\u0119 by\u0107 do\u015b\u0107 oczywistym kierunkiem - aczkolwiek zawsze dobrze, jak o tego typu rzeczach si\u0119 wspomnia.<\/p><p>Nieco mniej oczywistym rozwi\u0105zaniem komunikacji Frontend\/Backend (zw\u0142aszcza w \u015bwiecie, gdy rozwi\u0105zanie serwerowe nie jest napisane w TypeScripcie). Jest to zestaw narz\u0119dzi (Encoder\u00f3w\/Decoder\u00f3w), kt\u00f3rych zadaniem jest sprawdza\u0107 poprawno\u015b\u0107 otrzymanych danych nie tylko na poziomie kompilacji, ale r\u00f3wnie\u017c w runtimie. Brak wsparcia TypeScripta dla dynamicznego typowania jest zrozumia\u0142\u0105 decyzj\u0105 projektow\u0105, bior\u0105c pod uwag\u0119 ch\u0119\u0107 zachowania kompatyblino\u015bci z JSem, ale dobrze mie\u0107 w arsenale narz\u0119dzia, kt\u00f3re zapewni\u0105 sp\u00f3jno\u015b\u0107 aplikacji r\u00f3wnie\u017c poza momentem kompilacji. \u00a0<\/p><p>Nie mog\u0142o w Radarze zabrakn\u0105\u0107 r\u00f3wnie\u017c podsumowania nowo\u015bci ze \u015bwiata frontendowych framework\u00f3w. Wyj\u0105tkowo nadreprezentowany jest tutaj React, kt\u00f3ry mo\u017ce pochwali\u0107 si\u0119 naprawd\u0119 spor\u0105 ilo\u015bci\u0105 rozbudowuj\u0105cych go narz\u0119dzi. Z rzeczy, kt\u00f3re mnie najbardziej zaskoczy\u0142y wymienie z pewno\u015bci\u0105 jotai i zustand - dwa r\u00f3\u017cne projekty maj\u0105ce na celu okie\u0142znanie zarz\u0105dzania stanem w Reactcie, podchodz\u0105ce do tematu z nieco odmiennej perspektywy. To, co jest do\u015b\u0107 unikalne, to to, \u017ce mimo \u017ce stanowi\u0105 wobec siebie wzajemn\u0105 konkurencj\u0119, wspiera je ta sama grupa - Poimandres.<br \/><br \/>Narz\u0119dzia do zarz\u0105dzania stanem (to musi by\u0107 straszliwie z\u0142o\u017cony problem w Recie, skoro w ka\u017cdej edycji Radaru mamy wr\u0119cz zatrz\u0119sienie jego rozwi\u0105za\u0144) reprezentuje te\u017c <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202010091\">SWR<\/a> (stale-while-revalidate) - rozwi\u0105zanie opieraj\u0105ce si\u0119 w zupe\u0142no\u015bci na Reactowych Hookach, a kt\u00f3rego celem jest bycie cache nad requestami HTTP - automatycznego ograniczenia ilo\u015bci zapyta\u0144 do serwera, co prowadzi do \u0142adniejszego i czytelniejszego kodu, bez if\u00f3w sprawdzaj\u0105cych, czy nie posiadamy ju\u017c danego zestawu informacji. Ograniczy\u0107 ono te\u017c mo\u017ce ilo\u015b\u0107 \u201crepaint\u00f3w\u201d aplikacji, czyli niepotrzebnego m\u0119czenia przegl\u0105darki ponownym rysowaniem komponent\u00f3w ze wzgl\u0119du na nadmiar zmiany w strukturze danych - w wykryciu takowych za\u015b pom\u00f3c mo\u017ce nam did-you-render - ma\u0142e narz\u0119dzie informuj\u0105ce nas w wypadku wykrycia tego typu nie optymalno\u015bci. Na hookach tak\u017ce <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104050\">React Hook Form<\/a> - rozwi\u0105zanie staj\u0105ce si\u0119 powoli standardem w \u015bwiecie zarz\u0105dzanie formularzami w Reactcie.<\/p><p>Nie mo\u017cna te\u017c nie wspomnie\u0107 o <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=201904030\">Next.js<\/a> - \u201cbrakuj\u0105cym\u201d frameworku dla Reacta. Next.js prezentuje \u201copinionated\u201d zestaw bibliotek i praktyk, pozwalaj\u0105cych na szybkie zasetupowanie, a p\u00f3\u017aniej r\u00f3wnie\u017c te\u017c pisanie aplikacji reactowej. Wprawdzie to \u015brodowisko zawsze ceni\u0142o sobie t\u0119 swobod\u0119 w\u0142asnor\u0119cznego dobierania odpowiednich \u201cbaterii\u201d, ale cho\u0107by ostatnie dofinansowania do Next.js udowadniaj\u0105, jaki potencja\u0142 maj\u0105 narz\u0119dzia jego pokroju.<\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-33.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1338\" height=\"320\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-33.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-33.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-33.png 1338w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Angular jest w nowym Radarze reprezentowany znacznie w\u0119ziej - mamy bowiem do czynienia tylko z pojedyncz\u0105 bibliotek\u0105 - \u00a0<a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104118\">Angular Testing Library<\/a>. Ta kopia React Testing Library zyskuje na popularno\u015bci, w czym z pewno\u015bci\u0105 nie przeszkadzaj\u0105 ostatnie zapowiedzi zabicia projektu Protractor, stanowi\u0105cego przez lata standard tego, jak testuje si\u0119 angularowe aplikacje. <\/p><p>Ca\u0142ego frontentdowego obrazku niech dope\u0142ni fakt, \u017ce coraz wi\u0119cej miejsca po\u015bwi\u0119cone jest WebAssembly. Mamy bowiem w nowym Technology Radarze <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202010022\">Blazora<\/a> od Microsoftu oraz s\u0142u\u017c\u0105ce do jego tesowania <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104029\">bUnit<\/a>. Niby nie tak wiele, ale w dalszym ci\u0105gu nale\u017cy pami\u0119ta\u0107, \u017ce angularowi po\u015bwi\u0119cono o po\u0142ow\u0119 mniej miejsca.<\/p><h2 id=\"nowe-rzeczy-w-temacie-konteneryzacji\">Nowe rzeczy w temacie konteneryzacji<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-17.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1200\" height=\"586\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-17.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-17.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-17.png 1200w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Szeroko poj\u0119ta konteneryzacja jest tematem, kt\u00f3ry zwykle do\u015b\u0107 licznie reprezentowany jest w ramach Technology Radaru. Tym razem zaskakuj\u0105co nie mamy nawa\u0142u r\u00f3\u017cnego rodzaju kubernetesowych tooli, ale te\u017c znajdziemy sporo interesuj\u0105cych projekt\u00f3w.<\/p><p>Od lat mo\u017cna zauwa\u017cy\u0107 proces coraz wi\u0119kszego odchudzania obraz\u00f3w dockerowych. Pocz\u0105tkowo do obraz\u00f3w wrzucane tam by\u0142y najnormalniejsze, pe\u0142ne dystrybucje Linuxa, nast\u0119pnym krokiem by\u0142o stopniowe ich odchudzanie, wyrzucanie mo\u017cliwo\u015bci logowania si\u0119 do obrazu itd. Czasem motywacj\u0105 by\u0142 rozmiar, a czasem ograniczenie potencjalnych wektor\u00f3w ataku. Je\u017celi motywuje nas to ostatnie, to kolejnym krokiem s\u0105 tak zwane <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=1330\">\u2018\"Distroless\" Docker Images\u2019<\/a>. S\u0105 to doci\u0119te do minimum wersje Linuxa rozpropagowane przez Google\u2019a, posiadaj\u0105ce wy\u0142\u0105cznie aplikacje i sam trzon systemu operacyjnego. Nie znajdziemy w nich pow\u0142oki czy mened\u017cer\u00f3w pakiet\u00f3w. Pewnie do debuggingu lokalnego nie chcia\u0142bym musie\u0107 tego u\u017cywa\u0107, ale jako artefakt do Kubernetesa, brzmi\u0105 ju\u017c one ca\u0142kiem interesuj\u0105co.<\/p>\n<figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-34.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1339\" height=\"320\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-34.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-34.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-34.png 1339w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Je\u017celi ju\u017c jeste\u015bmy w temacie bezpiecze\u0144stwa - mo\u017ce szukacie lepszej pod tym wzgl\u0119dem alternatywy do Dockera? Je\u015bli tak, mo\u017ce zainteresujecie si\u0119 <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104064\">podmanem<\/a>. Jest to w pe\u0142ni zgodny z API Dockera (do poziomu, gdzie jego tw\u00f3rcy zalecaj\u0105 dla wygody zaliasowanie go w shellu komend\u0105 docker) tool, umo\u017cliwiaj\u0105cy uruchamianie obraz\u00f3w z kontekstem u\u017cytkownika nie b\u0119d\u0105cego rootem. Jak \u0142atwo si\u0119 domy\u015bli\u0107, jest to dobra dodatkowa ochrona. Do tego ma bardzo \u201ccute\u201d ikonk\u0119. Czego chcie\u0107 wi\u0119cej \u00a0od toola devopsowego? <strong>#FokiPonadWielorybami<\/strong>  <\/p><p>Je\u017celi za\u015b u\u017cywamy ju\u017c Kuberenetesa i chcemy w ramach tej platformy uruchamia\u0107 wszystkie niezb\u0119dne fragmenty naszej infrastruktury, najlepsz\u0105 metod\u0105 mo\u017ce by\u0107 u\u017cycie tak zwanych \u201coperator\u00f3w\u201d. Ten parasolkowy standard umo\u017cliwia uruchamianie w ramach klastra popularnych aplikacji. Niech przyk\u0142adem b\u0119dzie tutaj Jenkins Operator, u\u017cywany u nas w firmie. A je\u017celi spodoba Wam si\u0119 takie podej\u015bcie, to ostatnim narz\u0119dzie kt\u00f3re mo\u017cecie znale\u017a\u0107 w Radarze jest <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104019\">Longhorn<\/a> - kubernetesowy odpowiednik S3. Persystencja w ramach K8s nigdy nie by\u0142a prosta, Longhorn za\u015b chyba rozwi\u0105za\u0142 ten problem ca\u0142kiem nie\u017ale. Wydaje si\u0119, \u017ce mo\u017ce by\u0107 interesuj\u0105c\u0105 alternatyw\u0105, je\u015bli nie chcemy rozwi\u0105za\u0144 \u201cmanaged\u201d lub naszym celem jest zamkni\u0119cie wszystkiego w ramach w\u0142asnej podsieci.<\/p><h2 id=\"thoughtworks-pami%C4%99ta-o-designerach\">ThoughtWorks pami\u0119ta o designerach<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d095a720cc.png\" class=\"kg-image\" alt loading=\"lazy\"><\/figure><p>Oni te\u017c znajd\u0105 dla siebie co\u015b w nowym Radarze.<\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-35.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1337\" height=\"317\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-35.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-35.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-35.png 1337w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>To, \u017ce Design Systemy (zestawy gotowych do u\u017cycia komponent\u00f3w, kt\u00f3re programi\u015bci mog\u0105 \u0142atwo zainkorporowa\u0107 w swoich projektach) s\u0105 przydatne, jest ju\u017c niejako truizmem. S\u0105 one, co prawda spor\u0105 inwestycj\u0105, ale z gatunku takich wp\u0142ywaj\u0105cych na d\u0142ugoterminow\u0105 produktywno\u015b\u0107 zespo\u0142\u00f3w programistycznych - a wi\u0119c z takich, co do\u015b\u0107 szybko si\u0119 sp\u0142acaj\u0105. Co jednak przyku\u0142o moj\u0105 uwag\u0119 w nowym Radarze, to fakt pojawienia si\u0119 <a href=\"https:\/\/www.thoughtworks.com\/radar\/platforms?blipid=202104028\">Bit.dev<\/a> - platformy low-code, pozwalaj\u0105cej na po\u0142\u0105czenie UIowych klock\u00f3w z r\u00f3\u017cnego rodzaju dostarczycielami danych, w efekcie pozwalaj\u0105c na \u0142atwe spinanie do kupy rzeczonych komponent\u00f3w w funkcjonalne aplikacje. Co wyr\u00f3\u017cnia <a href=\"https:\/\/www.thoughtworks.com\/radar\/platforms?blipid=202104028\">Bit.dev<\/a> z nawa\u0142u innych platform to fakt, \u017ce pozwala na dzia\u0142anie zar\u00f3wno w ramach hostowanej przez nich platformy, jak i mo\u017ce by\u0107 zainstalowana po prostu jako zewn\u0119trzna zale\u017cno\u015b\u0107 - bardzo lubi\u0119 narz\u0119dzia daj\u0105ce tego typu elastyczno\u015b\u0107.<\/p><p>Jak ju\u017c jeste\u015bmy w temacie low-code, to ciekawym rozwi\u0105zaniem jest <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104017\">imgcook<\/a>. Ta chi\u0144ska biblioteka maj\u0105ca swoje korzenie w Alibabie pozwala na automatyczne wygenerowanie strony z plik\u00f3w Sketch \/ Photoshop, u\u017cywaj\u0105c do tego Deep Learningu. O ile efekty nie s\u0105 jeszcze idealne i wymagaj\u0105 od projektant\u00f3w nieco porzucenia kreatywnej wolno\u015bci (aczkolwiek w stopniu pono\u0107 akceptowalnym dla wi\u0119kszo\u015bci), to ca\u0142o\u015b\u0107 zdaje si\u0119 dzia\u0142a\u0107 . A przynajmniej \u015bwiadczy o tym fakt, \u017ce Alibaba Group sporo swoich prostych, eventowych stronek w\u0142a\u015bnie tak wypu\u015bci\u0142o na produkcj\u0119. W ciekawych czasach \u017cyjemy, oj ciekawych.<\/p><h2 id=\"jak-powinni%C5%9Bmy-testowa%C4%87-oprogramowanie\">Jak powinni\u015bmy testowa\u0107 oprogramowanie?<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d095bc9af7.png\" class=\"kg-image\" alt loading=\"lazy\"><\/figure><p>Testowanie to zwykle ta cz\u0119\u015b\u0107, kt\u00f3ra bywa mocno \u201ctechnologio specyficzna\u201d, ale akurat obecna edycja Radaru daje nam kilka tooli relatywnie agnostycznych do naszego stacku.<\/p><p>Pami\u0119tam czasy, kiedy w zasadzie de facto standardem do testowania wydajno\u015bci aplikacji by\u0142 Gatling. Jego panowanie chyba powoli odchodzi w cie\u0144, bo coraz cz\u0119\u015bciej to w\u0142a\u015bnie <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202010078\">k6<\/a> jest przywo\u0142ywany jako nowy z\u0142oty standard dla tego typu rozwi\u0105za\u0144. Wynika to z faktu, \u017ce tw\u00f3rcy zauwa\u017cyli, jak kluczowym dla tego typu toola jest mnogo\u015bci integracji i \u0142atwo\u015b\u0107 po\u0142\u0105czenia go z us\u0142ugami zewn\u0119trznymi. \u017byjemy w czasach, gdy rozwi\u0105zania technologiczne si\u0119 ze sob\u0105 mocno przeplataj\u0105, dlatego te\u017c nie dziwi fakt \u017ce dla wielu programist\u00f3w jest to kluczowa funkcjonalno\u015b\u0107.<\/p><p>Testowanie UI to nieko\u0144cz\u0105ca si\u0119 historia. W\u0142a\u015bciwie przez ca\u0142\u0105 moj\u0105 dotychczasow\u0105 karier\u0119 mam okazj\u0119 obserwowa\u0107 powoli zmieniaj\u0105ce si\u0119 technologie, obiecuj\u0105ce kolejne usprawnienia tego do\u015b\u0107 niestabilnego (zar\u00f3wno poprzez potrzeb\u0119 uruchomienia zewn\u0119trznej aplikacji, jak i fakt, \u017ce po prostu nie \u0142atwo jest napisa\u0107 utrzymywalne testy dla UI). Kolejnym wa\u017cnym graczem w tej przestrzeni wydaje si\u0119 by\u0107 <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202010056\">Playwright<\/a> - narz\u0119dzie stworzone przez tw\u00f3rc\u00f3w Puppetera, kt\u00f3rzy nauczeni tym co dzia\u0142a\u0142o si\u0119, a co nie dzia\u0142a\u0142o w ich poprzednim narz\u0119dziu, postanowili stworzy\u0107 kolejne. W poprzedniej edycji Radaru, Playwright znajdowa\u0142 si\u0119 w sekcji Asses, teraz przeszed\u0142 to Trial - wida\u0107, \u017ce zdobywa coraz wi\u0119ksze zaufanie ThoughtWorksowych Developer\u00f3w.<\/p><p>A wiecie, co jeszcze ci\u0119\u017cko si\u0119 testuje? Infrastruktur\u0119. Dlatego te\u017c dobrze wiedzie\u0107, \u017ce powstaj\u0105 narz\u0119dzia pozwalaj\u0105ce nam nabra\u0107 pewno\u015bci r\u00f3wnie\u017c do tego fragmentu procesu developerskiego. <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=201904011\">Terratest<\/a>, przeznaczony do popularnego Terraforma, przeszed\u0142 bardzo podobn\u0105 drog\u0119 jak Playwright -&gt; w poprzedniej edycji by\u0142 w Asses, teraz trafi\u0142 do sekcji Trial. Zobaczymy, jak jego losy b\u0119d\u0105 si\u0119 rysowa\u0142y w kolejnych miesi\u0105cach.<\/p><h2 id=\"simplicity-matters\">Simplicity Matters<\/h2><p>Dla tych kt\u00f3rzy o tym zapominaj\u0105, Radar ma dwie przypominajki.<\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d095c9736d.png\" class=\"kg-image\" alt loading=\"lazy\"><\/figure><p>Po pierwsze, przypomina \u017ce jednak skomplikowane Design Doci s\u0105 ju\u017c pozosta\u0142o\u015bci\u0105 epoki, kt\u00f3ra min\u0119\u0142a. Komunikacja pisemna, zw\u0142aszcza w czasach kiedy ci\u0105gle jeszcze praca zdalna jest mocno rozpowszechniona, jest niezb\u0119dna - nie bez kozery m\u00f3wi si\u0119, \u017ce umiej\u0119tno\u015b\u0107 szeroko poj\u0119tego \u201ctechnicznego pisania\u201d jest jedn\u0105 z nieodzownych cech dobrego in\u017cyniera Anno Domini 2021. Dobre edytor to za\u015b taki, kt\u00f3ry czas z ty\u0142u g\u0142owy odbiorc\u0119 komunikatu. Design Doci ze starych epok by\u0142y \u015bwietne jako baza wiedzy (ale naprawd\u0119, zdarza\u0142o\n si\u0119 \u017ce uratowa\u0142y mi sk\u00f3r\u0119 przy pr\u00f3bie zrozumienia starych system\u00f3w), ale je\u015bli naszym celem jest otrzymanie feedbacku od zespo\u0142u z kt\u00f3rym musimy wsp\u00f3\u0142pracowa\u0107, to prawdopodobnie powinni\u015bmy si\u0119 skupi\u0107 na jak najkr\u00f3tszej formie, maj\u0105cej na uwadz\u0119 zar\u00f3wno \u201cattention span\u201d, jak i po prostu nawa\u0142 obowi\u0105zk\u00f3w z drugiej strony. Dlatego te\u017c Radar zach\u0119ca do jak najbardziej <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104044\">zwi\u0119z\u0142ej formy tak zwanych Request-for-comments<\/a>, kt\u00f3re lepiej znane s\u0105 pod postaci\u0105 skr\u00f3tu RFC.<\/p><p>Podobnie prezentuje si\u0119 sytuacja w kontek\u015bcie Machine Learningu. Nietrudno jest bowiem zabra\u0107 si\u0119 za szerokie zbieranie danych, pr\u00f3b\u0119 stworzenia datasetu w celu u\u017cycia kt\u00f3rej\u015b z nowoczesnych technik. Jednak kluczowe jest wzi\u0119cie tutaj pod uwag\u0119, na ile pozwoli nam to uzyska\u0107 efekt ko\u0144cowy o tyle lepszy, \u017ce rekompensuj\u0105cy odpalenie olbrzymiej, cz\u0119sto bardzo drogiej machiny. Nowa edycja Radaru radzi pr\u00f3bowa\u0107 <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104070\">podej\u015b\u0107 do tematu prostymi metodami<\/a>, typu bazowe modele naklepane w Pythonie, a dopiero gdy to nie zadzia\u0142a pr\u00f3bowanie z bardziej skomplikowanymi metodami i algorytmami state-of-the-art.<\/p><h2 id=\"od-remote-nie-uciekniemy-trzeba-go-wykorzysta%C4%87\">Od Remote nie uciekniemy, trzeba go wykorzysta\u0107<\/h2><p>Bior\u0105c pod uwag\u0119, jak przez wszystkie przypadki odmieniana by\u0142a praca zdalna w ostatnim p\u00f3\u0142roczu, przebitki tej dyskusji mo\u017cemy te\u017c znale\u017a\u0107 w publikacji ThoughtWorks.<\/p><p>Okazuje si\u0119, \u017ce praca zdalna ma pewne oryginalne zalety. Ot\u00f3\u017c w momencie, gdy jeste\u015bmy w biurze, wsp\u00f3lna praca nad jednym problemem jest ograniczona przez\u2026 fizyczn\u0105 przestrze\u0144. Monitory s\u0105 ma\u0142e, salki czasem ci\u0119\u017cko zarezerwowa\u0107 (za tym aspektem biura na pewno nikt nie t\u0119skni). Na wideokonferencji za\u015b mo\u017cna udost\u0119pni\u0107 ekran dladowolnie du\u017cej ilo\u015bci koleg\u00f3w z pracy. Dlatego te\u017c jedn\u0105 z technik, kt\u00f3r\u0105 wed\u0142ug tw\u00f3rc\u00f3w Radaru warto cho\u0107by mie\u0107 w arsenale, jest <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104052\">Remote Mob Programming<\/a>. Jest to rozwini\u0119cie Mob Programmingu, gdzie t\u0142um ludzi pracuje nad jednym kodem, regularnie zmieniaj\u0105c osob\u0119 maj\u0105c\u0105 dost\u0119p do klawiatury. Okazuje si\u0119, \u017ce nasze narz\u0119dzia s\u0105 ju\u017c na tyle dojrza\u0142e, \u017ce jest to w sytuacji pracy zdalnej po prostu wygodniejsze i \u0142atwiejsze do przeprowadzenia. To co, kto\u015b z Was kiedykolwiek mob programowa\u0142 lub zamierza to robi\u0107?<\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d095d40e46.png\" class=\"kg-image\" alt loading=\"lazy\"><\/figure><p>Apropo wspomnianych coraz lepszych narz\u0119dzi - w nowym Radarze pojawia si\u0119 Tuple. W czasie pandemii in\u017cynierowie z Thoughtworks przetestowali wiele r\u00f3\u017cnych aplikacji i w\u0142a\u015bnie Tuple wed\u0142ug nich najlepiej sprawdza si\u0119 w sytuacji wsp\u00f3lnej pracy zdalnej nad jednym kodem. Jako jedn\u0105 ze szczeg\u00f3lnych zalet tego rozwi\u0105zania wskazuj\u0105 oni unikaln\u0105 mo\u017cliwo\u015b\u0107 sterowania jednym kursorem przez dwie osoby.<\/p><h2 id=\"kilka-interesuj%C4%85cych-technik-jak-dba%C4%87-o-nasze-zespo%C5%82y\">Kilka interesuj\u0105cych technik, jak dba\u0107 o nasze zespo\u0142y<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-18.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"280\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-18.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-18.png 900w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Bardzo ciekawym aspektem, ju\u017c w zasadzie kilku poprzednich Radar\u00f3w, jest du\u017cy nacisk jaki ludzie z ThoughtWorks k\u0142ad\u0105 na produktowe podej\u015bcie do rozwoju ka\u017cdego oprogramowania, tak\u017ce wewn\u0119trznego - zar\u00f3wno przeznaczonego do biznesu, jak i b\u0119d\u0105cego \u201cinfr\u0105\u201d dla pozosta\u0142ych zespo\u0142\u00f3w. W aktualnym Radarze przeciwstawiaj\u0105 oni bardzo mocno to podej\u015bcie, w kt\u00f3rym wszyscy ludzie s\u0105 bardzo mocno zaanga\u017cowani w rozw\u00f3j us\u0142ugi daj\u0105cej konkretn\u0105 warto\u015b\u0107 dla klienta, typowym <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104110\">\u201csilosowym\u201d organizacjom<\/a> i zespo\u0142om, okre\u015blanym tutaj jako layered platform teams. Sugeruj\u0105 oni, \u017ce bardzo \u0142atwo ukry\u0107 klasyczne klastrowanie, nazywaj\u0105c poszczeg\u00f3lne zespo\u0142y np. <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104043\">DBA\u00f3w \u201cplatformowymi\u201d<\/a> i udaj\u0105c, \u017ce jeste\u015bmy nowocze\u015bni i interoperacyjni. Zauwa\u017caj\u0105 za to, \u017ceby podzia\u0142u organizacji, zw\u0142aszcza zespo\u0142\u00f3w przynosz\u0105cych \u201cwarto\u015b\u0107\u201d, dokonywa\u0107 w spos\u00f3b szanuj\u0105cy \u201c\u0142adunek kognitywny\u201d ludzi w nich pracuj\u0105cych. Chodzi o to, \u017ceby zesp\u00f3\u0142 realnie m\u00f3g\u0142 skupi\u0107 si\u0119 nad jednym problemem, w miar\u0119 jednolitym stosie technologicznym - inaczej mo\u017cemy doprowadzi\u0107 do przem\u0119czenia ludzi i sprawienia, \u017ce b\u0119d\u0105 oni nieszcz\u0119\u015bliwi oraz ma\u0142o wydajni. <\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-42.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1339\" height=\"318\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-42.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-42.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-42.png 1339w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Ciekaw\u0105 rzecz\u0105 jest fakt, \u017ce do\u015b\u0107 krytycznie Thoughtworks wypowiada si\u0119 o oprogramowaniu <a href=\"https:\/\/www.thoughtworks.com\/radar\/platforms?blipid=202010066\">Backstage<\/a>. Jest to, zbieraj\u0105ca spore ilo\u015bci pozytywnego buzzu aplikacja do tworzenia tak zwanych wewn\u0119trznych \u201cdeveloper portali\u201d, b\u0119d\u0105cych w zasadzie kolejn\u0105 warstw\u0105 abstrakcji np. nad dostawcami chmurowymi. In\u017cynierowie tworz\u0105cy Radar ze swojego do\u015bwiadczenia twierdz\u0105, \u017ce wymuszaj\u0105 one cz\u0119sto bardzo ograniczaj\u0105c\u0105 standaryzacje. Z podobnych powod\u00f3w maj\u0105 oni te\u017c do\u015b\u0107 jasn\u0105 opini\u0119, co do <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=793\">SAFE<\/a> (Skalowalnego Agile). Jest ona zgodna ze starym powiedzeniem: \u201cG\u0142\u00f3wna zasada skalowania: Nie\u201d. U\u017cywanie ustandaryzowanych framework\u00f3w z konkretnymi frameworkami mo\u017ce by\u0107 jakim\u015b startem, ale kurczowe trzymanie si\u0119 generycznych powoduje, \u017ce cz\u0119sto trzeba nagina\u0107 styl pracy pasuj\u0105cy do problemu w celu dopasowania si\u0119 do frameworka, co jest zar\u00f3wno frustruj\u0105ce jak i ma\u0142o efektywne.<\/p><h2 id=\"wszystkie-rzeczy-kt%C3%B3re-dziej%C4%85-si%C4%99-continuous\">Wszystkie rzeczy kt\u00f3re dziej\u0105 si\u0119 \"Continuous\"<\/h2><figure class=\"kg-card kg-image-card kg-card-hascaption\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-24.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1024\" height=\"342\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/4_image-24.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-24.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-24.png 1024w\" sizes=\"(min-width: 720px) 720px\"><figcaption>Ukradzione z https:\/\/www.spritecloud.com\/test-automation-with-ci-cd-pipeline\/, ale nie mog\u0142em si\u0119 powstrzyma\u0107 <\/figcaption><\/figure><p>W tej edycji, wszystko kr\u0119ci si\u0119 w zasadzie w oko\u0142o Gita.<\/p>\n<figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-37.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1337\" height=\"318\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-37.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-37.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-37.png 1337w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Dla wszystkich, kt\u00f3rzy \u015bledz\u0105 rynek system\u00f3w CI\/CD, nie jest tajemnic\u0105 \u017ce Thoughtworks posiadaj\u0105 w\u0142asne rozwi\u0105zanie tego typu. GoCD, swego czasu jedne z najciekawszych dost\u0119pnych na rynku. Z tej perspektywy interesuj\u0105cym jest fakt, \u017ce w nowej edycji Radaru sugeruj\u0105 oni spr\u00f3bowanie chyba najl\u017cejszego ze wszystkich dost\u0119pnych rozwi\u0105za\u0144 do Continuous Delivery - <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104005\">GitHub Actions<\/a>. Chwal\u0105 oni wygod\u0119, prostot\u0119 i (jak\u017ce by inaczej) integracj\u0119 z repozytorium kodu. U\u017cywanie GitHub Actions broni nas te\u017c przed jednym z antypattern\u00f3w jakie odnale\u017a\u0107 mo\u017cemy w nowym Radarze - utrzymanie kodu \u017ar\u00f3d\u0142owego aplikacji i kodu \u017ar\u00f3d\u0142owego pipeline przez dwa niezale\u017cne zespo\u0142y. Radar bardzo jasno wypowiada si\u0119, \u017ce jest to bardzo, bardzo z\u0142a praktyka.<\/p><p>A skoro o antypatternach, to og\u00f3lnie du\u017co wi\u0119cej znale\u017a\u0107 mo\u017cemy wskaz\u00f3wek czego nie robi\u0107 ni\u017c co robi\u0107. Przyk\u0142adowo, raczej odradzane s\u0105 tak zwane <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104006\">GitOpsy<\/a>. Jest to opisywane jako rozwini\u0119cie Infrastructure as a Code polegaj\u0105ce na automatycznym \u015bci\u0105ganiu z repozytorium bie\u017c\u0105cego stanu infrastruktury, kt\u00f3ry to specjalny pooler potem implementuje w ramach produkcyjnego \u015brodowiska. Wed\u0142ug ludzi z ThoughtWorks, ta dosy\u0107 sprytna idea ko\u0144czy si\u0119 szybko sytuacjami, \u017ce branche dla poszczeg\u00f3lnych \u015brodowisk rozje\u017cd\u017caj\u0105 si\u0119. Wynikowo wi\u0119cej z tego szkody ni\u017c po\u017cytku (zreszt\u0105, r\u00f3wnie\u017c w wypadku samych deployowanych artefakt\u00f3w te\u017c zwr\u00f3cono uwag\u0119 na ten problem, sugeruj\u0105c automatyczne mierzenie poziomu \u201crozjazdu\u201d \u015brodowisk) . Dodatkowo, pandemia pokaza\u0142a nam, \u017ce model Gitowych PullRequest\u00f3w przy wszystkich swoich zaletach, potrafi by\u0107 bardzo blokuj\u0105cy dla zespo\u0142\u00f3w. Dlatego te\u017c in\u017cynierowie tworz\u0105cy Radar sugeruj\u0105, aby w swoim arsenale posiada\u0107 tak\u017ce inne metody utrzymywania jako\u015bci (i znajomo\u015bci) kodu - inaczej tak naprawd\u0119 dostajemy d\u0142ugo\u017cyj\u0105ce bran\u017ce i ca\u0142a mityczna, ci\u0105g\u0142a integracja bierze w \u0142eb. <\/p><p>Schodz\u0105c troch\u0119 z tematu Gita, Technology Radar jest kolejnym miejscem do\u015b\u0107 jasno wypowiadaj\u0105cym si\u0119, \u017ce czego jak czego, ale <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104002\">AWSowego CodePipeline<\/a> lepiej kijem nie rusza\u0107. Jak wida\u0107 nie wszystko z\u0142oto, czego si\u0119 Amazon dotknie.<\/p><h2 id=\"co-s%C5%82ycha%C4%87-w-%C5%9Bwiecie-infrastructure-as-a-code\">Co s\u0142ycha\u0107 w \u015bwiecie Infrastructure-as-a-Code<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-22.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"286\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-22.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-22.png 900w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Pierwsza sugestia przypomina nieco rad\u0119, kt\u00f3r\u0105 znaj\u0105 domoro\u015bli eksperymentatorzy, pr\u00f3buj\u0105cy stworzy\u0107 w\u0142asn\u0105 bibliotek\u0119 do kryptografii - je\u015bli nie jeste\u015b specjalist\u0105, kt\u00f3ry buduje tego typu rozwi\u0105zanie dla spo\u0142eczno\u015bci (a nie na potrzeb\u0119 kilku zespo\u0142\u00f3w), zdaj si\u0119 na jedno z istniej\u0105cych rozwi\u0105za\u0144. Rynek Cloud Computingu jest za szybki, zbyt dynamiczny i w d\u0142u\u017cszej perspektywie albo rozwijanie w\u0142asnego rozwi\u0105zania b\u0119dzie za drogie i b\u0119dziesz musia\u0142 si\u0119 przenie\u015b\u0107 np. na Terraforma, albo zostaniesz z ty\u0142u za rozwi\u0105zaniami chmurowymi, kt\u00f3re (jak to ju\u017c w tym artykule wspomnieli\u015bmy) po prostu rozwijaj\u0105 si\u0119 zbyt dynamicznie. Ma\u0142o kt\u00f3ra firma ma na tyle unikalne potrzeby, \u017ceby nie bra\u0107 czego\u015b istniej\u0105cego \u201cz p\u00f3\u0142ki\u201d - mimo \u017ce wielu wydaje si\u0119, \u017ce tak w\u0142a\u015bnie jest u nich.<\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-38.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1340\" height=\"322\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-38.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-38.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-38.png 1340w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>A jakie rozwi\u0105zania Radar wskazuje jako interesuj\u0105ce? Je\u017celi nie przeszkadza Ci Vendor Lock-In (tutaj masz dobry artyku\u0142 dlaczego tak naprawd\u0119 nie powinien) i u\u017cywasz AWSa, ichniejszy <a href=\"https:\/\/www.thoughtworks.com\/radar\/platforms?blipid=201911007\">Cloud Development Kit<\/a> zdobywa corazwi\u0119ksz\u0105 popularno\u015b\u0107. Sam pami\u0119tam, jak rozwi\u0105zanie to wchodzi\u0142o na, ju\u017c wydaje si\u0119 do\u015b\u0107 nasycony, rynek i interesuj\u0105ce jest, jak w odr\u00f3\u017cnieniu od np. <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104002\">CodePipelines<\/a>, ono akurat zdoby\u0142o naprawd\u0119 szerok\u0105 aprobat\u0119 u\u017cytkownik\u00f3w. Je\u017celi za\u015b nie u\u017cywasz AWSa, mo\u017cesz spr\u00f3bowa\u0107 <a href=\"https:\/\/www.thoughtworks.com\/radar\/platforms?blipid=1283\">Pulumi<\/a>. Oba rozwi\u0105zania przyj\u0119\u0142y do\u015b\u0107 nietypow\u0105 par\u0119 lat temu filozofi\u0119 - stwierdzi\u0142y one, \u017ce tak naprawd\u0119 \u015bwiat infrastruktury sta\u0142 si\u0119 na tyle skomplikowany, \u017ce deklaratywne rozwi\u0105zania nie w ka\u017cdym przypadku s\u0105 najlepszym pomys\u0142em i do opisywania \u015brodowiska warto zaprz\u0119gn\u0105\u0107 j\u0119zyki Turing Complete - z ich wszystkimi p\u0119tlami, ifami i zmiennymi. Mam wra\u017cenie, \u017ce to akurat jest ci\u0105g\u0142y cykl (zalet\u0105 deklaratywne rozwi\u0105za\u0144 mia\u0142o by\u0107 w\u0142a\u015bnie zmniejszenie niepotrzebnej z\u0142o\u017cono\u015bci, kt\u00f3r\u0105 cechowa\u0142y oparte na bashu skrypty do deploymentu), ale jak widzimy historia lubi zatoczy\u0107 ko\u0142o. <\/p><p>Dla tych za\u015b, kt\u00f3rzy potrzebuj\u0105 maksymalnego platform-agnostycyzmu, mamy za\u015b <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202010032\">Open Appliaction Model (OAM)<\/a> - kolejne ju\u017c podej\u015bcie do tworzenia abstrakcji nad chmurami, tym razem oparte mocno oparte o Kubernetesa. Po\u017cyjemy, zobaczymy <\/p><h2 id=\"kto-powinien-rz%C4%85dzi%C4%87-chmur%C4%85-w-firmie\">Kto powinien rz\u0105dzi\u0107 chmur\u0105 w firmie?<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-21.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"281\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-21.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-21.png 900w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>W poprzedniej sekcji opisywali\u015bmy, \u017ce tworzenie w\u0142asnych narz\u0119dzi do zarz\u0105dzania chmurami to syzyfowa praca, gdy\u017c gonienie wszystkich zmian, kt\u00f3re wprowadzaj\u0105 dostawcy chmur po prostu jest ma\u0142o efektywne. Nieco podobny problem jest z wszystkimi narz\u0119dziami do symulacji ich zachowa\u0144 w \u015brodowisku lokalnym. Ka\u017cdy, kto ich u\u017cywa\u0142 wie, \u017ce zwykle dzia\u0142aj\u0105 \u201cprawie dobrze\u201d, a nawet je\u015bli nad\u0105\u017caj\u0105 za tym, co dzieje si\u0119 w chmurze, to wraz z ka\u017cd\u0105 now\u0105 wersj\u0105 niezb\u0119dne s\u0105 operacje po stronie u\u017cytkownika jak np. update jarzm testowych u\u017cywanych do symulowania zachowania chmury. <\/p><p>Skoro abstrakcje przeciekaj\u0105, Radar ma interesuj\u0105ce rozwi\u0105zanie - ola\u0107 abstrakcje, i bior\u0105c pod uwag\u0119 szybko\u015b\u0107 internetu i wzgl\u0119dn\u0105 tanio\u015b\u0107 zasob\u00f3w chmurowych w por\u00f3wnaniu do czasu in\u017cynier\u00f3w, tworzy\u0107 indywidualne <a href=\"https:\/\/www.thoughtworks.com\/radar\/techniques?blipid=202104009\">Cloud Sandboxy<\/a> na potrzeby ka\u017cdego z in\u017cynier\u00f3w. Przy okazji, taki Sandbox rzeczony in\u017cynier powinien m\u00f3c wyklika\u0107 sobie samemu - jedn\u0105 z odradzanych praktyk jest operowanie chmur\u0105 w oparciu o \u201ctickety\u201d do \u201cplatform teamu\u201d. Nie pozwala to w realnym \u015bwiecie oszacowa\u0107 koszt\u00f3w (to mo\u017cna lepiej ogarn\u0105\u0107 poprzez prawid\u0142owe tagowanie maszynek), a powoduje tylko frustracje i wieczne op\u00f3\u017anienia - og\u00f3lnie mam wra\u017cenie, \u017ce szybko\u015b\u0107 proces\u00f3w jest jedn\u0105 z my\u015bli prz\newodnich samego Radaru.<\/p><h2 id=\"co-radar-przynosi-dla-programist%C3%B3w-jvm\">Co Radar przynosi dla programist\u00f3w JVM?<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-16.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"284\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-16.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-16.png 900w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>No jak to co - Kotlin  Aczkolwiek nie w takich ilo\u015bciach, jak w ostatnich edycjach. <\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-39.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1338\" height=\"320\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-39.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-39.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-39.png 1338w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Poza Kotlin Multiplatform Mobile, o kt\u00f3rym ju\u017c wspomnieli\u015bmy w sekcji o aplikacjach mobilnych, w Radarze znalaz\u0142 si\u0119 <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104041\">Kotlin Flow<\/a> - abstrakcje nad bardzo popularnymi korutynami, kt\u00f3re niejedn\u0105 osob\u0119 przyci\u0105gn\u0119\u0142y do tego j\u0119zyka. Dobra passa Kotlina si\u0119 nie ko\u0144czy - Flow r\u00f3wnie\u017c bowiem uwa\u017cany jest za bardzo ciekawe podej\u015bcie do pisania asynchronicznego kodu. <\/p><p>Co mnie jednak cieszy nawet bardziej ni\u017c Kotlin (bo jak ju\u017c wspomnia\u0142em, Kotlina nigdy w Radarze nie brakuje), to fakt zauwa\u017cenia <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104122\">GraalVM<\/a>. Osoby, kt\u00f3re czytaj\u0105 nasze JVMowe przegl\u0105dy na pewno zauwa\u017cy\u0142y, \u017ce rozwi\u0105zanie to coraz bardziej przebija si\u0119 mo\u017ce nie do mainstreamu, ale na pewno znajduje sobie wczesnych adopter\u00f3w. Sam mocno kibicuje tej platformie (mia\u0142em j\u0105 okazj\u0119 z niez\u0142ym skutkiem u\u017cy\u0107 w jednym z projekt\u00f3w), dlatego te\u017c mi\u0142o widzie\u0107, \u017ce r\u00f3wnie\u017c in\u017cynierowie z ThoughtWorks zauwa\u017caj\u0105 jej potencja\u0142.<\/p><h2 id=\"czy-ty-te%C5%BC-lubisz-lintery\">Czy Ty te\u017c lubisz lintery?<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-23.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1200\" height=\"369\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-23.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/4_image-23.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-23.png 1200w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Lubi je bran\u017ca, lubi\u0119 te\u017c je i ja, dlatego uda\u0142o mi si\u0119 wy\u0142uska\u0107 dwa rozwi\u0105zania tego typu. Oba te\u017c zajmuj\u0105 si\u0119 \u201clintowaniem\u201d bardzo podobnego zakresu - specyfikacji naszego API i jego zgodno\u015bci ze standardem OpenAPI. <\/p><p>Rozwi\u0105zania r\u00f3\u017cni\u0105 si\u0119 troch\u0119 swoj\u0105 filozofi\u0105 - o ile <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104055\">Spectral<\/a> jest szalenie generyczny - o tyle wspomniane OpenAPI jest jego najcz\u0119stszym przypadkiem u\u017cycia. Jest to komercyjny projekt, kt\u00f3rego u\u017cy\u0107 mo\u017cna np. r\u00f3wnie\u017c do walidacji konfiguracji Kubernetesa, a samo narz\u0119dzie posiada edytor pozwalaj\u0105cy na granularne okre\u015blenie konkretnych zasad. W odr\u00f3\u017cnieniu od niego, <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104058\">Zally<\/a> jest znacznie bardziej \u201copinionated\u201d, opieraj\u0105c si\u0119 na standardach wobec API wypracowanych przez firm\u0119 Zalando. W zale\u017cno\u015bci od Waszych potrzeb, mo\u017cecie u\u017cy\u0107 jednego z dw\u00f3ch rozwi\u0105za\u0144 - dla ka\u017cdego co\u015b mi\u0142ego.<\/p><h2 id=\"dla-tworz%C4%85cych-api-w-pythonie\">Dla tworz\u0105cych API w Pythonie<\/h2><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-25.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"900\" height=\"439\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/4_image-25.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-25.png 900w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>R\u00f3wnie\u017c dla Was znajd\u0105 si\u0119 dwa ciekawe narz\u0119dzia. <\/p><figure class=\"kg-card kg-image-card\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-41.png\" class=\"kg-image\" alt loading=\"lazy\" width=\"1338\" height=\"317\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_image-41.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/2_image-41.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/image-41.png 1338w\" sizes=\"(min-width: 720px) 720px\"><\/figure><p>Pierwszym z nich jest <a href=\"https:\/\/www.thoughtworks.com\/radar\/tools?blipid=202104069\">Pyright<\/a> - TypeChecker, kt\u00f3ry potrafi walidowa\u0107 kod w oparciu o adnotacje zg\u0142oszone jako proposale do j\u0119zyka (Python Enhancement Proposals). Jego tw\u00f3rcy (a stoi za nim firma Microsoft - mo\u017ce kojarzycie?) chwal\u0105 si\u0119, \u017ce ich rozwi\u0105zanie pozostaje szybkie nawet w wypadku pracy z olbrzymimi repozytoriami kodu.<\/p><p>Szybko\u015b\u0107 jest te\u017c s\u0142owem kluczowym w wypadku drugiego z prezentowanych pythonowych rozwi\u0105za\u0144. <a href=\"https:\/\/www.thoughtworks.com\/radar\/languages-and-frameworks?blipid=202104087\">FastAPI<\/a> to framework, kt\u00f3rego in\u017cynierowie od Radaru wskazuj\u0105 jako najlepsze obecne rozwi\u0105zania do tworzenia API w Pythonie - w odr\u00f3\u017cnieniu od takiego Django jest lekkie, wydajne i elastyczne, a przede wszystkim \u0142atwe do zrozumienia - nie wprowadza kilogram\u00f3w niepotrzebnej magii.<\/p><p><strong>No c\u00f3\u017c, to by by\u0142o na tyle! <a href=\"https:\/\/blog.vived.io\/#subscribe\">Zasubskrybujcie si\u0119<\/a>, aby nie przegapi\u0107 przysz\u0142ych przegl\u0105d\u00f3w tego typu. Dodatkowo, zapraszamy do naszych regularnych edycji \"Weekly\", gdzie we <\/strong><a href=\"https:\/\/blog.vived.io\/tag\/jvm\/\"><strong>wtorki<\/strong><\/a><strong>, <\/strong><a href=\"https:\/\/blog.vived.io\/tag\/frontend\/\"><strong>czwartki<\/strong><\/a><strong> i <\/strong><a href=\"https:\/\/blog.vived.io\/tag\/craftmanship\/\"><strong>soboty<\/strong><\/a><strong> opisujemy na bie\u017c\u0105co to, czym \u017cyje nasza bran\u017ca .<\/strong><\/p>"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10124","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/comments?post=10124"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10124\/revisions"}],"predecessor-version":[{"id":10596,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10124\/revisions\/10596"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=10124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=10124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=10124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}