{"id":15289,"date":"2023-03-23T14:06:57","date_gmt":"2023-03-23T13:06:57","guid":{"rendered":"https:\/\/vived.io\/?p=15289"},"modified":"2023-03-23T14:07:00","modified_gmt":"2023-03-23T13:07:00","slug":"jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/","title":{"rendered":"JEP-y to jeszcze nie wszystko. O czym w kontek\u015bcie JDK 20 pisze spo\u0142eczno\u015b\u0107? &#8211; JVM Weekly vol. 129"},"content":{"rendered":"\n<h2 id=\"1-jdk-20-wydane-jakie-jepy-zawiera\" data-num=1>1. JDK 20 wydane. Jakie JEPy zawiera?<\/h2>\n\n\n\n<p>Jej! Pocz\u0105tkiem tygodnia mieli\u015bmy <a href=\"https:\/\/inside.java\/2023\/03\/21\/the-arrival-of-java-20\/\">premier\u0119 nowej Javy<\/a>! Z jednej strony &#8211; du\u017ce wydarzenie (nie do\u015b\u0107, \u017ce premiera nowego JDK, to jeszcze tak &#8222;okr\u0105g\u0142a&#8221;), z drugiej pisali\u015bmy o niej ju\u017c tyle, \u017ce mam wra\u017cenie i\u017c sam fakt premiery jest de facto formalno\u015bci\u0105.<\/p>\n\n\n\n<p>Kiedy poprzednia Java sk\u0142ada\u0142a si\u0119 g\u0142\u00f3wnie z Preview, przyznam, \u017ce by\u0142o w tym co\u015b fascynuj\u0105cego. W ko\u0144cu to w\u0142a\u015bnie JDK 19 pozwala\u0142o nam spojrze\u0107 w przysz\u0142o\u015b\u0107 tego, jak rozwija\u0107 si\u0119 b\u0119dzie platforma w najbli\u017cszych latach i posmakowa\u0107 wynik\u00f3w kilku d\u0142ugo oczekiwanych projekt\u00f3w. Musz\u0119 jednak przyzna\u0107, \u017ce ci\u0119\u017cko wykrzesa\u0107 mi jest podobny entuzjazm w stosunku do JDK 20. Ponownie mamy do czynienia z zestawem Preview, ale s\u0105 to w zasadzie drobne iteracje (z wyj\u0105tkami o kt\u00f3rych za chwil\u0119) ju\u017c istniej\u0105cych API. Wida\u0107, \u017ce wszystkie du\u017ce rzeczy czekaj\u0105 na JDK 21, o kt\u00f3rych niedawno pisali\u015bmy.<\/p>\n\n\n\n<p>Finalnie wi\u0119c lista nowo\u015bci w JDK 20 prezentuje si\u0119 nast\u0119puj\u0105co:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/openjdk.org\/jeps\/429\">429: Scoped Values (Incubator)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/openjdk.org\/jeps\/432\">432: Record Patterns (Second Preview)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/openjdk.org\/jeps\/433\">433: Pattern Matching for switch (Fourth Preview)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/openjdk.org\/jeps\/434\">434: Foreign Function &amp; Memory API (Second Preview)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/openjdk.org\/jeps\/436\">436: Virtual Threads (Second Preview)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/openjdk.org\/jeps\/437\">437: Structured Concurrency (Second Incubator)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/openjdk.org\/jeps\/438\">438: Vector API (Fifth Incubator)<\/a><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"371\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-14.png\" alt=\"\" class=\"wp-image-15296\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-14.png 500w, https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-14-300x223.png 300w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><figcaption class=\"wp-element-caption\">Aczkolwiek, w drugiej sekcji nieco t\u0105 narracje wywr\u00f3cimy.<\/figcaption><\/figure><\/div>\n\n\n<p>Jak widzicie, zupe\u0142nie nowych rzeczy jest jak na lekarstwo. I oczywi\u015bcie, sam fakt, \u017ce API w wersji preview przechodz\u0105 zmiany jest czym\u015b pozytywnym, a takie dodatki w Foreign Function &amp; Memory API s\u0105 ca\u0142kiem przyjemne &#8211; o nich mo\u017cecie przeczyta\u0107 cho\u0107by u <a href=\"https:\/\/twitter.com\/PMinborg\">Pera Minborga<\/a>, kt\u00f3ry opublikowa\u0142 tekst <a href=\"https:\/\/minborgsjavapot.blogspot.com\/2022\/12\/java-20-sneak-peek-on-panama-ffm-api.html\">Java 20: A Sneak Peek on the Panama FFM API (Second Preview)<\/a>. Nowa wersja Vector API jest za\u015b tak rewolucyjna, \u017ce w pierwszej wersji sami tw\u00f3rcy JDK zapomnieli go do\u0142o\u017cy\u0107 do listy &#8211; nie zawiera \u017cadnych nowych zmian. Je\u017celi jeste\u015bcie za\u015b ciekawi szczeg\u00f3\u0142\u00f3w zmian w proposalach nowych rekord\u00f3w i pattern matchingu, o Record Patterns (Second Preview) oraz Pattern Matching for switch (Fourth Preview) pisa\u0142em ju\u017c w <a href=\"https:\/\/vived.io\/how-does-a-made-for-jvm-linux-distro-perform-alpaquita-linux-benchmarks-are-impressive-jvm-weekly-111\/\">jednej z poprzednich edycji<\/a>. Podobnie wygl\u0105da sytuacje nowych iteracji JEP\u00f3w powi\u0105zanych z Loomem &#8211; Virtual Threads (Second Preview) oraz Structured Concurrency (Second Incubator), kt\u00f3re <a href=\"https:\/\/vived.io\/java-community-seeks-happiness-beyond-twitter-want-to-join-jvm-weekly-113\/\">r\u00f3wnie\u017c mia\u0142em okazj\u0119 ju\u017c opisa\u0107<\/a>. Nie robi\u0119 tego tu po raz kolejny, bo nowo\u015bci s\u0105 naprawd\u0119 raczej kosmetyczne.<\/p>\n\n\n\n<p>Od tamtego czasu, 437: Structured Concurrency (Second Incubator) doczeka\u0142a si\u0119 jednak pewnej zmiany, kt\u00f3r\u0105 mo\u017cna uzna\u0107 za jedyny realnie interesuj\u0105cy dodatek wprowadzony w JDK 20 &#8211; wsparcie dla Scope Values. I nimi si\u0119 w\u0142a\u015bnie teraz zajmiemy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">O Scope Values<\/h3>\n\n\n\n<p>Zapotrzebowanie na lokalne warto\u015bci wynika ze zmian wprowadzonych w JVM na potrzeby Loom. Ze wzgl\u0119du na fakt, \u017ce Loom opiera si\u0119 na bardzo leciutkich w\u0105tkach (dzi\u0119ki czemu mo\u017cliwe staje si\u0119 tworzenie ich w zasadzie nieograniczonej ilo\u015bci), musimy bardzo uwa\u017ca\u0107 na rozmiar struktur tworzonych na potrzeby ka\u017cdego w\u0105tku (bardzo fajny artyku\u0142 na ten temat znale\u017a\u0107 mo\u017cecie tutaj).<\/p>\n\n\n\n<p>Popularne Thread Locals (zmienne przypi\u0119te do w\u0105tku) od pocz\u0105tku by\u0142y kamieniem w bucie tw\u00f3rc\u00f3w wirtualnych w\u0105tk\u00f3w. Rozwi\u0105zaniem na nie maj\u0105 by\u0107 wspomniane Scope Values \u2013 efektywnie finalne, niemutowalne zmienne lokalne, kt\u00f3re mog\u0105 by\u0107 w ramach potrzeb bezpiecznie dzielone mi\u0119dzy w\u0105tkami, zmniejszaj\u0105c ilo\u015b\u0107 niezb\u0119dnej pami\u0119ci. Ka\u017cdy w\u0105tek-dziecko posiada\u0107 ma dost\u0119p do pe\u0142nego kontekstu swojego rodzica. Pomys\u0142 realizacji tego zadania podkradziony zosta\u0142 z Common Lispa i jego \u201czmiennych specjalnych\u201d,<\/p>\n\n\n\n<p>O Scope Values mo\u017cna my\u015ble\u0107 jako niewidocznych parametrach, kt\u00f3re s\u0105 przekazywane do ka\u017cdej metody. Maj\u0105 one mo\u017cliwo\u015b\u0107 przypisania do zmiennej lokalnej warto\u015bci wy\u0142\u0105cznie na potrzeby konkretnego zakresu (scope) \u2013 po jego zako\u0144czeniu warto\u015bci zmiennych w nim ustawionych zostanie automatycznie przywr\u00f3cona. Zachowanie to pozwala np. na zakrycie warto\u015bci x i y, w kt\u00f3rym\u015b z \u201cdzieci\u201d, bez wp\u0142ywu na wszystkie inne w\u0105tki je u\u017cywaj\u0105ce.<\/p>\n\n\n\n<p>Do\u015b\u0107 dobrze obrazuje to kod \u017ar\u00f3d\u0142owy z JEPa:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>final static ScopedValue&lt;...&gt; x = new ScopedValue&lt;&gt;();\nfinal static ScopedValue&lt;...&gt; y = new ScopedValue&lt;&gt;();\n\n{\n    ScopedValue.where(x, expr1)\n        .where(y, expr2)\n        .run(() -&gt; ... code that uses x.get() and y.get() ...);\n}\n<\/code><\/pre>\n\n\n\n<p>Jak wida\u0107, sk\u0142adnia przypomina troch\u0119 znane wszystkim \u201catomiki\u201d na sterydach. Warto\u015bci x i y mog\u0105 by\u0107 przekazywane z w\u0105tku \u201crodzica\u201d do w\u0105tku \u201cdziecka\u201d. Metoda run() \u201ewi\u0105\u017ce\u201d za\u015b w tym przypadku x i y z warto\u015bciami expr1 i expr2. Podczas wykonywania metody run() wszelkie wywo\u0142ania x.get() i y.get() zwracaj\u0105 w\u0142a\u015bnie je. Po jej opuszczeniu, warto\u015bci wracaj\u0105 do wersji poprzednich, odziedziczonych po rodzicu.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/lisp_cycles.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Nie ukrywam te\u017c, \u017ce moja sympatia do tego JEPa na pewno pochodzi z faktu, \u017ce pod\u015bwiadomie troch\u0119 jednak jestem kryptoclojurowcem, wi\u0119c wszelkie nawi\u0105zania do Lispa w JDK przyjmuje z otwartymi ramionami.<\/figcaption><\/figure><\/div>\n\n\n<p>Oczywi\u015bcie, jak to z Loomem bywa, sk\u0142adnia mo\u017ce si\u0119 jeszcze wielokrotnie zmieni\u0107 (zw\u0142aszcza, \u017ce mamy do czynienia z niczym innym jak inkubacj\u0105). <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/inside.java\/2023\/03\/21\/the-arrival-of-java-20\/\">The Arrival of Java 20!<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"2-jednak-jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc\" data-num=2>2. Jednak JEP-y to jeszcze nie wszystko. O czym w kontek\u015bcie JDK 20 pisze spo\u0142eczno\u015b\u0107?<\/h2>\n\n\n\n<p>Czytaj\u0105c pierwsz\u0105 sekcje tej edycji mo\u017cna by doj\u015b\u0107 do wniosku, \u017ce tak naprawd\u0119 nic w tej nowej Javie ciekawego nie ma. To nie jest do ko\u0144ca prawda, bowiem ka\u017cde nowe wydanie poza samymi JEP-ami zwykle przynosi sporo mniejszych poprawek pod mask\u0105. Ka\u017cdorazowo te\u017c pojawia si\u0119 grupa bohater\u00f3w bez peleryn, kt\u00f3rzy przynosz\u0105 dobr\u0105 nowin\u0119 i opowiadaj\u0105 o tych wszystkich dodatkowych rzeczach, kt\u00f3re prawdodobnie nigdy nie przebij\u0105 si\u0119 mocno do masowej \u015bwiadomo\u015bci.<\/p>\n\n\n\n<p>Tak naprawd\u0119 najciekawszych z tekst\u00f3w towarzysz\u0105cych premierze nowego JDK napisa\u0142 Nicolai Parlog &#8211; Developer Advocate Javy w Oracle &#8211; kt\u00f3ry w bardzo przekrojowy spos\u00f3b roz\u0142o\u017cy\u0142 dla nas JDK 20 na czynniki pierwsze. Jego tekst o do\u015b\u0107 przewrotnym tytule <a href=\"https:\/\/nipafx.dev\/java-20-guide\">Java 20 \ud83e\udd71<\/a> przeprowadza nas za r\u0105czk\u0119 min. po zmianach w funkcjach hashuj\u0105cych, zmianach zwi\u0105zanych z JFR i JMX, czy te\u017c wsparciu dla Unicode 15.0. Takich mniejszych dodatk\u00f3w jest naprawd\u0119 sporo, dlatego sugeruje zerkn\u0105\u0107 na ca\u0142o\u015b\u0107 nawet je\u015bli zniech\u0119ci\u0142em Was ju\u017c do JDK 20 prezentowaniem &#8222;du\u017cych&#8221; featur\u00f3w. .<\/p>\n\n\n\n<p>Programem podstawowym przy okazji ka\u017cdego nowego wydania Javy jest tekst Thomasa Schatzla dotycz\u0105cy zmian w Garbage Collectorach, nie inaczej jest w wypadku JDK 20. Z tekstu <a href=\"https:\/\/tschatzl.github.io\/2023\/03\/14\/jdk20-g1-parallel-gc-changes.html\">JDK 20 G1\/Parallel\/Serial GC changes<\/a> dowiecie si\u0119, \u017ce o ile nie by\u0142o \u017cadnych godnych uwagi zmian w Serial GC, to ju\u017c na przyk\u0142ad obiekt\u00f3w przez Parallel GC podczas Full GC zosta\u0142a poprawiona przez w\u0105tki robotnicze obs\u0142uguj\u0105ce obiekty przekraczaj\u0105ce ich lokalne regiony kompakcji, zmniejszaj\u0105c czasy pauzowania Full GC o 20% w wybranych przypadkach. W G1 za\u015b GC poprawiono przewidywania rozmiaru m\u0142odego pokolenia. Pozwala to na zmniejszenie przekroczenia czasu pauzy i pozwala na u\u017cycie wi\u0119kszej liczby region\u00f3w m\u0142odego pokolenia na pojedyncze przej\u015bcie GC, co pozwala na sumaryczne zmniejszenie ich ilo\u015bci.<\/p>\n\n\n\n<p>Wydanie JDK 20 zawiera kilka ulepsze\u0144 bezpiecze\u0144stwa, o czym \u015bpieszy donosi\u0107 Sean Mullan w <a href=\"https:\/\/seanjmullan.org\/blog\/2023\/03\/22\/jdk20\">JDK 20 Security Enhancements<\/a>, kolejnej od\u0142s\u0142onie jego regularnie publikowanej serii. Nowe JDK kt\u00f3re poprawiaj\u0105 domy\u015blne zabezpieczenia platformy Java, zwi\u0119kszaj\u0105 wydajno\u015b\u0107 modu\u0142u Crypto i dodaj\u0105 nowe zdarzenia JFR do monitorowania bezpiecze\u0144stwa. Sean podkre\u015bla te\u017c znaczenie faktu, \u017ce do API wyj\u0105tku <code>InvalidParameterException<\/code> dodano nowe konstruktory, pozwalaj\u0105 na podanie przyczyny wyst\u0105pienia Exception. Sporo nowo\u015bci doczeka\u0142a si\u0119 lista algorytm\u00f3w szyfrowania w Javie, zawieraj\u0105c nowe pozycje, usprawnienia a tak\u017ce deprekacje.<\/p>\n\n\n\n<p>Kolejn\u0105 nowo\u015bci\u0105 jest wprowadzenie nowych w\u0142a\u015bciwo\u015bci systemowych i bezpiecze\u0144stwa, kt\u00f3re kontroluj\u0105, kt\u00f3re klasy maj\u0105 prawo do rekonstrukcji obiekt\u00f3w z kontekst\u00f3w JNDI\/LDAP i JNDI\/RMI. Warto podkre\u015bli\u0107, \u017ce o ile propertiesy te s\u0105 zwi\u0105zane z security, nie nale\u017c\u0105 bezpo\u015brednio do obszaru bibliotek bezpiecze\u0144stwa.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/tschatzl.github.io\/2023\/03\/14\/jdk20-g1-parallel-gc-changes.html\">JDK 20 G1\/Parallel\/Serial GC changes<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/nipafx.dev\/java-20-guide\">Java 20 \ud83e\udd71<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/seanjmullan.org\/blog\/2023\/03\/22\/jdk20\">JDK 20 Security Enhancements<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"3-ruch-docker-wzbudza-strach-wsrod-spolecznosci-open-source\" data-num=3>3. Ruch Docker wzbudza strach w\u015br\u00f3d spo\u0142eczno\u015bci Open-SOurce<\/h2>\n\n\n\n<p>A na koniec temat bardzo lu\u017ano zwi\u0105zany z Jav\u0105, ale bior\u0105c pod uwag\u0119, jak du\u017co by\u0142o dzisiaj kwestii zwi\u0105zanych stricte JDK, a jest na tyle ciekawy, \u017ce stwierdzi\u0142em si\u0119 nim podziel\u0119.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Hgo6teU.png\" alt=\"\" width=\"358\" height=\"248\"\/><figcaption class=\"wp-element-caption\">B\u0119dzie o Dockerze<\/figcaption><\/figure><\/div>\n\n\n<p>Docker z bycia pupilkiem spo\u0142eczno\u015bci developerskiej, w ostatnich latach seri\u0105 kilku kontrowersyjnych decyzji (kt\u00f3re w skr\u00f3cie mo\u017cna stre\u015bci\u0107 jako &#8222;Pieni\u0119dzy by za prac\u0119 chcieli, kapitali\u015bci paskudni&#8221;) zyskali sporo z\u0142ej s\u0142awy. W ostatnim tygodniu do ju\u017c istniej\u0105cych kontrowersji do\u0142o\u017cy\u0142a si\u0119 za\u015b kolejna. Firma wys\u0142a\u0142 bowiem e-mail do wszystkich u\u017cytkownik\u00f3w Docker Hub, kt\u00f3rzy utworzyli &#8222;organizacj\u0119&#8221;, informuj\u0105c ich, \u017ce ich firma rezygnuje z planu Free Team, a konta, kt\u00f3re nie zostan\u0105 migrowane zostan\u0105 usuni\u0119te. Wiadomo\u015b\u0107 by\u0142a przekazana w spos\u00f3b ma\u0142o empatyczny, bez pr\u00f3by wyja\u015bnienia co stanie si\u0119 z istniej\u0105cymi w repozytorium zasobami. Nie ma si\u0119 wi\u0119c co dziwi\u0107, \u017ce decyzja Dockera o zako\u0144czeniu subskrypcji Free Team wywo\u0142a\u0142a <a href=\"https:\/\/blog.alexellis.io\/docker-is-deleting-open-source-images\/\">alarm w spo\u0142eczno\u015bci open-source<\/a>.<\/p>\n\n\n\n<p>Przyk\u0142adowo, niekt\u00f3re projekty stara\u0142y si\u0119 upewni\u0107, \u017ce obrazy b\u0119d\u0105 nadal dost\u0119pne dla spo\u0142eczno\u015bci. a mimo, \u017ce Docker napisa\u0142 <a href=\"https:\/\/www.docker.com\/blog\/we-apologize-we-did-a-terrible-job-announcing-the-end-of-docker-free-teams\/\">uspokajaj\u0105cego posta<\/a>, przyznaj\u0105c si\u0119, \u017ce spos\u00f3b komunikacji by\u0142 &#8222;okropny&#8221;. W wyja\u015bnieniu firma t\u0142umaczy, \u017ce przestarza\u0142y plan Free Team zosta\u0142 zast\u0105piony przez program <a href=\"https:\/\/www.docker.com\/blog\/docker-sponsored-open-source-program-has-a-new-look\/\">Docker-Sponsored Open Source<\/a>, a \u017cadne obrazy nie zostan\u0105 usuni\u0119te, to mleko ju\u017c si\u0119 rozla\u0142o. Na pewno jednak ca\u0142a sytuacja na d\u0142ugi czas sprawi, \u017ce projekty OSS dwa razy zastanowi\u0105 si\u0119 nad wyborem swojego g\u0142\u00f3wnego repozytorium.<\/p>\n\n\n\n<p>Przy okazji postanowi\u0142em sprawdzi\u0107, jakie projekty powi\u0105zane z JVM-em s\u0105 zakwalifikowane jako Sponsored OSS. Okazuje si\u0119, \u017ce jest tego troch\u0119. Do tej kategorii nale\u017cy min. <a href=\"https:\/\/hub.docker.com\/r\/jenkins\/agent\/\">Jenkins<\/a> czy te\u017c <a href=\"https:\/\/hub.docker.com\/r\/openwhisk\/java8action\">OpenWhisk<\/a>. Nieco zaskoczy\u0142 mnie fakt, \u017ce np. taka Debianowa Liberica SDK, b\u0119d\u0105c obrazem maj\u0105cym ponad 5 milion\u00f3w pobra\u0144, nie jest ani oficjalnym obrazem, ani nawet zweryfikowanym publikuj\u0105cym. Jest to o tyle zabawne, \u017ce BellSoft to tw\u00f3rcy wydanego w zesz\u0142ym roku <a href=\"https:\/\/bell-sw.com\/blog\/bellsoft-introduces-alpaquita-linux\/\">Alpaquita Linux<\/a>, czyli systemu operacyjnego szytego na miar\u0119 w\u0142a\u015bnie pod konteneryzacje.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/QsMcBAe.png\" alt=\"\" width=\"991\" height=\"265\"\/><figcaption class=\"wp-element-caption\">BTW: To urocze, \u017ce po wpisaniu w wyszukiwarce Docker Hub <code>java<\/code>, na samej g\u00f3rze dostaniemy Node.js. Drogi Dockerze, nauczmy si\u0119 tego raz na zawsze: Java != JavaScript<\/figcaption><\/figure><\/div>\n\n\n<p>A skoro ju\u017c jeste\u015bmy przy kontenerach, to jako fanatyk fok (<a href=\"https:\/\/www.instagram.com\/articles90\/\">jedna ma \u017cywot na instagramie&#8230;<\/a>) wspomn\u0119, \u017ce testujemy ostatnio Podmana od RedHata, czyli alternatyw\u0119 dla Dockera z najbardziej uroczym logiem w bran\u017cy i musz\u0119 przyzna\u0107, \u017ce na razie sprawuje si\u0119 naprawd\u0119 dobrze. Zw\u0142aszcza lubi\u0119 ich <a href=\"https:\/\/podman-desktop.io\/\">aplikacje desktopow\u0105<\/a>, kt\u00f3ra nie odbiega niczym od Docker Desktop, a ma chyba nawet lepsze wsparcie Kubernetesa. Przy ca\u0142ej okazji ca\u0142ej afery z Dockerem dowiedzia\u0142em si\u0119 zreszt\u0105, \u017ce posiadaj\u0105 te\u017c <a href=\"https:\/\/quay.io\/\">w\u0142asne repozytorium obraz\u00f3w<\/a>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/k0AEnwF.jpg\" alt=\"\" width=\"694\" height=\"468\"\/><figcaption class=\"wp-element-caption\">A \u017ceby sko\u0144czy\u0107 na temacie fok, to moje pierwsze przygody z ML to by\u0142 fine-tuning modeli rozpoznawania obraz\u00f3w w\u0142a\u015bnie pod pluszowe foki. Materia\u0142 dowodowy powy\u017cej.<\/figcaption><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/blog.alexellis.io\/docker-is-deleting-open-source-images\/\">Docker is deleting Open Source organisations &#8211; what you need to know<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.docker.com\/blog\/we-apologize-we-did-a-terrible-job-announcing-the-end-of-docker-free-teams\/\">We apologize. We did a terrible job announcing the end of Docker Free Teams.<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.docker.com\/blog\/docker-sponsored-open-source-program-has-a-new-look\/\">Docker-Sponsored Open Source<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/podman-desktop.io\/\">podman-desktop.io<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/bell-sw.com\/blog\/bellsoft-introduces-alpaquita-linux\/\">BellSoft introduces Alpaquita Linux<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Dzisiaj temat m\u00f3g\u0142 by\u0107 tylko jeden &#8211; premiera JDK 20. Przejdziemy sobie przez to, co nowe wydanie przenosi, ale te\u017c nie przynosi. <\/p>\n","protected":false},"author":10,"featured_media":15304,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259,1],"tags":[],"class_list":["post-15289","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm-pl","category-no-category"],"acf":{"estimated_reading_time":"9","feature_image_blog":false,"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-6.png","feature_image_visible":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JEP-y to jeszcze nie wszystko. O czym w kontek\u015bcie JDK 20 pisze spo\u0142eczno\u015b\u0107? - JVM Weekly vol. 129 - 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\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JEP-y to jeszcze nie wszystko. O czym w kontek\u015bcie JDK 20 pisze spo\u0142eczno\u015b\u0107? - JVM Weekly vol. 129 - Vived\" \/>\n<meta property=\"og:description\" content=\"Dzisiaj temat m\u00f3g\u0142 by\u0107 tylko jeden - premiera JDK 20. Przejdziemy sobie przez to, co nowe wydanie przenosi, ale te\u017c nie przynosi.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-23T13:06:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-23T13:07:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-6.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/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\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"JEP-y to jeszcze nie wszystko. O czym w kontek\u015bcie JDK 20 pisze spo\u0142eczno\u015b\u0107? &#8211; JVM Weekly vol. 129\",\"datePublished\":\"2023-03-23T13:06:57+00:00\",\"dateModified\":\"2023-03-23T13:07:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/\"},\"wordCount\":1875,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-6.png\",\"articleSection\":[\"JVM\",\"No category\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/\",\"url\":\"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/\",\"name\":\"JEP-y to jeszcze nie wszystko. O czym w kontek\u015bcie JDK 20 pisze spo\u0142eczno\u015b\u0107? - JVM Weekly vol. 129 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-6.png\",\"datePublished\":\"2023-03-23T13:06:57+00:00\",\"dateModified\":\"2023-03-23T13:07:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-6.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-6.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JEP-y to jeszcze nie wszystko. O czym w kontek\u015bcie JDK 20 pisze spo\u0142eczno\u015b\u0107? &#8211; JVM Weekly vol. 129\"}]},{\"@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":"JEP-y to jeszcze nie wszystko. O czym w kontek\u015bcie JDK 20 pisze spo\u0142eczno\u015b\u0107? - JVM Weekly vol. 129 - 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\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/","og_locale":"pl_PL","og_type":"article","og_title":"JEP-y to jeszcze nie wszystko. O czym w kontek\u015bcie JDK 20 pisze spo\u0142eczno\u015b\u0107? - JVM Weekly vol. 129 - Vived","og_description":"Dzisiaj temat m\u00f3g\u0142 by\u0107 tylko jeden - premiera JDK 20. Przejdziemy sobie przez to, co nowe wydanie przenosi, ale te\u017c nie przynosi.","og_url":"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/","og_site_name":"Vived","article_published_time":"2023-03-23T13:06:57+00:00","article_modified_time":"2023-03-23T13:07:00+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-6.png","type":"image\/png"}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"JEP-y to jeszcze nie wszystko. O czym w kontek\u015bcie JDK 20 pisze spo\u0142eczno\u015b\u0107? &#8211; JVM Weekly vol. 129","datePublished":"2023-03-23T13:06:57+00:00","dateModified":"2023-03-23T13:07:00+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/"},"wordCount":1875,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-6.png","articleSection":["JVM","No category"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/","url":"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/","name":"JEP-y to jeszcze nie wszystko. O czym w kontek\u015bcie JDK 20 pisze spo\u0142eczno\u015b\u0107? - JVM Weekly vol. 129 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-6.png","datePublished":"2023-03-23T13:06:57+00:00","dateModified":"2023-03-23T13:07:00+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-6.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-6.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/jep-y-to-jeszcze-nie-wszystko-o-czym-w-kontekscie-jdk-20-pisze-spolecznosc-jvm-weekly-vol-129\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"JEP-y to jeszcze nie wszystko. O czym w kontek\u015bcie JDK 20 pisze spo\u0142eczno\u015b\u0107? &#8211; JVM Weekly vol. 129"}]},{"@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":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>1. JDK 20 wydane. Jakie JEPy zawiera?<\/h2>\n","innerContent":["\n<h2>1. JDK 20 wydane. Jakie JEPy zawiera?<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jej! Pocz\u0105tkiem tygodnia mieli\u015bmy <a href=\"https:\/\/inside.java\/2023\/03\/21\/the-arrival-of-java-20\/\">premier\u0119 nowej Javy<\/a>! Z jednej strony - du\u017ce wydarzenie (nie do\u015b\u0107, \u017ce premiera nowego JDK, to jeszcze tak \"okr\u0105g\u0142a\"), z drugiej pisali\u015bmy o niej ju\u017c tyle, \u017ce mam wra\u017cenie i\u017c sam fakt premiery jest de facto formalno\u015bci\u0105.<\/p>\n","innerContent":["\n<p>Jej! Pocz\u0105tkiem tygodnia mieli\u015bmy <a href=\"https:\/\/inside.java\/2023\/03\/21\/the-arrival-of-java-20\/\">premier\u0119 nowej Javy<\/a>! Z jednej strony - du\u017ce wydarzenie (nie do\u015b\u0107, \u017ce premiera nowego JDK, to jeszcze tak \"okr\u0105g\u0142a\"), z drugiej pisali\u015bmy o niej ju\u017c tyle, \u017ce mam wra\u017cenie i\u017c sam fakt premiery jest de facto formalno\u015bci\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kiedy poprzednia Java sk\u0142ada\u0142a si\u0119 g\u0142\u00f3wnie z Preview, przyznam, \u017ce by\u0142o w tym co\u015b fascynuj\u0105cego. W ko\u0144cu to w\u0142a\u015bnie JDK 19 pozwala\u0142o nam spojrze\u0107 w przysz\u0142o\u015b\u0107 tego, jak rozwija\u0107 si\u0119 b\u0119dzie platforma w najbli\u017cszych latach i posmakowa\u0107 wynik\u00f3w kilku d\u0142ugo oczekiwanych projekt\u00f3w. Musz\u0119 jednak przyzna\u0107, \u017ce ci\u0119\u017cko wykrzesa\u0107 mi jest podobny entuzjazm w stosunku do JDK 20. Ponownie mamy do czynienia z zestawem Preview, ale s\u0105 to w zasadzie drobne iteracje (z wyj\u0105tkami o kt\u00f3rych za chwil\u0119) ju\u017c istniej\u0105cych API. Wida\u0107, \u017ce wszystkie du\u017ce rzeczy czekaj\u0105 na JDK 21, o kt\u00f3rych niedawno pisali\u015bmy.<\/p>\n","innerContent":["\n<p>Kiedy poprzednia Java sk\u0142ada\u0142a si\u0119 g\u0142\u00f3wnie z Preview, przyznam, \u017ce by\u0142o w tym co\u015b fascynuj\u0105cego. W ko\u0144cu to w\u0142a\u015bnie JDK 19 pozwala\u0142o nam spojrze\u0107 w przysz\u0142o\u015b\u0107 tego, jak rozwija\u0107 si\u0119 b\u0119dzie platforma w najbli\u017cszych latach i posmakowa\u0107 wynik\u00f3w kilku d\u0142ugo oczekiwanych projekt\u00f3w. Musz\u0119 jednak przyzna\u0107, \u017ce ci\u0119\u017cko wykrzesa\u0107 mi jest podobny entuzjazm w stosunku do JDK 20. Ponownie mamy do czynienia z zestawem Preview, ale s\u0105 to w zasadzie drobne iteracje (z wyj\u0105tkami o kt\u00f3rych za chwil\u0119) ju\u017c istniej\u0105cych API. Wida\u0107, \u017ce wszystkie du\u017ce rzeczy czekaj\u0105 na JDK 21, o kt\u00f3rych niedawno pisali\u015bmy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Finalnie wi\u0119c lista nowo\u015bci w JDK 20 prezentuje si\u0119 nast\u0119puj\u0105co:<\/p>\n","innerContent":["\n<p>Finalnie wi\u0119c lista nowo\u015bci w JDK 20 prezentuje si\u0119 nast\u0119puj\u0105co:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/openjdk.org\/jeps\/429\">429: Scoped Values (Incubator)<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/openjdk.org\/jeps\/429\">429: Scoped Values (Incubator)<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/openjdk.org\/jeps\/432\">432: Record Patterns (Second Preview)<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/openjdk.org\/jeps\/432\">432: Record Patterns (Second Preview)<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/openjdk.org\/jeps\/433\">433: Pattern Matching for switch (Fourth Preview)<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/openjdk.org\/jeps\/433\">433: Pattern Matching for switch (Fourth Preview)<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/openjdk.org\/jeps\/434\">434: Foreign Function &amp; Memory API (Second Preview)<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/openjdk.org\/jeps\/434\">434: Foreign Function &amp; Memory API (Second Preview)<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/openjdk.org\/jeps\/436\">436: Virtual Threads (Second Preview)<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/openjdk.org\/jeps\/436\">436: Virtual Threads (Second Preview)<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/openjdk.org\/jeps\/437\">437: Structured Concurrency (Second Incubator)<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/openjdk.org\/jeps\/437\">437: Structured Concurrency (Second Incubator)<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/openjdk.org\/jeps\/438\">438: Vector API (Fifth Incubator)<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/openjdk.org\/jeps\/438\">438: Vector API (Fifth Incubator)<\/a><\/li>\n"]}],"innerHTML":"\n<ul>\n\n\n\n\n\n\n\n\n\n\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15296,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-14.png\" alt=\"\" class=\"wp-image-15296\"\/><figcaption class=\"wp-element-caption\">Aczkolwiek, w drugiej sekcji nieco t\u0105 narracje wywr\u00f3cimy.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-14.png\" alt=\"\" class=\"wp-image-15296\"\/><figcaption class=\"wp-element-caption\">Aczkolwiek, w drugiej sekcji nieco t\u0105 narracje wywr\u00f3cimy.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jak widzicie, zupe\u0142nie nowych rzeczy jest jak na lekarstwo. I oczywi\u015bcie, sam fakt, \u017ce API w wersji preview przechodz\u0105 zmiany jest czym\u015b pozytywnym, a takie dodatki w Foreign Function &amp; Memory API s\u0105 ca\u0142kiem przyjemne - o nich mo\u017cecie przeczyta\u0107 cho\u0107by u <a href=\"https:\/\/twitter.com\/PMinborg\">Pera Minborga<\/a>, kt\u00f3ry opublikowa\u0142 tekst <a href=\"https:\/\/minborgsjavapot.blogspot.com\/2022\/12\/java-20-sneak-peek-on-panama-ffm-api.html\">Java 20: A Sneak Peek on the Panama FFM API (Second Preview)<\/a>. Nowa wersja Vector API jest za\u015b tak rewolucyjna, \u017ce w pierwszej wersji sami tw\u00f3rcy JDK zapomnieli go do\u0142o\u017cy\u0107 do listy - nie zawiera \u017cadnych nowych zmian. Je\u017celi jeste\u015bcie za\u015b ciekawi szczeg\u00f3\u0142\u00f3w zmian w proposalach nowych rekord\u00f3w i pattern matchingu, o Record Patterns (Second Preview) oraz Pattern Matching for switch (Fourth Preview) pisa\u0142em ju\u017c w <a href=\"https:\/\/vived.io\/how-does-a-made-for-jvm-linux-distro-perform-alpaquita-linux-benchmarks-are-impressive-jvm-weekly-111\/\">jednej z poprzednich edycji<\/a>. Podobnie wygl\u0105da sytuacje nowych iteracji JEP\u00f3w powi\u0105zanych z Loomem - Virtual Threads (Second Preview) oraz Structured Concurrency (Second Incubator), kt\u00f3re <a href=\"https:\/\/vived.io\/java-community-seeks-happiness-beyond-twitter-want-to-join-jvm-weekly-113\/\">r\u00f3wnie\u017c mia\u0142em okazj\u0119 ju\u017c opisa\u0107<\/a>. Nie robi\u0119 tego tu po raz kolejny, bo nowo\u015bci s\u0105 naprawd\u0119 raczej kosmetyczne.<\/p>\n","innerContent":["\n<p>Jak widzicie, zupe\u0142nie nowych rzeczy jest jak na lekarstwo. I oczywi\u015bcie, sam fakt, \u017ce API w wersji preview przechodz\u0105 zmiany jest czym\u015b pozytywnym, a takie dodatki w Foreign Function &amp; Memory API s\u0105 ca\u0142kiem przyjemne - o nich mo\u017cecie przeczyta\u0107 cho\u0107by u <a href=\"https:\/\/twitter.com\/PMinborg\">Pera Minborga<\/a>, kt\u00f3ry opublikowa\u0142 tekst <a href=\"https:\/\/minborgsjavapot.blogspot.com\/2022\/12\/java-20-sneak-peek-on-panama-ffm-api.html\">Java 20: A Sneak Peek on the Panama FFM API (Second Preview)<\/a>. Nowa wersja Vector API jest za\u015b tak rewolucyjna, \u017ce w pierwszej wersji sami tw\u00f3rcy JDK zapomnieli go do\u0142o\u017cy\u0107 do listy - nie zawiera \u017cadnych nowych zmian. Je\u017celi jeste\u015bcie za\u015b ciekawi szczeg\u00f3\u0142\u00f3w zmian w proposalach nowych rekord\u00f3w i pattern matchingu, o Record Patterns (Second Preview) oraz Pattern Matching for switch (Fourth Preview) pisa\u0142em ju\u017c w <a href=\"https:\/\/vived.io\/how-does-a-made-for-jvm-linux-distro-perform-alpaquita-linux-benchmarks-are-impressive-jvm-weekly-111\/\">jednej z poprzednich edycji<\/a>. Podobnie wygl\u0105da sytuacje nowych iteracji JEP\u00f3w powi\u0105zanych z Loomem - Virtual Threads (Second Preview) oraz Structured Concurrency (Second Incubator), kt\u00f3re <a href=\"https:\/\/vived.io\/java-community-seeks-happiness-beyond-twitter-want-to-join-jvm-weekly-113\/\">r\u00f3wnie\u017c mia\u0142em okazj\u0119 ju\u017c opisa\u0107<\/a>. Nie robi\u0119 tego tu po raz kolejny, bo nowo\u015bci s\u0105 naprawd\u0119 raczej kosmetyczne.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Od tamtego czasu, 437: Structured Concurrency (Second Incubator) doczeka\u0142a si\u0119 jednak pewnej zmiany, kt\u00f3r\u0105 mo\u017cna uzna\u0107 za jedyny realnie interesuj\u0105cy dodatek wprowadzony w JDK 20 - wsparcie dla Scope Values. I nimi si\u0119 w\u0142a\u015bnie teraz zajmiemy.<\/p>\n","innerContent":["\n<p>Od tamtego czasu, 437: Structured Concurrency (Second Incubator) doczeka\u0142a si\u0119 jednak pewnej zmiany, kt\u00f3r\u0105 mo\u017cna uzna\u0107 za jedyny realnie interesuj\u0105cy dodatek wprowadzony w JDK 20 - wsparcie dla Scope Values. I nimi si\u0119 w\u0142a\u015bnie teraz zajmiemy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>O Scope Values<\/h3>\n","innerContent":["\n<h3>O Scope Values<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zapotrzebowanie na lokalne warto\u015bci wynika ze zmian wprowadzonych w JVM na potrzeby Loom. Ze wzgl\u0119du na fakt, \u017ce Loom opiera si\u0119 na bardzo leciutkich w\u0105tkach (dzi\u0119ki czemu mo\u017cliwe staje si\u0119 tworzenie ich w zasadzie nieograniczonej ilo\u015bci), musimy bardzo uwa\u017ca\u0107 na rozmiar struktur tworzonych na potrzeby ka\u017cdego w\u0105tku (bardzo fajny artyku\u0142 na ten temat znale\u017a\u0107 mo\u017cecie tutaj).<\/p>\n","innerContent":["\n<p>Zapotrzebowanie na lokalne warto\u015bci wynika ze zmian wprowadzonych w JVM na potrzeby Loom. Ze wzgl\u0119du na fakt, \u017ce Loom opiera si\u0119 na bardzo leciutkich w\u0105tkach (dzi\u0119ki czemu mo\u017cliwe staje si\u0119 tworzenie ich w zasadzie nieograniczonej ilo\u015bci), musimy bardzo uwa\u017ca\u0107 na rozmiar struktur tworzonych na potrzeby ka\u017cdego w\u0105tku (bardzo fajny artyku\u0142 na ten temat znale\u017a\u0107 mo\u017cecie tutaj).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Popularne Thread Locals (zmienne przypi\u0119te do w\u0105tku) od pocz\u0105tku by\u0142y kamieniem w bucie tw\u00f3rc\u00f3w wirtualnych w\u0105tk\u00f3w. Rozwi\u0105zaniem na nie maj\u0105 by\u0107 wspomniane Scope Values \u2013 efektywnie finalne, niemutowalne zmienne lokalne, kt\u00f3re mog\u0105 by\u0107 w ramach potrzeb bezpiecznie dzielone mi\u0119dzy w\u0105tkami, zmniejszaj\u0105c ilo\u015b\u0107 niezb\u0119dnej pami\u0119ci. Ka\u017cdy w\u0105tek-dziecko posiada\u0107 ma dost\u0119p do pe\u0142nego kontekstu swojego rodzica. Pomys\u0142 realizacji tego zadania podkradziony zosta\u0142 z Common Lispa i jego \u201czmiennych specjalnych\u201d,<\/p>\n","innerContent":["\n<p>Popularne Thread Locals (zmienne przypi\u0119te do w\u0105tku) od pocz\u0105tku by\u0142y kamieniem w bucie tw\u00f3rc\u00f3w wirtualnych w\u0105tk\u00f3w. Rozwi\u0105zaniem na nie maj\u0105 by\u0107 wspomniane Scope Values \u2013 efektywnie finalne, niemutowalne zmienne lokalne, kt\u00f3re mog\u0105 by\u0107 w ramach potrzeb bezpiecznie dzielone mi\u0119dzy w\u0105tkami, zmniejszaj\u0105c ilo\u015b\u0107 niezb\u0119dnej pami\u0119ci. Ka\u017cdy w\u0105tek-dziecko posiada\u0107 ma dost\u0119p do pe\u0142nego kontekstu swojego rodzica. Pomys\u0142 realizacji tego zadania podkradziony zosta\u0142 z Common Lispa i jego \u201czmiennych specjalnych\u201d,<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>O Scope Values mo\u017cna my\u015ble\u0107 jako niewidocznych parametrach, kt\u00f3re s\u0105 przekazywane do ka\u017cdej metody. Maj\u0105 one mo\u017cliwo\u015b\u0107 przypisania do zmiennej lokalnej warto\u015bci wy\u0142\u0105cznie na potrzeby konkretnego zakresu (scope) \u2013 po jego zako\u0144czeniu warto\u015bci zmiennych w nim ustawionych zostanie automatycznie przywr\u00f3cona. Zachowanie to pozwala np. na zakrycie warto\u015bci x i y, w kt\u00f3rym\u015b z \u201cdzieci\u201d, bez wp\u0142ywu na wszystkie inne w\u0105tki je u\u017cywaj\u0105ce.<\/p>\n","innerContent":["\n<p>O Scope Values mo\u017cna my\u015ble\u0107 jako niewidocznych parametrach, kt\u00f3re s\u0105 przekazywane do ka\u017cdej metody. Maj\u0105 one mo\u017cliwo\u015b\u0107 przypisania do zmiennej lokalnej warto\u015bci wy\u0142\u0105cznie na potrzeby konkretnego zakresu (scope) \u2013 po jego zako\u0144czeniu warto\u015bci zmiennych w nim ustawionych zostanie automatycznie przywr\u00f3cona. Zachowanie to pozwala np. na zakrycie warto\u015bci x i y, w kt\u00f3rym\u015b z \u201cdzieci\u201d, bez wp\u0142ywu na wszystkie inne w\u0105tki je u\u017cywaj\u0105ce.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Do\u015b\u0107 dobrze obrazuje to kod \u017ar\u00f3d\u0142owy z JEPa:<\/p>\n","innerContent":["\n<p>Do\u015b\u0107 dobrze obrazuje to kod \u017ar\u00f3d\u0142owy z JEPa:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>final static ScopedValue&lt;...&gt; x = new ScopedValue&lt;&gt;();\nfinal static ScopedValue&lt;...&gt; y = new ScopedValue&lt;&gt;();\n\n{\n    ScopedValue.where(x, expr1)\n        .where(y, expr2)\n        .run(() -&gt; ... code that uses x.get() and y.get() ...);\n}\n<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>final static ScopedValue&lt;...&gt; x = new ScopedValue&lt;&gt;();\nfinal static ScopedValue&lt;...&gt; y = new ScopedValue&lt;&gt;();\n\n{\n    ScopedValue.where(x, expr1)\n        .where(y, expr2)\n        .run(() -&gt; ... code that uses x.get() and y.get() ...);\n}\n<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jak wida\u0107, sk\u0142adnia przypomina troch\u0119 znane wszystkim \u201catomiki\u201d na sterydach. Warto\u015bci x i y mog\u0105 by\u0107 przekazywane z w\u0105tku \u201crodzica\u201d do w\u0105tku \u201cdziecka\u201d. Metoda run() \u201ewi\u0105\u017ce\u201d za\u015b w tym przypadku x i y z warto\u015bciami expr1 i expr2. Podczas wykonywania metody run() wszelkie wywo\u0142ania x.get() i y.get() zwracaj\u0105 w\u0142a\u015bnie je. Po jej opuszczeniu, warto\u015bci wracaj\u0105 do wersji poprzednich, odziedziczonych po rodzicu.<\/p>\n","innerContent":["\n<p>Jak wida\u0107, sk\u0142adnia przypomina troch\u0119 znane wszystkim \u201catomiki\u201d na sterydach. Warto\u015bci x i y mog\u0105 by\u0107 przekazywane z w\u0105tku \u201crodzica\u201d do w\u0105tku \u201cdziecka\u201d. Metoda run() \u201ewi\u0105\u017ce\u201d za\u015b w tym przypadku x i y z warto\u015bciami expr1 i expr2. Podczas wykonywania metody run() wszelkie wywo\u0142ania x.get() i y.get() zwracaj\u0105 w\u0142a\u015bnie je. Po jej opuszczeniu, warto\u015bci wracaj\u0105 do wersji poprzednich, odziedziczonych po rodzicu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/lisp_cycles.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Nie ukrywam te\u017c, \u017ce moja sympatia do tego JEPa na pewno pochodzi z faktu, \u017ce pod\u015bwiadomie troch\u0119 jednak jestem kryptoclojurowcem, wi\u0119c wszelkie nawi\u0105zania do Lispa w JDK przyjmuje z otwartymi ramionami.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/lisp_cycles.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Nie ukrywam te\u017c, \u017ce moja sympatia do tego JEPa na pewno pochodzi z faktu, \u017ce pod\u015bwiadomie troch\u0119 jednak jestem kryptoclojurowcem, wi\u0119c wszelkie nawi\u0105zania do Lispa w JDK przyjmuje z otwartymi ramionami.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Oczywi\u015bcie, jak to z Loomem bywa, sk\u0142adnia mo\u017ce si\u0119 jeszcze wielokrotnie zmieni\u0107 (zw\u0142aszcza, \u017ce mamy do czynienia z niczym innym jak inkubacj\u0105). <\/p>\n","innerContent":["\n<p>Oczywi\u015bcie, jak to z Loomem bywa, sk\u0142adnia mo\u017ce si\u0119 jeszcze wielokrotnie zmieni\u0107 (zw\u0142aszcza, \u017ce mamy do czynienia z niczym innym jak inkubacj\u0105). <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/inside.java\/2023\/03\/21\/the-arrival-of-java-20\/\">The Arrival of Java 20!<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/inside.java\/2023\/03\/21\/the-arrival-of-java-20\/\">The Arrival of Java 20!<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. Jednak JEP-y to jeszcze nie wszystko. O czym w kontek\u015bcie JDK 20 pisze spo\u0142eczno\u015b\u0107?<\/h2>\n","innerContent":["\n<h2>2. Jednak JEP-y to jeszcze nie wszystko. O czym w kontek\u015bcie JDK 20 pisze spo\u0142eczno\u015b\u0107?<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Czytaj\u0105c pierwsz\u0105 sekcje tej edycji mo\u017cna by doj\u015b\u0107 do wniosku, \u017ce tak naprawd\u0119 nic w tej nowej Javie ciekawego nie ma. To nie jest do ko\u0144ca prawda, bowiem ka\u017cde nowe wydanie poza samymi JEP-ami zwykle przynosi sporo mniejszych poprawek pod mask\u0105. Ka\u017cdorazowo te\u017c pojawia si\u0119 grupa bohater\u00f3w bez peleryn, kt\u00f3rzy przynosz\u0105 dobr\u0105 nowin\u0119 i opowiadaj\u0105 o tych wszystkich dodatkowych rzeczach, kt\u00f3re prawdodobnie nigdy nie przebij\u0105 si\u0119 mocno do masowej \u015bwiadomo\u015bci.<\/p>\n","innerContent":["\n<p>Czytaj\u0105c pierwsz\u0105 sekcje tej edycji mo\u017cna by doj\u015b\u0107 do wniosku, \u017ce tak naprawd\u0119 nic w tej nowej Javie ciekawego nie ma. To nie jest do ko\u0144ca prawda, bowiem ka\u017cde nowe wydanie poza samymi JEP-ami zwykle przynosi sporo mniejszych poprawek pod mask\u0105. Ka\u017cdorazowo te\u017c pojawia si\u0119 grupa bohater\u00f3w bez peleryn, kt\u00f3rzy przynosz\u0105 dobr\u0105 nowin\u0119 i opowiadaj\u0105 o tych wszystkich dodatkowych rzeczach, kt\u00f3re prawdodobnie nigdy nie przebij\u0105 si\u0119 mocno do masowej \u015bwiadomo\u015bci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tak naprawd\u0119 najciekawszych z tekst\u00f3w towarzysz\u0105cych premierze nowego JDK napisa\u0142 Nicolai Parlog - Developer Advocate Javy w Oracle - kt\u00f3ry w bardzo przekrojowy spos\u00f3b roz\u0142o\u017cy\u0142 dla nas JDK 20 na czynniki pierwsze. Jego tekst o do\u015b\u0107 przewrotnym tytule <a href=\"https:\/\/nipafx.dev\/java-20-guide\">Java 20 \ud83e\udd71<\/a> przeprowadza nas za r\u0105czk\u0119 min. po zmianach w funkcjach hashuj\u0105cych, zmianach zwi\u0105zanych z JFR i JMX, czy te\u017c wsparciu dla Unicode 15.0. Takich mniejszych dodatk\u00f3w jest naprawd\u0119 sporo, dlatego sugeruje zerkn\u0105\u0107 na ca\u0142o\u015b\u0107 nawet je\u015bli zniech\u0119ci\u0142em Was ju\u017c do JDK 20 prezentowaniem \"du\u017cych\" featur\u00f3w. .<\/p>\n","innerContent":["\n<p>Tak naprawd\u0119 najciekawszych z tekst\u00f3w towarzysz\u0105cych premierze nowego JDK napisa\u0142 Nicolai Parlog - Developer Advocate Javy w Oracle - kt\u00f3ry w bardzo przekrojowy spos\u00f3b roz\u0142o\u017cy\u0142 dla nas JDK 20 na czynniki pierwsze. Jego tekst o do\u015b\u0107 przewrotnym tytule <a href=\"https:\/\/nipafx.dev\/java-20-guide\">Java 20 \ud83e\udd71<\/a> przeprowadza nas za r\u0105czk\u0119 min. po zmianach w funkcjach hashuj\u0105cych, zmianach zwi\u0105zanych z JFR i JMX, czy te\u017c wsparciu dla Unicode 15.0. Takich mniejszych dodatk\u00f3w jest naprawd\u0119 sporo, dlatego sugeruje zerkn\u0105\u0107 na ca\u0142o\u015b\u0107 nawet je\u015bli zniech\u0119ci\u0142em Was ju\u017c do JDK 20 prezentowaniem \"du\u017cych\" featur\u00f3w. .<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Programem podstawowym przy okazji ka\u017cdego nowego wydania Javy jest tekst Thomasa Schatzla dotycz\u0105cy zmian w Garbage Collectorach, nie inaczej jest w wypadku JDK 20. Z tekstu <a href=\"https:\/\/tschatzl.github.io\/2023\/03\/14\/jdk20-g1-parallel-gc-changes.html\">JDK 20 G1\/Parallel\/Serial GC changes<\/a> dowiecie si\u0119, \u017ce o ile nie by\u0142o \u017cadnych godnych uwagi zmian w Serial GC, to ju\u017c na przyk\u0142ad obiekt\u00f3w przez Parallel GC podczas Full GC zosta\u0142a poprawiona przez w\u0105tki robotnicze obs\u0142uguj\u0105ce obiekty przekraczaj\u0105ce ich lokalne regiony kompakcji, zmniejszaj\u0105c czasy pauzowania Full GC o 20% w wybranych przypadkach. W G1 za\u015b GC poprawiono przewidywania rozmiaru m\u0142odego pokolenia. Pozwala to na zmniejszenie przekroczenia czasu pauzy i pozwala na u\u017cycie wi\u0119kszej liczby region\u00f3w m\u0142odego pokolenia na pojedyncze przej\u015bcie GC, co pozwala na sumaryczne zmniejszenie ich ilo\u015bci.<\/p>\n","innerContent":["\n<p>Programem podstawowym przy okazji ka\u017cdego nowego wydania Javy jest tekst Thomasa Schatzla dotycz\u0105cy zmian w Garbage Collectorach, nie inaczej jest w wypadku JDK 20. Z tekstu <a href=\"https:\/\/tschatzl.github.io\/2023\/03\/14\/jdk20-g1-parallel-gc-changes.html\">JDK 20 G1\/Parallel\/Serial GC changes<\/a> dowiecie si\u0119, \u017ce o ile nie by\u0142o \u017cadnych godnych uwagi zmian w Serial GC, to ju\u017c na przyk\u0142ad obiekt\u00f3w przez Parallel GC podczas Full GC zosta\u0142a poprawiona przez w\u0105tki robotnicze obs\u0142uguj\u0105ce obiekty przekraczaj\u0105ce ich lokalne regiony kompakcji, zmniejszaj\u0105c czasy pauzowania Full GC o 20% w wybranych przypadkach. W G1 za\u015b GC poprawiono przewidywania rozmiaru m\u0142odego pokolenia. Pozwala to na zmniejszenie przekroczenia czasu pauzy i pozwala na u\u017cycie wi\u0119kszej liczby region\u00f3w m\u0142odego pokolenia na pojedyncze przej\u015bcie GC, co pozwala na sumaryczne zmniejszenie ich ilo\u015bci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wydanie JDK 20 zawiera kilka ulepsze\u0144 bezpiecze\u0144stwa, o czym \u015bpieszy donosi\u0107 Sean Mullan w <a href=\"https:\/\/seanjmullan.org\/blog\/2023\/03\/22\/jdk20\">JDK 20 Security Enhancements<\/a>, kolejnej od\u0142s\u0142onie jego regularnie publikowanej serii. Nowe JDK kt\u00f3re poprawiaj\u0105 domy\u015blne zabezpieczenia platformy Java, zwi\u0119kszaj\u0105 wydajno\u015b\u0107 modu\u0142u Crypto i dodaj\u0105 nowe zdarzenia JFR do monitorowania bezpiecze\u0144stwa. Sean podkre\u015bla te\u017c znaczenie faktu, \u017ce do API wyj\u0105tku <code>InvalidParameterException<\/code> dodano nowe konstruktory, pozwalaj\u0105 na podanie przyczyny wyst\u0105pienia Exception. Sporo nowo\u015bci doczeka\u0142a si\u0119 lista algorytm\u00f3w szyfrowania w Javie, zawieraj\u0105c nowe pozycje, usprawnienia a tak\u017ce deprekacje.<\/p>\n","innerContent":["\n<p>Wydanie JDK 20 zawiera kilka ulepsze\u0144 bezpiecze\u0144stwa, o czym \u015bpieszy donosi\u0107 Sean Mullan w <a href=\"https:\/\/seanjmullan.org\/blog\/2023\/03\/22\/jdk20\">JDK 20 Security Enhancements<\/a>, kolejnej od\u0142s\u0142onie jego regularnie publikowanej serii. Nowe JDK kt\u00f3re poprawiaj\u0105 domy\u015blne zabezpieczenia platformy Java, zwi\u0119kszaj\u0105 wydajno\u015b\u0107 modu\u0142u Crypto i dodaj\u0105 nowe zdarzenia JFR do monitorowania bezpiecze\u0144stwa. Sean podkre\u015bla te\u017c znaczenie faktu, \u017ce do API wyj\u0105tku <code>InvalidParameterException<\/code> dodano nowe konstruktory, pozwalaj\u0105 na podanie przyczyny wyst\u0105pienia Exception. Sporo nowo\u015bci doczeka\u0142a si\u0119 lista algorytm\u00f3w szyfrowania w Javie, zawieraj\u0105c nowe pozycje, usprawnienia a tak\u017ce deprekacje.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kolejn\u0105 nowo\u015bci\u0105 jest wprowadzenie nowych w\u0142a\u015bciwo\u015bci systemowych i bezpiecze\u0144stwa, kt\u00f3re kontroluj\u0105, kt\u00f3re klasy maj\u0105 prawo do rekonstrukcji obiekt\u00f3w z kontekst\u00f3w JNDI\/LDAP i JNDI\/RMI. Warto podkre\u015bli\u0107, \u017ce o ile propertiesy te s\u0105 zwi\u0105zane z security, nie nale\u017c\u0105 bezpo\u015brednio do obszaru bibliotek bezpiecze\u0144stwa.<\/p>\n","innerContent":["\n<p>Kolejn\u0105 nowo\u015bci\u0105 jest wprowadzenie nowych w\u0142a\u015bciwo\u015bci systemowych i bezpiecze\u0144stwa, kt\u00f3re kontroluj\u0105, kt\u00f3re klasy maj\u0105 prawo do rekonstrukcji obiekt\u00f3w z kontekst\u00f3w JNDI\/LDAP i JNDI\/RMI. Warto podkre\u015bli\u0107, \u017ce o ile propertiesy te s\u0105 zwi\u0105zane z security, nie nale\u017c\u0105 bezpo\u015brednio do obszaru bibliotek bezpiecze\u0144stwa.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/tschatzl.github.io\/2023\/03\/14\/jdk20-g1-parallel-gc-changes.html\">JDK 20 G1\/Parallel\/Serial GC changes<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/tschatzl.github.io\/2023\/03\/14\/jdk20-g1-parallel-gc-changes.html\">JDK 20 G1\/Parallel\/Serial GC changes<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/nipafx.dev\/java-20-guide\">Java 20 \ud83e\udd71<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/nipafx.dev\/java-20-guide\">Java 20 \ud83e\udd71<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/seanjmullan.org\/blog\/2023\/03\/22\/jdk20\">JDK 20 Security Enhancements<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/seanjmullan.org\/blog\/2023\/03\/22\/jdk20\">JDK 20 Security Enhancements<\/a><\/li>\n"]}],"innerHTML":"\n<ul>\n\n\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. Ruch Docker wzbudza strach w\u015br\u00f3d spo\u0142eczno\u015bci Open-SOurce<\/h2>\n","innerContent":["\n<h2>3. Ruch Docker wzbudza strach w\u015br\u00f3d spo\u0142eczno\u015bci Open-SOurce<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A na koniec temat bardzo lu\u017ano zwi\u0105zany z Jav\u0105, ale bior\u0105c pod uwag\u0119, jak du\u017co by\u0142o dzisiaj kwestii zwi\u0105zanych stricte JDK, a jest na tyle ciekawy, \u017ce stwierdzi\u0142em si\u0119 nim podziel\u0119.<\/p>\n","innerContent":["\n<p>A na koniec temat bardzo lu\u017ano zwi\u0105zany z Jav\u0105, ale bior\u0105c pod uwag\u0119, jak du\u017co by\u0142o dzisiaj kwestii zwi\u0105zanych stricte JDK, a jest na tyle ciekawy, \u017ce stwierdzi\u0142em si\u0119 nim podziel\u0119.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":358,"height":248},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Hgo6teU.png\" alt=\"\" width=\"358\" height=\"248\"\/><figcaption class=\"wp-element-caption\">B\u0119dzie o Dockerze<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/Hgo6teU.png\" alt=\"\" width=\"358\" height=\"248\"\/><figcaption class=\"wp-element-caption\">B\u0119dzie o Dockerze<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Docker z bycia pupilkiem spo\u0142eczno\u015bci developerskiej, w ostatnich latach seri\u0105 kilku kontrowersyjnych decyzji (kt\u00f3re w skr\u00f3cie mo\u017cna stre\u015bci\u0107 jako \"Pieni\u0119dzy by za prac\u0119 chcieli, kapitali\u015bci paskudni\") zyskali sporo z\u0142ej s\u0142awy. W ostatnim tygodniu do ju\u017c istniej\u0105cych kontrowersji do\u0142o\u017cy\u0142a si\u0119 za\u015b kolejna. Firma wys\u0142a\u0142 bowiem e-mail do wszystkich u\u017cytkownik\u00f3w Docker Hub, kt\u00f3rzy utworzyli \"organizacj\u0119\", informuj\u0105c ich, \u017ce ich firma rezygnuje z planu Free Team, a konta, kt\u00f3re nie zostan\u0105 migrowane zostan\u0105 usuni\u0119te. Wiadomo\u015b\u0107 by\u0142a przekazana w spos\u00f3b ma\u0142o empatyczny, bez pr\u00f3by wyja\u015bnienia co stanie si\u0119 z istniej\u0105cymi w repozytorium zasobami. Nie ma si\u0119 wi\u0119c co dziwi\u0107, \u017ce decyzja Dockera o zako\u0144czeniu subskrypcji Free Team wywo\u0142a\u0142a <a href=\"https:\/\/blog.alexellis.io\/docker-is-deleting-open-source-images\/\">alarm w spo\u0142eczno\u015bci open-source<\/a>.<\/p>\n","innerContent":["\n<p>Docker z bycia pupilkiem spo\u0142eczno\u015bci developerskiej, w ostatnich latach seri\u0105 kilku kontrowersyjnych decyzji (kt\u00f3re w skr\u00f3cie mo\u017cna stre\u015bci\u0107 jako \"Pieni\u0119dzy by za prac\u0119 chcieli, kapitali\u015bci paskudni\") zyskali sporo z\u0142ej s\u0142awy. W ostatnim tygodniu do ju\u017c istniej\u0105cych kontrowersji do\u0142o\u017cy\u0142a si\u0119 za\u015b kolejna. Firma wys\u0142a\u0142 bowiem e-mail do wszystkich u\u017cytkownik\u00f3w Docker Hub, kt\u00f3rzy utworzyli \"organizacj\u0119\", informuj\u0105c ich, \u017ce ich firma rezygnuje z planu Free Team, a konta, kt\u00f3re nie zostan\u0105 migrowane zostan\u0105 usuni\u0119te. Wiadomo\u015b\u0107 by\u0142a przekazana w spos\u00f3b ma\u0142o empatyczny, bez pr\u00f3by wyja\u015bnienia co stanie si\u0119 z istniej\u0105cymi w repozytorium zasobami. Nie ma si\u0119 wi\u0119c co dziwi\u0107, \u017ce decyzja Dockera o zako\u0144czeniu subskrypcji Free Team wywo\u0142a\u0142a <a href=\"https:\/\/blog.alexellis.io\/docker-is-deleting-open-source-images\/\">alarm w spo\u0142eczno\u015bci open-source<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Przyk\u0142adowo, niekt\u00f3re projekty stara\u0142y si\u0119 upewni\u0107, \u017ce obrazy b\u0119d\u0105 nadal dost\u0119pne dla spo\u0142eczno\u015bci. a mimo, \u017ce Docker napisa\u0142 <a href=\"https:\/\/www.docker.com\/blog\/we-apologize-we-did-a-terrible-job-announcing-the-end-of-docker-free-teams\/\">uspokajaj\u0105cego posta<\/a>, przyznaj\u0105c si\u0119, \u017ce spos\u00f3b komunikacji by\u0142 \"okropny\". W wyja\u015bnieniu firma t\u0142umaczy, \u017ce przestarza\u0142y plan Free Team zosta\u0142 zast\u0105piony przez program <a href=\"https:\/\/www.docker.com\/blog\/docker-sponsored-open-source-program-has-a-new-look\/\">Docker-Sponsored Open Source<\/a>, a \u017cadne obrazy nie zostan\u0105 usuni\u0119te, to mleko ju\u017c si\u0119 rozla\u0142o. Na pewno jednak ca\u0142a sytuacja na d\u0142ugi czas sprawi, \u017ce projekty OSS dwa razy zastanowi\u0105 si\u0119 nad wyborem swojego g\u0142\u00f3wnego repozytorium.<\/p>\n","innerContent":["\n<p>Przyk\u0142adowo, niekt\u00f3re projekty stara\u0142y si\u0119 upewni\u0107, \u017ce obrazy b\u0119d\u0105 nadal dost\u0119pne dla spo\u0142eczno\u015bci. a mimo, \u017ce Docker napisa\u0142 <a href=\"https:\/\/www.docker.com\/blog\/we-apologize-we-did-a-terrible-job-announcing-the-end-of-docker-free-teams\/\">uspokajaj\u0105cego posta<\/a>, przyznaj\u0105c si\u0119, \u017ce spos\u00f3b komunikacji by\u0142 \"okropny\". W wyja\u015bnieniu firma t\u0142umaczy, \u017ce przestarza\u0142y plan Free Team zosta\u0142 zast\u0105piony przez program <a href=\"https:\/\/www.docker.com\/blog\/docker-sponsored-open-source-program-has-a-new-look\/\">Docker-Sponsored Open Source<\/a>, a \u017cadne obrazy nie zostan\u0105 usuni\u0119te, to mleko ju\u017c si\u0119 rozla\u0142o. Na pewno jednak ca\u0142a sytuacja na d\u0142ugi czas sprawi, \u017ce projekty OSS dwa razy zastanowi\u0105 si\u0119 nad wyborem swojego g\u0142\u00f3wnego repozytorium.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Przy okazji postanowi\u0142em sprawdzi\u0107, jakie projekty powi\u0105zane z JVM-em s\u0105 zakwalifikowane jako Sponsored OSS. Okazuje si\u0119, \u017ce jest tego troch\u0119. Do tej kategorii nale\u017cy min. <a href=\"https:\/\/hub.docker.com\/r\/jenkins\/agent\/\">Jenkins<\/a> czy te\u017c <a href=\"https:\/\/hub.docker.com\/r\/openwhisk\/java8action\">OpenWhisk<\/a>. Nieco zaskoczy\u0142 mnie fakt, \u017ce np. taka Debianowa Liberica SDK, b\u0119d\u0105c obrazem maj\u0105cym ponad 5 milion\u00f3w pobra\u0144, nie jest ani oficjalnym obrazem, ani nawet zweryfikowanym publikuj\u0105cym. Jest to o tyle zabawne, \u017ce BellSoft to tw\u00f3rcy wydanego w zesz\u0142ym roku <a href=\"https:\/\/bell-sw.com\/blog\/bellsoft-introduces-alpaquita-linux\/\">Alpaquita Linux<\/a>, czyli systemu operacyjnego szytego na miar\u0119 w\u0142a\u015bnie pod konteneryzacje.<\/p>\n","innerContent":["\n<p>Przy okazji postanowi\u0142em sprawdzi\u0107, jakie projekty powi\u0105zane z JVM-em s\u0105 zakwalifikowane jako Sponsored OSS. Okazuje si\u0119, \u017ce jest tego troch\u0119. Do tej kategorii nale\u017cy min. <a href=\"https:\/\/hub.docker.com\/r\/jenkins\/agent\/\">Jenkins<\/a> czy te\u017c <a href=\"https:\/\/hub.docker.com\/r\/openwhisk\/java8action\">OpenWhisk<\/a>. Nieco zaskoczy\u0142 mnie fakt, \u017ce np. taka Debianowa Liberica SDK, b\u0119d\u0105c obrazem maj\u0105cym ponad 5 milion\u00f3w pobra\u0144, nie jest ani oficjalnym obrazem, ani nawet zweryfikowanym publikuj\u0105cym. Jest to o tyle zabawne, \u017ce BellSoft to tw\u00f3rcy wydanego w zesz\u0142ym roku <a href=\"https:\/\/bell-sw.com\/blog\/bellsoft-introduces-alpaquita-linux\/\">Alpaquita Linux<\/a>, czyli systemu operacyjnego szytego na miar\u0119 w\u0142a\u015bnie pod konteneryzacje.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":991,"height":265},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/QsMcBAe.png\" alt=\"\" width=\"991\" height=\"265\"\/><figcaption class=\"wp-element-caption\">BTW: To urocze, \u017ce po wpisaniu w wyszukiwarce Docker Hub <code>java<\/code>, na samej g\u00f3rze dostaniemy Node.js. Drogi Dockerze, nauczmy si\u0119 tego raz na zawsze: Java != JavaScript<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/QsMcBAe.png\" alt=\"\" width=\"991\" height=\"265\"\/><figcaption class=\"wp-element-caption\">BTW: To urocze, \u017ce po wpisaniu w wyszukiwarce Docker Hub <code>java<\/code>, na samej g\u00f3rze dostaniemy Node.js. Drogi Dockerze, nauczmy si\u0119 tego raz na zawsze: Java != JavaScript<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A skoro ju\u017c jeste\u015bmy przy kontenerach, to jako fanatyk fok (<a href=\"https:\/\/www.instagram.com\/articles90\/\">jedna ma \u017cywot na instagramie...<\/a>) wspomn\u0119, \u017ce testujemy ostatnio Podmana od RedHata, czyli alternatyw\u0119 dla Dockera z najbardziej uroczym logiem w bran\u017cy i musz\u0119 przyzna\u0107, \u017ce na razie sprawuje si\u0119 naprawd\u0119 dobrze. Zw\u0142aszcza lubi\u0119 ich <a href=\"https:\/\/podman-desktop.io\/\">aplikacje desktopow\u0105<\/a>, kt\u00f3ra nie odbiega niczym od Docker Desktop, a ma chyba nawet lepsze wsparcie Kubernetesa. Przy ca\u0142ej okazji ca\u0142ej afery z Dockerem dowiedzia\u0142em si\u0119 zreszt\u0105, \u017ce posiadaj\u0105 te\u017c <a href=\"https:\/\/quay.io\/\">w\u0142asne repozytorium obraz\u00f3w<\/a>.<\/p>\n","innerContent":["\n<p>A skoro ju\u017c jeste\u015bmy przy kontenerach, to jako fanatyk fok (<a href=\"https:\/\/www.instagram.com\/articles90\/\">jedna ma \u017cywot na instagramie...<\/a>) wspomn\u0119, \u017ce testujemy ostatnio Podmana od RedHata, czyli alternatyw\u0119 dla Dockera z najbardziej uroczym logiem w bran\u017cy i musz\u0119 przyzna\u0107, \u017ce na razie sprawuje si\u0119 naprawd\u0119 dobrze. Zw\u0142aszcza lubi\u0119 ich <a href=\"https:\/\/podman-desktop.io\/\">aplikacje desktopow\u0105<\/a>, kt\u00f3ra nie odbiega niczym od Docker Desktop, a ma chyba nawet lepsze wsparcie Kubernetesa. Przy ca\u0142ej okazji ca\u0142ej afery z Dockerem dowiedzia\u0142em si\u0119 zreszt\u0105, \u017ce posiadaj\u0105 te\u017c <a href=\"https:\/\/quay.io\/\">w\u0142asne repozytorium obraz\u00f3w<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":694,"height":468},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/k0AEnwF.jpg\" alt=\"\" width=\"694\" height=\"468\"\/><figcaption class=\"wp-element-caption\">A \u017ceby sko\u0144czy\u0107 na temacie fok, to moje pierwsze przygody z ML to by\u0142 fine-tuning modeli rozpoznawania obraz\u00f3w w\u0142a\u015bnie pod pluszowe foki. Materia\u0142 dowodowy powy\u017cej.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/k0AEnwF.jpg\" alt=\"\" width=\"694\" height=\"468\"\/><figcaption class=\"wp-element-caption\">A \u017ceby sko\u0144czy\u0107 na temacie fok, to moje pierwsze przygody z ML to by\u0142 fine-tuning modeli rozpoznawania obraz\u00f3w w\u0142a\u015bnie pod pluszowe foki. Materia\u0142 dowodowy powy\u017cej.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/blog.alexellis.io\/docker-is-deleting-open-source-images\/\">Docker is deleting Open Source organisations - what you need to know<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/blog.alexellis.io\/docker-is-deleting-open-source-images\/\">Docker is deleting Open Source organisations - what you need to know<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/www.docker.com\/blog\/we-apologize-we-did-a-terrible-job-announcing-the-end-of-docker-free-teams\/\">We apologize. We did a terrible job announcing the end of Docker Free Teams.<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/www.docker.com\/blog\/we-apologize-we-did-a-terrible-job-announcing-the-end-of-docker-free-teams\/\">We apologize. We did a terrible job announcing the end of Docker Free Teams.<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/www.docker.com\/blog\/docker-sponsored-open-source-program-has-a-new-look\/\">Docker-Sponsored Open Source<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/www.docker.com\/blog\/docker-sponsored-open-source-program-has-a-new-look\/\">Docker-Sponsored Open Source<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/podman-desktop.io\/\">podman-desktop.io<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/podman-desktop.io\/\">podman-desktop.io<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/bell-sw.com\/blog\/bellsoft-introduces-alpaquita-linux\/\">BellSoft introduces Alpaquita Linux<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/bell-sw.com\/blog\/bellsoft-introduces-alpaquita-linux\/\">BellSoft introduces Alpaquita Linux<\/a><\/li>\n"]}],"innerHTML":"\n<ul>\n\n\n\n\n\n\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"<\/ul>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/15289","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=15289"}],"version-history":[{"count":14,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/15289\/revisions"}],"predecessor-version":[{"id":15307,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/15289\/revisions\/15307"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/15304"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=15289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=15289"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=15289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}