{"id":16683,"date":"2023-08-30T11:16:52","date_gmt":"2023-08-30T09:16:52","guid":{"rendered":"https:\/\/vived.io\/?p=16683"},"modified":"2023-08-30T11:16:57","modified_gmt":"2023-08-30T09:16:57","slug":"panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/","title":{"rendered":"Panama, OpenCL i TornadoVM: Wej\u015bcie Javy w \u015bwiat GPU &#8211; JVM Weekly vol. 147"},"content":{"rendered":"\n<h2 id=\"1-panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu\" data-num=1>1. Panama, OpenCL i TornadoVM: Wej\u015bcie Javy w \u015bwiat GPU<\/h2>\n\n\n\n<p>Dzi\u015b zaczniemy od bombonierki, kt\u00f3r\u0105 otrzymali\u015bmy, a kt\u00f3r\u0105 b\u0119d\u0119 stopniowo rozpakowywa\u0142 w kolejnych edycjach (proceder, kt\u00f3ry ju\u017c tak naprawd\u0119 rozpocz\u0105\u0142em, prezentuj\u0105c tydzie\u0144 temu detale dotycz\u0105ce Projektu Leyden).<\/p>\n\n\n\n<p>JVM Language Summit (JVMLS) to coroczne wydarzenie, kt\u00f3re gromadzi \u015bmietank\u0119 \u015bwiata JVM: projektant\u00f3w j\u0119zyk\u00f3w, tw\u00f3rc\u00f3w kompilator\u00f3w i toolingu czy te\u017c in\u017cynier\u00f3w szeroko rozumianego &#8222;\u015brodowiska uruchomieniowego&#8221;, aby om\u00f3wi\u0107 bie\u017c\u0105cy usprawnienia, ale te\u017c pomys\u0142y na dalszy rozw\u00f3j JVM. I cho\u0107 grono go\u015bci jest relatywnie w\u0105skie, to ju\u017c sama komunikacja jest stosunkowo transparentna, poniewa\u017c kolejne wyk\u0142ady zaczynaj\u0105 powoli sp\u0142ywa\u0107, daj\u0105c nam bardzo interesuj\u0105cy wgl\u0105d w prace, r\u00f3wnie\u017c od kuchni. Nie mam tutaj przestrzeni, aby opisywa\u0107 wszystkie, ale my\u015bl\u0119, \u017ce w kolejnych edycjach b\u0119d\u0119 przeskakiwa\u0142 przez kolejne tematy, stopniowo samodzielnie ogl\u0105daj\u0105c poszczeg\u00f3lne nagrania. Tak jak wspomnia\u0142em, mieli\u015bmy okazje porozmawia\u0107 ju\u017c w poprzedniej edycji o Project Leyden, dzisiaj za\u015b kolejny temat, kt\u00f3ry wyj\u0105tkowo lubi\u0119, a o kt\u00f3rym rzadko mam okazje wspomnie\u0107 &#8211; dopasowanie platformy JVM do pracy z GPU.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"Java and GPU \u2026 are we nearly there yet? #JVMLS\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/lbKBu3lTftc?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<p>W swojej prezentacji <a href=\"https:\/\/www.youtube.com\/watch?v=lbKBu3lTftc\">Java and GPU \u2026 are we nearly there yet?<\/a>, Gary Frost, Architekt z Oracle, przedstawi\u0142 wnioski dotycz\u0105ce integracji Javy z GPU, koncentruj\u0105c si\u0119 na wyzwaniach i potencjalnych nowych mo\u017cliwo\u015bciach rozwoju mo\u017cliwych do osi\u0105gni\u0119cia dzi\u0119ki wsparciu pracy z procesorami graficznymi. Hardware 101: W przeciwie\u0144stwie do tradycyjnych CPU, kt\u00f3re posiadaj\u0105 bardziej dziesi\u0105tki rdzeni, pojedynczy GPU potrafi dostarcza\u0107 ich tysi\u0105ce (zaprojektowane w modelu rdze\u0144 per piksel). GPU jest wi\u0119c naturalnie zaprojektowane do zarz\u0105dzania milionami jednoczesnych zada\u0144. Pocz\u0105tkowo rdzenie te by\u0142y g\u0142\u00f3wnie u\u017cywane do cieniowania pikseli w renderingu grafiki, kiedy deweloperzy zauwa\u017cyli ogromne mo\u017cliwo\u015bci obliczeniowe GPU, zacz\u0119\u0142y by\u0107 stosowane w wielu innych zadaniach, w tym w Machine Learning i sztucznej inteligencji. Dotychczasowe podej\u015bcia bardzo przyst\u0119pnie opisuje tekst <a href=\"https:\/\/blogs.oracle.com\/javamagazine\/post\/programming-the-gpu-in-java\">Programming the GPU in Java<\/a>, pochodz\u0105cy jednak jeszcze ze stycznia 2020, a od tamtego czasu sama platforma posz\u0142a do przodu.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"460\" height=\"517\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-9.png\" alt=\"\" class=\"wp-image-16685\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-9.png 460w, https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-9-267x300.png 267w\" sizes=\"auto, (max-width: 460px) 100vw, 460px\" \/><figcaption class=\"wp-element-caption\">Bo dzisiaj za cz\u0119sto wygl\u0105da to po prostu tak<\/figcaption><\/figure><\/div>\n\n\n<p>Z prezentacji Frosta wy\u0142ania si\u0119 znaczenie Projektu Panama. Uznaj\u0105c wcze\u015bniejsze wyzwania, w tym ograniczenia samego JVM oraz pr\u00f3by ukrywania z\u0142o\u017cono\u015bci programowania GPU za pomoc\u0105 API Java (bo to zawsze dzia\u0142a ekh, ekh&#8230; RPC), Frost zaproponowa\u0142 bardziej przejrzyste podej\u015bcie. Wprowadzi\u0142 koncepcj\u0119 &#8222;zestawu narz\u0119dzi do akceleracji heterogenicznej&#8221;, kt\u00f3ry jest oparty w\u0142a\u015bnie na Projekcie Panama, a u\u017cywa\u0107 by mia\u0142 tak zwanego <code>NDRange<\/code>. Struktura ta pochodzi z frameworku OpenCL, stworzonego do pisania program\u00f3w, kt\u00f3re dzia\u0142aj\u0105 na heterogenicznych platformach sk\u0142adaj\u0105cych si\u0119 z zr\u00f3\u017cnicowanego hardware, daj\u0105c abstrakcje nad r\u00f3\u017cnego rodzajami przetwarzania. <code>NDRange<\/code> to w uproszczeniu zbi\u00f3r jednostek pracy, kt\u00f3ry nast\u0119pnie mo\u017ce by\u0107 w dowolnie roz\u0142o\u017cone na dost\u0119pne zasoby sprz\u0119towe i przetworzony, a tak\u017ce mog\u0119 by\u0107 \u0142\u0105czone w grupy robocze (work-groups) w celu optymalizacji wydajno\u015bci ca\u0142ego procesu. Abstrakcja ta jest bardzo elastyczna, pozwala programistom na wykorzystanie mocy wielu jednostek obliczeniowych w r\u00f3\u017cnorodnych zadaniach, st\u0105d propozycja dodania jej do JVM.<\/p>\n\n\n\n<p>W dalszej cz\u0119\u015bci prezentacji sporo miejsca Frost po\u015bwi\u0119ci\u0142 te\u017c TornadoVM, kt\u00f3re doczeka\u0142o si\u0119 swojego w\u0142asnego, w pe\u0142ni po\u015bwi\u0119conego sobie talka: <a href=\"https:\/\/www.youtube.com\/watch?v=VTzGlnv6nuA\">From CPU to GPU and FPGAs: Supercharging Java Applications with TornadoVM<\/a>, wyg\u0142oszonego przez Juan Fumero, tw\u00f3rc\u0119 projektu. <\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"From CPU to GPU and FPGAs: Supercharging Java Applications with TornadoVM #JVMLS\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/VTzGlnv6nuA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<p>TornadoVM to platforma zaprojektowana w\u0142a\u015bnie po to, aby umo\u017cliwi\u0107 efektywne wykonywanie aplikacji Java na r\u00f3\u017cnorodnych platformach sprz\u0119towych, w tym na GPU, FPGA oraz systemach wielordzeniowych. Przetwarzaj\u0105c bajtkod Java na wspomniany ju\u017c OpenCL, TornadoVM zapewnia, \u017ce aplikacje Java mog\u0105 wykorzystywa\u0107 mo\u017cliwo\u015bci obliczeniowe wyspecjalizowanego hardware bez potrzeby wprowadzania modyfikacji specyficznych dla danego sprz\u0119tu, oferuj\u0105c programistom sp\u00f3jne i wydajne \u015brodowisko dla ich aplikacji. TornadoVM opiera si\u0119 na integracji z GraalVM, i wykorzystuje jego kompilator JIT, zdolny do przekszta\u0142cania bajtkodu Java w natywny kod maszynowy. TornadoVM mo\u017ce korzysta\u0107 z kompilatora JIT GraalVM w swoich procesach translacji, dodatkowo czerpi\u0105c korzy\u015bci z zaawansowanych optymalizacji oferowanych przez GraalVM.<\/p>\n\n\n\n<p>Sporo miejsca w prezentacji skupi\u0142o si\u0119 na prezentacji przysz\u0142ych plan\u00f3w i roadmapy dla TornadoVM. Aby jeszcze bardziej zwi\u0119kszy\u0107 wygod\u0119 u\u017cywania i wydajno\u015b\u0107 TornadoVM, zesp\u00f3\u0142 bada mo\u017cliwo\u015b\u0107 w\u0142\u0105czenia gotowych bibliotek od gigant\u00f3w bran\u017cy takich jak NVIDIA, AMD i Intel. W tym kontek\u015bcie godnym uwagi dodatkiem s\u0105 te\u017c &#8222;library tasks&#8221;, stworzone do prostszego wykonywania wywo\u0142a\u0144 funkcji natywnych. \u0141\u0105cz\u0105c si\u0119 z tematem prezentacji Frosta, integracja z Panam\u0105 jest postrzegana jako potencjalne rozwi\u0105zanie problem\u00f3w, takich jak transfer danych mi\u0119dzy pami\u0119ci\u0105 heap oraz off-heap oraz lepsz\u0105 kontrol\u0105 nad prac\u0105 Garbage Collectora, co ma u\u0142atwi\u0107 u\u017cycie platformy przez frameworki AI. Pojawi\u0142y si\u0119 te\u017c idee dzielenia si\u0119 javowym heapem mi\u0119dzy CPU a GPU, zapowiedziano te\u017c ch\u0119\u0107&nbsp;bardzo \u015bcis\u0142\u0105 wsp\u00f3\u0142prac\u0119 z Graal Core Team.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-spotify wp-block-embed-spotify wp-embed-aspect-21-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Spotify Embed: FPGAs, GPUs or Data Science with Java\" style=\"border-radius: 12px\" width=\"100%\" height=\"152\" frameborder=\"0\" allowfullscreen allow=\"autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture\" loading=\"lazy\" src=\"https:\/\/open.spotify.com\/embed\/episode\/68BTZor86cqoa4puVRSXyT?utm_source=oembed\"><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Aby dowiedzie\u0107 si\u0119 wi\u0119cej o TornadoVM, proponuj\u0119 pos\u0142ucha\u0107 odcinka AirHacks.fm od Adama Biena, w kt\u00f3rym om\u00f3wi\u0142 on t\u0142o projektu z Juanem. Znajdziecie tam wiele interesuj\u0105cych informacji zza kulis, jak zawsze w AirHacks.fm.<\/figcaption><\/figure>\n\n\n\n<p>To tak na smaka &#8211; kolejne prezentacje dopiero sp\u0142ywaj\u0105, a my\u015bl\u0119, \u017ce gdzie\u015b w okolicach JDK 21 warto b\u0119dzie zrobi\u0107 sobie przegl\u0105d materia\u0142\u00f3w po\u015bwi\u0119conych virtual threadom &#8211; kt\u00f3re jak si\u0119 pewnie domy\u015blacie, by\u0142y jednym z istotnych temat\u00f3w na wydarzeniu.<\/p>\n\n\n\n<h2 id=\"2-spring-i-o-przynosi-zapowiedz-spring-ai\" data-num=2>2. Spring I\/O przynosi zapowied\u017a Spring AI<\/h2>\n\n\n\n<p>Pozostaj\u0105c w temacie rzeczy, kt\u00f3re powoli b\u0119d\u0119 rozpakowywa\u0142, to w zesz\u0142ym tygodniu odby\u0142 si\u0119 Spring I\/O. Na razie niestety nie mamy za wiele dost\u0119pnych materia\u0142\u00f3w (poza <a href=\"https:\/\/spring.io\/blog\/2023\/08\/29\/my-springone-2023-recap\">obowi\u0105zkowym recapem<\/a> Josha Longa), ale niekt\u00f3re detale ju\u017c przeciek\u0142y do \u015bwiadomo\u015bci publicznej, a w\u015br\u00f3d nich Spring AI. Rozpakujmy sobie, co kryje si\u0119 pod t\u0105 nazw\u0105.<\/p>\n\n\n\n<p>Spring AI to nowy projekt zainicjowany przez Marka Pollacka, kt\u00f3ry s\u0142u\u017cy\u0107 ma jako pomost mi\u0119dzy zaawansowanymi mo\u017cliwo\u015bciami raz ju\u017c wytrenowanych modeli AI, a typowymi dla Springa wzorcami pisania aplikacji. Centralnym elementem tej integracji jest mo\u017cliwo\u015b\u0107 p\u0142ynnej pracy z modelami, zw\u0142aszcza wariantami GPT. <\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"Dr. Mark Pollack, lead of the new Spring AI project\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/0P8UU5vkvI8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><figcaption class=\"wp-element-caption\">Josh Long, Developer Advocate Springa, przeprowadzi\u0142 z Markiem <a href=\"https:\/\/www.youtube.com\/watch?v=0P8UU5vkvI8\">wywiad podczas Spring I\/O<\/a>, dzi\u0119ki czemu mo\u017cemy poznali\u015bmy nieco szczeg\u00f3\u0142\u00f3w na temat projektu.<\/figcaption><\/figure>\n\n\n\n<p>Udzia\u0142 Javy w rynku sztucznej inteligencji zawsze by\u0142 ograniczony, g\u0142\u00f3wnie ze wzgl\u0119du na dominacj\u0119 algorytm\u00f3w C\/C++ (na co rozwi\u0105zaniem ma by\u0107 Panama) i przewag\u0119 Pythona w ekosystemie ML\/AI. Jednak rozw\u00f3j generatywnej publicznie dost\u0119pnych modeli, kt\u00f3re umo\u017cliwiaj\u0105 interakcj\u0119 ze wst\u0119pnie wytrenowanymi modelami za po\u015brednictwem protoko\u0142u HTTP (jak cho\u0107by GPT), znacznie zmniejszy\u0142 zale\u017cno\u015b\u0107 od okre\u015blonych j\u0119zyk\u00f3w. Ta ewolucja toruje drog\u0119 dla j\u0119zyk\u00f3w takich jak Java, aby sta\u0142y si\u0119 bardziej widoczne w \u015bwiecie sztucznej inteligencji. Czerpi\u0105c inspiracj\u0119 z bibliotek takich jak LangChain, LlamaIndex czy Semantic Kernel, projekt Spring AI ma zaoferowa\u0107 podobne do\u015bwiadczenie AI dla programist\u00f3w Spring. Ca\u0142o\u015b\u0107 te\u017c \u0142adnie wpasowuje si\u0119 w trend zarysowany przez poprzedni\u0105 sekcje, b\u0119d\u0105c komplementarnym dla uruchamiania modeli na samym JVM.<\/p>\n\n\n\n<p>Projekt Spring AI wprowadza wi\u0119c wiele funkcji analogicznych do tych w LangChainie. G\u0142\u00f3wne funkcje obejmuj\u0105 wsp\u00f3lny interfejs API dla interakcji modeli AI oraz rozw\u00f3j &#8222;prompt\u00f3w&#8221;, kt\u00f3re s\u0105 kluczowe dla komunikacji modeli AI. Dost\u0119pne parsery pomagaj\u0105 konwertowa\u0107 surowe odpowiedzi AI na ustrukturyzowane formaty typu POJO. Projekt podkre\u015bla te\u017c znaczenie zarz\u0105dzania danymi wra\u017cliwymi w LLMach, oferuj\u0105c sposoby na ich u\u017cycie bez potrzeby do\u0142\u0105czania ich w procesie retrenowania modeli. Odbywa si\u0119 to poprzez u\u0142atwienie integracji z bazami wektorowymi, kt\u00f3re u\u0142atwiaj\u0105 prac\u0119&nbsp;z modelami AI.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"Vector databases are so hot right now. WTF are they?\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/klTvEwg3oJ4?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><figcaption class=\"wp-element-caption\">Tutaj znajdziecie bardzo dobre, 3-minutowe, a do\u015b\u0107 wyczerpuj\u0105ce (!) wideo w tym temacie.<\/figcaption><\/figure>\n\n\n\n<p>Projekt podkre\u015bla r\u00f3wnie\u017c koncepcj\u0119 &#8222;\u0142a\u0144cuch\u00f3w&#8221;, kt\u00f3re umo\u017cliwiaj\u0105 generowanie ci\u0105gu interakcji AI dla pojedynczego wej\u015bcia. Inne kluczowe komponenty obejmuj\u0105 &#8222;Pami\u0119\u0107&#8221; do przywo\u0142ywania poprzednich interakcji i &#8222;Agent\u00f3w&#8221;, kt\u00f3re wykorzystuj\u0105 modele AI do dynamicznego wyszukiwania danych i generowania odpowiedzi. Wygl\u0105da to wszystko bardzo ciekawie, i na pewno si\u0119 pobawi\u0119, tak jak ostatnio eksperymentowa\u0142em z Semantic Kernelem.<\/p>\n\n\n\n<p>A nieco przy okazji Spring I\/O (a tak naprawd\u0119 ciut wcze\u015bniej), og\u0142oszono stabiln\u0105 wersje innego nietypowego, ale bardzo interesuj\u0105cego springowego projektu. W spo\u0142eczno\u015bci programistycznej coraz cz\u0119\u015bciej pojawia si\u0119 bowiem nawo\u0142ywanie do powrotu do monolitu &#8211; chodzi tu jednak o taki monolit wymy\u015blony troch\u0119 na nowo. Zwolennicy tego podej\u015bcia twierdz\u0105 bowiem, \u017ce przy u\u017cyciu dzisiejszych narz\u0119dzi i dobrej modularyzacji jeste\u015bmy w stanie stworzy\u0107 codebase posiadaj\u0105cy spor\u0105 ilo\u015b\u0107 zalet mikroserwis\u00f3w przy zaskakuj\u0105co ma\u0142ej ilo\u015bci jego wad. Zainteresowanych odsy\u0142am do koncepcji <a href=\"https:\/\/m.signalvnoise.com\/the-majestic-monolith\/\">Majestatycznego Monolitu<\/a> autorstwa DHH, a tak\u017ce interesuj\u0105cej serii <a href=\"https:\/\/www.kamilgrzybek.com\/design\/modular-monolith-primer\/\">Modular Monolith: A Primer<\/a>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-36.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Bo zaskakuj\u0105co cz\u0119sto, tak naprawd\u0119 i tak wychodzi nam po prostu rozproszony monolith<\/figcaption><\/figure><\/div>\n\n\n<p>No dobra, ale jak to si\u0119 ma do tematu Springa? Ot\u00f3\u017c ostatnio swoj\u0105 premier\u0119 mia\u0142 projekt <a href=\"https:\/\/spring.io\/blog\/2023\/08\/21\/spring-modulith-1-0-ga-released\">Spring Modulith w wersji 1.0<\/a>, kt\u00f3ry ma wprowadzi\u0107 Springa w er\u0119 modularnego monolitu. Spring-Modulith to rozwini\u0119cie istniej\u0105cego projektu Moduliths (kt\u00f3rego zast\u0105pi), ale jeszcze lepiej zintegrowanego z samym Springiem. Bardzo ciekawy jest sam spos\u00f3b dzia\u0142ania ca\u0142o\u015bci \u2013 zamiast mocno ingerowa\u0107 on w proces budowania, wykorzystuje do weryfikacji projektu testy integracyjne. Dzia\u0142a wi\u0119c podobnie do ArchUnit \u2013 biblioteki, kt\u00f3rej celem jest w\u0142a\u015bnie weryfikacja zale\u017cno\u015bci mi\u0119dzy poszczeg\u00f3lnymi modu\u0142ami, kt\u00f3rej asercje s\u0105 zreszt\u0105 z nim kompatybilne. Magia Modulitha polega jednak na tym, \u017ce dzi\u0119ki znanemu \u015brodowisku uruchomieniowemu (aplikacje Spring Boot 3.0) jest w stanie prekonfigurowa\u0107 odpowiednie testy (w tym wspomnianego) ArchUnita \u2013 co te\u017c czyni. Dzi\u0119ki temu w \u0142atwy spos\u00f3b jeste\u015bmy w stanie przetestowa\u0107, czy jakie\u015b architektoniczne spaghetti nie przemkn\u0119\u0142o przez Code Review, jeszcze na poziomie budowania aplikacji.<\/p>\n\n\n\n<h2 id=\"3-release-radar\" data-num=3>3. Release Radar<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/grails.org\/blog\/2023-07-25-introducing-grails-6.html\">Grails 6<\/a><\/h3>\n\n\n\n<p>Tym razem zaczniemy sobie od zapowiedzi nieco sp\u00f3\u017anionej, bo samo Grails 6.0 swoj\u0105 premier\u0119 mia\u0142o ju\u017c chwil\u0119 temu. Ale jak to m\u00f3wi\u0105 &#8211; lepiej p\u00f3\u017ano ni\u017c wcale. Grails to framework do budowy aplikacji internetowych w Groovy&#8217;m, a oparty na niezwykle popularnym kiedy\u015b Rails. Tak jak sza\u0142 na ten framework i ca\u0142ego Ruby&#8217;ego nieco przygas\u0142, tak i raczej ma\u0142o rozpoczyna si\u0119 nowych projekt\u00f3w w Grailsach. W dalszym ci\u0105gu warto przygl\u0105dn\u0105\u0107 si\u0119, co pokazuje nowa wersja frameworka.<\/p>\n\n\n\n<p>Gwiazd\u0105 tego wydania jest nowy UI Grails Forge, umo\u017cliwiaj\u0105cy deweloperom skuteczne zarz\u0105dzanie projektami napisanymi we frameworku, oferuj\u0105c uproszczone rozpocz\u0119cie projektu, intuicyjn\u0105 nawigacj\u0119, walidacj\u0119 w czasie rzeczywistym, wizualne zarz\u0105dzanie zale\u017cno\u015bciami i responsywny design. Co wi\u0119cej, Grails wzmocni\u0142 swoje wi\u0119zi z Micronautem poprzez u\u0142atwienie u\u017cywania bean\u00f3w Micronauta w komponentach Grails oraz wykorzystuje klienta HTTP Micronaut do uproszczonych interakcji z REST API. Grails 6 wprowadzi\u0142 JDK 11 jako minimaln\u0105 wersje, co umo\u017cliwia frameworkowi u\u017cywanie w internalach nowej sk\u0142adni. To jednak nie koniec zmian &#8211; plany s\u0105 ju\u017c w toku, by w nadchodz\u0105cym du\u017cym wydaniu zapewni\u0107 p\u0142ynne przej\u015bcie do Java 17.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.atomicjar.com\/2023\/08\/announcing-testcontainers-desktop-free-application\/\">Testcontainers Desktop Free Application<\/a><\/h3>\n\n\n\n<p>Projekt Testcontainers, od momentu swojego powstania, zawsze boryka\u0142 si\u0119 z problemem &#8222;co zrobi\u0107, \u017ceby, testy startowa\u0142y szybko&#8221;. W ci\u0105gu czasu powsta\u0142o wiele pomys\u0142\u00f3w na r\u00f3\u017cne funkcje, takie jak sta\u0142e porty czy stabilne kontenery wielokrotnego u\u017cytku. Chocia\u017c niekt\u00f3re funkcje zosta\u0142y wdro\u017cone w ograniczonym zakresie, to jednak do tej pory najlepszym rozwi\u0105zaniem tego problemu pozostawa\u0142a Testcontainers Cloud. Jednak dla wi\u0119kszo\u015bci z nas, kt\u00f3ra dalej jednak woli odpala\u0107 testy lokalnie, a dodatkowo nie jest gotowa p\u0142aci\u0107 za ten przywilej, powsta\u0142 w\u0142a\u015bnie Testcontainers Desktop (oryginalnie nazywaj\u0105cy si\u0119 podobno Testcontainers Cloud Desktop).<\/p>\n\n\n\n<p>Wydana wersja oferuje funkcje takie jak ustawianie sta\u0142ych port\u00f3w, mo\u017cliwo\u015b\u0107 zamra\u017canie kontener\u00f3w umo\u017cliwiaj\u0105ca ich debugowanie oraz stanowi abstrakcje nad r\u00f3\u017cnymi runtime&#8217;ami konteneryzacji, w tym moim ulubionym Podmanem. Jest te\u017c swoist\u0105 zach\u0119t\u0105, osoby, kt\u00f3re zdecyduj\u0105 si\u0119 spr\u00f3bowa\u0107 dostan\u0105 bowiem dost\u0119p do 300-minutowej wersji pr\u00f3bnej Testcontainers Cloud.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"378\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-12-1024x378.png\" alt=\"\" class=\"wp-image-16699\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-12-1024x378.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-12-300x111.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-12-768x283.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-12.png 1264w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Zawsze si\u0119 zastanawia\u0142em, gdzie mo\u017cna spotka\u0107 tych diler\u00f3w z ich pierwszymi dzia\u0142kami, ale nie spodziewa\u0142em si\u0119 \u017ce mowa by\u0142a o AtomicJar.<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/camel.apache.org\/blog\/2023\/08\/RELEASE-4.0.0\/\">Camel 4.0<\/a><\/h3>\n\n\n\n<p>Dla tych, kt\u00f3rzy nie mieli okazji zetkn\u0105\u0107 si\u0119 z projektem, Apache Camel to oprogramowanie mocno enterprisowe, oparte na rodzinie wzorc\u00f3w znanych jako Enterprise Integration Patterns &#8211; spodziewajcie si\u0119 du\u017co XML-a, aczkolwiek sam Camel te\u017c si\u0119 mocno unowocze\u015bni\u0142 od czasu, kiedy mia\u0142em przyjemno\u015b\u0107 go stosowa\u0107. U\u0142atwia integracj\u0119 r\u00f3\u017cnych system\u00f3w, umo\u017cliwiaj\u0105c im efektywn\u0105 wymian\u0119 danych bez potrzeby tworzenia dedykowanego, powtarzalnego kodu integracyjnego i obs\u0142uguje liczne formaty transportu i danych, co czyni go ca\u0142kiem interesuj\u0105cym narz\u0119dziem, je\u015bli Wasza firma wpada w \u015bwiat Enterprise.<\/p>\n\n\n\n<p>Apache Camel 4.0 to g\u0142\u00f3wnie znana Wam migracja z <code>javax<\/code> na <code>jakarta<\/code>, dostosowuj\u0105c si\u0119 do nowo\u015bci z Jakarta EE 10, i podbija minimaln\u0105 wersj\u0119 Javy do JDK 17 (osoby, kt\u00f3re nie mog\u0105 dokona\u0107 aktualizacji, zmuszeni s\u0105 do pozostania na wersji Camel 3.x,), eliminuje te\u017c obowi\u0105zkowe zale\u017cno\u015bci na JAXB. Jest r\u00f3wnie\u017c przystosowany, by integrowa\u0107 si\u0119 \u0142atwo z Spring Framework 6, Spring Boot 3 oraz Quarkusem 3. Wydanie \u0142\u0105czy Camel Core i Camel Spring Boot (co obrazuje kierunek rozwoju) oraz wintegrowuje Camel Karaf jako subkomponent Apache Karaf. Z drugiej strony, dochodzi do kilku deprekacji, jak np. w <code>camel-cdi<\/code> czy wsparciu dla JUnit 4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/docs.gradle.org\/8.3\/release-notes.html\">Gradle 8.3<\/a><\/h3>\n\n\n\n<p>Pojawi\u0142a si\u0119 nowa wersja <a href=\"(https:\/\/docs.gradle.org\/8.3\/release-notes.html)\">Gradle 8.3<\/a>, wprowadzi\u0142 mn\u00f3stwo ulepsze\u0144 w swojej ostatniej aktualizacji. Godn\u0105 uwagi zmian\u0105 jest optymalizacja kompilacji Java, dzi\u0119ki u\u017cyciu deamon\u00f3w, kt\u00f3re rozgrzewaj\u0105 si\u0119 po kilku u\u017cyciach, co mo\u017ce prowadzi\u0107 do skr\u00f3cenia czasu kompilacji nawet o 30%. Po stronie konfiguracji ulepszono pami\u0119\u0107 podr\u0119czn\u0105 konfiguracji, aby buforowa\u0107 wyniki fazy konfiguracji, zwi\u0119kszaj\u0105c wydajno\u015b\u0107 kompilacji.<\/p>\n\n\n\n<p>Kolejnym ulepszeniem jest pe\u0142na (wreszcie) obs\u0142uga Java 20. Wcze\u015bniej, podczas gdy Gradle 8.1 u\u0142atwia\u0142 kompilacj\u0119 i testowanie z Jav\u0105 20, nie obs\u0142ugiwa\u0142 uruchamiania Gradle na tej wersji JDK, co prowadzi\u0142o do sytuacji gdy niekt\u00f3re projekty musia\u0142y posiada\u0107 wcze\u015bniejsz\u0105 wersje JDK tylko na potrzeby build toola. Aktualizacja zawiera r\u00f3wnie\u017c ulepszenia w dla wtyczki CodeNarc oraz ulepszon\u0105 obs\u0142ug\u0119 nowych narz\u0119dzi Mavena.<\/p>\n\n\n\n<p>Zadowoleni b\u0119d\u0105 te\u017c fani Kotlina. Dalsze udoskonalenia dosta\u0142 Kotlin DSL, zapewniaj\u0105c takie funkcje takie jak automatyczne uzupe\u0142nianie i szybki dost\u0119p do dokumentacji. W tym wydaniu Kotlin DSL jest ustawiony jako domy\u015blny dla nowych kompilacji Gradle. Wprowadzono szereg aktualizacji, w tym obs\u0142ug\u0119 kompilatora K2 i u\u017cycie funkcji <code>embeddedKotlin()<\/code> dla wtyczek.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Compose Mulitplatform 1.5.0<\/h3>\n\n\n\n<p>A na koniec &#8211; Kotlin Multiplatform w edycji UI! Czyli popularny Compose.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-10.png\" alt=\"\" class=\"wp-image-16689\" width=\"312\" height=\"332\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-10.png 623w, https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-10-281x300.png 281w\" sizes=\"auto, (max-width: 312px) 100vw, 312px\" \/><\/figure><\/div>\n\n\n<p><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2023\/08\/compose-multiplatform-1-5-0-release\/\">Compose Multiplatform 1.5.0<\/a>, przynosz\u0105c stabilizacj\u0119 wersji Desktopowej, przynosz\u0105c \u0142atwiejsze testowania interfejsu u\u017cytkownika i usprawnion\u0105 interoperacyjno\u015b\u0107 ze Swingiem. Wersja iOS zosta\u0142a za\u015b opublikowana jako alfa, doczekuj\u0105c si\u0119 znacz\u0105cych ulepsze\u0144, takich jak usprawnione przewijanie, obs\u0142uga Dynamic Type, czy lepsza obs\u0142uga wy\u015bwietlaczy o wysokiej cz\u0119stotliwo\u015bci od\u015bwie\u017cania. Niestety, chc\u0105cym u\u017cywa\u0107 wersji webowej radz\u0119 jednak uzbroi\u0107 si\u0119 w cierpliwo\u015b\u0107, poniewa\u017c ta pozostaje eksperymentalna. Nowe wydanie opiera si\u0119 na Jetpack Compose 1.5 i integruje Material Design 3 w wersji 1.1, wprowadzaj\u0105c kilka nowych komponent\u00f3w, min. <code>DataPicker<\/code>. Nowe funkcje obejmuj\u0105 za\u015b&nbsp;usp\u00f3jnienie kodu komponent\u00f3w <code>Dialog<\/code>, <code>Popup<\/code> i <code>WindowInsets<\/code>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dzisiaj b\u0119dzie troch\u0119 nietypowo, bo zamiast mem\u00f3w mam dla Was mas\u0119 materia\u0142\u00f3w wideo, ale akurat tak si\u0119 z\u0142o\u017cy\u0142o, \u017ce mia\u0142em do podrzuci<\/p>\n","protected":false},"author":10,"featured_media":16706,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[23,259],"tags":[],"class_list":["post-16683","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm","category-jvm-pl"],"acf":{"estimated_reading_time":"13","feature_image_blog":{"ID":16704,"id":16704,"title":"JVM Weekly 1200x628_V2","filename":"JVM-Weekly-1200x628_V2-10.png","filesize":482791,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-10.png","link":"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/jvm-weekly-1200x628_v2-54-2\/","alt":"","author":"10","description":"","caption":"","name":"jvm-weekly-1200x628_v2-54-2","status":"inherit","uploaded_to":16683,"date":"2023-08-30 09:15:36","modified":"2023-08-30 09:16:57","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":1200,"height":628,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-10-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-10-300x157.png","medium-width":300,"medium-height":157,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-10-768x402.png","medium_large-width":768,"medium_large-height":402,"large":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-10-1024x536.png","large-width":1024,"large-height":536,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-10.png","1536x1536-width":1200,"1536x1536-height":628,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-10.png","2048x2048-width":1200,"2048x2048-height":628,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-10.png","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":157,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-10.png","gform-image-choice-md-width":400,"gform-image-choice-md-height":209,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-10.png","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":314}},"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-11.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>Panama, OpenCL i TornadoVM: Wej\u015bcie Javy w \u015bwiat GPU - JVM Weekly vol. 147 - 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\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Panama, OpenCL i TornadoVM: Wej\u015bcie Javy w \u015bwiat GPU - JVM Weekly vol. 147 - Vived\" \/>\n<meta property=\"og:description\" content=\"Dzisiaj b\u0119dzie troch\u0119 nietypowo, bo zamiast mem\u00f3w mam dla Was mas\u0119 materia\u0142\u00f3w wideo, ale akurat tak si\u0119 z\u0142o\u017cy\u0142o, \u017ce mia\u0142em do podrzuci\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-30T09:16:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-30T09:16:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-11.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\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Panama, OpenCL i TornadoVM: Wej\u015bcie Javy w \u015bwiat GPU &#8211; JVM Weekly vol. 147\",\"datePublished\":\"2023-08-30T09:16:52+00:00\",\"dateModified\":\"2023-08-30T09:16:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/\"},\"wordCount\":2640,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-11.png\",\"articleSection\":[\"JVM\",\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/\",\"url\":\"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/\",\"name\":\"Panama, OpenCL i TornadoVM: Wej\u015bcie Javy w \u015bwiat GPU - JVM Weekly vol. 147 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-11.png\",\"datePublished\":\"2023-08-30T09:16:52+00:00\",\"dateModified\":\"2023-08-30T09:16:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-11.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-11.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Panama, OpenCL i TornadoVM: Wej\u015bcie Javy w \u015bwiat GPU &#8211; JVM Weekly vol. 147\"}]},{\"@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":"Panama, OpenCL i TornadoVM: Wej\u015bcie Javy w \u015bwiat GPU - JVM Weekly vol. 147 - 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\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/","og_locale":"pl_PL","og_type":"article","og_title":"Panama, OpenCL i TornadoVM: Wej\u015bcie Javy w \u015bwiat GPU - JVM Weekly vol. 147 - Vived","og_description":"Dzisiaj b\u0119dzie troch\u0119 nietypowo, bo zamiast mem\u00f3w mam dla Was mas\u0119 materia\u0142\u00f3w wideo, ale akurat tak si\u0119 z\u0142o\u017cy\u0142o, \u017ce mia\u0142em do podrzuci","og_url":"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/","og_site_name":"Vived","article_published_time":"2023-08-30T09:16:52+00:00","article_modified_time":"2023-08-30T09:16:57+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-11.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\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Panama, OpenCL i TornadoVM: Wej\u015bcie Javy w \u015bwiat GPU &#8211; JVM Weekly vol. 147","datePublished":"2023-08-30T09:16:52+00:00","dateModified":"2023-08-30T09:16:57+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/"},"wordCount":2640,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-11.png","articleSection":["JVM","JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/","url":"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/","name":"Panama, OpenCL i TornadoVM: Wej\u015bcie Javy w \u015bwiat GPU - JVM Weekly vol. 147 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-11.png","datePublished":"2023-08-30T09:16:52+00:00","dateModified":"2023-08-30T09:16:57+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-11.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/JVM-Weekly-1200x628_V2-11.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/panama-opencl-i-tornadovm-wejscie-javy-w-swiat-gpu-jvm-weekly-vol-147\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Panama, OpenCL i TornadoVM: Wej\u015bcie Javy w \u015bwiat GPU &#8211; JVM Weekly vol. 147"}]},{"@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 class=\"wp-block-heading\">1. Panama, OpenCL i TornadoVM: Wej\u015bcie Javy w \u015bwiat GPU<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">1. Panama, OpenCL i TornadoVM: Wej\u015bcie Javy w \u015bwiat GPU<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dzi\u015b zaczniemy od bombonierki, kt\u00f3r\u0105 otrzymali\u015bmy, a kt\u00f3r\u0105 b\u0119d\u0119 stopniowo rozpakowywa\u0142 w kolejnych edycjach (proceder, kt\u00f3ry ju\u017c tak naprawd\u0119 rozpocz\u0105\u0142em, prezentuj\u0105c tydzie\u0144 temu detale dotycz\u0105ce Projektu Leyden).<\/p>\n","innerContent":["\n<p>Dzi\u015b zaczniemy od bombonierki, kt\u00f3r\u0105 otrzymali\u015bmy, a kt\u00f3r\u0105 b\u0119d\u0119 stopniowo rozpakowywa\u0142 w kolejnych edycjach (proceder, kt\u00f3ry ju\u017c tak naprawd\u0119 rozpocz\u0105\u0142em, prezentuj\u0105c tydzie\u0144 temu detale dotycz\u0105ce Projektu Leyden).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>JVM Language Summit (JVMLS) to coroczne wydarzenie, kt\u00f3re gromadzi \u015bmietank\u0119 \u015bwiata JVM: projektant\u00f3w j\u0119zyk\u00f3w, tw\u00f3rc\u00f3w kompilator\u00f3w i toolingu czy te\u017c in\u017cynier\u00f3w szeroko rozumianego \"\u015brodowiska uruchomieniowego\", aby om\u00f3wi\u0107 bie\u017c\u0105cy usprawnienia, ale te\u017c pomys\u0142y na dalszy rozw\u00f3j JVM. I cho\u0107 grono go\u015bci jest relatywnie w\u0105skie, to ju\u017c sama komunikacja jest stosunkowo transparentna, poniewa\u017c kolejne wyk\u0142ady zaczynaj\u0105 powoli sp\u0142ywa\u0107, daj\u0105c nam bardzo interesuj\u0105cy wgl\u0105d w prace, r\u00f3wnie\u017c od kuchni. Nie mam tutaj przestrzeni, aby opisywa\u0107 wszystkie, ale my\u015bl\u0119, \u017ce w kolejnych edycjach b\u0119d\u0119 przeskakiwa\u0142 przez kolejne tematy, stopniowo samodzielnie ogl\u0105daj\u0105c poszczeg\u00f3lne nagrania. Tak jak wspomnia\u0142em, mieli\u015bmy okazje porozmawia\u0107 ju\u017c w poprzedniej edycji o Project Leyden, dzisiaj za\u015b kolejny temat, kt\u00f3ry wyj\u0105tkowo lubi\u0119, a o kt\u00f3rym rzadko mam okazje wspomnie\u0107 - dopasowanie platformy JVM do pracy z GPU.<\/p>\n","innerContent":["\n<p>JVM Language Summit (JVMLS) to coroczne wydarzenie, kt\u00f3re gromadzi \u015bmietank\u0119 \u015bwiata JVM: projektant\u00f3w j\u0119zyk\u00f3w, tw\u00f3rc\u00f3w kompilator\u00f3w i toolingu czy te\u017c in\u017cynier\u00f3w szeroko rozumianego \"\u015brodowiska uruchomieniowego\", aby om\u00f3wi\u0107 bie\u017c\u0105cy usprawnienia, ale te\u017c pomys\u0142y na dalszy rozw\u00f3j JVM. I cho\u0107 grono go\u015bci jest relatywnie w\u0105skie, to ju\u017c sama komunikacja jest stosunkowo transparentna, poniewa\u017c kolejne wyk\u0142ady zaczynaj\u0105 powoli sp\u0142ywa\u0107, daj\u0105c nam bardzo interesuj\u0105cy wgl\u0105d w prace, r\u00f3wnie\u017c od kuchni. Nie mam tutaj przestrzeni, aby opisywa\u0107 wszystkie, ale my\u015bl\u0119, \u017ce w kolejnych edycjach b\u0119d\u0119 przeskakiwa\u0142 przez kolejne tematy, stopniowo samodzielnie ogl\u0105daj\u0105c poszczeg\u00f3lne nagrania. Tak jak wspomnia\u0142em, mieli\u015bmy okazje porozmawia\u0107 ju\u017c w poprzedniej edycji o Project Leyden, dzisiaj za\u015b kolejny temat, kt\u00f3ry wyj\u0105tkowo lubi\u0119, a o kt\u00f3rym rzadko mam okazje wspomnie\u0107 - dopasowanie platformy JVM do pracy z GPU.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=lbKBu3lTftc","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=lbKBu3lTftc\n<\/div><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=lbKBu3lTftc\n<\/div><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W swojej prezentacji <a href=\"https:\/\/www.youtube.com\/watch?v=lbKBu3lTftc\">Java and GPU \u2026 are we nearly there yet?<\/a>, Gary Frost, Architekt z Oracle, przedstawi\u0142 wnioski dotycz\u0105ce integracji Javy z GPU, koncentruj\u0105c si\u0119 na wyzwaniach i potencjalnych nowych mo\u017cliwo\u015bciach rozwoju mo\u017cliwych do osi\u0105gni\u0119cia dzi\u0119ki wsparciu pracy z procesorami graficznymi. Hardware 101: W przeciwie\u0144stwie do tradycyjnych CPU, kt\u00f3re posiadaj\u0105 bardziej dziesi\u0105tki rdzeni, pojedynczy GPU potrafi dostarcza\u0107 ich tysi\u0105ce (zaprojektowane w modelu rdze\u0144 per piksel). GPU jest wi\u0119c naturalnie zaprojektowane do zarz\u0105dzania milionami jednoczesnych zada\u0144. Pocz\u0105tkowo rdzenie te by\u0142y g\u0142\u00f3wnie u\u017cywane do cieniowania pikseli w renderingu grafiki, kiedy deweloperzy zauwa\u017cyli ogromne mo\u017cliwo\u015bci obliczeniowe GPU, zacz\u0119\u0142y by\u0107 stosowane w wielu innych zadaniach, w tym w Machine Learning i sztucznej inteligencji. Dotychczasowe podej\u015bcia bardzo przyst\u0119pnie opisuje tekst <a href=\"https:\/\/blogs.oracle.com\/javamagazine\/post\/programming-the-gpu-in-java\">Programming the GPU in Java<\/a>, pochodz\u0105cy jednak jeszcze ze stycznia 2020, a od tamtego czasu sama platforma posz\u0142a do przodu.<\/p>\n","innerContent":["\n<p>W swojej prezentacji <a href=\"https:\/\/www.youtube.com\/watch?v=lbKBu3lTftc\">Java and GPU \u2026 are we nearly there yet?<\/a>, Gary Frost, Architekt z Oracle, przedstawi\u0142 wnioski dotycz\u0105ce integracji Javy z GPU, koncentruj\u0105c si\u0119 na wyzwaniach i potencjalnych nowych mo\u017cliwo\u015bciach rozwoju mo\u017cliwych do osi\u0105gni\u0119cia dzi\u0119ki wsparciu pracy z procesorami graficznymi. Hardware 101: W przeciwie\u0144stwie do tradycyjnych CPU, kt\u00f3re posiadaj\u0105 bardziej dziesi\u0105tki rdzeni, pojedynczy GPU potrafi dostarcza\u0107 ich tysi\u0105ce (zaprojektowane w modelu rdze\u0144 per piksel). GPU jest wi\u0119c naturalnie zaprojektowane do zarz\u0105dzania milionami jednoczesnych zada\u0144. Pocz\u0105tkowo rdzenie te by\u0142y g\u0142\u00f3wnie u\u017cywane do cieniowania pikseli w renderingu grafiki, kiedy deweloperzy zauwa\u017cyli ogromne mo\u017cliwo\u015bci obliczeniowe GPU, zacz\u0119\u0142y by\u0107 stosowane w wielu innych zadaniach, w tym w Machine Learning i sztucznej inteligencji. Dotychczasowe podej\u015bcia bardzo przyst\u0119pnie opisuje tekst <a href=\"https:\/\/blogs.oracle.com\/javamagazine\/post\/programming-the-gpu-in-java\">Programming the GPU in Java<\/a>, pochodz\u0105cy jednak jeszcze ze stycznia 2020, a od tamtego czasu sama platforma posz\u0142a do przodu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":16685,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-9.png\" alt=\"\" class=\"wp-image-16685\"\/><figcaption class=\"wp-element-caption\">Bo dzisiaj za cz\u0119sto wygl\u0105da to po prostu tak<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-9.png\" alt=\"\" class=\"wp-image-16685\"\/><figcaption class=\"wp-element-caption\">Bo dzisiaj za cz\u0119sto wygl\u0105da to po prostu tak<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Z prezentacji Frosta wy\u0142ania si\u0119 znaczenie Projektu Panama. Uznaj\u0105c wcze\u015bniejsze wyzwania, w tym ograniczenia samego JVM oraz pr\u00f3by ukrywania z\u0142o\u017cono\u015bci programowania GPU za pomoc\u0105 API Java (bo to zawsze dzia\u0142a ekh, ekh... RPC), Frost zaproponowa\u0142 bardziej przejrzyste podej\u015bcie. Wprowadzi\u0142 koncepcj\u0119 \"zestawu narz\u0119dzi do akceleracji heterogenicznej\", kt\u00f3ry jest oparty w\u0142a\u015bnie na Projekcie Panama, a u\u017cywa\u0107 by mia\u0142 tak zwanego <code>NDRange<\/code>. Struktura ta pochodzi z frameworku OpenCL, stworzonego do pisania program\u00f3w, kt\u00f3re dzia\u0142aj\u0105 na heterogenicznych platformach sk\u0142adaj\u0105cych si\u0119 z zr\u00f3\u017cnicowanego hardware, daj\u0105c abstrakcje nad r\u00f3\u017cnego rodzajami przetwarzania. <code>NDRange<\/code> to w uproszczeniu zbi\u00f3r jednostek pracy, kt\u00f3ry nast\u0119pnie mo\u017ce by\u0107 w dowolnie roz\u0142o\u017cone na dost\u0119pne zasoby sprz\u0119towe i przetworzony, a tak\u017ce mog\u0119 by\u0107 \u0142\u0105czone w grupy robocze (work-groups) w celu optymalizacji wydajno\u015bci ca\u0142ego procesu. Abstrakcja ta jest bardzo elastyczna, pozwala programistom na wykorzystanie mocy wielu jednostek obliczeniowych w r\u00f3\u017cnorodnych zadaniach, st\u0105d propozycja dodania jej do JVM.<\/p>\n","innerContent":["\n<p>Z prezentacji Frosta wy\u0142ania si\u0119 znaczenie Projektu Panama. Uznaj\u0105c wcze\u015bniejsze wyzwania, w tym ograniczenia samego JVM oraz pr\u00f3by ukrywania z\u0142o\u017cono\u015bci programowania GPU za pomoc\u0105 API Java (bo to zawsze dzia\u0142a ekh, ekh... RPC), Frost zaproponowa\u0142 bardziej przejrzyste podej\u015bcie. Wprowadzi\u0142 koncepcj\u0119 \"zestawu narz\u0119dzi do akceleracji heterogenicznej\", kt\u00f3ry jest oparty w\u0142a\u015bnie na Projekcie Panama, a u\u017cywa\u0107 by mia\u0142 tak zwanego <code>NDRange<\/code>. Struktura ta pochodzi z frameworku OpenCL, stworzonego do pisania program\u00f3w, kt\u00f3re dzia\u0142aj\u0105 na heterogenicznych platformach sk\u0142adaj\u0105cych si\u0119 z zr\u00f3\u017cnicowanego hardware, daj\u0105c abstrakcje nad r\u00f3\u017cnego rodzajami przetwarzania. <code>NDRange<\/code> to w uproszczeniu zbi\u00f3r jednostek pracy, kt\u00f3ry nast\u0119pnie mo\u017ce by\u0107 w dowolnie roz\u0142o\u017cone na dost\u0119pne zasoby sprz\u0119towe i przetworzony, a tak\u017ce mog\u0119 by\u0107 \u0142\u0105czone w grupy robocze (work-groups) w celu optymalizacji wydajno\u015bci ca\u0142ego procesu. Abstrakcja ta jest bardzo elastyczna, pozwala programistom na wykorzystanie mocy wielu jednostek obliczeniowych w r\u00f3\u017cnorodnych zadaniach, st\u0105d propozycja dodania jej do JVM.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W dalszej cz\u0119\u015bci prezentacji sporo miejsca Frost po\u015bwi\u0119ci\u0142 te\u017c TornadoVM, kt\u00f3re doczeka\u0142o si\u0119 swojego w\u0142asnego, w pe\u0142ni po\u015bwi\u0119conego sobie talka: <a href=\"https:\/\/www.youtube.com\/watch?v=VTzGlnv6nuA\">From CPU to GPU and FPGAs: Supercharging Java Applications with TornadoVM<\/a>, wyg\u0142oszonego przez Juan Fumero, tw\u00f3rc\u0119 projektu. <\/p>\n","innerContent":["\n<p>W dalszej cz\u0119\u015bci prezentacji sporo miejsca Frost po\u015bwi\u0119ci\u0142 te\u017c TornadoVM, kt\u00f3re doczeka\u0142o si\u0119 swojego w\u0142asnego, w pe\u0142ni po\u015bwi\u0119conego sobie talka: <a href=\"https:\/\/www.youtube.com\/watch?v=VTzGlnv6nuA\">From CPU to GPU and FPGAs: Supercharging Java Applications with TornadoVM<\/a>, wyg\u0142oszonego przez Juan Fumero, tw\u00f3rc\u0119 projektu. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=VTzGlnv6nuA","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=VTzGlnv6nuA\n<\/div><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=VTzGlnv6nuA\n<\/div><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>TornadoVM to platforma zaprojektowana w\u0142a\u015bnie po to, aby umo\u017cliwi\u0107 efektywne wykonywanie aplikacji Java na r\u00f3\u017cnorodnych platformach sprz\u0119towych, w tym na GPU, FPGA oraz systemach wielordzeniowych. Przetwarzaj\u0105c bajtkod Java na wspomniany ju\u017c OpenCL, TornadoVM zapewnia, \u017ce aplikacje Java mog\u0105 wykorzystywa\u0107 mo\u017cliwo\u015bci obliczeniowe wyspecjalizowanego hardware bez potrzeby wprowadzania modyfikacji specyficznych dla danego sprz\u0119tu, oferuj\u0105c programistom sp\u00f3jne i wydajne \u015brodowisko dla ich aplikacji. TornadoVM opiera si\u0119 na integracji z GraalVM, i wykorzystuje jego kompilator JIT, zdolny do przekszta\u0142cania bajtkodu Java w natywny kod maszynowy. TornadoVM mo\u017ce korzysta\u0107 z kompilatora JIT GraalVM w swoich procesach translacji, dodatkowo czerpi\u0105c korzy\u015bci z zaawansowanych optymalizacji oferowanych przez GraalVM.<\/p>\n","innerContent":["\n<p>TornadoVM to platforma zaprojektowana w\u0142a\u015bnie po to, aby umo\u017cliwi\u0107 efektywne wykonywanie aplikacji Java na r\u00f3\u017cnorodnych platformach sprz\u0119towych, w tym na GPU, FPGA oraz systemach wielordzeniowych. Przetwarzaj\u0105c bajtkod Java na wspomniany ju\u017c OpenCL, TornadoVM zapewnia, \u017ce aplikacje Java mog\u0105 wykorzystywa\u0107 mo\u017cliwo\u015bci obliczeniowe wyspecjalizowanego hardware bez potrzeby wprowadzania modyfikacji specyficznych dla danego sprz\u0119tu, oferuj\u0105c programistom sp\u00f3jne i wydajne \u015brodowisko dla ich aplikacji. TornadoVM opiera si\u0119 na integracji z GraalVM, i wykorzystuje jego kompilator JIT, zdolny do przekszta\u0142cania bajtkodu Java w natywny kod maszynowy. TornadoVM mo\u017ce korzysta\u0107 z kompilatora JIT GraalVM w swoich procesach translacji, dodatkowo czerpi\u0105c korzy\u015bci z zaawansowanych optymalizacji oferowanych przez GraalVM.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Sporo miejsca w prezentacji skupi\u0142o si\u0119 na prezentacji przysz\u0142ych plan\u00f3w i roadmapy dla TornadoVM. Aby jeszcze bardziej zwi\u0119kszy\u0107 wygod\u0119 u\u017cywania i wydajno\u015b\u0107 TornadoVM, zesp\u00f3\u0142 bada mo\u017cliwo\u015b\u0107 w\u0142\u0105czenia gotowych bibliotek od gigant\u00f3w bran\u017cy takich jak NVIDIA, AMD i Intel. W tym kontek\u015bcie godnym uwagi dodatkiem s\u0105 te\u017c \"library tasks\", stworzone do prostszego wykonywania wywo\u0142a\u0144 funkcji natywnych. \u0141\u0105cz\u0105c si\u0119 z tematem prezentacji Frosta, integracja z Panam\u0105 jest postrzegana jako potencjalne rozwi\u0105zanie problem\u00f3w, takich jak transfer danych mi\u0119dzy pami\u0119ci\u0105 heap oraz off-heap oraz lepsz\u0105 kontrol\u0105 nad prac\u0105 Garbage Collectora, co ma u\u0142atwi\u0107 u\u017cycie platformy przez frameworki AI. Pojawi\u0142y si\u0119 te\u017c idee dzielenia si\u0119 javowym heapem mi\u0119dzy CPU a GPU, zapowiedziano te\u017c ch\u0119\u0107&nbsp;bardzo \u015bcis\u0142\u0105 wsp\u00f3\u0142prac\u0119 z Graal Core Team.<\/p>\n","innerContent":["\n<p>Sporo miejsca w prezentacji skupi\u0142o si\u0119 na prezentacji przysz\u0142ych plan\u00f3w i roadmapy dla TornadoVM. Aby jeszcze bardziej zwi\u0119kszy\u0107 wygod\u0119 u\u017cywania i wydajno\u015b\u0107 TornadoVM, zesp\u00f3\u0142 bada mo\u017cliwo\u015b\u0107 w\u0142\u0105czenia gotowych bibliotek od gigant\u00f3w bran\u017cy takich jak NVIDIA, AMD i Intel. W tym kontek\u015bcie godnym uwagi dodatkiem s\u0105 te\u017c \"library tasks\", stworzone do prostszego wykonywania wywo\u0142a\u0144 funkcji natywnych. \u0141\u0105cz\u0105c si\u0119 z tematem prezentacji Frosta, integracja z Panam\u0105 jest postrzegana jako potencjalne rozwi\u0105zanie problem\u00f3w, takich jak transfer danych mi\u0119dzy pami\u0119ci\u0105 heap oraz off-heap oraz lepsz\u0105 kontrol\u0105 nad prac\u0105 Garbage Collectora, co ma u\u0142atwi\u0107 u\u017cycie platformy przez frameworki AI. Pojawi\u0142y si\u0119 te\u017c idee dzielenia si\u0119 javowym heapem mi\u0119dzy CPU a GPU, zapowiedziano te\u017c ch\u0119\u0107&nbsp;bardzo \u015bcis\u0142\u0105 wsp\u00f3\u0142prac\u0119 z Graal Core Team.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/open.spotify.com\/episode\/68BTZor86cqoa4puVRSXyT","type":"rich","providerNameSlug":"spotify","responsive":true,"className":"wp-embed-aspect-21-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-rich is-provider-spotify wp-block-embed-spotify wp-embed-aspect-21-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/open.spotify.com\/episode\/68BTZor86cqoa4puVRSXyT\n<\/div><figcaption class=\"wp-element-caption\">Aby dowiedzie\u0107 si\u0119 wi\u0119cej o TornadoVM, proponuj\u0119 pos\u0142ucha\u0107 odcinka AirHacks.fm od Adama Biena, w kt\u00f3rym om\u00f3wi\u0142 on t\u0142o projektu z Juanem. Znajdziecie tam wiele interesuj\u0105cych informacji zza kulis, jak zawsze w AirHacks.fm.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-rich is-provider-spotify wp-block-embed-spotify wp-embed-aspect-21-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/open.spotify.com\/episode\/68BTZor86cqoa4puVRSXyT\n<\/div><figcaption class=\"wp-element-caption\">Aby dowiedzie\u0107 si\u0119 wi\u0119cej o TornadoVM, proponuj\u0119 pos\u0142ucha\u0107 odcinka AirHacks.fm od Adama Biena, w kt\u00f3rym om\u00f3wi\u0142 on t\u0142o projektu z Juanem. Znajdziecie tam wiele interesuj\u0105cych informacji zza kulis, jak zawsze w AirHacks.fm.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To tak na smaka - kolejne prezentacje dopiero sp\u0142ywaj\u0105, a my\u015bl\u0119, \u017ce gdzie\u015b w okolicach JDK 21 warto b\u0119dzie zrobi\u0107 sobie przegl\u0105d materia\u0142\u00f3w po\u015bwi\u0119conych virtual threadom - kt\u00f3re jak si\u0119 pewnie domy\u015blacie, by\u0142y jednym z istotnych temat\u00f3w na wydarzeniu.<\/p>\n","innerContent":["\n<p>To tak na smaka - kolejne prezentacje dopiero sp\u0142ywaj\u0105, a my\u015bl\u0119, \u017ce gdzie\u015b w okolicach JDK 21 warto b\u0119dzie zrobi\u0107 sobie przegl\u0105d materia\u0142\u00f3w po\u015bwi\u0119conych virtual threadom - kt\u00f3re jak si\u0119 pewnie domy\u015blacie, by\u0142y jednym z istotnych temat\u00f3w na wydarzeniu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">2. Spring I\/O przynosi zapowied\u017a Spring AI<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">2. Spring I\/O przynosi zapowied\u017a Spring AI<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pozostaj\u0105c w temacie rzeczy, kt\u00f3re powoli b\u0119d\u0119 rozpakowywa\u0142, to w zesz\u0142ym tygodniu odby\u0142 si\u0119 Spring I\/O. Na razie niestety nie mamy za wiele dost\u0119pnych materia\u0142\u00f3w (poza <a href=\"https:\/\/spring.io\/blog\/2023\/08\/29\/my-springone-2023-recap\">obowi\u0105zkowym recapem<\/a> Josha Longa), ale niekt\u00f3re detale ju\u017c przeciek\u0142y do \u015bwiadomo\u015bci publicznej, a w\u015br\u00f3d nich Spring AI. Rozpakujmy sobie, co kryje si\u0119 pod t\u0105 nazw\u0105.<\/p>\n","innerContent":["\n<p>Pozostaj\u0105c w temacie rzeczy, kt\u00f3re powoli b\u0119d\u0119 rozpakowywa\u0142, to w zesz\u0142ym tygodniu odby\u0142 si\u0119 Spring I\/O. Na razie niestety nie mamy za wiele dost\u0119pnych materia\u0142\u00f3w (poza <a href=\"https:\/\/spring.io\/blog\/2023\/08\/29\/my-springone-2023-recap\">obowi\u0105zkowym recapem<\/a> Josha Longa), ale niekt\u00f3re detale ju\u017c przeciek\u0142y do \u015bwiadomo\u015bci publicznej, a w\u015br\u00f3d nich Spring AI. Rozpakujmy sobie, co kryje si\u0119 pod t\u0105 nazw\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Spring AI to nowy projekt zainicjowany przez Marka Pollacka, kt\u00f3ry s\u0142u\u017cy\u0107 ma jako pomost mi\u0119dzy zaawansowanymi mo\u017cliwo\u015bciami raz ju\u017c wytrenowanych modeli AI, a typowymi dla Springa wzorcami pisania aplikacji. Centralnym elementem tej integracji jest mo\u017cliwo\u015b\u0107 p\u0142ynnej pracy z modelami, zw\u0142aszcza wariantami GPT. <\/p>\n","innerContent":["\n<p>Spring AI to nowy projekt zainicjowany przez Marka Pollacka, kt\u00f3ry s\u0142u\u017cy\u0107 ma jako pomost mi\u0119dzy zaawansowanymi mo\u017cliwo\u015bciami raz ju\u017c wytrenowanych modeli AI, a typowymi dla Springa wzorcami pisania aplikacji. Centralnym elementem tej integracji jest mo\u017cliwo\u015b\u0107 p\u0142ynnej pracy z modelami, zw\u0142aszcza wariantami GPT. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=0P8UU5vkvI8","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=0P8UU5vkvI8\n<\/div><figcaption class=\"wp-element-caption\">Josh Long, Developer Advocate Springa, przeprowadzi\u0142 z Markiem <a href=\"https:\/\/www.youtube.com\/watch?v=0P8UU5vkvI8\">wywiad podczas Spring I\/O<\/a>, dzi\u0119ki czemu mo\u017cemy poznali\u015bmy nieco szczeg\u00f3\u0142\u00f3w na temat projektu.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=0P8UU5vkvI8\n<\/div><figcaption class=\"wp-element-caption\">Josh Long, Developer Advocate Springa, przeprowadzi\u0142 z Markiem <a href=\"https:\/\/www.youtube.com\/watch?v=0P8UU5vkvI8\">wywiad podczas Spring I\/O<\/a>, dzi\u0119ki czemu mo\u017cemy poznali\u015bmy nieco szczeg\u00f3\u0142\u00f3w na temat projektu.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Udzia\u0142 Javy w rynku sztucznej inteligencji zawsze by\u0142 ograniczony, g\u0142\u00f3wnie ze wzgl\u0119du na dominacj\u0119 algorytm\u00f3w C\/C++ (na co rozwi\u0105zaniem ma by\u0107 Panama) i przewag\u0119 Pythona w ekosystemie ML\/AI. Jednak rozw\u00f3j generatywnej publicznie dost\u0119pnych modeli, kt\u00f3re umo\u017cliwiaj\u0105 interakcj\u0119 ze wst\u0119pnie wytrenowanymi modelami za po\u015brednictwem protoko\u0142u HTTP (jak cho\u0107by GPT), znacznie zmniejszy\u0142 zale\u017cno\u015b\u0107 od okre\u015blonych j\u0119zyk\u00f3w. Ta ewolucja toruje drog\u0119 dla j\u0119zyk\u00f3w takich jak Java, aby sta\u0142y si\u0119 bardziej widoczne w \u015bwiecie sztucznej inteligencji. Czerpi\u0105c inspiracj\u0119 z bibliotek takich jak LangChain, LlamaIndex czy Semantic Kernel, projekt Spring AI ma zaoferowa\u0107 podobne do\u015bwiadczenie AI dla programist\u00f3w Spring. Ca\u0142o\u015b\u0107 te\u017c \u0142adnie wpasowuje si\u0119 w trend zarysowany przez poprzedni\u0105 sekcje, b\u0119d\u0105c komplementarnym dla uruchamiania modeli na samym JVM.<\/p>\n","innerContent":["\n<p>Udzia\u0142 Javy w rynku sztucznej inteligencji zawsze by\u0142 ograniczony, g\u0142\u00f3wnie ze wzgl\u0119du na dominacj\u0119 algorytm\u00f3w C\/C++ (na co rozwi\u0105zaniem ma by\u0107 Panama) i przewag\u0119 Pythona w ekosystemie ML\/AI. Jednak rozw\u00f3j generatywnej publicznie dost\u0119pnych modeli, kt\u00f3re umo\u017cliwiaj\u0105 interakcj\u0119 ze wst\u0119pnie wytrenowanymi modelami za po\u015brednictwem protoko\u0142u HTTP (jak cho\u0107by GPT), znacznie zmniejszy\u0142 zale\u017cno\u015b\u0107 od okre\u015blonych j\u0119zyk\u00f3w. Ta ewolucja toruje drog\u0119 dla j\u0119zyk\u00f3w takich jak Java, aby sta\u0142y si\u0119 bardziej widoczne w \u015bwiecie sztucznej inteligencji. Czerpi\u0105c inspiracj\u0119 z bibliotek takich jak LangChain, LlamaIndex czy Semantic Kernel, projekt Spring AI ma zaoferowa\u0107 podobne do\u015bwiadczenie AI dla programist\u00f3w Spring. Ca\u0142o\u015b\u0107 te\u017c \u0142adnie wpasowuje si\u0119 w trend zarysowany przez poprzedni\u0105 sekcje, b\u0119d\u0105c komplementarnym dla uruchamiania modeli na samym JVM.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Projekt Spring AI wprowadza wi\u0119c wiele funkcji analogicznych do tych w LangChainie. G\u0142\u00f3wne funkcje obejmuj\u0105 wsp\u00f3lny interfejs API dla interakcji modeli AI oraz rozw\u00f3j \"prompt\u00f3w\", kt\u00f3re s\u0105 kluczowe dla komunikacji modeli AI. Dost\u0119pne parsery pomagaj\u0105 konwertowa\u0107 surowe odpowiedzi AI na ustrukturyzowane formaty typu POJO. Projekt podkre\u015bla te\u017c znaczenie zarz\u0105dzania danymi wra\u017cliwymi w LLMach, oferuj\u0105c sposoby na ich u\u017cycie bez potrzeby do\u0142\u0105czania ich w procesie retrenowania modeli. Odbywa si\u0119 to poprzez u\u0142atwienie integracji z bazami wektorowymi, kt\u00f3re u\u0142atwiaj\u0105 prac\u0119&nbsp;z modelami AI.<\/p>\n","innerContent":["\n<p>Projekt Spring AI wprowadza wi\u0119c wiele funkcji analogicznych do tych w LangChainie. G\u0142\u00f3wne funkcje obejmuj\u0105 wsp\u00f3lny interfejs API dla interakcji modeli AI oraz rozw\u00f3j \"prompt\u00f3w\", kt\u00f3re s\u0105 kluczowe dla komunikacji modeli AI. Dost\u0119pne parsery pomagaj\u0105 konwertowa\u0107 surowe odpowiedzi AI na ustrukturyzowane formaty typu POJO. Projekt podkre\u015bla te\u017c znaczenie zarz\u0105dzania danymi wra\u017cliwymi w LLMach, oferuj\u0105c sposoby na ich u\u017cycie bez potrzeby do\u0142\u0105czania ich w procesie retrenowania modeli. Odbywa si\u0119 to poprzez u\u0142atwienie integracji z bazami wektorowymi, kt\u00f3re u\u0142atwiaj\u0105 prac\u0119&nbsp;z modelami AI.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=klTvEwg3oJ4","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=klTvEwg3oJ4\n<\/div><figcaption class=\"wp-element-caption\">Tutaj znajdziecie bardzo dobre, 3-minutowe, a do\u015b\u0107 wyczerpuj\u0105ce (!) wideo w tym temacie.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=klTvEwg3oJ4\n<\/div><figcaption class=\"wp-element-caption\">Tutaj znajdziecie bardzo dobre, 3-minutowe, a do\u015b\u0107 wyczerpuj\u0105ce (!) wideo w tym temacie.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Projekt podkre\u015bla r\u00f3wnie\u017c koncepcj\u0119 \"\u0142a\u0144cuch\u00f3w\", kt\u00f3re umo\u017cliwiaj\u0105 generowanie ci\u0105gu interakcji AI dla pojedynczego wej\u015bcia. Inne kluczowe komponenty obejmuj\u0105 \"Pami\u0119\u0107\" do przywo\u0142ywania poprzednich interakcji i \"Agent\u00f3w\", kt\u00f3re wykorzystuj\u0105 modele AI do dynamicznego wyszukiwania danych i generowania odpowiedzi. Wygl\u0105da to wszystko bardzo ciekawie, i na pewno si\u0119 pobawi\u0119, tak jak ostatnio eksperymentowa\u0142em z Semantic Kernelem.<\/p>\n","innerContent":["\n<p>Projekt podkre\u015bla r\u00f3wnie\u017c koncepcj\u0119 \"\u0142a\u0144cuch\u00f3w\", kt\u00f3re umo\u017cliwiaj\u0105 generowanie ci\u0105gu interakcji AI dla pojedynczego wej\u015bcia. Inne kluczowe komponenty obejmuj\u0105 \"Pami\u0119\u0107\" do przywo\u0142ywania poprzednich interakcji i \"Agent\u00f3w\", kt\u00f3re wykorzystuj\u0105 modele AI do dynamicznego wyszukiwania danych i generowania odpowiedzi. Wygl\u0105da to wszystko bardzo ciekawie, i na pewno si\u0119 pobawi\u0119, tak jak ostatnio eksperymentowa\u0142em z Semantic Kernelem.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A nieco przy okazji Spring I\/O (a tak naprawd\u0119 ciut wcze\u015bniej), og\u0142oszono stabiln\u0105 wersje innego nietypowego, ale bardzo interesuj\u0105cego springowego projektu. W spo\u0142eczno\u015bci programistycznej coraz cz\u0119\u015bciej pojawia si\u0119 bowiem nawo\u0142ywanie do powrotu do monolitu - chodzi tu jednak o taki monolit wymy\u015blony troch\u0119 na nowo. Zwolennicy tego podej\u015bcia twierdz\u0105 bowiem, \u017ce przy u\u017cyciu dzisiejszych narz\u0119dzi i dobrej modularyzacji jeste\u015bmy w stanie stworzy\u0107 codebase posiadaj\u0105cy spor\u0105 ilo\u015b\u0107 zalet mikroserwis\u00f3w przy zaskakuj\u0105co ma\u0142ej ilo\u015bci jego wad. Zainteresowanych odsy\u0142am do koncepcji <a href=\"https:\/\/m.signalvnoise.com\/the-majestic-monolith\/\">Majestatycznego Monolitu<\/a> autorstwa DHH, a tak\u017ce interesuj\u0105cej serii <a href=\"https:\/\/www.kamilgrzybek.com\/design\/modular-monolith-primer\/\">Modular Monolith: A Primer<\/a>.<\/p>\n","innerContent":["\n<p>A nieco przy okazji Spring I\/O (a tak naprawd\u0119 ciut wcze\u015bniej), og\u0142oszono stabiln\u0105 wersje innego nietypowego, ale bardzo interesuj\u0105cego springowego projektu. W spo\u0142eczno\u015bci programistycznej coraz cz\u0119\u015bciej pojawia si\u0119 bowiem nawo\u0142ywanie do powrotu do monolitu - chodzi tu jednak o taki monolit wymy\u015blony troch\u0119 na nowo. Zwolennicy tego podej\u015bcia twierdz\u0105 bowiem, \u017ce przy u\u017cyciu dzisiejszych narz\u0119dzi i dobrej modularyzacji jeste\u015bmy w stanie stworzy\u0107 codebase posiadaj\u0105cy spor\u0105 ilo\u015b\u0107 zalet mikroserwis\u00f3w przy zaskakuj\u0105co ma\u0142ej ilo\u015bci jego wad. Zainteresowanych odsy\u0142am do koncepcji <a href=\"https:\/\/m.signalvnoise.com\/the-majestic-monolith\/\">Majestatycznego Monolitu<\/a> autorstwa DHH, a tak\u017ce interesuj\u0105cej serii <a href=\"https:\/\/www.kamilgrzybek.com\/design\/modular-monolith-primer\/\">Modular Monolith: A Primer<\/a>.<\/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\/2022\/11\/image-36.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Bo zaskakuj\u0105co cz\u0119sto, tak naprawd\u0119 i tak wychodzi nam po prostu rozproszony monolith<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-36.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Bo zaskakuj\u0105co cz\u0119sto, tak naprawd\u0119 i tak wychodzi nam po prostu rozproszony monolith<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>No dobra, ale jak to si\u0119 ma do tematu Springa? Ot\u00f3\u017c ostatnio swoj\u0105 premier\u0119 mia\u0142 projekt <a href=\"https:\/\/spring.io\/blog\/2023\/08\/21\/spring-modulith-1-0-ga-released\">Spring Modulith w wersji 1.0<\/a>, kt\u00f3ry ma wprowadzi\u0107 Springa w er\u0119 modularnego monolitu. Spring-Modulith to rozwini\u0119cie istniej\u0105cego projektu Moduliths (kt\u00f3rego zast\u0105pi), ale jeszcze lepiej zintegrowanego z samym Springiem. Bardzo ciekawy jest sam spos\u00f3b dzia\u0142ania ca\u0142o\u015bci \u2013 zamiast mocno ingerowa\u0107 on w proces budowania, wykorzystuje do weryfikacji projektu testy integracyjne. Dzia\u0142a wi\u0119c podobnie do ArchUnit \u2013 biblioteki, kt\u00f3rej celem jest w\u0142a\u015bnie weryfikacja zale\u017cno\u015bci mi\u0119dzy poszczeg\u00f3lnymi modu\u0142ami, kt\u00f3rej asercje s\u0105 zreszt\u0105 z nim kompatybilne. Magia Modulitha polega jednak na tym, \u017ce dzi\u0119ki znanemu \u015brodowisku uruchomieniowemu (aplikacje Spring Boot 3.0) jest w stanie prekonfigurowa\u0107 odpowiednie testy (w tym wspomnianego) ArchUnita \u2013 co te\u017c czyni. Dzi\u0119ki temu w \u0142atwy spos\u00f3b jeste\u015bmy w stanie przetestowa\u0107, czy jakie\u015b architektoniczne spaghetti nie przemkn\u0119\u0142o przez Code Review, jeszcze na poziomie budowania aplikacji.<\/p>\n","innerContent":["\n<p>No dobra, ale jak to si\u0119 ma do tematu Springa? Ot\u00f3\u017c ostatnio swoj\u0105 premier\u0119 mia\u0142 projekt <a href=\"https:\/\/spring.io\/blog\/2023\/08\/21\/spring-modulith-1-0-ga-released\">Spring Modulith w wersji 1.0<\/a>, kt\u00f3ry ma wprowadzi\u0107 Springa w er\u0119 modularnego monolitu. Spring-Modulith to rozwini\u0119cie istniej\u0105cego projektu Moduliths (kt\u00f3rego zast\u0105pi), ale jeszcze lepiej zintegrowanego z samym Springiem. Bardzo ciekawy jest sam spos\u00f3b dzia\u0142ania ca\u0142o\u015bci \u2013 zamiast mocno ingerowa\u0107 on w proces budowania, wykorzystuje do weryfikacji projektu testy integracyjne. Dzia\u0142a wi\u0119c podobnie do ArchUnit \u2013 biblioteki, kt\u00f3rej celem jest w\u0142a\u015bnie weryfikacja zale\u017cno\u015bci mi\u0119dzy poszczeg\u00f3lnymi modu\u0142ami, kt\u00f3rej asercje s\u0105 zreszt\u0105 z nim kompatybilne. Magia Modulitha polega jednak na tym, \u017ce dzi\u0119ki znanemu \u015brodowisku uruchomieniowemu (aplikacje Spring Boot 3.0) jest w stanie prekonfigurowa\u0107 odpowiednie testy (w tym wspomnianego) ArchUnita \u2013 co te\u017c czyni. Dzi\u0119ki temu w \u0142atwy spos\u00f3b jeste\u015bmy w stanie przetestowa\u0107, czy jakie\u015b architektoniczne spaghetti nie przemkn\u0119\u0142o przez Code Review, jeszcze na poziomie budowania aplikacji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">3. Release Radar<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">3. Release Radar<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/grails.org\/blog\/2023-07-25-introducing-grails-6.html\">Grails 6<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/grails.org\/blog\/2023-07-25-introducing-grails-6.html\">Grails 6<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tym razem zaczniemy sobie od zapowiedzi nieco sp\u00f3\u017anionej, bo samo Grails 6.0 swoj\u0105 premier\u0119 mia\u0142o ju\u017c chwil\u0119 temu. Ale jak to m\u00f3wi\u0105 - lepiej p\u00f3\u017ano ni\u017c wcale. Grails to framework do budowy aplikacji internetowych w Groovy'm, a oparty na niezwykle popularnym kiedy\u015b Rails. Tak jak sza\u0142 na ten framework i ca\u0142ego Ruby'ego nieco przygas\u0142, tak i raczej ma\u0142o rozpoczyna si\u0119 nowych projekt\u00f3w w Grailsach. W dalszym ci\u0105gu warto przygl\u0105dn\u0105\u0107 si\u0119, co pokazuje nowa wersja frameworka.<\/p>\n","innerContent":["\n<p>Tym razem zaczniemy sobie od zapowiedzi nieco sp\u00f3\u017anionej, bo samo Grails 6.0 swoj\u0105 premier\u0119 mia\u0142o ju\u017c chwil\u0119 temu. Ale jak to m\u00f3wi\u0105 - lepiej p\u00f3\u017ano ni\u017c wcale. Grails to framework do budowy aplikacji internetowych w Groovy'm, a oparty na niezwykle popularnym kiedy\u015b Rails. Tak jak sza\u0142 na ten framework i ca\u0142ego Ruby'ego nieco przygas\u0142, tak i raczej ma\u0142o rozpoczyna si\u0119 nowych projekt\u00f3w w Grailsach. W dalszym ci\u0105gu warto przygl\u0105dn\u0105\u0107 si\u0119, co pokazuje nowa wersja frameworka.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Gwiazd\u0105 tego wydania jest nowy UI Grails Forge, umo\u017cliwiaj\u0105cy deweloperom skuteczne zarz\u0105dzanie projektami napisanymi we frameworku, oferuj\u0105c uproszczone rozpocz\u0119cie projektu, intuicyjn\u0105 nawigacj\u0119, walidacj\u0119 w czasie rzeczywistym, wizualne zarz\u0105dzanie zale\u017cno\u015bciami i responsywny design. Co wi\u0119cej, Grails wzmocni\u0142 swoje wi\u0119zi z Micronautem poprzez u\u0142atwienie u\u017cywania bean\u00f3w Micronauta w komponentach Grails oraz wykorzystuje klienta HTTP Micronaut do uproszczonych interakcji z REST API. Grails 6 wprowadzi\u0142 JDK 11 jako minimaln\u0105 wersje, co umo\u017cliwia frameworkowi u\u017cywanie w internalach nowej sk\u0142adni. To jednak nie koniec zmian - plany s\u0105 ju\u017c w toku, by w nadchodz\u0105cym du\u017cym wydaniu zapewni\u0107 p\u0142ynne przej\u015bcie do Java 17.<\/p>\n","innerContent":["\n<p>Gwiazd\u0105 tego wydania jest nowy UI Grails Forge, umo\u017cliwiaj\u0105cy deweloperom skuteczne zarz\u0105dzanie projektami napisanymi we frameworku, oferuj\u0105c uproszczone rozpocz\u0119cie projektu, intuicyjn\u0105 nawigacj\u0119, walidacj\u0119 w czasie rzeczywistym, wizualne zarz\u0105dzanie zale\u017cno\u015bciami i responsywny design. Co wi\u0119cej, Grails wzmocni\u0142 swoje wi\u0119zi z Micronautem poprzez u\u0142atwienie u\u017cywania bean\u00f3w Micronauta w komponentach Grails oraz wykorzystuje klienta HTTP Micronaut do uproszczonych interakcji z REST API. Grails 6 wprowadzi\u0142 JDK 11 jako minimaln\u0105 wersje, co umo\u017cliwia frameworkowi u\u017cywanie w internalach nowej sk\u0142adni. To jednak nie koniec zmian - plany s\u0105 ju\u017c w toku, by w nadchodz\u0105cym du\u017cym wydaniu zapewni\u0107 p\u0142ynne przej\u015bcie do Java 17.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.atomicjar.com\/2023\/08\/announcing-testcontainers-desktop-free-application\/\">Testcontainers Desktop Free Application<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.atomicjar.com\/2023\/08\/announcing-testcontainers-desktop-free-application\/\">Testcontainers Desktop Free Application<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Projekt Testcontainers, od momentu swojego powstania, zawsze boryka\u0142 si\u0119 z problemem \"co zrobi\u0107, \u017ceby, testy startowa\u0142y szybko\". W ci\u0105gu czasu powsta\u0142o wiele pomys\u0142\u00f3w na r\u00f3\u017cne funkcje, takie jak sta\u0142e porty czy stabilne kontenery wielokrotnego u\u017cytku. Chocia\u017c niekt\u00f3re funkcje zosta\u0142y wdro\u017cone w ograniczonym zakresie, to jednak do tej pory najlepszym rozwi\u0105zaniem tego problemu pozostawa\u0142a Testcontainers Cloud. Jednak dla wi\u0119kszo\u015bci z nas, kt\u00f3ra dalej jednak woli odpala\u0107 testy lokalnie, a dodatkowo nie jest gotowa p\u0142aci\u0107 za ten przywilej, powsta\u0142 w\u0142a\u015bnie Testcontainers Desktop (oryginalnie nazywaj\u0105cy si\u0119 podobno Testcontainers Cloud Desktop).<\/p>\n","innerContent":["\n<p>Projekt Testcontainers, od momentu swojego powstania, zawsze boryka\u0142 si\u0119 z problemem \"co zrobi\u0107, \u017ceby, testy startowa\u0142y szybko\". W ci\u0105gu czasu powsta\u0142o wiele pomys\u0142\u00f3w na r\u00f3\u017cne funkcje, takie jak sta\u0142e porty czy stabilne kontenery wielokrotnego u\u017cytku. Chocia\u017c niekt\u00f3re funkcje zosta\u0142y wdro\u017cone w ograniczonym zakresie, to jednak do tej pory najlepszym rozwi\u0105zaniem tego problemu pozostawa\u0142a Testcontainers Cloud. Jednak dla wi\u0119kszo\u015bci z nas, kt\u00f3ra dalej jednak woli odpala\u0107 testy lokalnie, a dodatkowo nie jest gotowa p\u0142aci\u0107 za ten przywilej, powsta\u0142 w\u0142a\u015bnie Testcontainers Desktop (oryginalnie nazywaj\u0105cy si\u0119 podobno Testcontainers Cloud Desktop).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wydana wersja oferuje funkcje takie jak ustawianie sta\u0142ych port\u00f3w, mo\u017cliwo\u015b\u0107 zamra\u017canie kontener\u00f3w umo\u017cliwiaj\u0105ca ich debugowanie oraz stanowi abstrakcje nad r\u00f3\u017cnymi runtime'ami konteneryzacji, w tym moim ulubionym Podmanem. Jest te\u017c swoist\u0105 zach\u0119t\u0105, osoby, kt\u00f3re zdecyduj\u0105 si\u0119 spr\u00f3bowa\u0107 dostan\u0105 bowiem dost\u0119p do 300-minutowej wersji pr\u00f3bnej Testcontainers Cloud.<\/p>\n","innerContent":["\n<p>Wydana wersja oferuje funkcje takie jak ustawianie sta\u0142ych port\u00f3w, mo\u017cliwo\u015b\u0107 zamra\u017canie kontener\u00f3w umo\u017cliwiaj\u0105ca ich debugowanie oraz stanowi abstrakcje nad r\u00f3\u017cnymi runtime'ami konteneryzacji, w tym moim ulubionym Podmanem. Jest te\u017c swoist\u0105 zach\u0119t\u0105, osoby, kt\u00f3re zdecyduj\u0105 si\u0119 spr\u00f3bowa\u0107 dostan\u0105 bowiem dost\u0119p do 300-minutowej wersji pr\u00f3bnej Testcontainers Cloud.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":16699,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-12-1024x378.png\" alt=\"\" class=\"wp-image-16699\"\/><figcaption class=\"wp-element-caption\">Zawsze si\u0119 zastanawia\u0142em, gdzie mo\u017cna spotka\u0107 tych diler\u00f3w z ich pierwszymi dzia\u0142kami, ale nie spodziewa\u0142em si\u0119 \u017ce mowa by\u0142a o AtomicJar.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-12-1024x378.png\" alt=\"\" class=\"wp-image-16699\"\/><figcaption class=\"wp-element-caption\">Zawsze si\u0119 zastanawia\u0142em, gdzie mo\u017cna spotka\u0107 tych diler\u00f3w z ich pierwszymi dzia\u0142kami, ale nie spodziewa\u0142em si\u0119 \u017ce mowa by\u0142a o AtomicJar.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/camel.apache.org\/blog\/2023\/08\/RELEASE-4.0.0\/\">Camel 4.0<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/camel.apache.org\/blog\/2023\/08\/RELEASE-4.0.0\/\">Camel 4.0<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dla tych, kt\u00f3rzy nie mieli okazji zetkn\u0105\u0107 si\u0119 z projektem, Apache Camel to oprogramowanie mocno enterprisowe, oparte na rodzinie wzorc\u00f3w znanych jako Enterprise Integration Patterns - spodziewajcie si\u0119 du\u017co XML-a, aczkolwiek sam Camel te\u017c si\u0119 mocno unowocze\u015bni\u0142 od czasu, kiedy mia\u0142em przyjemno\u015b\u0107 go stosowa\u0107. U\u0142atwia integracj\u0119 r\u00f3\u017cnych system\u00f3w, umo\u017cliwiaj\u0105c im efektywn\u0105 wymian\u0119 danych bez potrzeby tworzenia dedykowanego, powtarzalnego kodu integracyjnego i obs\u0142uguje liczne formaty transportu i danych, co czyni go ca\u0142kiem interesuj\u0105cym narz\u0119dziem, je\u015bli Wasza firma wpada w \u015bwiat Enterprise.<\/p>\n","innerContent":["\n<p>Dla tych, kt\u00f3rzy nie mieli okazji zetkn\u0105\u0107 si\u0119 z projektem, Apache Camel to oprogramowanie mocno enterprisowe, oparte na rodzinie wzorc\u00f3w znanych jako Enterprise Integration Patterns - spodziewajcie si\u0119 du\u017co XML-a, aczkolwiek sam Camel te\u017c si\u0119 mocno unowocze\u015bni\u0142 od czasu, kiedy mia\u0142em przyjemno\u015b\u0107 go stosowa\u0107. U\u0142atwia integracj\u0119 r\u00f3\u017cnych system\u00f3w, umo\u017cliwiaj\u0105c im efektywn\u0105 wymian\u0119 danych bez potrzeby tworzenia dedykowanego, powtarzalnego kodu integracyjnego i obs\u0142uguje liczne formaty transportu i danych, co czyni go ca\u0142kiem interesuj\u0105cym narz\u0119dziem, je\u015bli Wasza firma wpada w \u015bwiat Enterprise.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Apache Camel 4.0 to g\u0142\u00f3wnie znana Wam migracja z <code>javax<\/code> na <code>jakarta<\/code>, dostosowuj\u0105c si\u0119 do nowo\u015bci z Jakarta EE 10, i podbija minimaln\u0105 wersj\u0119 Javy do JDK 17 (osoby, kt\u00f3re nie mog\u0105 dokona\u0107 aktualizacji, zmuszeni s\u0105 do pozostania na wersji Camel 3.x,), eliminuje te\u017c obowi\u0105zkowe zale\u017cno\u015bci na JAXB. Jest r\u00f3wnie\u017c przystosowany, by integrowa\u0107 si\u0119 \u0142atwo z Spring Framework 6, Spring Boot 3 oraz Quarkusem 3. Wydanie \u0142\u0105czy Camel Core i Camel Spring Boot (co obrazuje kierunek rozwoju) oraz wintegrowuje Camel Karaf jako subkomponent Apache Karaf. Z drugiej strony, dochodzi do kilku deprekacji, jak np. w <code>camel-cdi<\/code> czy wsparciu dla JUnit 4.<\/p>\n","innerContent":["\n<p>Apache Camel 4.0 to g\u0142\u00f3wnie znana Wam migracja z <code>javax<\/code> na <code>jakarta<\/code>, dostosowuj\u0105c si\u0119 do nowo\u015bci z Jakarta EE 10, i podbija minimaln\u0105 wersj\u0119 Javy do JDK 17 (osoby, kt\u00f3re nie mog\u0105 dokona\u0107 aktualizacji, zmuszeni s\u0105 do pozostania na wersji Camel 3.x,), eliminuje te\u017c obowi\u0105zkowe zale\u017cno\u015bci na JAXB. Jest r\u00f3wnie\u017c przystosowany, by integrowa\u0107 si\u0119 \u0142atwo z Spring Framework 6, Spring Boot 3 oraz Quarkusem 3. Wydanie \u0142\u0105czy Camel Core i Camel Spring Boot (co obrazuje kierunek rozwoju) oraz wintegrowuje Camel Karaf jako subkomponent Apache Karaf. Z drugiej strony, dochodzi do kilku deprekacji, jak np. w <code>camel-cdi<\/code> czy wsparciu dla JUnit 4.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/docs.gradle.org\/8.3\/release-notes.html\">Gradle 8.3<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/docs.gradle.org\/8.3\/release-notes.html\">Gradle 8.3<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pojawi\u0142a si\u0119 nowa wersja <a href=\"(https:\/\/docs.gradle.org\/8.3\/release-notes.html)\">Gradle 8.3<\/a>, wprowadzi\u0142 mn\u00f3stwo ulepsze\u0144 w swojej ostatniej aktualizacji. Godn\u0105 uwagi zmian\u0105 jest optymalizacja kompilacji Java, dzi\u0119ki u\u017cyciu deamon\u00f3w, kt\u00f3re rozgrzewaj\u0105 si\u0119 po kilku u\u017cyciach, co mo\u017ce prowadzi\u0107 do skr\u00f3cenia czasu kompilacji nawet o 30%. Po stronie konfiguracji ulepszono pami\u0119\u0107 podr\u0119czn\u0105 konfiguracji, aby buforowa\u0107 wyniki fazy konfiguracji, zwi\u0119kszaj\u0105c wydajno\u015b\u0107 kompilacji.<\/p>\n","innerContent":["\n<p>Pojawi\u0142a si\u0119 nowa wersja <a href=\"(https:\/\/docs.gradle.org\/8.3\/release-notes.html)\">Gradle 8.3<\/a>, wprowadzi\u0142 mn\u00f3stwo ulepsze\u0144 w swojej ostatniej aktualizacji. Godn\u0105 uwagi zmian\u0105 jest optymalizacja kompilacji Java, dzi\u0119ki u\u017cyciu deamon\u00f3w, kt\u00f3re rozgrzewaj\u0105 si\u0119 po kilku u\u017cyciach, co mo\u017ce prowadzi\u0107 do skr\u00f3cenia czasu kompilacji nawet o 30%. Po stronie konfiguracji ulepszono pami\u0119\u0107 podr\u0119czn\u0105 konfiguracji, aby buforowa\u0107 wyniki fazy konfiguracji, zwi\u0119kszaj\u0105c wydajno\u015b\u0107 kompilacji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kolejnym ulepszeniem jest pe\u0142na (wreszcie) obs\u0142uga Java 20. Wcze\u015bniej, podczas gdy Gradle 8.1 u\u0142atwia\u0142 kompilacj\u0119 i testowanie z Jav\u0105 20, nie obs\u0142ugiwa\u0142 uruchamiania Gradle na tej wersji JDK, co prowadzi\u0142o do sytuacji gdy niekt\u00f3re projekty musia\u0142y posiada\u0107 wcze\u015bniejsz\u0105 wersje JDK tylko na potrzeby build toola. Aktualizacja zawiera r\u00f3wnie\u017c ulepszenia w dla wtyczki CodeNarc oraz ulepszon\u0105 obs\u0142ug\u0119 nowych narz\u0119dzi Mavena.<\/p>\n","innerContent":["\n<p>Kolejnym ulepszeniem jest pe\u0142na (wreszcie) obs\u0142uga Java 20. Wcze\u015bniej, podczas gdy Gradle 8.1 u\u0142atwia\u0142 kompilacj\u0119 i testowanie z Jav\u0105 20, nie obs\u0142ugiwa\u0142 uruchamiania Gradle na tej wersji JDK, co prowadzi\u0142o do sytuacji gdy niekt\u00f3re projekty musia\u0142y posiada\u0107 wcze\u015bniejsz\u0105 wersje JDK tylko na potrzeby build toola. Aktualizacja zawiera r\u00f3wnie\u017c ulepszenia w dla wtyczki CodeNarc oraz ulepszon\u0105 obs\u0142ug\u0119 nowych narz\u0119dzi Mavena.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zadowoleni b\u0119d\u0105 te\u017c fani Kotlina. Dalsze udoskonalenia dosta\u0142 Kotlin DSL, zapewniaj\u0105c takie funkcje takie jak automatyczne uzupe\u0142nianie i szybki dost\u0119p do dokumentacji. W tym wydaniu Kotlin DSL jest ustawiony jako domy\u015blny dla nowych kompilacji Gradle. Wprowadzono szereg aktualizacji, w tym obs\u0142ug\u0119 kompilatora K2 i u\u017cycie funkcji <code>embeddedKotlin()<\/code> dla wtyczek.<\/p>\n","innerContent":["\n<p>Zadowoleni b\u0119d\u0105 te\u017c fani Kotlina. Dalsze udoskonalenia dosta\u0142 Kotlin DSL, zapewniaj\u0105c takie funkcje takie jak automatyczne uzupe\u0142nianie i szybki dost\u0119p do dokumentacji. W tym wydaniu Kotlin DSL jest ustawiony jako domy\u015blny dla nowych kompilacji Gradle. Wprowadzono szereg aktualizacji, w tym obs\u0142ug\u0119 kompilatora K2 i u\u017cycie funkcji <code>embeddedKotlin()<\/code> dla wtyczek.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Compose Mulitplatform 1.5.0<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Compose Mulitplatform 1.5.0<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A na koniec - Kotlin Multiplatform w edycji UI! Czyli popularny Compose.<\/p>\n","innerContent":["\n<p>A na koniec - Kotlin Multiplatform w edycji UI! Czyli popularny Compose.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":16689,"width":312,"height":332,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-10.png\" alt=\"\" class=\"wp-image-16689\" width=\"312\" height=\"332\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-10.png\" alt=\"\" class=\"wp-image-16689\" width=\"312\" height=\"332\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2023\/08\/compose-multiplatform-1-5-0-release\/\">Compose Multiplatform 1.5.0<\/a>, przynosz\u0105c stabilizacj\u0119 wersji Desktopowej, przynosz\u0105c \u0142atwiejsze testowania interfejsu u\u017cytkownika i usprawnion\u0105 interoperacyjno\u015b\u0107 ze Swingiem. Wersja iOS zosta\u0142a za\u015b opublikowana jako alfa, doczekuj\u0105c si\u0119 znacz\u0105cych ulepsze\u0144, takich jak usprawnione przewijanie, obs\u0142uga Dynamic Type, czy lepsza obs\u0142uga wy\u015bwietlaczy o wysokiej cz\u0119stotliwo\u015bci od\u015bwie\u017cania. Niestety, chc\u0105cym u\u017cywa\u0107 wersji webowej radz\u0119 jednak uzbroi\u0107 si\u0119 w cierpliwo\u015b\u0107, poniewa\u017c ta pozostaje eksperymentalna. Nowe wydanie opiera si\u0119 na Jetpack Compose 1.5 i integruje Material Design 3 w wersji 1.1, wprowadzaj\u0105c kilka nowych komponent\u00f3w, min. <code>DataPicker<\/code>. Nowe funkcje obejmuj\u0105 za\u015b&nbsp;usp\u00f3jnienie kodu komponent\u00f3w <code>Dialog<\/code>, <code>Popup<\/code> i <code>WindowInsets<\/code>.<\/p>\n","innerContent":["\n<p><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2023\/08\/compose-multiplatform-1-5-0-release\/\">Compose Multiplatform 1.5.0<\/a>, przynosz\u0105c stabilizacj\u0119 wersji Desktopowej, przynosz\u0105c \u0142atwiejsze testowania interfejsu u\u017cytkownika i usprawnion\u0105 interoperacyjno\u015b\u0107 ze Swingiem. Wersja iOS zosta\u0142a za\u015b opublikowana jako alfa, doczekuj\u0105c si\u0119 znacz\u0105cych ulepsze\u0144, takich jak usprawnione przewijanie, obs\u0142uga Dynamic Type, czy lepsza obs\u0142uga wy\u015bwietlaczy o wysokiej cz\u0119stotliwo\u015bci od\u015bwie\u017cania. Niestety, chc\u0105cym u\u017cywa\u0107 wersji webowej radz\u0119 jednak uzbroi\u0107 si\u0119 w cierpliwo\u015b\u0107, poniewa\u017c ta pozostaje eksperymentalna. Nowe wydanie opiera si\u0119 na Jetpack Compose 1.5 i integruje Material Design 3 w wersji 1.1, wprowadzaj\u0105c kilka nowych komponent\u00f3w, min. <code>DataPicker<\/code>. Nowe funkcje obejmuj\u0105 za\u015b&nbsp;usp\u00f3jnienie kodu komponent\u00f3w <code>Dialog<\/code>, <code>Popup<\/code> i <code>WindowInsets<\/code>.<\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/16683","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=16683"}],"version-history":[{"count":14,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/16683\/revisions"}],"predecessor-version":[{"id":16709,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/16683\/revisions\/16709"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/16706"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=16683"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=16683"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=16683"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}