{"id":17468,"date":"2024-01-04T01:17:41","date_gmt":"2024-01-04T00:17:41","guid":{"rendered":"https:\/\/vived.io\/?p=17468"},"modified":"2024-01-04T01:19:18","modified_gmt":"2024-01-04T00:19:18","slug":"wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/","title":{"rendered":"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2023 &#8211; JVM Weekly vol. 159\u00a0"},"content":{"rendered":"\n<h2 id=\"rok-w-ktorym-dostalismy-jdk-21\" data-num=1>Rok, w kt\u00f3rym dostali\u015bmy JDK 21<\/h2>\n\n\n\n<p>2023 to z pewno\u015bci\u0105 rok, kt\u00f3ry zapami\u0119tamy dzi\u0119ki JDK 21. To w\u0142a\u015bnie ona sprawi\u0142a, \u017ce Java wr\u00f3ci\u0142a na j\u0119zyki \u015bwiata programowania, a to wszystko dzi\u0119ki niezwykle bogatemu zbiorowi nowych, oczekiwanych od lat funkcji, gdzie frontrunnerem by\u0142y z pewno\u015bci\u0105 wirtualne w\u0105tki. Te odmieniane by\u0142y przez wszystkie przypadki, frameworki prze\u015bciga\u0142y si\u0119 z ich adopcj\u0105 (i do tego tematu sobie jeszcze wr\u00f3cimy), ale ilo\u015b\u0107 innych praktycznych nowo\u015bci te\u017c robi\u0142a wra\u017cenie. Tych by\u0142o tak wiele, \u017ce nie zamierzam tutaj przechodzi\u0107 przez wszystkie, i zapraszam Was do tekstu, kt\u00f3ry opublikowa\u0142em przy okazji premiery, a kt\u00f3ry ca\u0142o\u015b\u0107 podsumowuje w spos\u00f3b co najmniej zwi\u0119z\u0142y: <a href=\"https:\/\/vived.substack.com\/p\/a-one-sentence-summary-of-each-new\">A one-sentence summary of each new JEP from JDK 21 <\/a>. Opr\u00f3cz tytu\u0142owych jedno-zdaniowc\u00f3w, ka\u017cdy nowy JEP dosta\u0142 te\u017c zbi\u00f3r dodatkowych link\u00f3w, kt\u00f3re pomog\u0105 Wam poczu\u0107 atmosfer\u0119 dyskusji odbywaj\u0105cej si\u0119 w ko\u0142o nowego wydania.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/4inICPN.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Staruszka zdecydowanie dosta\u0142a drug\u0105 nowo\u015b\u0107<\/figcaption><\/figure><\/div>\n\n\n<p>No dobra, to skoro oczywisto\u015bci mamy za sob\u0105, czas przej\u015b\u0107 do rzeczy, kt\u00f3re RZECZYWI\u015aCIE mieli\u015bcie okazje przegapi\u0107 \ud83d\ude07.<\/p>\n\n\n\n<h2 id=\"rok-w-ktorym-umarl-graalvm-ee-a-narodzil-sie-graalos\" data-num=2>Rok, w kt\u00f3rym umar\u0142 GraalVM EE, a narodzi\u0142 si\u0119 GraalOS<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/JbXmhww.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>Rok 2023 zapami\u0119tamy te\u017c jako ten, podczas kt\u00f3rego GraalVM przeszed\u0142 spor\u0105 transformacj\u0119. Pierwsz\u0105 kluczow\u0105 zmian\u0105 by\u0142y kwestie licencyjne, kt\u00f3re to rozpocz\u0119\u0142y si\u0119 jeszcze w ko\u0144c\u00f3wce 2022. GraalVM, tradycyjnie oferowa\u0142 dwie edycje &#8211; Community (CE) i Enterprise (EE). Na JavaOne 2022 zapowiedziano w\u0142\u0105czenie GraalVM CE pod skrzyd\u0142a OpenJDK (w ramach projektu Galahad). W po\u0142owie 2023 zdecydowano si\u0119 na r\u00f3wnie du\u017cy krok, je\u015bli chodzi Enterprise Edition. Ta zosta\u0142a zast\u0105piona przez Oracle GraalVM, now\u0105 dystrybucj\u0119 z modelem licencyjnym, znanym jako GraalVM Free Terms and Conditions (GFTC). Ta zmiana licencyjna u\u0142awia darmowe u\u017cycie najnowszej wersji Oracle GraalVM zar\u00f3wno w \u015brodowiskach deweloperskich, jak i komercyjnych, co stanowi znacz\u0105cy krok naprz\u00f3d w por\u00f3wnaniu do poprzednich ogranicze\u0144 licencyjnych.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-10.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Zaznaczam jednak, \u017ce \u201ePowy\u017csze nie stanowi porady prawnej, a jedynie komentarz laika. Przed u\u017cyciem skontaktujcie si\u0119 z Waszym w\u0142asnym dzia\u0142em prawnym\u201d<\/figcaption><\/figure><\/div>\n\n\n<p>Kolejn\u0105 istotn\u0105 nowo\u015bci\u0105 jest wprowadzenie Graal Cloud Native (GCN). To specjalna wersja zestawu modu\u0142\u00f3w frameworka Micronaut (o Micronaucie jeszcze b\u0119dzie troch\u0119 p\u00f3\u017aniej), zaprojektowana do tworzenia mikroserwis\u00f3w w spos\u00f3b pe\u0142ni kompatybilna z kompilacj\u0105 GraalVM Native Image. Mo\u017cna je de facto uzna\u0107 za pierwszy pe\u0142noprawny framework GraalVM-First.<\/p>\n\n\n\n<p>R\u00f3wnie\u017c w 2023 opublikowany zosta\u0142 GraalOS, nowe \u015brodowisko uruchomieniowe dla aplikacji chmurowych, skoncentrowane na optymalizacji funkcji serverless poprzez mo\u017cliwo\u015b\u0107 odpalenia ich (dzi\u0119ki GraalVM) na serwerach bare metal. GraalOS wykorzystuje kompilacj\u0119 ahead-of-time (AOT) do konwersji aplikacji w samodzielne natywne pliki wykonywalne, co pozwala na eliminacj\u0119 &#8222;cold start\u00f3w&#8221; i zwi\u0119ksza wydajno\u015b\u0107 aplikacji serverless. GraalOS w teorii ma by\u0107 dost\u0119pny dla ka\u017cdego \u015brodowiska, ale jest zaprojektowany do integracji z Oracle Cloud Infrastructure Functions i stanowi\u0107 ma przewag\u0119 konkurencyjn\u0105 tego \u015brodowiska. Zobaczymy, czy stanie si\u0119 odpowiednim argumentem dla rozwi\u0105zania Oracle.<\/p>\n\n\n\n<p>Warto zauwa\u017cy\u0107, \u017ce AWS Lambda umo\u017cliwia ju\u017c obs\u0142ug\u0119 GraalVM w ramach tak zwanego niestandardowego \u015brodowiska wykonawczego. Jednak\u017ce zasadniczo wi\u0105\u017ce si\u0119 to z uruchomieniem kontenera z aplikacj\u0105 GraalVM. GraalOS umo\u017cliwia obej\u015bcie tej warstwy, eliminuj\u0105c potrzeb\u0119 uruchamiania kontenera i inicjowania maszyny JVM.<\/p>\n\n\n\n<p>Opr\u00f3cz powy\u017cszych zmian, ewolucje przeszed\u0142 r\u00f3wnie\u017c Truffle. Ten metaframework umo\u017cliwiaj\u0105cy tworzenie interpreter\u00f3w j\u0119zyk\u00f3w programowania na potrzeby ich uruchomienia w ramach GraalVM, zosta\u0142 oddzielony od g\u0142\u00f3wnej platformy. Same interpretery dla Pythona czy JavaScripta dost\u0119pne s\u0105 teraz jako osobne pakiety, kt\u00f3re mo\u017cemy zaczyta\u0107 jako zwyk\u0142a dependencja projektu, pomijaj\u0105c wcze\u015bniej wymagany customowy tooling.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/graalvm-ee-is-dead-long-live-oracle\">GraalVM EE is Dead, Long Live Oracle GraalVM &#8211; JVM Weekly vol. 47<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/vived.substack.com\/p\/what-does-graalvm-for-jdk-21-have\">What does GraalVM for JDK 21 have in common with the Rabbit of Caerbannog? Both surprise with their power &#8211; JVM Weekly vol. 58<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"rok-w-ktorym-microprofile-polaczyl-sily-z-core-profile\" data-num=3>Rok, w kt\u00f3rym MicroProfile po\u0142\u0105czy\u0142 si\u0142y z Core Profile<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/xJBQkN7.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>Teraz cofniemy si\u0119 o ca\u0142e 12 miesi\u0119cy &#8211; MicroProfile 6.0 by\u0142 bowiem pierwsz\u0105 du\u017c\u0105 premier\u0105 roku 2023. Poza standaryzacj\u0105 nowego zestawu API, przyni\u00f3s\u0142 on za\u015b oczekiwane uporz\u0105dkowanie tego, jak wygl\u0105da obecnie relacja projektu z Jakarta EE.<\/p>\n\n\n\n<p>Wraz z Jakarta EE 10 pojawi\u0142 si\u0119 tak zwany Core Profile \u2013 zestaw API, kt\u00f3re zgodnie z planami tw\u00f3rc\u00f3w maj\u0105 stanowi\u0107 minimum niezb\u0119dne do tworzenia mikrous\u0142ug w Javie. Brzmi to bardzo podobnie do celu, jaki postawili sobie tw\u00f3rcy MicroProfile, dlatego od pocz\u0105tku zastanawiali\u015bmy si\u0119, w jaki spos\u00f3b pojawienie si\u0119 Core Profile na niego wp\u0142ynie. Jaka\u015b forma synergii wydawa\u0142a si\u0119 tutaj by\u0107 bardzo naturalna, ale r\u00f3wnocze\u015bnie od pocz\u0105tku pojawia\u0142y si\u0119 jasne komunikaty, \u017ce nie nale\u017cy spodziewa\u0107 si\u0119 dw\u00f3ch inicjatyw w jedn\u0105. Ich tw\u00f3rcy jednak zapewniali, \u017ce pozostaj\u0105 ze sob\u0105 w sta\u0142ym kontakcie i w przyjacielskich stosunkach.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/image-2.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">I bardzo dobrze. Enterprise Java to za ma\u0142y \u015bwiatek, \u017ceby si\u0119 jeszcze dzieli\u0107.<\/figcaption><\/figure><\/div>\n\n\n<p>Przed premier\u0105 MicroProfile 6.0, strategi\u0105 standardu by\u0142o wybieranie sobie z Jakarta EE tych API, kt\u00f3re wed\u0142ug tw\u00f3rc\u00f3w projektu mia\u0142y by\u0107 najbardziej przydatne dla u\u017cytkownika MP. W wypadku MicroProfile 5.0 by\u0142o to wi\u0119c:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Jakarta Contexts and Dependency Injection (CDI)<\/li>\n\n\n\n<li>Jakarta Annotations (JPA)<\/li>\n\n\n\n<li>Jakarta RESTful Web Services (JAX-RS)<\/li>\n\n\n\n<li>Jakarta JSON Binding (JSON-B)<\/li>\n\n\n\n<li>Jakarta JSON Processing (JSON-P)<\/li>\n<\/ul>\n\n\n\n<p>Od wydania MicroProfile 6.0 projekt dokona\u0142 alignementu z Jakarta Core Profile. Oznacza to, \u017ce zamiast na pojedynczych API b\u0119dzie on posiada\u0142 zale\u017cno\u015b\u0107 na pe\u0142nym Profilu, a tranzytywne trafi\u0105 do niego r\u00f3wnie\u017c nast\u0119puj\u0105ce API:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Jakarta RESTful Web Services<\/li>\n\n\n\n<li>Jakarta Interceptors<\/li>\n<\/ul>\n\n\n\n<p>Ze zrozumia\u0142ych powod\u00f3w, minimalna wersja Jakarta EE wspierana przez MicroProfile to teraz Jakarta EE 10.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszej edycji:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/kotlin-18-is-a-phantom-release-jvm\">Kotlin 1.8 is a phantom release &#8211; JVM Weekly #29<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"rok-w-ktorym-testcontainers-staly-sie-czescia-docker\" data-num=4>Rok, w kt\u00f3rym Testcontainers sta\u0142y si\u0119 cz\u0119\u015bci\u0105 Docker<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/YvGU25Z.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>O ile w wypadku JavaScriptowych infrastrukturalnych projekt\u00f3w do\u015b\u0107 cz\u0119sto (a przynajmniej 2021 i 2022 nas w tym temacie dosy\u0107 rozpie\u015bci\u0142y) mamy do czynienia z og\u0142oszeniami nowych rund zewn\u0119trznego finansowania (Vercel, Deno), o tyle relatywnie rzadko s\u0142yszy si\u0119, aby jaka\u015b javowa biblioteka zak\u0142ada\u0142a w\u0142asn\u0105 chmur\u0119 (chyba, \u017ce bierzemy tutaj pod uwag\u0119 takiego Confluence i Kafk\u0119). Dlatego te\u017c ze sporym u\u015bmiechem \u015bledzi\u0142em tegoroczne og\u0142oszenia od AtomicJar.<\/p>\n\n\n\n<p>\u017beby przedstawi\u0107, na co maj\u0105 i\u015b\u0107 dane \u015brodki, warto przypomnie\u0107 sobie czym AtomicJar si\u0119 zajmuje. Kojarzycie TestContainers? Jest to biblioteka wspieraj\u0105ca dla JUnita, zapewniaj\u0105ca lekkie, jednorazowe instancje popularnych baz danych, przegl\u0105darek internetowych dla Selenium i og\u00f3lnie wszystkiego, co mo\u017cna \u0142atwo uruchomi\u0107 w kontenerze Dockera. Wprawdzie wiele os\u00f3b pewnie b\u0119dzie z\u017cyma\u0107 si\u0119 na uruchamianie kontener\u00f3w w testach jednostkowych, ale popularno\u015b\u0107 TestContainers udowadnia, jak bardzo cz\u0119sty jest to przypadek u\u017cycia.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/d9ab87a0ff5b0e6f3070819b131462bd60ca71f5r1-498-280_hq.gif\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Po prostu nazwiemy nasze testy integracyjnymi.<\/figcaption><\/figure><\/div>\n\n\n<p>W lutym AtomicJar pozyska\u0142o 25 milion\u00f3w dolar\u00f3w finansowania. \u015arodki te mia\u0142y na celu rozw\u00f3j TestContainers Cloud &#8211; rozwi\u0105zania Software-as-a-Service, kt\u00f3re umo\u017cliwia uruchamianie kontener\u00f3w nie lokalnie, ale w chmurze. Mia\u0142o to na celu u\u0142atwienie pracy programistom, zw\u0142aszcza w kontek\u015bcie ci\u0119\u017cszych test\u00f3w i ogranicze\u0144 sprz\u0119towych.<\/p>\n\n\n\n<p>Nast\u0119pnym krokiem by\u0142a premiera Testcontainers Desktop, aplikacj\u0119 maj\u0105c\u0105 na celu przyspieszenie startu test\u00f3w poprzez funkcje takie jak sta\u0142e porty czy mo\u017cliwo\u015b\u0107 zamra\u017cania kontener\u00f3w dla cel\u00f3w debugowania. Testcontainers Desktop stanowi\u0142 u\u0142atwienie dla tych, kt\u00f3rzy wci\u0105\u017c preferuj\u0105 lokalne \u015brodowisko testowe, jednocze\u015bnie daj\u0105c dost\u0119p do wersji pr\u00f3bnej Testcontainers Cloud.<\/p>\n\n\n\n<p>Kulminacyjnym wydarzeniem roku by\u0142o przej\u0119cie AtomicJar przez Docker w grudniu. Tranzakcja mia\u0142a strategiczne znaczenie zar\u00f3wno dla samego Dockera (kt\u00f3ry z przytupem wkroczy\u0142 w ten spos\u00f3b w rynek Cloud DevEnvironments), jak i dla Tescontiners, potencjalnie rozszerzaj\u0105c baz\u0119 u\u017cytkownik\u00f3w ich rozwi\u0105zania, kt\u00f3re dzi\u0119ki wsp\u00f3\u0142pracy z Dockerem ma szanse wyj\u015b\u0107 poza \u015bwiat Javy i sta\u0107 si\u0119 rynkowym standardem.<\/p>\n\n\n\n<p>Oby wi\u0119cej takich historii w 2024.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/WkKFCpZ.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">A dla anty-fan\u00f3w TestContainers zostawiam klasyczny cytat z Rousseau. On ju\u017c w XVIII wieku wiedzia\u0142 jak wygl\u0105da prawdziwa in\u017cynieria.<\/figcaption><\/figure>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszej edycji:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/what-does-the-state-of-developer\">What does the &#8222;State of Developer Ecosystem 2022&#8221; tell us about Java and the JVM ? &#8211; JVM Weekly #32<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/vived.substack.com\/p\/java-kotlin-scala-insights-from-state\">Java, Kotlin, Scala: Insights from State of Developer Ecosystem 2023 &#8211; JVM Weekly vol. 62<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/vived.substack.com\/p\/docker-acquires-atomicjar-company\">Docker acquires AtomicJar, company behind Testcontainers &#8211; JVM Weekly vol. 64<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"rok-w-ktorym-spring-posrednio-stal-sie-czescia-broadcom\" data-num=5>Rok, w kt\u00f3rym Spring po\u015brednio sta\u0142 si\u0119 cz\u0119\u015bci\u0105 Broadcom<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/SFfe11A.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>O ile powy\u017csze przej\u0119cie witam bardzo optymistycznie, to jednak nie ka\u017cde og\u0142oszenie tego typu to pow\u00f3d do rado\u015bci. Dla nikogo zaskoczeniem nie b\u0119dzie, \u017ce du\u017ce projekty Open-Source w dzisiejszych czasach zwykle posiadaj\u0105 swoich korporacyjnych sponsor\u00f3w, a wielu ludzi rozwijaj\u0105cych je robi\u0105 to w ramach firmowych etat\u00f3w. Dlatego te\u017c ruchy sp\u00f3\u0142ek gie\u0142dowych potrafi\u0105 mie\u0107 na ich rozw\u00f3j olbrzymi wp\u0142yw.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-33.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Powy\u017cszy obrazek jest tu bez \u017cadnego kontekstu i nie ma nic wsp\u00f3lnego z tre\u015bci\u0105 sekcji. W\u0142a\u015bciwie nie wiem sk\u0105d on si\u0119 tu w og\u00f3le wzi\u0105\u0142\u2026<\/figcaption><\/figure><\/div>\n\n\n<p>Pivotal Software (stoj\u0105cy za Springiem) i VMware maj\u0105 ze sob\u0105 silne powi\u0105zania historyczne i biznesowe, czego kulimancj\u0105 w 2019 by\u0142o przej\u0119cie Pivotala przez t\u0105 drug\u0105 firm\u0119. W 2023 dosz\u0142o do kolejnych akwizycji samego VMWare &#8211; Broadcom, znany g\u0142\u00f3wnie z produkcji p\u00f3\u0142przewodnik\u00f3w, podj\u0105\u0142 decyzj\u0119 o rozszerzeniu swojej dzia\u0142alno\u015bci na rynku oprogramowania. Wyb\u00f3r pad\u0142 na VMware, jako \u017ce firma uznawana jest za lidera w dziedzinie wirtualizacji i infrastruktury chmurowej, co stanowi\u0142o atrakcyjny kierunek rozwoju dla Broadcom. Przej\u0119cie rozpocz\u0119te w maju 2022, a b\u0119d\u0105ce jedn\u0105 z wi\u0119kszych transakcji tego typu opiewaj\u0105c\u0105 na 69 miliard\u00f3w dolar\u00f3w, domkni\u0119to finalnie w zesz\u0142ym tygodniu, 22 listopada.<\/p>\n\n\n\n<p>Bardzo szybko po transakcji dosz\u0142o do serii zwolnie\u0144 w firmie. Nie wiemy jaki jest ich zakres, ale na pewno zaafektowa\u0142y one te\u017c zesp\u00f3\u0142 odpowiadaj\u0105cy za najpopularniejszy javowy framework. Oliver Drotbohm, architekt Springa, kt\u00f3ry od ponad dekady prowadzi projekt Spring Data, podsumowa\u0142 ca\u0142o\u015b\u0107 wymownie.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/QMoyrOJ.png\" alt=\"\"\/><\/figure><\/div>\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszej edycji:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/java-kotlin-scala-insights-from-state\">Java, Kotlin, Scala: Insights from State of Developer Ecosystem 2023 &#8211; JVM Weekly vol. 62<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"rok-w-ktorym-oracle-wywraca-do-gory-nogami-pricing-ich-wersji-jdk\" data-num=6>Rok, w kt\u00f3rym Oracle wywraca do g\u00f3ry nogami pricing ich wersji JDK<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/upXRdZ9.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>Jak ju\u017c wspomnia\u0142em na samym pocz\u0105tku, poza wyj\u0105tkowymi okazjami jak JDK 21, Java bardzo rzadko trafia na j\u0119zyki spo\u0142eczno\u015bci programistycznej. O ile nas interesowa\u0107 mog\u0105 zmiany w maszynie wirtualnej i inne wiadomo\u015bci z ekosystemu, to jednak kto\u015b \u201eniezainwestowany\u201d w ekosystem o Javie s\u0142yszy g\u0142\u00f3wnie w momencie internetowych \u201edram\u201d. A z tak\u0105 mieli\u015bmy do czynienia pocz\u0105tkiem lutego, a wszystko przez to, \u017ce Oracle zdecydowa\u0142 si\u0119 zmieni\u0107 spos\u00f3b naliczania op\u0142at za swoje JDK. Nie mog\u0119 wi\u0119c nie po\u015bwi\u0119ci\u0107 miejsca temu faktowi w podsumowaniu roku.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/AYDGm7d.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Fun Fact &#8211; z tego co uda\u0142o mi si\u0119 sprawdzi\u0107, to by\u0142 to jedyny raz w tym roku gdy co\u015b JVM-owego znalaz\u0142o si\u0119 na szczycie <strong>\/r\/programming<\/strong> &#8211; nie uda\u0142o si\u0119 to nawet JDK 21. Wida\u0107 co si\u0119 klika w internetach.<\/figcaption><\/figure><\/div>\n\n\n<p>23 stycznia Oracle poinformowa\u0142, \u017ce zmienia model licencyjny Oracle JDK na Java SE Universal Subscription. Nowy cennik, zamiast bazowa\u0107 na stanowiskach roboczych i procesorach, opiera si\u0119 na ilo\u015bci pracownik\u00f3w zatrudnianych przez firm\u0119: w tych do 1000 pracownik\u00f3w op\u0142aty wynosz\u0105 15$\/mc, dla wi\u0119kszych 5,25$\/mc. Dla wielu (wi\u0119kszo\u015bci?) firm korzystaj\u0105cych z Oracle JDK oznacza to b\u0119dzie wzrost koszt\u00f3w, poniewa\u017c w obliczeniach brani s\u0105 pod uwag\u0119 nie tylko programi\u015bci, ale wszyscy pracownicy firmy \u2013 tak\u017ce ci spoza dzia\u0142u IT, a tak\u017ce np. kontraktorzy.<\/p>\n\n\n\n<p>Zmiany nie dotyczy ju\u017c p\u0142ac\u0105cych klient\u00f3w, kt\u00f3rzy b\u0119d\u0105 mogli si\u0119 rozlicza\u0107 na wsp\u00f3\u0142czesnych warunkach (aczkolwiek nie uda\u0142o mi si\u0119 dogrzeba\u0107, w jaki spos\u00f3b rozwi\u0105zane zostanie np. rozszerzenie licencji). Ko\u0144cz\u0105c na pozytywnej nucie, zapisy mog\u0105 by\u0107 teoretycznie korzystne dla niekt\u00f3rych firm, zw\u0142aszcza ma\u0142ych startup\u00f3w stricte technologicznych, posiadaj\u0105cych ma\u0142\u0105 ilo\u015b\u0107 pracownik\u00f3w. Enterprise trac\u0105 chyba w ka\u017cdej konfiguracji, ale mali, szybko skaluj\u0105cy si\u0119 mog\u0105 zyska\u0107 \u2013 aczkolwiek wbrew tej teorii mo\u017ce by\u0107 fakt wysokich op\u0142at per pracownik (15$\/mc) w firmach poni\u017cej 1000 zatrudnionych os\u00f3b.<\/p>\n\n\n\n<p>Nale\u017cy pami\u0119ta\u0107, \u017ce Oracle nie jest jedynym dostawc\u0105 JDK, wi\u0119c ka\u017cdy chc\u0105cy u\u017cywa\u0107 Javy za darmo, mo\u017ce u\u017cy\u0107 np. Adoptium. Co jest smutne \u2013 \u015bwietnie wiedz\u0105 to ludzie znaj\u0105cy ekosystem Javy, ale dla szerokiego odbiorcy jest to stan mocno nieintuicyjny. W ko\u0144cu nie ma alternatywnych dystrybucji Go czy Rusta (albo s\u0105 statystycznie pomijalne).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/oeKK34d.jpg\" alt=\"\"\/><\/figure><\/div>\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszej edycji:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/what-does-the-state-of-developer\">What does the &#8222;State of Developer Ecosystem 2022&#8221; tell us about Java and the JVM ? &#8211; JVM Weekly #32<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"rok-poczatku-konca-problemu-nulli-w-javie-dzieki-projektowi-valhalla\" data-num=7>Rok pocz\u0105tku ko\u0144ca problemu nulli w Javie dzi\u0119ki projektowi Valhalla<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/DcbiUjo.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>2023 to te\u017c kolejny rok iteracji nad Valhall\u0105. Projekt ulega dalszej rewolucji i z ka\u017cd\u0105 kolejn\u0105 iteracj\u0105 staje si\u0119 coraz ciekawszy i ma szanse (troch\u0119 przypadkiem) da\u0107 nam usprawnienia, na kt\u00f3re programi\u015bci czekali&#8230; no w zasadzie od zawsze. Jedn\u0105 z funkcji j\u0119zyka, kt\u00f3re dostarczy\u0107 ma Valhalla s\u0105 Value Type (czy jak one si\u0119 tam teraz po kolejnych iteracjach maj\u0105 nazywa\u0107). G\u0142\u00f3wnym rozr\u00f3\u017cnieniem mi\u0119dzy \u201etypem referencyjnym\u201d (czyli obecnie istniej\u0105cymi w j\u0119zyku) a \u201etypem warto\u015bci\u201d jest fakt, \u017ce te drugie nie mog\u0105 przyjmowa\u0107 warto\u015bci null. W odr\u00f3\u017cnieniu od takiego Kotlina, w\u0142asno\u015b\u0107 ta nie jest \u0142atwo wyra\u017calna w samym j\u0119zyku. Dlatego te\u017c projektanci do Valhalli rozwa\u017caj\u0105 wprowadzenie nowego znacznika \u201enullness\u201d dla obiekt\u00f3w.<\/p>\n\n\n\n<p>Je\u015bli nie \u015bledzicie na bie\u017c\u0105co rozwoju Valhalli, mo\u017cliwe, \u017ce umkn\u0105\u0142 Wam fakt, \u017ce w pewnym momencie tw\u00f3rcy zaproponowali sufiksy <code>.val<\/code> i <code>.ref<\/code>. Mia\u0142y one informowa\u0107, czy chcemy u\u017cywa\u0107 danego obiektu jako warto\u015bci, czy jako referencji. To by\u0142o dla mnie najbardziej problematyczne spo\u015br\u00f3d proponowanych zmian, obawia\u0142em si\u0119 bowiem komplikacji sk\u0142adni. Na razie wygl\u0105da na to, \u017ce uda si\u0119 z nich zrezygnowa\u0107. Prace nad rozwojem ca\u0142ego projektu pozwoli\u0142y zredukowa\u0107 r\u00f3\u017cnice mi\u0119dzy typami prymitywnymi a obiektami do dw\u00f3ch fundamentalnych r\u00f3\u017cnic \u2013 posiadania warto\u015bci domy\u015blnej (jak 0 w przypadku int) oraz wsparcia dla nullowalno\u015bci.<\/p>\n\n\n\n<p>W odr\u00f3\u017cnieniu od takiego Kotlina, w\u0142asno\u015b\u0107 ta nie jest \u0142atwo wyra\u017calna w samym j\u0119zyku. Dlatego te\u017c projektanci do Valhalli rozwa\u017caj\u0105 wprowadzenie nowego znacznika \u201enullness\u201d dla obiekt\u00f3w. Pojawi\u0142a si\u0119 propozycja wprowadzenia dw\u00f3ch dodatkowych oznacze\u0144 przy definiowaniu typu \u2013 ! oznaczaj\u0105cy nie dopuszczamy nulla oraz ? oznaczaj\u0105cy ten obiekt jest nullowalny. W skr\u00f3cie:<\/p>\n\n\n\n<p><code>Foo?<\/code> oznacza ten typ zawiera w swoim zbiorze warto\u015bci null<br><code>Foo!<\/code> oznacza ten typ nie zawiera w swoim zbiorze warto\u015bci null<br><code>Foo<\/code> oznacza \ud83e\udd37\u200d\u2642\ufe0f \u2013 inaczej m\u00f3wi\u0105c, nie okre\u015blony stan nullowalno\u015bci<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/8b5pwc.jpg\" alt=\"\"\/><\/figure><\/div>\n\n\n<p>Z czasem, tw\u00f3rcy b\u0119d\u0105 d\u0105\u017cy\u0107 do tego, aby wersja bez odpowiedniej adnotacji przyjmowa\u0142a cechy wariant\u00f3w anotowanych \u2013 na ten moment wydaje si\u0119, \u017ce nieoznaczone Foo b\u0119dzie w wi\u0119kszo\u015bci przypadk\u00f3w traktowane jako nienulowalne.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszej edycji:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/will-valhalla-bring-better-nulls\">Will Valhalla bring better nulls to Java? &#8211; JVM Weekly #33<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/vived.substack.com\/p\/exploring-the-newest-updates-of-project\">Exploring the Newest Updates of Project Leyden, Valhalla &amp; Hermes: JVM Weekly vol. 54<\/a><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/1AGUceM.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">A najlepiej to \u017cagladnijcie do oryginalnych dokument\u00f3w &#8211; te nulla to mega skomplikowany temat. I pewnie przegapi\u0142em jaki\u015b tekst kt\u00f3ry zd\u0105\u017cy\u0142 go wywr\u00f3ci\u0107 do g\u00f3ry nogami.<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"rok-w-ktorym-z-wypiekami-na-twarzy-ogladalem-jvm-language-summit\" data-num=8>Rok, w kt\u00f3rym z wypiekami na twarzy ogl\u0105da\u0142em JVM Language Summit<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/GouYQXi.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>JVMLS to roczne wydarzenie, kt\u00f3re gromadzi ekspert\u00f3w i in\u017cynier\u00f3w zwi\u0105zanymi z rozwojem JVM, aby omawia\u0107 aktualne udoskonalenia i przysz\u0142o\u015b\u0107 tej platformy. W tym roku mamy dost\u0119p do masy materia\u0142\u00f3w z eventu, co pozwoli\u0142o nam zerkn\u0105\u0107 pod mask\u0119 wielu projekt\u00f3w, kt\u00f3re zwykle pozostaj\u0105 w cieniu.<\/p>\n\n\n\n<p>Podczas JVMLS, sporo miejsca po\u015bwi\u0119cono Projektowi Leyden, kt\u00f3ry wprowadza now\u0105 technik\u0119 optymalizacji kodu Javy, opart\u0105 na &#8222;przesuwaniu i ograniczaniu&#8221; oblicze\u0144 . Projekt ten umo\u017cliwi\u0107 ma tworzeniu &#8222;kondensator\u00f3w&#8221;, kt\u00f3re analizuj\u0105 zachowanie aplikacji w czasie rzeczywistym i dostosowuj\u0105 j\u0105 do efektywnego dzia\u0142ania. Dzi\u0119ki temu, aplikacje Java mog\u0105 by\u0107 zoptymalizowane ju\u017c przed uruchomieniem, co skraca czas &#8222;rozgrzewania&#8221; i zapewnia d\u0142u\u017csze okresy szczytowej wydajno\u015bci. Na JVMLS po raz pierwszy mogli\u015bmy przygl\u0105dn\u0105\u0107 si\u0119 wynikom prac, zaprezentowany zosta\u0142 <code>ApplicationModel<\/code>, bazowy interfejs modelu, a tak\u017ce patterny implmentacyjne.<\/p>\n\n\n\n<p>Kolejnym interesuj\u0105cym projektem jest Projekt Babylon, kt\u00f3ry ma na celu dostarczenie bardziej zaawansowanych mo\u017cliwo\u015bci ni\u017c istniej\u0105ce mechanizmy refleksji w Javie, poprzez wprowadzenie tak zwanej &#8222;refleksji kodu&#8221;. W odr\u00f3\u017cnieniu od standardowej refleksji, dzia\u0142aj\u0105cej w runtime, ta ma pozwoli\u0107 programistom na analiz\u0119 i manipulacj\u0119 kodem \u017ar\u00f3d\u0142owym r\u00f3wnie\u017c w czasie kompilacji, umo\u017cliwiaj\u0105c dynamiczne generowanie kodu dla r\u00f3\u017cnych \u015brodowisk uruchomieniowych, podobnie jak LINQ w j\u0119zyku C#.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/VT7M35t.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Mo\u017ce nied\u0142ugo si\u0119 przestan\u0105 z nas \u015bmia\u0107<\/figcaption><\/figure><\/div>\n\n\n<p>Projekt Panama te\u017c nie zwalnia, i po ogarni\u0119ciu tematy Foreign Memory i usprawnieniu pracy z programami napisanymi w j\u0119zykach &#8222;natywnych&#8221;, ma teraz na celu u\u0142atwienie integracji Javy z nietypowymi \u015brodowiskami uruchomieniowymi, takimi jak np. GPU. Dzi\u0119ki Panama, programi\u015bci b\u0119d\u0105 mieli lepsz\u0105 kontrol\u0119 nad transferem danych mi\u0119dzy r\u00f3\u017cnymi rodzajami pami\u0119ci oraz nad dzia\u0142aniem Garbage Collectora, co u\u0142atwi prac\u0119 z frameworkami zwi\u0105zanymi z uczeniem maszynowym i sztuczn\u0105 inteligencj\u0105. Jego tw\u00f3rcy mocno wsp\u00f3\u0142pracuj\u0105 i wymieniaj\u0105 do\u015bwiadczenia z TornadoVM, platform\u0105 pozwalaj\u0105c\u0105 na wykonywanie aplikacji Java na r\u00f3\u017cnych platformach sprz\u0119towych, w tym na GPU, FPGA i systemach wielordzeniowych.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-9.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Poniewa\u017c za cz\u0119sto dajemy si\u0119 tym naszym rdzeniom CPU wynudzi\u0107.<\/figcaption><\/figure><\/div>\n\n\n<p>TornadoVM wykorzystuje kompilator JIT GraalVM, co pozwala na przekszta\u0142canie kodu Java w natywny kod maszynowy, co w wielu przypadkach znacz\u0105co przyspieszy\u0107 wydajno\u015b\u0107 aplikacji. Tworz\u0105 oni te\u017c u\u017cyteczne abstrakcje, u\u0142atwiaj\u0105c\u0105 tworzenie portowalnego kodu. W tym roku (rzutem na ta\u015bm\u0119, w grudniu) wreszcie ukaza\u0142a si\u0119 jego <a href=\"https:\/\/tornadovm.readthedocs.io\/en\/latest\/\">wersja 1.0<\/a>, wi\u0119c mo\u017cna my\u015ble\u0107 o szerszej adopcji \ud83d\ude09<\/p>\n\n\n\n<p>Zdecydowanie nie mog\u0119 si\u0119 doczeka\u0107 JVMLS 2024.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszej edycji:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/panama-opencl-and-tornadovm-javas\">Panama, OpenCL and TornadoVM: Java&#8217;s entry into the GPU world &#8211; JVM Weekly vol. 55<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/vived.substack.com\/p\/exploring-the-newest-updates-of-project\">Exploring the Newest Updates of Project Leyden, Valhalla &amp; Hermes: JVM Weekly vol. 54<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/vived.substack.com\/p\/project-babylon-chance-for-linq-and\">Project Babylon: Chance for LINQ (and more) in Java &#8211; JVM Weekly vol. 56<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"rok-w-ktorym-zapowiedziano-kotlin-2-0\" data-num=9>Rok, w kt\u00f3rym zapowiedziano Kotlin 2.0<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/ZZX5j6E.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>W \u015bwiecie Kotlina szykuj\u0105 si\u0119 spore zmiany \u2013 przynajmniej je\u015bli chodzi o numeracje, aczkolwiek na niej si\u0119 nie sko\u0144czy.<\/p>\n\n\n\n<p>Tw\u00f3rcy og\u0142osili bowiem, \u017ce wydanie 1.9 b\u0119dzie ostatnim z linii 1.x. Wersja 1.10 si\u0119 nie poka\u017ce, zamiast niej przeskoczymy od razu do wydania 2.0. Wynika\u0107 ma to z faktu, \u017ce to w\u0142a\u015bnie na t\u0105 wersje planowane jest wydanie d\u0142ugo oczekiwanego kompilatora K2 \u2013 \u201ejednego, by wszystkimi rz\u0105dzi\u0107\u201d i maj\u0105cego zapewni\u0107 wsp\u00f3ln\u0105 infrastruktur\u0119 dla wszystkich potencjalnych target\u00f3w j\u0119zyka. Dzi\u0119ki temu jego tw\u00f3rcy nie b\u0119d\u0105 musieli ka\u017cdorazowo implementowa\u0107 tych samych funkcjonalno\u015bci na potrzeby JVM, WebAssembly czy Androida, co ma znacznie przyspieszy\u0107 ewolucje Kotlina. Zmiana jest wi\u0119c na tyle du\u017ca, \u017ce uznano za zasadne odpowiednie ukoronowanie jej podbiciem numeracji.<\/p>\n\n\n\n<p>Zmiana \u201edu\u017cej\u201d wersji j\u0119zyka potrafi\u0142a mocno zamiesza\u0107 w ekosystemie danego j\u0119zyka, jednak w wypadku Kotlina JetBrains obiecuje bardzo stabilny proces migracji. Ma by\u0107 to mo\u017cliwe do osi\u0105gni\u0119cia dzi\u0119ki dw\u00f3m sk\u0142adowym. Po pierwsze, zmiany motywuj\u0105ce podbicie numeracji odbywaj\u0105 si\u0119 pod mask\u0105, a tw\u00f3rcy celowo nie planuj\u0105 wprowadza\u0107 w nowym wydaniu \u017cadnych nowych nowo\u015bci w samym syntaksie j\u0119zyka \u2013 te zostawiaj\u0105 sobie na wydania 2.x, kt\u00f3re przyjd\u0105 po udanym przej\u015bciu na K2 (a ju\u017c kilka k\u0105sk\u00f3w zapowiedziano). Dodatkowo jednak JetBrains zyskuje na tym, \u017ce kontroluje zar\u00f3wno Kotlina, jak i jest g\u0142\u00f3wnym dostawc\u0105 narz\u0119dzi do niego. Pozwala to bowiem na znacznie sprawniejsze przeprowadzenie ca\u0142ej operacji, gdy wi\u0119kszo\u015b\u0107 najwa\u017cniejszego toolingu mo\u017ce by\u0107 rozwijana r\u00f3wnolegle z j\u0119zykiem.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-11.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">JetBrians Applem DevToolingu<\/figcaption><\/figure><\/div>\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/will-valhalla-bring-better-nulls\">Will Valhalla bring better nulls to Java? &#8211; JVM Weekly #33<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/vived.substack.com\/p\/play-framework-is-reborn-like-a-phoenix\">Play Framework is reborn like a phoenix from the ashes&#8230;. and gets rid of Akka &#8211; JVM Weekly vol. 60<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/vived.substack.com\/p\/tldw-opinionated-wrap-up-of-kotlinconf\">TLDW: Opinionated Wrap-up of KotlinConf 2023 Keynote &#8211; JVM Weekly vol. 40<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"rok-w-ktorym-roman-elizarov-odszedl-z-kotlina\" data-num=10>Rok, w kt\u00f3rym Roman Elizarov odszed\u0142 z Kotlina<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/2vzPY2f.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>Zostaj\u0105c w \u015bwiecie Kotlina ko\u0144c\u00f3wk\u0105 roku gruchn\u0119\u0142a du\u017ca informacja. Roman Elizarov, lead projektu, og\u0142osi\u0142 swoje odej\u015bcie z JetBrains z powod\u00f3w osobistych, ko\u0144cz\u0105c w ten spos\u00f3b r\u00f3wnie\u017c swoj\u0105 prac\u0119 nad j\u0119zykiem. Po\u017cegnanie odby\u0142o si\u0119 seri\u0105 tweet\u00f3w, w kt\u00f3rych wyra\u017caj\u0105c wdzi\u0119czno\u015b\u0107 za mo\u017cliwo\u015b\u0107 pracy nad Kotlinem i podkre\u015blaj\u0105c swoje wielkie uznanie dla spo\u0142eczno\u015bci Kotlina.<\/p>\n\n\n\n<p>Dowiedzieli\u015bmy si\u0119 te\u017c kto w przysz\u0142o\u015bci stanie za sterami j\u0119zyka \u2013 <a href=\"https:\/\/twitter.com\/@MZarechenskiy\">Mikhail Zarechenskiy<\/a>, wcze\u015bniej pracuj\u0105cy za kulisami w JetBrains, zostanie g\u0142\u00f3wnym projektantem Kotlina. Kluczowe zmiany w zespole obejmuj\u0105 te\u017c <a href=\"https:\/\/twitter.com\/hhariri\">Hadi Hariri<\/a>, kt\u00f3rego mo\u017cecie zna\u0107 jako Co-hosta podcastu Talking Kotlin \u2013 przejmie on teraz wi\u0119cej obowi\u0105zk\u00f3w poza dzia\u0142aniami promocyjnymi i jego zaanga\u017cowaniem w KotlinConf. R\u00f3wnie\u017c drugi prowadz\u0105cy Talking Kotlin, <a href=\"https:\/\/twitter.com\/sebi_io\">Sebastian Aigner<\/a>, b\u0119dzie odgrywa\u0107 teraz wa\u017cniejsz\u0105 rol\u0119 w Kotlin Foundation, szczeg\u00f3lnie w wsparciu inicjatyw szerszego ekosystemu Kotlin. <a href=\"https:\/\/twitter.com\/HeyTolstoy\">Egor Tolstoy<\/a> dalej za\u015b b\u0119dzie kierowa\u0107 zespo\u0142em od strony Product Managementu.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.io\/pl\/duze-zmiany-w-leadershipie-kotlina-jvm-weekly-vol-152\/\">Major changes in Kotlin\u2019s leadership: Roman Elizarov departs from JetBrains<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"rok-w-ktorym-doczekalismy-sie-wysypu-ciekawych-nowych-wydan\" data-num=11>Rok, w kt\u00f3rym doczekali\u015bmy si\u0119 wysypu ciekawych nowych wyda\u0144<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Frameworki<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/723JU7m.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Spring Framework 6.1 I Spring Boot 3.2<\/h4>\n\n\n\n<p>W Spring Framework 6.1 pojawi\u0142o si\u0119 wsparcie dla dw\u00f3ch kluczowych nowo\u015bci: Wirtualnych W\u0105tk\u00f3w oraz Projektu CRAC. Dla przypomnienia: Wirtualne W\u0105tki to nowy koncept w Javie, wprowadzony w JDK 21 w ramach Projektu Loom, kt\u00f3ry zmienia podej\u015bcie do wsp\u00f3\u0142bie\u017cno\u015bci. W przeciwie\u0144stwie do tradycyjnych w\u0105tk\u00f3w, kt\u00f3re s\u0105 zarz\u0105dzane przez system operacyjny, w\u0105tki wirtualne s\u0105 zarz\u0105dzane przez JVM, co pozwala na tworzenie du\u017cej liczby w\u0105tk\u00f3w bez narzutu zwi\u0105zanego z tradycyjnymi w\u0105tkami.<\/p>\n\n\n\n<p>Projekt CRAC (Checkpoint\/Restore in Application Continuation) pozwala za\u015b na zapisanie stanu dzia\u0142aj\u0105cej JVM i jego przywr\u00f3cenie, skracaj\u0105c czas rozruchu aplikacji. To rozwi\u0105zanie redukuje problem &#8222;zimnego startu&#8221; aplikacji Javowych, co jest szczeg\u00f3lnie istotne dla aplikacji serwerowych i serverless. Spring integruje si\u0119 z CRAC, umo\u017cliwiaj\u0105c kontrolowane checkpointy i przywracanie stanu JVM.<\/p>\n\n\n\n<p>Dodatkowo, w Spring Boot 3.2.0 wprowadzono rozszerzone wsparcie dla Apache Pulsara oraz interfejs RestClient z Spring Framework 6.1, kt\u00f3ry dostarcza prekonfigurowany klient HTTP do obs\u0142ugi zapyta\u0144 REST. Dodano tak\u017ce wsparcie dla <code>JdbcClient<\/code> oraz automatyczne logowanie Correlation Id podczas korzystania z Micrometera. Spring Boot 3.2.0 u\u0142atwia tak\u017ce budowanie obraz\u00f3w Docker z u\u017cyciem standardu Cloud-Native Buildpacks.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/spring-framework-61-and-spring-boot\">Spring Framework 6.1 and Spring Boot 3.2: The tastiest bites<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Quarkus 3.0<\/h4>\n\n\n\n<p>Quarkus 3.0 wprowadza rozbudowane Dev UI, kt\u00f3re u\u0142atwia zarz\u0105dzanie i konfiguracj\u0119 aplikacji. Dzi\u0119ki funkcji Dev Mode, Quarkus umo\u017cliwia Continuous Testing, co przyczynia si\u0119 do wydajno\u015bci i komfortu pracy deweloper\u00f3w.<\/p>\n\n\n\n<p>Niezwykle ciekaw\u0105 nowo\u015bci\u0105 jest te\u017c Mutiny2, biblioteka stworzona przez zesp\u00f3\u0142 Quarkusa do programowania reaktywnego i asynchronicznego. Mutiny2 ma na celu uproszczenie kodu reaktywnego, oferuj\u0105c podej\u015bcie bardziej intuicyjne od innych bibliotek, jak RxJava i Project Reactor. Jest to tak\u017ce symboliczne zamkni\u0119cie pewnej epoki, poniewa\u017c Mutiny w nowej wersji przechodzi z w\u0142asnej implementacji Reactive Streams API na standardowe <code>java.util.concurrent.Flow<\/code>.<\/p>\n\n\n\n<p>Jednak cho\u0107 Quarkus 3.0 przynosi wiele cennych zmian, brakuje pe\u0142nego wsparcia dla wirtualnych w\u0105tk\u00f3w, kt\u00f3re by\u0142o wspominane jako jedna z obiecuj\u0105cych funkcji.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/a-peek-under-the-hood-of-java-dynamic\">A peek under-the-hood of Java: Dynamic Agents and &#8222;tearing&#8221; &#8211; JVM Weekly vol. 43<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Micronaut 4.0<\/h4>\n\n\n\n<p>Micronaut Framework 4.0 porzuca wsparcia dla wersji Java starszych ni\u017c JDK 17, co umo\u017cliwi\u0142o dostosowanie API do nowych sk\u0142adni j\u0119zyka, takich jak Java Records, Sealed Classes, Switch Expressions, Text Blocks czy Pattern Matching dla instanceof. Klient HTTP Micronaut zosta\u0142 zaktualizowany do wersji opartej na kliencie HTTP Java wprowadzonym w JDK 11, co poprawi\u0142o wydajno\u015b\u0107. Micronaut 4.0 zosta\u0142 te\u017c zoptymalizowany pod k\u0105tem wykorzystania GraalVM, dzi\u0119ki czemu kompilowanie aplikacji Micronaut zale\u017cnych od innych bibliotek sta\u0142o si\u0119 \u0142atwiejsze.<\/p>\n\n\n\n<p>Ponadto, nowe wydanie wprowadza lepsze wsparcie dla chmur, modu\u0142ow\u0105 architektur\u0119 oraz wst\u0119pne wsparcie dla <code>VirtualThreads<\/code>. Dodatkowo, Micronaut Serialization sta\u0142 si\u0119 domy\u015blnym modu\u0142em oferuj\u0105cym wydajne i bezpieczne interfejsy API serializacji\/deserializacji JSON.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/rust-written-jvm-and-bytecode-transpiler\">Rust-written JVM and Bytecode Transpiler: A Masterclass in Learning-by-Doing &#8211; JVM Weekly vol. 51<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Helidon 4.0<\/h4>\n\n\n\n<p>Helidon 4 zosta\u0142 pierwszym na \u015bwiecie frameworkiem do mikroserwis\u00f3w opartym o wirtualne w\u0105tki. G\u0142\u00f3wn\u0105 zmian\u0105 przychodz\u0105c\u0105 z wydaniem by\u0142o bowiem zast\u0105pienie Netty now\u0105 implementacj\u0105 serwera o nazwie N\u00edma. N\u00edma zosta\u0142 zaprojektowany tak, aby w pe\u0142ni wykorzystywa\u0107 wirtualne w\u0105tki Java 21, umo\u017cliwiaj\u0105c ka\u017cdemu requestowi dzia\u0142anie na dedykowanym wirtualnym w\u0105tku. Upraszcza to proces wykonywania blokuj\u0105cych operacji i zapewnia wysoki poziom wsp\u00f3\u0142bie\u017cno\u015bci, eliminuj\u0105c w ten spos\u00f3b potrzeb\u0119 skomplikowanego kodu asynchronicznego, co zwi\u0119ksza wydajno\u015b\u0107, zw\u0142aszcza (wed\u0142ug doniesie\u0144 samych tw\u00f3rc\u00f3w) w Helidon MP. Oznacza to r\u00f3wnie\u017c, \u017ce doczekali\u015bmy si\u0119 pierwszego framework wymagaj\u0105cego do dzia\u0142ania&#8230; Java 21.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/10\/image-10.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Nie martw si\u0119 Netty, dalej mamy Ci\u0119 w sercach.<\/figcaption><\/figure><\/div>\n\n\n<p>Helidon SE, stanowi\u0105cy podstawowy zestaw API dla Helidon, r\u00f3wnie\u017c przeszed\u0142 spor\u0105 transformacj\u0119. Adopcja wirtualnych w\u0105tk\u00f3w umo\u017cliwi\u0142a przej\u015bcie od asynchronicznych API do blokuj\u0105cych (a\u017c si\u0119 sam dziwie pisz\u0105c to zdanie). Ta zmiana upraszcza kod, czyni\u0105c go \u0142atwiejszym w pisaniu, utrzymaniu i zrozumieniu \u2013 daje nam to przedsmak tego, co czeka pewnie w przysz\u0142o\u015bci ca\u0142y ekosystem. Osoby korzystaj\u0105ce z Helidon 3 SE b\u0119d\u0105 musia\u0142y niestety znacznie dostosowa\u0107 sw\u00f3j kod do zaktualizowanych API. Chocia\u017c mo\u017ce to wymaga\u0107 pewnego pocz\u0105tkowego wysi\u0142ku, korzy\u015bci w postaci zwi\u0119kszonej wydajno\u015bci i prostoty kodu wydaj\u0105 si\u0119 tego warte.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/major-changes-in-kotlins-leadership\">Major changes in Kotlin&#8217;s leadership: Roman Elizarov departs from JetBrains \u2013 JVM Weekly vol. 59<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Dropwizard 3.0 i 4.0<\/h4>\n\n\n\n<p>Pami\u0119tam czasy, gdy u\u017cywa\u0142em Dropwizarda, kiedy ten szumnie obiecuj\u0105cy framework znajdowa\u0142 si\u0119 na samym szczycie popularno\u015bci. Mimo pierwotnego entuzjazmu, DropWizard zacz\u0105\u0142 traci\u0107 na znaczeniu i premiera wersji 3.0 i 4.0 przesz\u0142a bez echa w \u015bwiecie technologii.<\/p>\n\n\n\n<p>Pow\u00f3d dw\u00f3ch wersji na raz jest prosty: Dropwizard 3.0 opiera si\u0119 na Java EE i przestrzeni nazw <code>javax.<\/code>, dzi\u0119ki czemu migracja z Dropwizard 2.x do wersji 3.0 powinna by\u0107 minimalna dla wielu projekt\u00f3w. Natomiast Dropwizard 4.0 opiera si\u0119 na zale\u017cno\u015bciach Jakarta EE oraz przestrzeni nazw <code>jakarta.<\/code>, co mo\u017ce wi\u0105za\u0107 si\u0119 z wi\u0119kszym nak\u0142adem pracy przy migracji z Dropwizard 2.x do wersji 4.x.<\/p>\n\n\n\n<p>Obie wersje \u0142\u0105czy te\u017c troch\u0119 wsp\u00f3lnych zmian \u2013 podniesienie wymaganej wersji Javy do 11, wprowadzenie struktury pakiet\u00f3w opartej o JPMS (mam wra\u017cenie, \u017ce to jedno z pierwszych narz\u0119dzi bior\u0105cych ten standard na powa\u017cnie), aktualizacj\u0119 Jetty do wersji 10.0.x (kt\u00f3ra te\u017c wymaga minimum Javy 11), aktualizacj\u0119 Apache HttpClient do wersji 5.x oraz usuni\u0119cie wsparcia dla JUnit 4.x (przeniesione do dropwizard-testing-junit4). Dodatkowo, tylko Dropwizard 4.0 dosta\u0142 wsparcie dla Hibernate 6.0, wymagaj\u0105cego przej\u015bcia na <code>jakarta.<\/code><\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/dropwizard-returns-with-parallel\">Dropwizard returns with parallel 3.0 and 4.0 release &#8211; JVM Weekly vol. 39<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Play Framework 2.9 i 3.0<\/h3>\n\n\n\n<p>Kolejne podw\u00f3jne wydanie. Play Framework powr\u00f3ci\u0142 bowiem z nowymi wydaniami 2.9 i 3.0. Kiedy\u015b uwa\u017cany za g\u0142\u00f3wnego konkurenta Springa, Play wr\u00f3ci\u0142 do \u017cycia po tym jak zosta\u0142 przekazany spo\u0142eczno\u015bci po pewnym okresie stagnacji i kontrowersji zwi\u0105zanych z toksyczn\u0105 now\u0105 licencj\u0105 Akka, kt\u00f3rego to rozwi\u0105zania wykorzystywa\u0142 wewn\u0119trznie.<\/p>\n\n\n\n<p>Dlatego wydanie 3.0 przynosi migracj\u0119 z Akki do Apache Pekko, forka Akka 2.6.x. Play 3.0 korzysta teraz z Pekko i jego komponent\u00f3w HTTP. Jednak\u017ce, dla aplikacji silnie zintegrowanych z Akk\u0105, ta zmiana mo\u017ce wymaga\u0107 pewnych wysi\u0142k\u00f3w migracyjnych. Dlatego r\u00f3wnocze\u015bnie wydano r\u00f3wnie\u017c Play 2.9, kt\u00f3re kontynuuje wykorzystanie Akki i Akka HTTP.<\/p>\n\n\n\n<p>Poza powy\u017cszym Play 2.9 i 3.0 skupiaj\u0105 si\u0119 na wsparciu dla zaktualizowanych j\u0119zyk\u00f3w programowania, kompatybilno\u015bci z Scala 3, a tak\u017ce na dostosowaniu do nowszych wersji bibliotek, takich jak Akka HTTP 10.2, Guice 6.0.0 i Jackson 2.14. Warto zaznaczy\u0107, \u017ce Play Framework 3.0 przestaje wspiera\u0107 starsze wersje Javy, a minimalna wymagana wersja to Java 11.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/play-framework-is-reborn-like-a-phoenix\">Play Framework is reborn like a phoenix from the ashes&#8230;. and gets rid of Akka &#8211; JVM Weekly vol. 60<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Grails 6<\/h4>\n\n\n\n<p>Grails 6.0, najnowsza ods\u0142ona frameworka do tworzenia aplikacji webowych w j\u0119zyku Groovy, wprowadza kilka istotnych usprawnie\u0144. Najwa\u017cniejsz\u0105 nowo\u015bci\u0105 jest Grails Forge UI, kt\u00f3ry umo\u017cliwia programistom bardziej efektywne zarz\u0105dzanie projektami napisanymi w tym frameworku. Nowy interfejs dostarcza uproszczonego procesu inicjowania projekt\u00f3w, intuicyjnej nawigacji, walidacji w czasie rzeczywistym, wizualnego zarz\u0105dzania zale\u017cno\u015bciami oraz responsywnego designu.<\/p>\n\n\n\n<p>Grails 6.0 r\u00f3wnie\u017c wzmocni\u0142 integracj\u0119 z Micronaut, u\u0142atwiaj\u0105c korzystanie z bean\u00f3w Micronauta w komponentach Grails oraz wykorzystuj\u0105c klienta HTTP Micronaut do bardziej p\u0142ynnej interakcji z REST API. Warto zaznaczy\u0107, \u017ce r\u00f3wnie\u017c Grails 6.0 podnosi minimalne wymagania dotycz\u0105ce JDK do wersji 11.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/panama-opencl-and-tornadovm-javas\">Panama, OpenCL and TornadoVM: Java&#8217;s entry into the GPU world &#8211; JVM Weekly vol. 55<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">WildFly 30<\/h4>\n\n\n\n<p>Swoj\u0105 premier\u0119 mia\u0142 te\u017c okr\u0105g\u0142y WildFly 30. Mimo \u017ce oficjalna rekomendacja to nadal JDK 17 lub 11, znacz\u0105ca cz\u0119\u015b\u0107 tego wydania zosta\u0142a po\u015bwi\u0119cona integracji z Java SE 21. Najnowsza wersja przechodzi na tej wersji testy certyfikacyjne zar\u00f3wno Jakarta EE 10 Core Profile, jak i Microprofile. Wraz z coraz wi\u0119kszym naciskiem na JDK 21 przewiduje si\u0119, \u017ce WildFly 30 mo\u017ce by\u0107 ostatnim, kt\u00f3re wspiera JDK 11.<\/p>\n\n\n\n<p>Dodatkowo, wraz z przyj\u015bciem WildFly 30 nast\u0105pi\u0142a zmiana licencji z Lesser General Public License 2.1 na Apache Software License 2.0, podsumowuj\u0105c w ten spos\u00f3b d\u0142ugoletni\u0105 \u015bcie\u017ck\u0119. Przej\u015bcie z Lesser General Public License 2.1 (LGPL 2.1) na Apache Software License 2.0 (ASL 2.0) oznacza przej\u015bcie z licencji \u201es\u0142abej\u201d copyleft na bardziej liberaln\u0105.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/major-changes-in-kotlins-leadership\">Major changes in Kotlin\u2019s leadership: Roman Elizarov departs from JetBrains<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Vaadin Hilla 2.0<\/h4>\n\n\n\n<p>Oko\u0142o rok temu Vaadin zaprezentowa\u0142 Hille, nowy framework webowy dla programist\u00f3w Java, kt\u00f3ry umo\u017cliwia tworzenie kompletnych aplikacji z backendem opartym na Spring Boot i frontendem napisanym w TypeScript. Wcze\u015bniej znany jako Vaadin Fusion, Hille oferuje sp\u00f3jn\u0105 konfiguracj\u0119 dla Java i TypeScript, bogaty zestaw komponent\u00f3w interfejsu u\u017cytkownika oraz konkuruj\u0105cy z JHipsterem stos technologiczny.<\/p>\n\n\n\n<p>W najnowszej wersji 2.0 dodano ulepszony generator TypeScript, wsparcie dla WebSocket\u00f3w, kompatybilno\u015b\u0107 z GraalVM Native Image, uproszczon\u0105 tworzenie motyw\u00f3w graficznych i narz\u0119dzie SSO Kit do szybkiego wdro\u017cenia logowania jednokrotnego (SSO). Ta wersja korzysta z Spring Boot 3, Java 17 i Jakarta EE 10.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/jdk-21-strikes-back-stable-virtual\">JDK 21 Strikes Back: Stable Virtual Threads and Generational ZGC &#8211; JVM Weekly vol. 37<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Tooling<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/Cb5NxD4.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">AI Assistant w IntelliJ Idea<\/h4>\n\n\n\n<p>Wydanie IntelliJ IDEA 2023.3 przynios\u0142o dost\u0119pnego dla wszystkich zainteresowanych Asystent AI, kt\u00f3ry opu\u015bci\u0142 faz\u0119 testow\u0105. Oferuje on ulepszon\u0105 generacj\u0119 kodu bezpo\u015brednio w edytorze, kontekstow\u0105 czat AI do zapyta\u0144 zwi\u0105zanych z projektem oraz akcje AI \u015bwiadome projektu, wykorzystuj\u0105ce rozszerzony kontekst do uzyskania bardziej kompleksowych wynik\u00f3w. Wyobra\u017acie sobie taki ChatGPT wbudowany w Wasze IDE, z kilkoma dodatkowymi usprawniaczami dzi\u0119ki byciu mocno zintegrowanym z samym IDE \u2013 tak zwanymi AI Actions.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/docker-acquires-atomicjar-company\">Docker acquires AtomicJar, company behind Testcontainers &#8211; JVM Weekly vol. 64<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Gradle 8.0<\/h4>\n\n\n\n<p>Ga\u0142\u0105\u017a Gradle 8.x to przede wszystkim prace nad Kotlin DSL, alternatywn\u0105 sk\u0142adni\u0105 do tradycyjnego Groovy DSL, zapewniaj\u0105c lepsze podpowiadania sk\u0142adni przy edycji, kt\u00f3re sta\u0142o si\u0119 od tego wydania wariantem domy\u015blnym. Wraz z Gradle 8.0 poprawiona zostala kompilacji skrypt\u00f3w poprzez wprowadzenie interpretera dla deklaratywnych blok\u00f3w plugin\u00f3w {} w skryptach .gradle.kts, co daje zysk rz\u0119du 20%, zbli\u017caj\u0105c czas procesowania Kotlin DSL do Gradle DSL.<\/p>\n\n\n\n<p>Ale je\u015bli chodzi o Gradle, to jeszcze ciekawsze rzeczy pokaza\u0142o JetBrains.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/curious-about-carbon-footprint-your\">Curious about Carbon Footprint your application has? There&#8217;s a tool to measure it &#8211; JVM Weekly #34<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Amper od JetBrains<\/h4>\n\n\n\n<p>Programi\u015bci do\u015bwiadczaj\u0105 zmieniaj\u0105cych si\u0119 trend\u00f3w w zarz\u0105dzaniu procesami budowania i integracji ci\u0105g\u0142ej. W ostatnich latach (a mo\u017ce nawet dekadzie), popularne sta\u0142y si\u0119 rozwi\u0105zania CI\/CD jak Github Actions czy TravisCI, oparte na deklaratywnych konfiguracjach w YAML. W ekosystemie Javy, mimo dost\u0119pno\u015bci Mavena z jego XML-em, wielu deweloper\u00f3w przenios\u0142o si\u0119 na Gradle ze wzgl\u0119du na jego wi\u0119ksz\u0105 elastyczno\u015b\u0107, cho\u0107 czasami prowadzi to do skomplikowanych skrypt\u00f3w.<\/p>\n\n\n\n<p>Ten trend wskazuje na ci\u0105g\u0142e wyzwania w zarz\u0105dzaniu z\u0142o\u017conymi projektami, szczeg\u00f3lnie w JetBrains, gdzie Kotlin Multiplatform uwidoczni\u0142 problematyk\u0119 Gradle. W odpowiedzi na te wyzwania, JetBrains rozpocz\u0105\u0142o Project Amper, maj\u0105cym na celu uproszczenie konfiguracji konfiguracji Gradle przez u\u017cycie YAML. Amper obecnie wspiera Kotlin i Kotlin Multiplatform, a tak\u017ce Jav\u0119 i Swifta. Ta inicjatywa ma na celu uczynienie Gradle bardziej dost\u0119pnym i mniej skomplikowanym.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-14.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Chyba nigdy nie uciekniemy od YAML-a<\/figcaption><\/figure><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/amper-by-jetbrains-defining-gradle\">Amper by JetBrains: Defining Gradle Builds through YAML &#8211; JVM Weekly vol. 61<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Oficjalne Java Extension for Visual Studio Code od Oracle<\/h4>\n\n\n\n<p>Oracle opublikowa\u0142o oficjalne rozszerzenie Javy dla \u015brodowiska Visual Studio Code, co stanowi stanowi z ich strony znaczny krok w uznaniu VSCode jako alternatywy dla tradycyjnych \u015brodowisk programistycznych. Pomimo istnienia wyspecjalizowanych narz\u0119dzi dla Javy, jak Intellij, coraz wi\u0119cej programist\u00f3w, w tym studenci i ci pracuj\u0105cy z r\u00f3\u017cnymi j\u0119zykami, preferuje u\u017cywanie tego toola. Rozszerzenie dostarcza funkcje takie jak auto-uzupe\u0142nianie, pod\u015bwietlanie b\u0142\u0119d\u00f3w, wsparcie dla debugowania oraz integracj\u0119 z projektami Gradle i Maven. Wa\u017cn\u0105 cech\u0105 jest wykorzystanie serwera j\u0119zyka opartego na protokole Language Server Protocol, pochodz\u0105cego z NetBeans (o samym LSP mo\u017cecie poczyta\u0107 troch\u0119 ni\u017cej).<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.io\/pl\/duze-zmiany-w-leadershipie-kotlina-jvm-weekly-vol-152\/\">Major changes in Kotlin\u2019s leadership: Roman Elizarov departs from JetBrains<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Azul Zulu JDK 17 with CRaC support<\/h4>\n\n\n\n<p>Azul wyda\u0142 wersje swojego OpenJDK 17 &#8211; Zulu &#8211; z wbudowanym wsparciem dla CRaC API. Jak ju\u017c wspomnia\u0142em przy Springu, CRaC API umo\u017cliwia tworzenie &#8222;checkpoint\u00f3w&#8221; w trakcie pracy aplikacji, co pozwala na zapisanie pe\u0142nego stanu \u015brodowiska uruchomieniowego. Dzia\u0142a to podobnie do funkcji Save State w emulatorach, gdzie zapisywany jest ca\u0142y stan pami\u0119ci na dysk i mo\u017ce by\u0107 p\u00f3\u017aniej odtwarzany. Azul jest pierwszym dostawc\u0105, kt\u00f3ry oferuje komercyjne wsparcie dla tej technologii, co mo\u017ce by\u0107 interesuj\u0105ce w\u0142a\u015bnie dla early adopter\u00f3w nowych featur\u00f3w Spring Framework 6.1.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/loial-a-new-player-among-serialization\">JEP 450: The child of Project Lilliput &#8211; JVM Weekly vol. 44<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Liberica JDK Performance Edition<\/h4>\n\n\n\n<p>BellSoft wprowadzi\u0142 na rynek Liberica JDK Performance Edition, zmodyfikowan\u0105 wersj\u0119 JDK 11, w kt\u00f3rej zintegrowano poprawki wydajno\u015bciowe z JDK 17. To rozwi\u0105zanie umo\u017cliwia firmom korzystaj\u0105cym z JDK 11 zwi\u0119kszenie wydajno\u015bci aplikacji o 10-15% bez konieczno\u015bci zmian w kodzie. Liberica JDK Performance Edition jest dost\u0119pna dla subskrybent\u00f3w Liberica JDK od 1 sierpnia bez dodatkowych op\u0142at i jest dostarczana wraz z innymi narz\u0119dziami od BellSoft.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/fury-compromise-between-speed-and\">Fury: Compromise between speed and flexibility in the serialization process &#8211; JVM Weekly vol. 53<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Nowi ciekawi gracze<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/I1zbPjY.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Fury<\/h4>\n\n\n\n<p>Fury, stworzony przez Ant Group, to nowa biblioteka do serializacji, \u0141\u0105czy ona wydajno\u015b\u0107 serializacji statycznej z elastyczno\u015bci\u0105 dynamicznej serializacji, co mo\u017ce znale\u017a\u0107 zastosowanie w przypadku, gdy potrzebna jest du\u017ca przepustowo\u015b\u0107 w masowej transmisji danych. Oferuje ona pe\u0142n\u0105 kompatybilno\u015b\u0107 z rozwi\u0105zaniami ju\u017c istniej\u0105cymi w Javie i wykorzystuje nie tylko zaawansowane techniki serializacji, ale te\u017c operacje SIMD z Vector API oraz podej\u015bcie Zero-Copy, minimalizuj\u0105c op\u00f3\u017anienia podczas transferu danych. Fury wykorzystuje tak\u017ce kompilator JIT, kt\u00f3ry generuje zoptymalizowany kod serializacji w czasie rzeczywistym.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/fury-compromise-between-speed-and\">Fury: Compromise between speed and flexibility in the serialization process &#8211; JVM Weekly vol. 53<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">EclipseStore 1.0<\/h4>\n\n\n\n<p>MicroStream rozwi\u0105zanie, kt\u00f3re zapewnia trwa\u0142o\u015b\u0107 danych w spos\u00f3b &#8222;databaseless&#8221; natywne dla Javy, skrojone dla mikroserwis\u00f3w i \u015brodowisk serverless. Pozwala na zapisywanie graf\u00f3w obiekt\u00f3w Java w pami\u0119ci bez ogranicze\u0144 dotycz\u0105cych ich wielko\u015bci czy z\u0142o\u017cono\u015bci, zapewniaj\u0105c jednocze\u015bnie pe\u0142n\u0105 sp\u00f3jno\u015b\u0107 transakcji. MicroStream w 2023 zosta\u0142 przekszta\u0142cony w oficjalny projekt Eclipse Foundation o nazwie EclipseStore 1.0, a wszystkie nowe funkcje b\u0119d\u0105 teraz wydawane w jego ramach. To nie oznacza jednak ko\u0144ca rozwoju, a wr\u0119cz przeciwnie &#8211; zesp\u00f3\u0142 MicroStream nadal b\u0119dzie aktywnie pracowa\u0107 nad projektem. Co istotne, EclipseStore ma pozosta\u0107 kluczowym elementem strategii komercyjnej MicroStream, stanowi\u0105c baz\u0119 dla oferty MicroStream Cluster i MicroStream Enterprise.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/java-kotlin-scala-insights-from-state\">Java, Kotlin, Scala: Insights from State of Developer Ecosystem 2023 &#8211; JVM Weekly vol. 62<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">JoularJX 2.0<\/h4>\n\n\n\n<p>JoularJX 2.0 to narz\u0119dzie, kt\u00f3rego celem jest umo\u017cliwienie programistom dok\u0142adnego monitorowania i analizy zu\u017cycia energii na r\u00f3\u017cnych urz\u0105dzeniach i systemach operacyjnych. U\u017cywa do tego zaawansowanych modeli pomagaj\u0105cych w oszacowaniu zu\u017cycia energii przez kluczowe komponenty sprz\u0119towe, takie jak procesor i pami\u0119\u0107, oraz dostarcza szczeg\u00f3\u0142owe raporty i wizualizacje zu\u017cycia. Narz\u0119dzie to wpisuje si\u0119 w rosn\u0105ce zapotrzebowanie na zr\u00f3wnowa\u017cone praktyki programistyczne i efektywno\u015b\u0107 energetyczn\u0105 w bran\u017cy IT.<\/p>\n\n\n\n<p>Kluczow\u0105 nowo\u015bci\u0105 w wersji 2.0 jest mo\u017cliwo\u015b\u0107 \u015bledzenia zu\u017cycia mocy i energii na poziomie poszczeg\u00f3lnych metod w kodzie. Dzi\u0119ki temu programi\u015bci mog\u0105 uzyska\u0107 bardziej szczeg\u00f3\u0142owy wgl\u0105d w to, kt\u00f3re cz\u0119\u015bci ich aplikacji s\u0105 najbardziej energoch\u0142onne<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/curious-about-carbon-footprint-your\">Curious about Carbon Footprint your application has? There&#8217;s a tool to measure it &#8211; JVM Weekly #34<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Nowo\u015bci w \u015bwiecie Kotlina i Scali<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/77yQv5n.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>No to jeszcze zerknijmy co u kuzyn\u00f3w Javy, kt\u00f3rzy zawsze smaj\u0105 si\u0119 za nieco lepszych ni\u017c ona sama \ud83d\ude09<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Kotlin Mulitplatform Stable<\/h4>\n\n\n\n<p>Kotlin Multiplatform (KMP) osi\u0105gn\u0105\u0142 stabilno\u015b\u0107 i gotowo\u015b\u0107 do u\u017cytku produkcyjnego, co jest znacz\u0105cym krokiem dla deweloper\u00f3w mobilnych. Technologia umo\u017cliwia wsp\u00f3\u0142dzielenie kodu mi\u0119dzy r\u00f3\u017cnymi platformami, zacieraj\u0105c granice mi\u0119dzy rozwojem cross-platformowym a natywnym. Pozwala na integracje r\u00f3\u017cnych \u015brodowisk, jak Android, iOS, a tak\u017ce aplikacje serwerowe, cho\u0107 w tym ostatnim przypadku synergii jest nieco mniej. Si\u0142\u0119 KMP pokazuj\u0105 biblioteki takie jak cho\u0107by Compose Multiplatform.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/open.substack.com\/pub\/vived\/p\/play-framework-is-reborn-like-a-phoenix\">Play Framework is reborn like a phoenix from the ashes&#8230;. and gets rid of Akka &#8211; JVM Weekly vol. 60<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">AWS SDK for Kotlin<\/h4>\n\n\n\n<p>Podczas tegorocznej edycji konferencji Amazon Web Services re:Invent w Las Vegas, og\u0142oszono wydanie AWS SDK dla Kotlina. SDK zosta\u0142o zaprojektowane z uwzgl\u0119dnieniem idiomatycznych cech j\u0119zyka, w\u0142\u0105czaj\u0105c w to specjalistyczne DSL-e oraz wsparcie dla asynchronicznych wywo\u0142a\u0144 us\u0142ug AWS za pomoc\u0105 coroutines. Aktualna wersja SDK umo\u017cliwia u\u017cycie w aplikacjach serwerowych oraz Android API w wersji 24+, jednak w planach s\u0105 dodatkowe wsparcia dla innych platform, w tym Kotlin\/Native.<\/p>\n\n\n\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/java-kotlin-scala-insights-from-state\">Java, Kotlin, Scala: Insights from State of Developer Ecosystem 2023 &#8211; JVM Weekly vol. 62<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Scala Metals 1.0<\/h4>\n\n\n\n<p>Language Server Protocol (LSP) to otwarty protok\u00f3\u0142 oparty na JSON-RPC, umo\u017cliwiaj\u0105cy interakcj\u0119 mi\u0119dzy edytorami IDE a serwerami j\u0119zykowymi, kt\u00f3re oferuj\u0105 funkcje specyficzne dla j\u0119zyka, takie jak autouzupe\u0142nianie czy przej\u015bcie do definicji. Dzi\u0119ki LSP, serwer j\u0119zyka raz stworzony mo\u017ce by\u0107 wykorzystywany w wielu narz\u0119dziach, co eliminuje konieczno\u015b\u0107 wielokrotnego wykonywania tej samej pracy.<\/p>\n\n\n\n<p>Wa\u017cnym osi\u0105gni\u0119ciem w tym obszarze jest wydanie Metals 1.0, dojrza\u0142ego serwera j\u0119zykowego dla Scali. Jego rozw\u00f3j to efekt wsp\u00f3\u0142pracy wielu cz\u0142onk\u00f3w spo\u0142eczno\u015bci Scala. Metals 1.0, nazwany kodowo Silver, opr\u00f3cz standardowych funkcji LSP, oferuje dodatkowe funkcje jak wsparcie dla projekt\u00f3w z wieloma rootami, uruchamianie regu\u0142 Scalafix i lepsze wsparcie dla Scala CLI. Obs\u0142uguje najnowsze wersje Scali (Scala 3.3.0, Scala 2.12.18, Scala 2.13.11).<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/rust-written-jvm-and-bytecode-transpiler\">Rust-written JVM and Bytecode Transpiler: A Masterclass in Learning-by-Doing &#8211; JVM Weekly vol. 51<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"no-i-na-koncu-rok-w-ktorym-ekosystem-java-wskoczyl-na-wagonik-hype-zwiazany-z-ai\" data-num=12>No i na ko\u0144cu &#8211; rok, w kt\u00f3rym ekosystem Java wskoczy\u0142 na wagonik Hype zwi\u0105zany z AI<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/FiI3atp.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>No bo takiej ilo\u015bci nowo\u015bci to si\u0119 chyba absolutnie nikt nie spodziewa\u0142. A to i tak tylko te ciekawsze.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">langchain4j<\/h3>\n\n\n\n<p><code>langchain4j<\/code> to za\u015b&nbsp;javowy wrapper do LangChain &#8211; stworzonego przez Harrisona Chase\u2019a frameworku skoncentrowanego na Du\u017cych Modelach J\u0119zykowych (LLMach), takich jak GPT-3, GPT-3.5 i GPT-4 od OpenAI. Zosta\u0142 zaprezentowany pod koniec pa\u017adziernika 2022 i zaprojektowany z my\u015bl\u0105 o tworzeniu nie tyle eksperyment\u00f3w, co produkcyjnych aplikacji opartych o LLMy. LangChain umo\u017cliwia tworzenie \u0142anch\u00f3w r\u00f3\u017cnych komponent\u00f3w, takich jak szablony dla r\u00f3\u017cnych typ\u00f3w prompt\u00f3w, integracj\u0119 z r\u00f3\u017cnymi modelami LLM, czy agent\u00f3w korzystaj\u0105cych z LLM do podejmowania decyzji, Wprowadza te\u017c koncepcje kr\u00f3tko- i d\u0142ugoterminow\u0105 pami\u0119\u0107.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/jvms-open-source-all-stars-june-2023\">JVM\u2019s Open Source All-Stars, June 2023: LLMs Edition &#8211; JVM Weekly vol. 48<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Semantic Kernel for Java<\/h3>\n\n\n\n<p>Microsoft r\u00f3wnie\u017c ma swoje SDK podobne do LangChainie o nazwie Semantic Kernel (SK), kt\u00f3re umo\u017cliwia integracj\u0119 du\u017cych modeli j\u0119zykowych AI (LLM) z konwencjonalnymi j\u0119zykami programowania, w tym Jav\u0105. SDK to \u0142\u0105czy j\u0119zyk naturalny, tradycyjny kod i pami\u0119\u0107 opart\u0105 o embeddingi, tworz\u0105c rozszerzalny model programowania. W praktyce, Semantic Kernel for Java pozwala programistom na p\u0142ynn\u0105 integracj\u0119 us\u0142ug AI, takich jak Azure OpenAI, z ich aplikacjami, wykorzystuj\u0105c model oparty o tak zwane skillach. Programi\u015bci mog\u0105 te\u017c&nbsp;tworzy\u0107 inteligentne plany przy u\u017cyciu Planner\u00f3w, \u0142\u0105cz\u0105c umiej\u0119tno\u015bci wykonywania z\u0142o\u017conych dzia\u0142a\u0144 z generatywn\u0105 sztuczn\u0105 inteligencj\u0105.<\/p>\n\n\n\n<p><a href=\"https:\/\/vived.substack.com\/p\/rust-written-jvm-and-bytecode-transpiler\">Rust-written JVM and Bytecode Transpiler: A Masterclass in Learning-by-Doing &#8211; JVM Weekly vol. 51<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Spring AI<\/h3>\n\n\n\n<p>Spring AI, zainicjowany przez Marka Pollacka, to nowy projekt maj\u0105cy na celu stworzenie mostu mi\u0119dzy zaawansowanymi modelami AI (szczeg\u00f3lnie z wariantami GPT), a typowymi wzorcami Springa w tworzeniu aplikacji. Projekt Spring AI czerpie inspiracj\u0119 z LangChain, LlamaIndex i Semantic Kernel, d\u0105\u017c\u0105c do oferowania programistom Spring podobnego do\u015bwiadczenia AI. Wprowadza on wsp\u00f3lny interfejs API do interakcji z modelami, rozwija &#8222;prompty&#8221; kluczowe dla komunikacji z AI, a tak\u017ce oferuje parsery do konwersji ich odpowiedziami na zwyk\u0142e POJO. Ponadto, zdaj\u0105c sobie spraw\u0119 z ryzyk zwi\u0105zanych z zarz\u0105dzaniem wra\u017cliwymi danymi w LLM-ach, umo\u017cliwia integracj\u0119 z bazami wektorowymi, u\u0142atwiaj\u0105c ich wykorzystanie bez konieczno\u015bci re-treningu modeli.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/panama-opencl-and-tornadovm-javas\">Panama, OpenCL and TornadoVM: Java&#8217;s entry into the GPU world &#8211; JVM Weekly vol. 55<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">quarkus-langchain4j<\/h3>\n\n\n\n<p>Rozszerzenie <code>quarkus-langchain4j<\/code> 0.1 stanowi\u0142o istotny krok w kierunku bardziej intuicyjnego i efektywnego wykorzystania sztucznej inteligencji w tworzeniu oprogramowania. Wsp\u00f3\u0142pracuj\u0105c z Dmytro Liubarskyi i zespo\u0142em LangChain4j, Quarkus skupi\u0142 si\u0119 w rozszerzeniu na integracji LLM-\u00f3w z aplikacjami napisanymi w tym w\u0142a\u015bnie framework\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">JVector<\/h3>\n\n\n\n<p>Bazy Wektorowe odgrywaj\u0105 istotn\u0105 rol\u0119 w nowoczesnych aplikacjach AI, u\u0142atwiaj\u0105c rozbudow\u0119 bazy wiedzy modeli i dostarczanie precyzyjnych odpowiedzi, minimalizuj\u0105c ryzyko b\u0142\u0119d\u00f3w czy \u201ehalucynacji\u201d AI. JVector, napisany w czystej Javie, to embeddowalny silnik wyszukiwania wektorowego, kt\u00f3ry nap\u0119dza DataStax Astra i integruje si\u0119 z Apache Cassandra. Oferuje on znacz\u0105ce ulepszenia w stosunku do wyszukiwania wektorowego w Apache Lucene, u\u017cywaj\u0105c zaawansowanego algorytmu DiskANN, kt\u00f3ry jest ponad 10 razy szybszy ni\u017c Lucene dla du\u017cych zbior\u00f3w danych. Jest przeznaczony do prostej integracji, zachowuj\u0105c wysok\u0105 wydajno\u015b\u0107, korzystaj\u0105c przy tym z Vector API i instrukcji SIMD z projektu Panama.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/pulumi-infrastructure-as-a-code-in\">Pulumi: Infrastructure-as-a-Code in Java, Kotlin and Scala &#8211; JVM Weekly vol. 58<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Jlama<\/h3>\n\n\n\n<p>Jlama to silnik przetwarzania dla LLM, kompatybilny z modelami takimi jak Llama, Llama2 czy GPT-2 (kt\u00f3ry tak\u017ce zosta\u0142 udost\u0119pniony), a tak\u017ce z formatem modelu Huggingface SafeTensors. Aby dzia\u0142a\u0107, wymaga on Javy 20, gdy\u017c korzysta ze wspomnianego ju\u017c Vector API, dzi\u0119ki czemu umo\u017cliwia szybkie obliczenia wektorowe niezb\u0119dne podczas wnioskowania z modeli.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/fury-compromise-between-speed-and\">Fury: Compromise between speed and flexibility in the serialization process &#8211; JVM Weekly vol. 53<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><a class=\"autolink\" href=\"https:\/\/llama2.java\">llama2.java<\/a><\/h3>\n\n\n\n<p><a class=\"autolink\" href=\"https:\/\/llama2.java\">llama2.java<\/a> jest bezpo\u015brednim portem llama2.scala, kt\u00f3ry z kolei bazuje na llama2.c stworzonym przez Andreja Karpathy\u2019ego. Projekt ma na celu s\u0142u\u017cy\u0107 jako pole do testowania nowych funkcji j\u0119zykowych, ale tak\u017ce por\u00f3wnywa\u0107 wydajno\u015b\u0107 GraalVM w stosunku do wersji w C. W repozytorium znajduj\u0105 si\u0119 odpowiednie testy wydajno\u015bciowe. Aby skorzysta\u0107 z tej biblioteki, potrzebujesz Javy w wersji 20+, wraz ze wsparciem dla MemorySegment i Vector API.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/fury-compromise-between-speed-and\">Fury: Compromise between speed and flexibility in the serialization process &#8211; JVM Weekly vol. 53<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Amazon Q Code Transformation<\/h3>\n\n\n\n<p>Amazon Q, asystent AI dost\u0119pny dla Visual Studio Code oraz IntelliJ dla u\u017cytkownik\u00f3w z licencj\u0105 CodeWhisperer Professional, wprowadza now\u0105 funkcj\u0119 zwan\u0105 Code Transformation. Ta funkcja pozwala na inteligentny, masowy refaktoring, automatyzuj\u0105c powtarzalne zadania programistyczne. Obecnie Amazon Q koncentruje si\u0119 na modernizacji aplikacji Java, umo\u017cliwiaj\u0105c przekszta\u0142cenie kodu z Java 8 lub Java 11 na najnowszy LTS, czyli Java 17. Amazon Q jest obecnie w wersji Preview, co oznacza pewne ograniczenia \u2013 na przyk\u0142ad wspiera tylko projekty oparte na Mavenie.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/vived.substack.com\/p\/amazon-q-code-transform-automatic\">Amazon Q Code Transform: Automatic migration from JDK 1.8 to JDK 17 &#8211; JVM Weekly vol. 65<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">SD4J (Stable Diffusion in Java)<\/h3>\n\n\n\n<p>Oracle Open Source wypu\u015bci\u0142o projekt <a href=\"https:\/\/github.com\/oracle-samples\/sd4j\">SD4J<\/a>, b\u0119d\u0105cy implementacj\u0105 inferencji Stable Diffusion dzia\u0142aj\u0105ca na bazie ONNX Runtime, napisana w j\u0119zyku Java. Jest to zmodyfikowana wersja implementacji w C#, wyposa\u017cona w GUI dla powtarzalnej generacji obraz\u00f3w oraz wsparcie dla negatywnych wej\u015b\u0107 tekstowych. Celem projektu jest demonstracja wykorzystania ONNX Runtime w Javie oraz najlepszych praktyk zwi\u0105zanych z wydajno\u015bci\u0105 w ONNX Runtime.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/E2QuvIz.jpg\" alt=\"\"\/><\/figure>\n\n\n\n<p>Mam nadzieje, \u017ce pod k\u0105tem ekosystemu JVM 2024 b\u0119dzie przynajmniej tak ciekawy jak 2023.<\/p>\n\n\n\n<p>PS: Je\u015bli dotarli\u015bcie a\u017c tutaj, to znaczy \u017ce si\u0119 chyba podoba\u0142o \ud83e\udd42 Dlatego je\u015bli znacie kogo\u015b, komu JVM Weekly mog\u0142oby si\u0119 przyda\u0107 &#8211; podrzu\u0107cie mu ten newsletter na pocz\u0105tku 2024!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Witam w 2024 roku! Ale zanim p\u00f3jdziemy dalej, przypomnijmy sobie z kronikarsk\u0105 sumienno\u015bci\u0105 to, co wydarzy\u0142o si\u0119 w 20231<\/p>\n","protected":false},"author":10,"featured_media":17470,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259,1],"tags":[],"class_list":["post-17468","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm-pl","category-no-category"],"acf":{"estimated_reading_time":"38","feature_image_blog":false,"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/Linkedin-post-1200x675-2.jpg","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>Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2023 - JVM Weekly vol. 159\u00a0 - 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\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2023 - JVM Weekly vol. 159\u00a0 - Vived\" \/>\n<meta property=\"og:description\" content=\"Witam w 2024 roku! Ale zanim p\u00f3jdziemy dalej, przypomnijmy sobie z kronikarsk\u0105 sumienno\u015bci\u0105 to, co wydarzy\u0142o si\u0119 w 20231\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-04T00:17:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-04T00:19:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/Linkedin-post-1200x675-2.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\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\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2023 &#8211; JVM Weekly vol. 159\u00a0\",\"datePublished\":\"2024-01-04T00:17:41+00:00\",\"dateModified\":\"2024-01-04T00:19:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/\"},\"wordCount\":7704,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/Linkedin-post-1200x675-2.jpg\",\"articleSection\":[\"JVM\",\"No category\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/\",\"url\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/\",\"name\":\"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2023 - JVM Weekly vol. 159\u00a0 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/Linkedin-post-1200x675-2.jpg\",\"datePublished\":\"2024-01-04T00:17:41+00:00\",\"dateModified\":\"2024-01-04T00:19:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/Linkedin-post-1200x675-2.jpg\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/Linkedin-post-1200x675-2.jpg\",\"width\":1200,\"height\":675},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2023 &#8211; JVM Weekly vol. 159\u00a0\"}]},{\"@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":"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2023 - JVM Weekly vol. 159\u00a0 - 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\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/","og_locale":"pl_PL","og_type":"article","og_title":"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2023 - JVM Weekly vol. 159\u00a0 - Vived","og_description":"Witam w 2024 roku! Ale zanim p\u00f3jdziemy dalej, przypomnijmy sobie z kronikarsk\u0105 sumienno\u015bci\u0105 to, co wydarzy\u0142o si\u0119 w 20231","og_url":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/","og_site_name":"Vived","article_published_time":"2024-01-04T00:17:41+00:00","article_modified_time":"2024-01-04T00:19:18+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/Linkedin-post-1200x675-2.jpg","type":"image\/jpeg"}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2023 &#8211; JVM Weekly vol. 159\u00a0","datePublished":"2024-01-04T00:17:41+00:00","dateModified":"2024-01-04T00:19:18+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/"},"wordCount":7704,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/Linkedin-post-1200x675-2.jpg","articleSection":["JVM","No category"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/","url":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/","name":"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2023 - JVM Weekly vol. 159\u00a0 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/Linkedin-post-1200x675-2.jpg","datePublished":"2024-01-04T00:17:41+00:00","dateModified":"2024-01-04T00:19:18+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/Linkedin-post-1200x675-2.jpg","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/Linkedin-post-1200x675-2.jpg","width":1200,"height":675},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2023-jvm-weekly-vol-159\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2023 &#8211; JVM Weekly vol. 159\u00a0"}]},{"@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\">Rok, w kt\u00f3rym dostali\u015bmy JDK 21<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym dostali\u015bmy JDK 21<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>2023 to z pewno\u015bci\u0105 rok, kt\u00f3ry zapami\u0119tamy dzi\u0119ki JDK 21. To w\u0142a\u015bnie ona sprawi\u0142a, \u017ce Java wr\u00f3ci\u0142a na j\u0119zyki \u015bwiata programowania, a to wszystko dzi\u0119ki niezwykle bogatemu zbiorowi nowych, oczekiwanych od lat funkcji, gdzie frontrunnerem by\u0142y z pewno\u015bci\u0105 wirtualne w\u0105tki. Te odmieniane by\u0142y przez wszystkie przypadki, frameworki prze\u015bciga\u0142y si\u0119 z ich adopcj\u0105 (i do tego tematu sobie jeszcze wr\u00f3cimy), ale ilo\u015b\u0107 innych praktycznych nowo\u015bci te\u017c robi\u0142a wra\u017cenie. Tych by\u0142o tak wiele, \u017ce nie zamierzam tutaj przechodzi\u0107 przez wszystkie, i zapraszam Was do tekstu, kt\u00f3ry opublikowa\u0142em przy okazji premiery, a kt\u00f3ry ca\u0142o\u015b\u0107 podsumowuje w spos\u00f3b co najmniej zwi\u0119z\u0142y: <a href=\"https:\/\/vived.substack.com\/p\/a-one-sentence-summary-of-each-new\">A one-sentence summary of each new JEP from JDK 21 <\/a>. Opr\u00f3cz tytu\u0142owych jedno-zdaniowc\u00f3w, ka\u017cdy nowy JEP dosta\u0142 te\u017c zbi\u00f3r dodatkowych link\u00f3w, kt\u00f3re pomog\u0105 Wam poczu\u0107 atmosfer\u0119 dyskusji odbywaj\u0105cej si\u0119 w ko\u0142o nowego wydania.<\/p>\n","innerContent":["\n<p>2023 to z pewno\u015bci\u0105 rok, kt\u00f3ry zapami\u0119tamy dzi\u0119ki JDK 21. To w\u0142a\u015bnie ona sprawi\u0142a, \u017ce Java wr\u00f3ci\u0142a na j\u0119zyki \u015bwiata programowania, a to wszystko dzi\u0119ki niezwykle bogatemu zbiorowi nowych, oczekiwanych od lat funkcji, gdzie frontrunnerem by\u0142y z pewno\u015bci\u0105 wirtualne w\u0105tki. Te odmieniane by\u0142y przez wszystkie przypadki, frameworki prze\u015bciga\u0142y si\u0119 z ich adopcj\u0105 (i do tego tematu sobie jeszcze wr\u00f3cimy), ale ilo\u015b\u0107 innych praktycznych nowo\u015bci te\u017c robi\u0142a wra\u017cenie. Tych by\u0142o tak wiele, \u017ce nie zamierzam tutaj przechodzi\u0107 przez wszystkie, i zapraszam Was do tekstu, kt\u00f3ry opublikowa\u0142em przy okazji premiery, a kt\u00f3ry ca\u0142o\u015b\u0107 podsumowuje w spos\u00f3b co najmniej zwi\u0119z\u0142y: <a href=\"https:\/\/vived.substack.com\/p\/a-one-sentence-summary-of-each-new\">A one-sentence summary of each new JEP from JDK 21 <\/a>. Opr\u00f3cz tytu\u0142owych jedno-zdaniowc\u00f3w, ka\u017cdy nowy JEP dosta\u0142 te\u017c zbi\u00f3r dodatkowych link\u00f3w, kt\u00f3re pomog\u0105 Wam poczu\u0107 atmosfer\u0119 dyskusji odbywaj\u0105cej si\u0119 w ko\u0142o nowego wydania.<\/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\/2024\/01\/4inICPN.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Staruszka zdecydowanie dosta\u0142a drug\u0105 nowo\u015b\u0107<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/4inICPN.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Staruszka zdecydowanie dosta\u0142a drug\u0105 nowo\u015b\u0107<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>No dobra, to skoro oczywisto\u015bci mamy za sob\u0105, czas przej\u015b\u0107 do rzeczy, kt\u00f3re RZECZYWI\u015aCIE mieli\u015bcie okazje przegapi\u0107 \ud83d\ude07.<\/p>\n","innerContent":["\n<p>No dobra, to skoro oczywisto\u015bci mamy za sob\u0105, czas przej\u015b\u0107 do rzeczy, kt\u00f3re RZECZYWI\u015aCIE mieli\u015bcie okazje przegapi\u0107 \ud83d\ude07.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym umar\u0142 GraalVM EE, a narodzi\u0142 si\u0119 GraalOS<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym umar\u0142 GraalVM EE, a narodzi\u0142 si\u0119 GraalOS<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/JbXmhww.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/JbXmhww.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Rok 2023 zapami\u0119tamy te\u017c jako ten, podczas kt\u00f3rego GraalVM przeszed\u0142 spor\u0105 transformacj\u0119. Pierwsz\u0105 kluczow\u0105 zmian\u0105 by\u0142y kwestie licencyjne, kt\u00f3re to rozpocz\u0119\u0142y si\u0119 jeszcze w ko\u0144c\u00f3wce 2022. GraalVM, tradycyjnie oferowa\u0142 dwie edycje - Community (CE) i Enterprise (EE). Na JavaOne 2022 zapowiedziano w\u0142\u0105czenie GraalVM CE pod skrzyd\u0142a OpenJDK (w ramach projektu Galahad). W po\u0142owie 2023 zdecydowano si\u0119 na r\u00f3wnie du\u017cy krok, je\u015bli chodzi Enterprise Edition. Ta zosta\u0142a zast\u0105piona przez Oracle GraalVM, now\u0105 dystrybucj\u0119 z modelem licencyjnym, znanym jako GraalVM Free Terms and Conditions (GFTC). Ta zmiana licencyjna u\u0142awia darmowe u\u017cycie najnowszej wersji Oracle GraalVM zar\u00f3wno w \u015brodowiskach deweloperskich, jak i komercyjnych, co stanowi znacz\u0105cy krok naprz\u00f3d w por\u00f3wnaniu do poprzednich ogranicze\u0144 licencyjnych.<\/p>\n","innerContent":["\n<p>Rok 2023 zapami\u0119tamy te\u017c jako ten, podczas kt\u00f3rego GraalVM przeszed\u0142 spor\u0105 transformacj\u0119. Pierwsz\u0105 kluczow\u0105 zmian\u0105 by\u0142y kwestie licencyjne, kt\u00f3re to rozpocz\u0119\u0142y si\u0119 jeszcze w ko\u0144c\u00f3wce 2022. GraalVM, tradycyjnie oferowa\u0142 dwie edycje - Community (CE) i Enterprise (EE). Na JavaOne 2022 zapowiedziano w\u0142\u0105czenie GraalVM CE pod skrzyd\u0142a OpenJDK (w ramach projektu Galahad). W po\u0142owie 2023 zdecydowano si\u0119 na r\u00f3wnie du\u017cy krok, je\u015bli chodzi Enterprise Edition. Ta zosta\u0142a zast\u0105piona przez Oracle GraalVM, now\u0105 dystrybucj\u0119 z modelem licencyjnym, znanym jako GraalVM Free Terms and Conditions (GFTC). Ta zmiana licencyjna u\u0142awia darmowe u\u017cycie najnowszej wersji Oracle GraalVM zar\u00f3wno w \u015brodowiskach deweloperskich, jak i komercyjnych, co stanowi znacz\u0105cy krok naprz\u00f3d w por\u00f3wnaniu do poprzednich ogranicze\u0144 licencyjnych.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-10.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Zaznaczam jednak, \u017ce \u201ePowy\u017csze nie stanowi porady prawnej, a jedynie komentarz laika. Przed u\u017cyciem skontaktujcie si\u0119 z Waszym w\u0142asnym dzia\u0142em prawnym\u201d<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/09\/image-10.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Zaznaczam jednak, \u017ce \u201ePowy\u017csze nie stanowi porady prawnej, a jedynie komentarz laika. Przed u\u017cyciem skontaktujcie si\u0119 z Waszym w\u0142asnym dzia\u0142em prawnym\u201d<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kolejn\u0105 istotn\u0105 nowo\u015bci\u0105 jest wprowadzenie Graal Cloud Native (GCN). To specjalna wersja zestawu modu\u0142\u00f3w frameworka Micronaut (o Micronaucie jeszcze b\u0119dzie troch\u0119 p\u00f3\u017aniej), zaprojektowana do tworzenia mikroserwis\u00f3w w spos\u00f3b pe\u0142ni kompatybilna z kompilacj\u0105 GraalVM Native Image. Mo\u017cna je de facto uzna\u0107 za pierwszy pe\u0142noprawny framework GraalVM-First.<\/p>\n","innerContent":["\n<p>Kolejn\u0105 istotn\u0105 nowo\u015bci\u0105 jest wprowadzenie Graal Cloud Native (GCN). To specjalna wersja zestawu modu\u0142\u00f3w frameworka Micronaut (o Micronaucie jeszcze b\u0119dzie troch\u0119 p\u00f3\u017aniej), zaprojektowana do tworzenia mikroserwis\u00f3w w spos\u00f3b pe\u0142ni kompatybilna z kompilacj\u0105 GraalVM Native Image. Mo\u017cna je de facto uzna\u0107 za pierwszy pe\u0142noprawny framework GraalVM-First.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>R\u00f3wnie\u017c w 2023 opublikowany zosta\u0142 GraalOS, nowe \u015brodowisko uruchomieniowe dla aplikacji chmurowych, skoncentrowane na optymalizacji funkcji serverless poprzez mo\u017cliwo\u015b\u0107 odpalenia ich (dzi\u0119ki GraalVM) na serwerach bare metal. GraalOS wykorzystuje kompilacj\u0119 ahead-of-time (AOT) do konwersji aplikacji w samodzielne natywne pliki wykonywalne, co pozwala na eliminacj\u0119 \"cold start\u00f3w\" i zwi\u0119ksza wydajno\u015b\u0107 aplikacji serverless. GraalOS w teorii ma by\u0107 dost\u0119pny dla ka\u017cdego \u015brodowiska, ale jest zaprojektowany do integracji z Oracle Cloud Infrastructure Functions i stanowi\u0107 ma przewag\u0119 konkurencyjn\u0105 tego \u015brodowiska. Zobaczymy, czy stanie si\u0119 odpowiednim argumentem dla rozwi\u0105zania Oracle.<\/p>\n","innerContent":["\n<p>R\u00f3wnie\u017c w 2023 opublikowany zosta\u0142 GraalOS, nowe \u015brodowisko uruchomieniowe dla aplikacji chmurowych, skoncentrowane na optymalizacji funkcji serverless poprzez mo\u017cliwo\u015b\u0107 odpalenia ich (dzi\u0119ki GraalVM) na serwerach bare metal. GraalOS wykorzystuje kompilacj\u0119 ahead-of-time (AOT) do konwersji aplikacji w samodzielne natywne pliki wykonywalne, co pozwala na eliminacj\u0119 \"cold start\u00f3w\" i zwi\u0119ksza wydajno\u015b\u0107 aplikacji serverless. GraalOS w teorii ma by\u0107 dost\u0119pny dla ka\u017cdego \u015brodowiska, ale jest zaprojektowany do integracji z Oracle Cloud Infrastructure Functions i stanowi\u0107 ma przewag\u0119 konkurencyjn\u0105 tego \u015brodowiska. Zobaczymy, czy stanie si\u0119 odpowiednim argumentem dla rozwi\u0105zania Oracle.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Warto zauwa\u017cy\u0107, \u017ce AWS Lambda umo\u017cliwia ju\u017c obs\u0142ug\u0119 GraalVM w ramach tak zwanego niestandardowego \u015brodowiska wykonawczego. Jednak\u017ce zasadniczo wi\u0105\u017ce si\u0119 to z uruchomieniem kontenera z aplikacj\u0105 GraalVM. GraalOS umo\u017cliwia obej\u015bcie tej warstwy, eliminuj\u0105c potrzeb\u0119 uruchamiania kontenera i inicjowania maszyny JVM.<\/p>\n","innerContent":["\n<p>Warto zauwa\u017cy\u0107, \u017ce AWS Lambda umo\u017cliwia ju\u017c obs\u0142ug\u0119 GraalVM w ramach tak zwanego niestandardowego \u015brodowiska wykonawczego. Jednak\u017ce zasadniczo wi\u0105\u017ce si\u0119 to z uruchomieniem kontenera z aplikacj\u0105 GraalVM. GraalOS umo\u017cliwia obej\u015bcie tej warstwy, eliminuj\u0105c potrzeb\u0119 uruchamiania kontenera i inicjowania maszyny JVM.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Opr\u00f3cz powy\u017cszych zmian, ewolucje przeszed\u0142 r\u00f3wnie\u017c Truffle. Ten metaframework umo\u017cliwiaj\u0105cy tworzenie interpreter\u00f3w j\u0119zyk\u00f3w programowania na potrzeby ich uruchomienia w ramach GraalVM, zosta\u0142 oddzielony od g\u0142\u00f3wnej platformy. Same interpretery dla Pythona czy JavaScripta dost\u0119pne s\u0105 teraz jako osobne pakiety, kt\u00f3re mo\u017cemy zaczyta\u0107 jako zwyk\u0142a dependencja projektu, pomijaj\u0105c wcze\u015bniej wymagany customowy tooling.<\/p>\n","innerContent":["\n<p>Opr\u00f3cz powy\u017cszych zmian, ewolucje przeszed\u0142 r\u00f3wnie\u017c Truffle. Ten metaframework umo\u017cliwiaj\u0105cy tworzenie interpreter\u00f3w j\u0119zyk\u00f3w programowania na potrzeby ich uruchomienia w ramach GraalVM, zosta\u0142 oddzielony od g\u0142\u00f3wnej platformy. Same interpretery dla Pythona czy JavaScripta dost\u0119pne s\u0105 teraz jako osobne pakiety, kt\u00f3re mo\u017cemy zaczyta\u0107 jako zwyk\u0142a dependencja projektu, pomijaj\u0105c wcze\u015bniej wymagany customowy tooling.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/graalvm-ee-is-dead-long-live-oracle\">GraalVM EE is Dead, Long Live Oracle GraalVM - JVM Weekly vol. 47<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/graalvm-ee-is-dead-long-live-oracle\">GraalVM EE is Dead, Long Live Oracle GraalVM - JVM Weekly vol. 47<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/what-does-graalvm-for-jdk-21-have\">What does GraalVM for JDK 21 have in common with the Rabbit of Caerbannog? Both surprise with their power - JVM Weekly vol. 58<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/what-does-graalvm-for-jdk-21-have\">What does GraalVM for JDK 21 have in common with the Rabbit of Caerbannog? Both surprise with their power - JVM Weekly vol. 58<\/a><\/li>\n"]}],"innerHTML":"\n<ul>\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym MicroProfile po\u0142\u0105czy\u0142 si\u0142y z Core Profile<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym MicroProfile po\u0142\u0105czy\u0142 si\u0142y z Core Profile<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/xJBQkN7.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/xJBQkN7.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Teraz cofniemy si\u0119 o ca\u0142e 12 miesi\u0119cy - MicroProfile 6.0 by\u0142 bowiem pierwsz\u0105 du\u017c\u0105 premier\u0105 roku 2023. Poza standaryzacj\u0105 nowego zestawu API, przyni\u00f3s\u0142 on za\u015b oczekiwane uporz\u0105dkowanie tego, jak wygl\u0105da obecnie relacja projektu z Jakarta EE.<\/p>\n","innerContent":["\n<p>Teraz cofniemy si\u0119 o ca\u0142e 12 miesi\u0119cy - MicroProfile 6.0 by\u0142 bowiem pierwsz\u0105 du\u017c\u0105 premier\u0105 roku 2023. Poza standaryzacj\u0105 nowego zestawu API, przyni\u00f3s\u0142 on za\u015b oczekiwane uporz\u0105dkowanie tego, jak wygl\u0105da obecnie relacja projektu z Jakarta EE.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wraz z Jakarta EE 10 pojawi\u0142 si\u0119 tak zwany Core Profile \u2013 zestaw API, kt\u00f3re zgodnie z planami tw\u00f3rc\u00f3w maj\u0105 stanowi\u0107 minimum niezb\u0119dne do tworzenia mikrous\u0142ug w Javie. Brzmi to bardzo podobnie do celu, jaki postawili sobie tw\u00f3rcy MicroProfile, dlatego od pocz\u0105tku zastanawiali\u015bmy si\u0119, w jaki spos\u00f3b pojawienie si\u0119 Core Profile na niego wp\u0142ynie. Jaka\u015b forma synergii wydawa\u0142a si\u0119 tutaj by\u0107 bardzo naturalna, ale r\u00f3wnocze\u015bnie od pocz\u0105tku pojawia\u0142y si\u0119 jasne komunikaty, \u017ce nie nale\u017cy spodziewa\u0107 si\u0119 dw\u00f3ch inicjatyw w jedn\u0105. Ich tw\u00f3rcy jednak zapewniali, \u017ce pozostaj\u0105 ze sob\u0105 w sta\u0142ym kontakcie i w przyjacielskich stosunkach.<\/p>\n","innerContent":["\n<p>Wraz z Jakarta EE 10 pojawi\u0142 si\u0119 tak zwany Core Profile \u2013 zestaw API, kt\u00f3re zgodnie z planami tw\u00f3rc\u00f3w maj\u0105 stanowi\u0107 minimum niezb\u0119dne do tworzenia mikrous\u0142ug w Javie. Brzmi to bardzo podobnie do celu, jaki postawili sobie tw\u00f3rcy MicroProfile, dlatego od pocz\u0105tku zastanawiali\u015bmy si\u0119, w jaki spos\u00f3b pojawienie si\u0119 Core Profile na niego wp\u0142ynie. Jaka\u015b forma synergii wydawa\u0142a si\u0119 tutaj by\u0107 bardzo naturalna, ale r\u00f3wnocze\u015bnie od pocz\u0105tku pojawia\u0142y si\u0119 jasne komunikaty, \u017ce nie nale\u017cy spodziewa\u0107 si\u0119 dw\u00f3ch inicjatyw w jedn\u0105. Ich tw\u00f3rcy jednak zapewniali, \u017ce pozostaj\u0105 ze sob\u0105 w sta\u0142ym kontakcie i w przyjacielskich stosunkach.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/image-2.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">I bardzo dobrze. Enterprise Java to za ma\u0142y \u015bwiatek, \u017ceby si\u0119 jeszcze dzieli\u0107.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/image-2.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">I bardzo dobrze. Enterprise Java to za ma\u0142y \u015bwiatek, \u017ceby si\u0119 jeszcze dzieli\u0107.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Przed premier\u0105 MicroProfile 6.0, strategi\u0105 standardu by\u0142o wybieranie sobie z Jakarta EE tych API, kt\u00f3re wed\u0142ug tw\u00f3rc\u00f3w projektu mia\u0142y by\u0107 najbardziej przydatne dla u\u017cytkownika MP. W wypadku MicroProfile 5.0 by\u0142o to wi\u0119c:<\/p>\n","innerContent":["\n<p>Przed premier\u0105 MicroProfile 6.0, strategi\u0105 standardu by\u0142o wybieranie sobie z Jakarta EE tych API, kt\u00f3re wed\u0142ug tw\u00f3rc\u00f3w projektu mia\u0142y by\u0107 najbardziej przydatne dla u\u017cytkownika MP. W wypadku MicroProfile 5.0 by\u0142o to wi\u0119c:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>Jakarta Contexts and Dependency Injection (CDI)<\/li>\n","innerContent":["\n<li>Jakarta Contexts and Dependency Injection (CDI)<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>Jakarta Annotations (JPA)<\/li>\n","innerContent":["\n<li>Jakarta Annotations (JPA)<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>Jakarta RESTful Web Services (JAX-RS)<\/li>\n","innerContent":["\n<li>Jakarta RESTful Web Services (JAX-RS)<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>Jakarta JSON Binding (JSON-B)<\/li>\n","innerContent":["\n<li>Jakarta JSON Binding (JSON-B)<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>Jakarta JSON Processing (JSON-P)<\/li>\n","innerContent":["\n<li>Jakarta JSON Processing (JSON-P)<\/li>\n"]}],"innerHTML":"\n<ul>\n\n\n\n\n\n\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Od wydania MicroProfile 6.0 projekt dokona\u0142 alignementu z Jakarta Core Profile. Oznacza to, \u017ce zamiast na pojedynczych API b\u0119dzie on posiada\u0142 zale\u017cno\u015b\u0107 na pe\u0142nym Profilu, a tranzytywne trafi\u0105 do niego r\u00f3wnie\u017c nast\u0119puj\u0105ce API:<\/p>\n","innerContent":["\n<p>Od wydania MicroProfile 6.0 projekt dokona\u0142 alignementu z Jakarta Core Profile. Oznacza to, \u017ce zamiast na pojedynczych API b\u0119dzie on posiada\u0142 zale\u017cno\u015b\u0107 na pe\u0142nym Profilu, a tranzytywne trafi\u0105 do niego r\u00f3wnie\u017c nast\u0119puj\u0105ce API:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>Jakarta RESTful Web Services<\/li>\n","innerContent":["\n<li>Jakarta RESTful Web Services<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>Jakarta Interceptors<\/li>\n","innerContent":["\n<li>Jakarta Interceptors<\/li>\n"]}],"innerHTML":"\n<ul>\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ze zrozumia\u0142ych powod\u00f3w, minimalna wersja Jakarta EE wspierana przez MicroProfile to teraz Jakarta EE 10.<\/p>\n","innerContent":["\n<p>Ze zrozumia\u0142ych powod\u00f3w, minimalna wersja Jakarta EE wspierana przez MicroProfile to teraz Jakarta EE 10.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszej edycji:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszej edycji:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/kotlin-18-is-a-phantom-release-jvm\">Kotlin 1.8 is a phantom release - JVM Weekly #29<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/kotlin-18-is-a-phantom-release-jvm\">Kotlin 1.8 is a phantom release - JVM Weekly #29<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym Testcontainers sta\u0142y si\u0119 cz\u0119\u015bci\u0105 Docker<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym Testcontainers sta\u0142y si\u0119 cz\u0119\u015bci\u0105 Docker<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/YvGU25Z.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/YvGU25Z.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>O ile w wypadku JavaScriptowych infrastrukturalnych projekt\u00f3w do\u015b\u0107 cz\u0119sto (a przynajmniej 2021 i 2022 nas w tym temacie dosy\u0107 rozpie\u015bci\u0142y) mamy do czynienia z og\u0142oszeniami nowych rund zewn\u0119trznego finansowania (Vercel, Deno), o tyle relatywnie rzadko s\u0142yszy si\u0119, aby jaka\u015b javowa biblioteka zak\u0142ada\u0142a w\u0142asn\u0105 chmur\u0119 (chyba, \u017ce bierzemy tutaj pod uwag\u0119 takiego Confluence i Kafk\u0119). Dlatego te\u017c ze sporym u\u015bmiechem \u015bledzi\u0142em tegoroczne og\u0142oszenia od AtomicJar.<\/p>\n","innerContent":["\n<p>O ile w wypadku JavaScriptowych infrastrukturalnych projekt\u00f3w do\u015b\u0107 cz\u0119sto (a przynajmniej 2021 i 2022 nas w tym temacie dosy\u0107 rozpie\u015bci\u0142y) mamy do czynienia z og\u0142oszeniami nowych rund zewn\u0119trznego finansowania (Vercel, Deno), o tyle relatywnie rzadko s\u0142yszy si\u0119, aby jaka\u015b javowa biblioteka zak\u0142ada\u0142a w\u0142asn\u0105 chmur\u0119 (chyba, \u017ce bierzemy tutaj pod uwag\u0119 takiego Confluence i Kafk\u0119). Dlatego te\u017c ze sporym u\u015bmiechem \u015bledzi\u0142em tegoroczne og\u0142oszenia od AtomicJar.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>\u017beby przedstawi\u0107, na co maj\u0105 i\u015b\u0107 dane \u015brodki, warto przypomnie\u0107 sobie czym AtomicJar si\u0119 zajmuje. Kojarzycie TestContainers? Jest to biblioteka wspieraj\u0105ca dla JUnita, zapewniaj\u0105ca lekkie, jednorazowe instancje popularnych baz danych, przegl\u0105darek internetowych dla Selenium i og\u00f3lnie wszystkiego, co mo\u017cna \u0142atwo uruchomi\u0107 w kontenerze Dockera. Wprawdzie wiele os\u00f3b pewnie b\u0119dzie z\u017cyma\u0107 si\u0119 na uruchamianie kontener\u00f3w w testach jednostkowych, ale popularno\u015b\u0107 TestContainers udowadnia, jak bardzo cz\u0119sty jest to przypadek u\u017cycia.<\/p>\n","innerContent":["\n<p>\u017beby przedstawi\u0107, na co maj\u0105 i\u015b\u0107 dane \u015brodki, warto przypomnie\u0107 sobie czym AtomicJar si\u0119 zajmuje. Kojarzycie TestContainers? Jest to biblioteka wspieraj\u0105ca dla JUnita, zapewniaj\u0105ca lekkie, jednorazowe instancje popularnych baz danych, przegl\u0105darek internetowych dla Selenium i og\u00f3lnie wszystkiego, co mo\u017cna \u0142atwo uruchomi\u0107 w kontenerze Dockera. Wprawdzie wiele os\u00f3b pewnie b\u0119dzie z\u017cyma\u0107 si\u0119 na uruchamianie kontener\u00f3w w testach jednostkowych, ale popularno\u015b\u0107 TestContainers udowadnia, jak bardzo cz\u0119sty jest to przypadek u\u017cycia.<\/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\/2024\/01\/d9ab87a0ff5b0e6f3070819b131462bd60ca71f5r1-498-280_hq.gif\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Po prostu nazwiemy nasze testy integracyjnymi.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/d9ab87a0ff5b0e6f3070819b131462bd60ca71f5r1-498-280_hq.gif\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Po prostu nazwiemy nasze testy integracyjnymi.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W lutym AtomicJar pozyska\u0142o 25 milion\u00f3w dolar\u00f3w finansowania. \u015arodki te mia\u0142y na celu rozw\u00f3j TestContainers Cloud - rozwi\u0105zania Software-as-a-Service, kt\u00f3re umo\u017cliwia uruchamianie kontener\u00f3w nie lokalnie, ale w chmurze. Mia\u0142o to na celu u\u0142atwienie pracy programistom, zw\u0142aszcza w kontek\u015bcie ci\u0119\u017cszych test\u00f3w i ogranicze\u0144 sprz\u0119towych.<\/p>\n","innerContent":["\n<p>W lutym AtomicJar pozyska\u0142o 25 milion\u00f3w dolar\u00f3w finansowania. \u015arodki te mia\u0142y na celu rozw\u00f3j TestContainers Cloud - rozwi\u0105zania Software-as-a-Service, kt\u00f3re umo\u017cliwia uruchamianie kontener\u00f3w nie lokalnie, ale w chmurze. Mia\u0142o to na celu u\u0142atwienie pracy programistom, zw\u0142aszcza w kontek\u015bcie ci\u0119\u017cszych test\u00f3w i ogranicze\u0144 sprz\u0119towych.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nast\u0119pnym krokiem by\u0142a premiera Testcontainers Desktop, aplikacj\u0119 maj\u0105c\u0105 na celu przyspieszenie startu test\u00f3w poprzez funkcje takie jak sta\u0142e porty czy mo\u017cliwo\u015b\u0107 zamra\u017cania kontener\u00f3w dla cel\u00f3w debugowania. Testcontainers Desktop stanowi\u0142 u\u0142atwienie dla tych, kt\u00f3rzy wci\u0105\u017c preferuj\u0105 lokalne \u015brodowisko testowe, jednocze\u015bnie daj\u0105c dost\u0119p do wersji pr\u00f3bnej Testcontainers Cloud.<\/p>\n","innerContent":["\n<p>Nast\u0119pnym krokiem by\u0142a premiera Testcontainers Desktop, aplikacj\u0119 maj\u0105c\u0105 na celu przyspieszenie startu test\u00f3w poprzez funkcje takie jak sta\u0142e porty czy mo\u017cliwo\u015b\u0107 zamra\u017cania kontener\u00f3w dla cel\u00f3w debugowania. Testcontainers Desktop stanowi\u0142 u\u0142atwienie dla tych, kt\u00f3rzy wci\u0105\u017c preferuj\u0105 lokalne \u015brodowisko testowe, jednocze\u015bnie daj\u0105c dost\u0119p do wersji pr\u00f3bnej Testcontainers Cloud.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kulminacyjnym wydarzeniem roku by\u0142o przej\u0119cie AtomicJar przez Docker w grudniu. Tranzakcja mia\u0142a strategiczne znaczenie zar\u00f3wno dla samego Dockera (kt\u00f3ry z przytupem wkroczy\u0142 w ten spos\u00f3b w rynek Cloud DevEnvironments), jak i dla Tescontiners, potencjalnie rozszerzaj\u0105c baz\u0119 u\u017cytkownik\u00f3w ich rozwi\u0105zania, kt\u00f3re dzi\u0119ki wsp\u00f3\u0142pracy z Dockerem ma szanse wyj\u015b\u0107 poza \u015bwiat Javy i sta\u0107 si\u0119 rynkowym standardem.<\/p>\n","innerContent":["\n<p>Kulminacyjnym wydarzeniem roku by\u0142o przej\u0119cie AtomicJar przez Docker w grudniu. Tranzakcja mia\u0142a strategiczne znaczenie zar\u00f3wno dla samego Dockera (kt\u00f3ry z przytupem wkroczy\u0142 w ten spos\u00f3b w rynek Cloud DevEnvironments), jak i dla Tescontiners, potencjalnie rozszerzaj\u0105c baz\u0119 u\u017cytkownik\u00f3w ich rozwi\u0105zania, kt\u00f3re dzi\u0119ki wsp\u00f3\u0142pracy z Dockerem ma szanse wyj\u015b\u0107 poza \u015bwiat Javy i sta\u0107 si\u0119 rynkowym standardem.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Oby wi\u0119cej takich historii w 2024.<\/p>\n","innerContent":["\n<p>Oby wi\u0119cej takich historii w 2024.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/WkKFCpZ.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">A dla anty-fan\u00f3w TestContainers zostawiam klasyczny cytat z Rousseau. On ju\u017c w XVIII wieku wiedzia\u0142 jak wygl\u0105da prawdziwa in\u017cynieria.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/WkKFCpZ.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">A dla anty-fan\u00f3w TestContainers zostawiam klasyczny cytat z Rousseau. On ju\u017c w XVIII wieku wiedzia\u0142 jak wygl\u0105da prawdziwa in\u017cynieria.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszej edycji:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszej edycji:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/what-does-the-state-of-developer\">What does the \"State of Developer Ecosystem 2022\" tell us about Java and the JVM ? - JVM Weekly #32<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/what-does-the-state-of-developer\">What does the \"State of Developer Ecosystem 2022\" tell us about Java and the JVM ? - JVM Weekly #32<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/java-kotlin-scala-insights-from-state\">Java, Kotlin, Scala: Insights from State of Developer Ecosystem 2023 - JVM Weekly vol. 62<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/java-kotlin-scala-insights-from-state\">Java, Kotlin, Scala: Insights from State of Developer Ecosystem 2023 - JVM Weekly vol. 62<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/docker-acquires-atomicjar-company\">Docker acquires AtomicJar, company behind Testcontainers - JVM Weekly vol. 64<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/docker-acquires-atomicjar-company\">Docker acquires AtomicJar, company behind Testcontainers - JVM Weekly vol. 64<\/a><\/li>\n"]}],"innerHTML":"\n<ul>\n\n\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym Spring po\u015brednio sta\u0142 si\u0119 cz\u0119\u015bci\u0105 Broadcom<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym Spring po\u015brednio sta\u0142 si\u0119 cz\u0119\u015bci\u0105 Broadcom<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/SFfe11A.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/SFfe11A.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>O ile powy\u017csze przej\u0119cie witam bardzo optymistycznie, to jednak nie ka\u017cde og\u0142oszenie tego typu to pow\u00f3d do rado\u015bci. Dla nikogo zaskoczeniem nie b\u0119dzie, \u017ce du\u017ce projekty Open-Source w dzisiejszych czasach zwykle posiadaj\u0105 swoich korporacyjnych sponsor\u00f3w, a wielu ludzi rozwijaj\u0105cych je robi\u0105 to w ramach firmowych etat\u00f3w. Dlatego te\u017c ruchy sp\u00f3\u0142ek gie\u0142dowych potrafi\u0105 mie\u0107 na ich rozw\u00f3j olbrzymi wp\u0142yw.<\/p>\n","innerContent":["\n<p>O ile powy\u017csze przej\u0119cie witam bardzo optymistycznie, to jednak nie ka\u017cde og\u0142oszenie tego typu to pow\u00f3d do rado\u015bci. Dla nikogo zaskoczeniem nie b\u0119dzie, \u017ce du\u017ce projekty Open-Source w dzisiejszych czasach zwykle posiadaj\u0105 swoich korporacyjnych sponsor\u00f3w, a wielu ludzi rozwijaj\u0105cych je robi\u0105 to w ramach firmowych etat\u00f3w. Dlatego te\u017c ruchy sp\u00f3\u0142ek gie\u0142dowych potrafi\u0105 mie\u0107 na ich rozw\u00f3j olbrzymi wp\u0142yw.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-33.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Powy\u017cszy obrazek jest tu bez \u017cadnego kontekstu i nie ma nic wsp\u00f3lnego z tre\u015bci\u0105 sekcji. W\u0142a\u015bciwie nie wiem sk\u0105d on si\u0119 tu w og\u00f3le wzi\u0105\u0142\u2026<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-33.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Powy\u017cszy obrazek jest tu bez \u017cadnego kontekstu i nie ma nic wsp\u00f3lnego z tre\u015bci\u0105 sekcji. W\u0142a\u015bciwie nie wiem sk\u0105d on si\u0119 tu w og\u00f3le wzi\u0105\u0142\u2026<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pivotal Software (stoj\u0105cy za Springiem) i VMware maj\u0105 ze sob\u0105 silne powi\u0105zania historyczne i biznesowe, czego kulimancj\u0105 w 2019 by\u0142o przej\u0119cie Pivotala przez t\u0105 drug\u0105 firm\u0119. W 2023 dosz\u0142o do kolejnych akwizycji samego VMWare - Broadcom, znany g\u0142\u00f3wnie z produkcji p\u00f3\u0142przewodnik\u00f3w, podj\u0105\u0142 decyzj\u0119 o rozszerzeniu swojej dzia\u0142alno\u015bci na rynku oprogramowania. Wyb\u00f3r pad\u0142 na VMware, jako \u017ce firma uznawana jest za lidera w dziedzinie wirtualizacji i infrastruktury chmurowej, co stanowi\u0142o atrakcyjny kierunek rozwoju dla Broadcom. Przej\u0119cie rozpocz\u0119te w maju 2022, a b\u0119d\u0105ce jedn\u0105 z wi\u0119kszych transakcji tego typu opiewaj\u0105c\u0105 na 69 miliard\u00f3w dolar\u00f3w, domkni\u0119to finalnie w zesz\u0142ym tygodniu, 22 listopada.<\/p>\n","innerContent":["\n<p>Pivotal Software (stoj\u0105cy za Springiem) i VMware maj\u0105 ze sob\u0105 silne powi\u0105zania historyczne i biznesowe, czego kulimancj\u0105 w 2019 by\u0142o przej\u0119cie Pivotala przez t\u0105 drug\u0105 firm\u0119. W 2023 dosz\u0142o do kolejnych akwizycji samego VMWare - Broadcom, znany g\u0142\u00f3wnie z produkcji p\u00f3\u0142przewodnik\u00f3w, podj\u0105\u0142 decyzj\u0119 o rozszerzeniu swojej dzia\u0142alno\u015bci na rynku oprogramowania. Wyb\u00f3r pad\u0142 na VMware, jako \u017ce firma uznawana jest za lidera w dziedzinie wirtualizacji i infrastruktury chmurowej, co stanowi\u0142o atrakcyjny kierunek rozwoju dla Broadcom. Przej\u0119cie rozpocz\u0119te w maju 2022, a b\u0119d\u0105ce jedn\u0105 z wi\u0119kszych transakcji tego typu opiewaj\u0105c\u0105 na 69 miliard\u00f3w dolar\u00f3w, domkni\u0119to finalnie w zesz\u0142ym tygodniu, 22 listopada.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Bardzo szybko po transakcji dosz\u0142o do serii zwolnie\u0144 w firmie. Nie wiemy jaki jest ich zakres, ale na pewno zaafektowa\u0142y one te\u017c zesp\u00f3\u0142 odpowiadaj\u0105cy za najpopularniejszy javowy framework. Oliver Drotbohm, architekt Springa, kt\u00f3ry od ponad dekady prowadzi projekt Spring Data, podsumowa\u0142 ca\u0142o\u015b\u0107 wymownie.<\/p>\n","innerContent":["\n<p>Bardzo szybko po transakcji dosz\u0142o do serii zwolnie\u0144 w firmie. Nie wiemy jaki jest ich zakres, ale na pewno zaafektowa\u0142y one te\u017c zesp\u00f3\u0142 odpowiadaj\u0105cy za najpopularniejszy javowy framework. Oliver Drotbohm, architekt Springa, kt\u00f3ry od ponad dekady prowadzi projekt Spring Data, podsumowa\u0142 ca\u0142o\u015b\u0107 wymownie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/QMoyrOJ.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/QMoyrOJ.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszej edycji:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszej edycji:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/java-kotlin-scala-insights-from-state\">Java, Kotlin, Scala: Insights from State of Developer Ecosystem 2023 - JVM Weekly vol. 62<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/java-kotlin-scala-insights-from-state\">Java, Kotlin, Scala: Insights from State of Developer Ecosystem 2023 - JVM Weekly vol. 62<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym Oracle wywraca do g\u00f3ry nogami pricing ich wersji JDK<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym Oracle wywraca do g\u00f3ry nogami pricing ich wersji JDK<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/upXRdZ9.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/upXRdZ9.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jak ju\u017c wspomnia\u0142em na samym pocz\u0105tku, poza wyj\u0105tkowymi okazjami jak JDK 21, Java bardzo rzadko trafia na j\u0119zyki spo\u0142eczno\u015bci programistycznej. O ile nas interesowa\u0107 mog\u0105 zmiany w maszynie wirtualnej i inne wiadomo\u015bci z ekosystemu, to jednak kto\u015b \u201eniezainwestowany\u201d w ekosystem o Javie s\u0142yszy g\u0142\u00f3wnie w momencie internetowych \u201edram\u201d. A z tak\u0105 mieli\u015bmy do czynienia pocz\u0105tkiem lutego, a wszystko przez to, \u017ce Oracle zdecydowa\u0142 si\u0119 zmieni\u0107 spos\u00f3b naliczania op\u0142at za swoje JDK. Nie mog\u0119 wi\u0119c nie po\u015bwi\u0119ci\u0107 miejsca temu faktowi w podsumowaniu roku.<\/p>\n","innerContent":["\n<p>Jak ju\u017c wspomnia\u0142em na samym pocz\u0105tku, poza wyj\u0105tkowymi okazjami jak JDK 21, Java bardzo rzadko trafia na j\u0119zyki spo\u0142eczno\u015bci programistycznej. O ile nas interesowa\u0107 mog\u0105 zmiany w maszynie wirtualnej i inne wiadomo\u015bci z ekosystemu, to jednak kto\u015b \u201eniezainwestowany\u201d w ekosystem o Javie s\u0142yszy g\u0142\u00f3wnie w momencie internetowych \u201edram\u201d. A z tak\u0105 mieli\u015bmy do czynienia pocz\u0105tkiem lutego, a wszystko przez to, \u017ce Oracle zdecydowa\u0142 si\u0119 zmieni\u0107 spos\u00f3b naliczania op\u0142at za swoje JDK. Nie mog\u0119 wi\u0119c nie po\u015bwi\u0119ci\u0107 miejsca temu faktowi w podsumowaniu roku.<\/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\/2024\/01\/AYDGm7d.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Fun Fact - z tego co uda\u0142o mi si\u0119 sprawdzi\u0107, to by\u0142 to jedyny raz w tym roku gdy co\u015b JVM-owego znalaz\u0142o si\u0119 na szczycie <strong>\/r\/programming<\/strong> - nie uda\u0142o si\u0119 to nawet JDK 21. Wida\u0107 co si\u0119 klika w internetach.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/AYDGm7d.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Fun Fact - z tego co uda\u0142o mi si\u0119 sprawdzi\u0107, to by\u0142 to jedyny raz w tym roku gdy co\u015b JVM-owego znalaz\u0142o si\u0119 na szczycie <strong>\/r\/programming<\/strong> - nie uda\u0142o si\u0119 to nawet JDK 21. Wida\u0107 co si\u0119 klika w internetach.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>23 stycznia Oracle poinformowa\u0142, \u017ce zmienia model licencyjny Oracle JDK na Java SE Universal Subscription. Nowy cennik, zamiast bazowa\u0107 na stanowiskach roboczych i procesorach, opiera si\u0119 na ilo\u015bci pracownik\u00f3w zatrudnianych przez firm\u0119: w tych do 1000 pracownik\u00f3w op\u0142aty wynosz\u0105 15$\/mc, dla wi\u0119kszych 5,25$\/mc. Dla wielu (wi\u0119kszo\u015bci?) firm korzystaj\u0105cych z Oracle JDK oznacza to b\u0119dzie wzrost koszt\u00f3w, poniewa\u017c w obliczeniach brani s\u0105 pod uwag\u0119 nie tylko programi\u015bci, ale wszyscy pracownicy firmy \u2013 tak\u017ce ci spoza dzia\u0142u IT, a tak\u017ce np. kontraktorzy.<\/p>\n","innerContent":["\n<p>23 stycznia Oracle poinformowa\u0142, \u017ce zmienia model licencyjny Oracle JDK na Java SE Universal Subscription. Nowy cennik, zamiast bazowa\u0107 na stanowiskach roboczych i procesorach, opiera si\u0119 na ilo\u015bci pracownik\u00f3w zatrudnianych przez firm\u0119: w tych do 1000 pracownik\u00f3w op\u0142aty wynosz\u0105 15$\/mc, dla wi\u0119kszych 5,25$\/mc. Dla wielu (wi\u0119kszo\u015bci?) firm korzystaj\u0105cych z Oracle JDK oznacza to b\u0119dzie wzrost koszt\u00f3w, poniewa\u017c w obliczeniach brani s\u0105 pod uwag\u0119 nie tylko programi\u015bci, ale wszyscy pracownicy firmy \u2013 tak\u017ce ci spoza dzia\u0142u IT, a tak\u017ce np. kontraktorzy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zmiany nie dotyczy ju\u017c p\u0142ac\u0105cych klient\u00f3w, kt\u00f3rzy b\u0119d\u0105 mogli si\u0119 rozlicza\u0107 na wsp\u00f3\u0142czesnych warunkach (aczkolwiek nie uda\u0142o mi si\u0119 dogrzeba\u0107, w jaki spos\u00f3b rozwi\u0105zane zostanie np. rozszerzenie licencji). Ko\u0144cz\u0105c na pozytywnej nucie, zapisy mog\u0105 by\u0107 teoretycznie korzystne dla niekt\u00f3rych firm, zw\u0142aszcza ma\u0142ych startup\u00f3w stricte technologicznych, posiadaj\u0105cych ma\u0142\u0105 ilo\u015b\u0107 pracownik\u00f3w. Enterprise trac\u0105 chyba w ka\u017cdej konfiguracji, ale mali, szybko skaluj\u0105cy si\u0119 mog\u0105 zyska\u0107 \u2013 aczkolwiek wbrew tej teorii mo\u017ce by\u0107 fakt wysokich op\u0142at per pracownik (15$\/mc) w firmach poni\u017cej 1000 zatrudnionych os\u00f3b.<\/p>\n","innerContent":["\n<p>Zmiany nie dotyczy ju\u017c p\u0142ac\u0105cych klient\u00f3w, kt\u00f3rzy b\u0119d\u0105 mogli si\u0119 rozlicza\u0107 na wsp\u00f3\u0142czesnych warunkach (aczkolwiek nie uda\u0142o mi si\u0119 dogrzeba\u0107, w jaki spos\u00f3b rozwi\u0105zane zostanie np. rozszerzenie licencji). Ko\u0144cz\u0105c na pozytywnej nucie, zapisy mog\u0105 by\u0107 teoretycznie korzystne dla niekt\u00f3rych firm, zw\u0142aszcza ma\u0142ych startup\u00f3w stricte technologicznych, posiadaj\u0105cych ma\u0142\u0105 ilo\u015b\u0107 pracownik\u00f3w. Enterprise trac\u0105 chyba w ka\u017cdej konfiguracji, ale mali, szybko skaluj\u0105cy si\u0119 mog\u0105 zyska\u0107 \u2013 aczkolwiek wbrew tej teorii mo\u017ce by\u0107 fakt wysokich op\u0142at per pracownik (15$\/mc) w firmach poni\u017cej 1000 zatrudnionych os\u00f3b.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nale\u017cy pami\u0119ta\u0107, \u017ce Oracle nie jest jedynym dostawc\u0105 JDK, wi\u0119c ka\u017cdy chc\u0105cy u\u017cywa\u0107 Javy za darmo, mo\u017ce u\u017cy\u0107 np. Adoptium. Co jest smutne \u2013 \u015bwietnie wiedz\u0105 to ludzie znaj\u0105cy ekosystem Javy, ale dla szerokiego odbiorcy jest to stan mocno nieintuicyjny. W ko\u0144cu nie ma alternatywnych dystrybucji Go czy Rusta (albo s\u0105 statystycznie pomijalne).<\/p>\n","innerContent":["\n<p>Nale\u017cy pami\u0119ta\u0107, \u017ce Oracle nie jest jedynym dostawc\u0105 JDK, wi\u0119c ka\u017cdy chc\u0105cy u\u017cywa\u0107 Javy za darmo, mo\u017ce u\u017cy\u0107 np. Adoptium. Co jest smutne \u2013 \u015bwietnie wiedz\u0105 to ludzie znaj\u0105cy ekosystem Javy, ale dla szerokiego odbiorcy jest to stan mocno nieintuicyjny. W ko\u0144cu nie ma alternatywnych dystrybucji Go czy Rusta (albo s\u0105 statystycznie pomijalne).<\/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\/2024\/01\/oeKK34d.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/oeKK34d.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszej edycji:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszej edycji:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/what-does-the-state-of-developer\">What does the \"State of Developer Ecosystem 2022\" tell us about Java and the JVM ? - JVM Weekly #32<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/what-does-the-state-of-developer\">What does the \"State of Developer Ecosystem 2022\" tell us about Java and the JVM ? - JVM Weekly #32<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">Rok pocz\u0105tku ko\u0144ca problemu nulli w Javie dzi\u0119ki projektowi Valhalla<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">Rok pocz\u0105tku ko\u0144ca problemu nulli w Javie dzi\u0119ki projektowi Valhalla<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/DcbiUjo.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/DcbiUjo.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>2023 to te\u017c kolejny rok iteracji nad Valhall\u0105. Projekt ulega dalszej rewolucji i z ka\u017cd\u0105 kolejn\u0105 iteracj\u0105 staje si\u0119 coraz ciekawszy i ma szanse (troch\u0119 przypadkiem) da\u0107 nam usprawnienia, na kt\u00f3re programi\u015bci czekali... no w zasadzie od zawsze. Jedn\u0105 z funkcji j\u0119zyka, kt\u00f3re dostarczy\u0107 ma Valhalla s\u0105 Value Type (czy jak one si\u0119 tam teraz po kolejnych iteracjach maj\u0105 nazywa\u0107). G\u0142\u00f3wnym rozr\u00f3\u017cnieniem mi\u0119dzy \u201etypem referencyjnym\u201d (czyli obecnie istniej\u0105cymi w j\u0119zyku) a \u201etypem warto\u015bci\u201d jest fakt, \u017ce te drugie nie mog\u0105 przyjmowa\u0107 warto\u015bci null. W odr\u00f3\u017cnieniu od takiego Kotlina, w\u0142asno\u015b\u0107 ta nie jest \u0142atwo wyra\u017calna w samym j\u0119zyku. Dlatego te\u017c projektanci do Valhalli rozwa\u017caj\u0105 wprowadzenie nowego znacznika \u201enullness\u201d dla obiekt\u00f3w.<\/p>\n","innerContent":["\n<p>2023 to te\u017c kolejny rok iteracji nad Valhall\u0105. Projekt ulega dalszej rewolucji i z ka\u017cd\u0105 kolejn\u0105 iteracj\u0105 staje si\u0119 coraz ciekawszy i ma szanse (troch\u0119 przypadkiem) da\u0107 nam usprawnienia, na kt\u00f3re programi\u015bci czekali... no w zasadzie od zawsze. Jedn\u0105 z funkcji j\u0119zyka, kt\u00f3re dostarczy\u0107 ma Valhalla s\u0105 Value Type (czy jak one si\u0119 tam teraz po kolejnych iteracjach maj\u0105 nazywa\u0107). G\u0142\u00f3wnym rozr\u00f3\u017cnieniem mi\u0119dzy \u201etypem referencyjnym\u201d (czyli obecnie istniej\u0105cymi w j\u0119zyku) a \u201etypem warto\u015bci\u201d jest fakt, \u017ce te drugie nie mog\u0105 przyjmowa\u0107 warto\u015bci null. W odr\u00f3\u017cnieniu od takiego Kotlina, w\u0142asno\u015b\u0107 ta nie jest \u0142atwo wyra\u017calna w samym j\u0119zyku. Dlatego te\u017c projektanci do Valhalli rozwa\u017caj\u0105 wprowadzenie nowego znacznika \u201enullness\u201d dla obiekt\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli nie \u015bledzicie na bie\u017c\u0105co rozwoju Valhalli, mo\u017cliwe, \u017ce umkn\u0105\u0142 Wam fakt, \u017ce w pewnym momencie tw\u00f3rcy zaproponowali sufiksy <code>.val<\/code> i <code>.ref<\/code>. Mia\u0142y one informowa\u0107, czy chcemy u\u017cywa\u0107 danego obiektu jako warto\u015bci, czy jako referencji. To by\u0142o dla mnie najbardziej problematyczne spo\u015br\u00f3d proponowanych zmian, obawia\u0142em si\u0119 bowiem komplikacji sk\u0142adni. Na razie wygl\u0105da na to, \u017ce uda si\u0119 z nich zrezygnowa\u0107. Prace nad rozwojem ca\u0142ego projektu pozwoli\u0142y zredukowa\u0107 r\u00f3\u017cnice mi\u0119dzy typami prymitywnymi a obiektami do dw\u00f3ch fundamentalnych r\u00f3\u017cnic \u2013 posiadania warto\u015bci domy\u015blnej (jak 0 w przypadku int) oraz wsparcia dla nullowalno\u015bci.<\/p>\n","innerContent":["\n<p>Je\u015bli nie \u015bledzicie na bie\u017c\u0105co rozwoju Valhalli, mo\u017cliwe, \u017ce umkn\u0105\u0142 Wam fakt, \u017ce w pewnym momencie tw\u00f3rcy zaproponowali sufiksy <code>.val<\/code> i <code>.ref<\/code>. Mia\u0142y one informowa\u0107, czy chcemy u\u017cywa\u0107 danego obiektu jako warto\u015bci, czy jako referencji. To by\u0142o dla mnie najbardziej problematyczne spo\u015br\u00f3d proponowanych zmian, obawia\u0142em si\u0119 bowiem komplikacji sk\u0142adni. Na razie wygl\u0105da na to, \u017ce uda si\u0119 z nich zrezygnowa\u0107. Prace nad rozwojem ca\u0142ego projektu pozwoli\u0142y zredukowa\u0107 r\u00f3\u017cnice mi\u0119dzy typami prymitywnymi a obiektami do dw\u00f3ch fundamentalnych r\u00f3\u017cnic \u2013 posiadania warto\u015bci domy\u015blnej (jak 0 w przypadku int) oraz wsparcia dla nullowalno\u015bci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W odr\u00f3\u017cnieniu od takiego Kotlina, w\u0142asno\u015b\u0107 ta nie jest \u0142atwo wyra\u017calna w samym j\u0119zyku. Dlatego te\u017c projektanci do Valhalli rozwa\u017caj\u0105 wprowadzenie nowego znacznika \u201enullness\u201d dla obiekt\u00f3w. Pojawi\u0142a si\u0119 propozycja wprowadzenia dw\u00f3ch dodatkowych oznacze\u0144 przy definiowaniu typu \u2013 ! oznaczaj\u0105cy nie dopuszczamy nulla oraz ? oznaczaj\u0105cy ten obiekt jest nullowalny. W skr\u00f3cie:<\/p>\n","innerContent":["\n<p>W odr\u00f3\u017cnieniu od takiego Kotlina, w\u0142asno\u015b\u0107 ta nie jest \u0142atwo wyra\u017calna w samym j\u0119zyku. Dlatego te\u017c projektanci do Valhalli rozwa\u017caj\u0105 wprowadzenie nowego znacznika \u201enullness\u201d dla obiekt\u00f3w. Pojawi\u0142a si\u0119 propozycja wprowadzenia dw\u00f3ch dodatkowych oznacze\u0144 przy definiowaniu typu \u2013 ! oznaczaj\u0105cy nie dopuszczamy nulla oraz ? oznaczaj\u0105cy ten obiekt jest nullowalny. W skr\u00f3cie:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><code>Foo?<\/code> oznacza ten typ zawiera w swoim zbiorze warto\u015bci null<br><code>Foo!<\/code> oznacza ten typ nie zawiera w swoim zbiorze warto\u015bci null<br><code>Foo<\/code> oznacza \ud83e\udd37\u200d\u2642\ufe0f \u2013 inaczej m\u00f3wi\u0105c, nie okre\u015blony stan nullowalno\u015bci<\/p>\n","innerContent":["\n<p><code>Foo?<\/code> oznacza ten typ zawiera w swoim zbiorze warto\u015bci null<br><code>Foo!<\/code> oznacza ten typ nie zawiera w swoim zbiorze warto\u015bci null<br><code>Foo<\/code> oznacza \ud83e\udd37\u200d\u2642\ufe0f \u2013 inaczej m\u00f3wi\u0105c, nie okre\u015blony stan nullowalno\u015bci<\/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\/2024\/01\/8b5pwc.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/8b5pwc.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Z czasem, tw\u00f3rcy b\u0119d\u0105 d\u0105\u017cy\u0107 do tego, aby wersja bez odpowiedniej adnotacji przyjmowa\u0142a cechy wariant\u00f3w anotowanych \u2013 na ten moment wydaje si\u0119, \u017ce nieoznaczone Foo b\u0119dzie w wi\u0119kszo\u015bci przypadk\u00f3w traktowane jako nienulowalne.<\/p>\n","innerContent":["\n<p>Z czasem, tw\u00f3rcy b\u0119d\u0105 d\u0105\u017cy\u0107 do tego, aby wersja bez odpowiedniej adnotacji przyjmowa\u0142a cechy wariant\u00f3w anotowanych \u2013 na ten moment wydaje si\u0119, \u017ce nieoznaczone Foo b\u0119dzie w wi\u0119kszo\u015bci przypadk\u00f3w traktowane jako nienulowalne.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszej edycji:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszej edycji:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/will-valhalla-bring-better-nulls\">Will Valhalla bring better nulls to Java? - JVM Weekly #33<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/will-valhalla-bring-better-nulls\">Will Valhalla bring better nulls to Java? - JVM Weekly #33<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/exploring-the-newest-updates-of-project\">Exploring the Newest Updates of Project Leyden, Valhalla &amp; Hermes: JVM Weekly vol. 54<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/exploring-the-newest-updates-of-project\">Exploring the Newest Updates of Project Leyden, Valhalla &amp; Hermes: JVM Weekly vol. 54<\/a><\/li>\n"]}],"innerHTML":"\n<ul>\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"<\/ul>\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\/2024\/01\/1AGUceM.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">A najlepiej to \u017cagladnijcie do oryginalnych dokument\u00f3w - te nulla to mega skomplikowany temat. I pewnie przegapi\u0142em jaki\u015b tekst kt\u00f3ry zd\u0105\u017cy\u0142 go wywr\u00f3ci\u0107 do g\u00f3ry nogami.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/1AGUceM.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">A najlepiej to \u017cagladnijcie do oryginalnych dokument\u00f3w - te nulla to mega skomplikowany temat. I pewnie przegapi\u0142em jaki\u015b tekst kt\u00f3ry zd\u0105\u017cy\u0142 go wywr\u00f3ci\u0107 do g\u00f3ry nogami.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym z wypiekami na twarzy ogl\u0105da\u0142em JVM Language Summit<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym z wypiekami na twarzy ogl\u0105da\u0142em JVM Language Summit<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/GouYQXi.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/GouYQXi.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>JVMLS to roczne wydarzenie, kt\u00f3re gromadzi ekspert\u00f3w i in\u017cynier\u00f3w zwi\u0105zanymi z rozwojem JVM, aby omawia\u0107 aktualne udoskonalenia i przysz\u0142o\u015b\u0107 tej platformy. W tym roku mamy dost\u0119p do masy materia\u0142\u00f3w z eventu, co pozwoli\u0142o nam zerkn\u0105\u0107 pod mask\u0119 wielu projekt\u00f3w, kt\u00f3re zwykle pozostaj\u0105 w cieniu.<\/p>\n","innerContent":["\n<p>JVMLS to roczne wydarzenie, kt\u00f3re gromadzi ekspert\u00f3w i in\u017cynier\u00f3w zwi\u0105zanymi z rozwojem JVM, aby omawia\u0107 aktualne udoskonalenia i przysz\u0142o\u015b\u0107 tej platformy. W tym roku mamy dost\u0119p do masy materia\u0142\u00f3w z eventu, co pozwoli\u0142o nam zerkn\u0105\u0107 pod mask\u0119 wielu projekt\u00f3w, kt\u00f3re zwykle pozostaj\u0105 w cieniu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Podczas JVMLS, sporo miejsca po\u015bwi\u0119cono Projektowi Leyden, kt\u00f3ry wprowadza now\u0105 technik\u0119 optymalizacji kodu Javy, opart\u0105 na \"przesuwaniu i ograniczaniu\" oblicze\u0144 . Projekt ten umo\u017cliwi\u0107 ma tworzeniu \"kondensator\u00f3w\", kt\u00f3re analizuj\u0105 zachowanie aplikacji w czasie rzeczywistym i dostosowuj\u0105 j\u0105 do efektywnego dzia\u0142ania. Dzi\u0119ki temu, aplikacje Java mog\u0105 by\u0107 zoptymalizowane ju\u017c przed uruchomieniem, co skraca czas \"rozgrzewania\" i zapewnia d\u0142u\u017csze okresy szczytowej wydajno\u015bci. Na JVMLS po raz pierwszy mogli\u015bmy przygl\u0105dn\u0105\u0107 si\u0119 wynikom prac, zaprezentowany zosta\u0142 <code>ApplicationModel<\/code>, bazowy interfejs modelu, a tak\u017ce patterny implmentacyjne.<\/p>\n","innerContent":["\n<p>Podczas JVMLS, sporo miejsca po\u015bwi\u0119cono Projektowi Leyden, kt\u00f3ry wprowadza now\u0105 technik\u0119 optymalizacji kodu Javy, opart\u0105 na \"przesuwaniu i ograniczaniu\" oblicze\u0144 . Projekt ten umo\u017cliwi\u0107 ma tworzeniu \"kondensator\u00f3w\", kt\u00f3re analizuj\u0105 zachowanie aplikacji w czasie rzeczywistym i dostosowuj\u0105 j\u0105 do efektywnego dzia\u0142ania. Dzi\u0119ki temu, aplikacje Java mog\u0105 by\u0107 zoptymalizowane ju\u017c przed uruchomieniem, co skraca czas \"rozgrzewania\" i zapewnia d\u0142u\u017csze okresy szczytowej wydajno\u015bci. Na JVMLS po raz pierwszy mogli\u015bmy przygl\u0105dn\u0105\u0107 si\u0119 wynikom prac, zaprezentowany zosta\u0142 <code>ApplicationModel<\/code>, bazowy interfejs modelu, a tak\u017ce patterny implmentacyjne.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kolejnym interesuj\u0105cym projektem jest Projekt Babylon, kt\u00f3ry ma na celu dostarczenie bardziej zaawansowanych mo\u017cliwo\u015bci ni\u017c istniej\u0105ce mechanizmy refleksji w Javie, poprzez wprowadzenie tak zwanej \"refleksji kodu\". W odr\u00f3\u017cnieniu od standardowej refleksji, dzia\u0142aj\u0105cej w runtime, ta ma pozwoli\u0107 programistom na analiz\u0119 i manipulacj\u0119 kodem \u017ar\u00f3d\u0142owym r\u00f3wnie\u017c w czasie kompilacji, umo\u017cliwiaj\u0105c dynamiczne generowanie kodu dla r\u00f3\u017cnych \u015brodowisk uruchomieniowych, podobnie jak LINQ w j\u0119zyku C#.<\/p>\n","innerContent":["\n<p>Kolejnym interesuj\u0105cym projektem jest Projekt Babylon, kt\u00f3ry ma na celu dostarczenie bardziej zaawansowanych mo\u017cliwo\u015bci ni\u017c istniej\u0105ce mechanizmy refleksji w Javie, poprzez wprowadzenie tak zwanej \"refleksji kodu\". W odr\u00f3\u017cnieniu od standardowej refleksji, dzia\u0142aj\u0105cej w runtime, ta ma pozwoli\u0107 programistom na analiz\u0119 i manipulacj\u0119 kodem \u017ar\u00f3d\u0142owym r\u00f3wnie\u017c w czasie kompilacji, umo\u017cliwiaj\u0105c dynamiczne generowanie kodu dla r\u00f3\u017cnych \u015brodowisk uruchomieniowych, podobnie jak LINQ w j\u0119zyku C#.<\/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\/2024\/01\/VT7M35t.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Mo\u017ce nied\u0142ugo si\u0119 przestan\u0105 z nas \u015bmia\u0107<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/VT7M35t.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Mo\u017ce nied\u0142ugo si\u0119 przestan\u0105 z nas \u015bmia\u0107<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Projekt Panama te\u017c nie zwalnia, i po ogarni\u0119ciu tematy Foreign Memory i usprawnieniu pracy z programami napisanymi w j\u0119zykach \"natywnych\", ma teraz na celu u\u0142atwienie integracji Javy z nietypowymi \u015brodowiskami uruchomieniowymi, takimi jak np. GPU. Dzi\u0119ki Panama, programi\u015bci b\u0119d\u0105 mieli lepsz\u0105 kontrol\u0119 nad transferem danych mi\u0119dzy r\u00f3\u017cnymi rodzajami pami\u0119ci oraz nad dzia\u0142aniem Garbage Collectora, co u\u0142atwi prac\u0119 z frameworkami zwi\u0105zanymi z uczeniem maszynowym i sztuczn\u0105 inteligencj\u0105. Jego tw\u00f3rcy mocno wsp\u00f3\u0142pracuj\u0105 i wymieniaj\u0105 do\u015bwiadczenia z TornadoVM, platform\u0105 pozwalaj\u0105c\u0105 na wykonywanie aplikacji Java na r\u00f3\u017cnych platformach sprz\u0119towych, w tym na GPU, FPGA i systemach wielordzeniowych.<\/p>\n","innerContent":["\n<p>Projekt Panama te\u017c nie zwalnia, i po ogarni\u0119ciu tematy Foreign Memory i usprawnieniu pracy z programami napisanymi w j\u0119zykach \"natywnych\", ma teraz na celu u\u0142atwienie integracji Javy z nietypowymi \u015brodowiskami uruchomieniowymi, takimi jak np. GPU. Dzi\u0119ki Panama, programi\u015bci b\u0119d\u0105 mieli lepsz\u0105 kontrol\u0119 nad transferem danych mi\u0119dzy r\u00f3\u017cnymi rodzajami pami\u0119ci oraz nad dzia\u0142aniem Garbage Collectora, co u\u0142atwi prac\u0119 z frameworkami zwi\u0105zanymi z uczeniem maszynowym i sztuczn\u0105 inteligencj\u0105. Jego tw\u00f3rcy mocno wsp\u00f3\u0142pracuj\u0105 i wymieniaj\u0105 do\u015bwiadczenia z TornadoVM, platform\u0105 pozwalaj\u0105c\u0105 na wykonywanie aplikacji Java na r\u00f3\u017cnych platformach sprz\u0119towych, w tym na GPU, FPGA i systemach wielordzeniowych.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-9.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Poniewa\u017c za cz\u0119sto dajemy si\u0119 tym naszym rdzeniom CPU wynudzi\u0107.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/08\/image-9.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Poniewa\u017c za cz\u0119sto dajemy si\u0119 tym naszym rdzeniom CPU wynudzi\u0107.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>TornadoVM wykorzystuje kompilator JIT GraalVM, co pozwala na przekszta\u0142canie kodu Java w natywny kod maszynowy, co w wielu przypadkach znacz\u0105co przyspieszy\u0107 wydajno\u015b\u0107 aplikacji. Tworz\u0105 oni te\u017c u\u017cyteczne abstrakcje, u\u0142atwiaj\u0105c\u0105 tworzenie portowalnego kodu. W tym roku (rzutem na ta\u015bm\u0119, w grudniu) wreszcie ukaza\u0142a si\u0119 jego <a href=\"https:\/\/tornadovm.readthedocs.io\/en\/latest\/\">wersja 1.0<\/a>, wi\u0119c mo\u017cna my\u015ble\u0107 o szerszej adopcji \ud83d\ude09<\/p>\n","innerContent":["\n<p>TornadoVM wykorzystuje kompilator JIT GraalVM, co pozwala na przekszta\u0142canie kodu Java w natywny kod maszynowy, co w wielu przypadkach znacz\u0105co przyspieszy\u0107 wydajno\u015b\u0107 aplikacji. Tworz\u0105 oni te\u017c u\u017cyteczne abstrakcje, u\u0142atwiaj\u0105c\u0105 tworzenie portowalnego kodu. W tym roku (rzutem na ta\u015bm\u0119, w grudniu) wreszcie ukaza\u0142a si\u0119 jego <a href=\"https:\/\/tornadovm.readthedocs.io\/en\/latest\/\">wersja 1.0<\/a>, wi\u0119c mo\u017cna my\u015ble\u0107 o szerszej adopcji \ud83d\ude09<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zdecydowanie nie mog\u0119 si\u0119 doczeka\u0107 JVMLS 2024.<\/p>\n","innerContent":["\n<p>Zdecydowanie nie mog\u0119 si\u0119 doczeka\u0107 JVMLS 2024.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszej edycji:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszej edycji:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/panama-opencl-and-tornadovm-javas\">Panama, OpenCL and TornadoVM: Java's entry into the GPU world - JVM Weekly vol. 55<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/panama-opencl-and-tornadovm-javas\">Panama, OpenCL and TornadoVM: Java's entry into the GPU world - JVM Weekly vol. 55<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/exploring-the-newest-updates-of-project\">Exploring the Newest Updates of Project Leyden, Valhalla &amp; Hermes: JVM Weekly vol. 54<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/exploring-the-newest-updates-of-project\">Exploring the Newest Updates of Project Leyden, Valhalla &amp; Hermes: JVM Weekly vol. 54<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/project-babylon-chance-for-linq-and\">Project Babylon: Chance for LINQ (and more) in Java - JVM Weekly vol. 56<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/project-babylon-chance-for-linq-and\">Project Babylon: Chance for LINQ (and more) in Java - JVM Weekly vol. 56<\/a><\/li>\n"]}],"innerHTML":"\n<ul>\n\n\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym zapowiedziano Kotlin 2.0<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym zapowiedziano Kotlin 2.0<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/ZZX5j6E.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/ZZX5j6E.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W \u015bwiecie Kotlina szykuj\u0105 si\u0119 spore zmiany \u2013 przynajmniej je\u015bli chodzi o numeracje, aczkolwiek na niej si\u0119 nie sko\u0144czy.<\/p>\n","innerContent":["\n<p>W \u015bwiecie Kotlina szykuj\u0105 si\u0119 spore zmiany \u2013 przynajmniej je\u015bli chodzi o numeracje, aczkolwiek na niej si\u0119 nie sko\u0144czy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tw\u00f3rcy og\u0142osili bowiem, \u017ce wydanie 1.9 b\u0119dzie ostatnim z linii 1.x. Wersja 1.10 si\u0119 nie poka\u017ce, zamiast niej przeskoczymy od razu do wydania 2.0. Wynika\u0107 ma to z faktu, \u017ce to w\u0142a\u015bnie na t\u0105 wersje planowane jest wydanie d\u0142ugo oczekiwanego kompilatora K2 \u2013 \u201ejednego, by wszystkimi rz\u0105dzi\u0107\u201d i maj\u0105cego zapewni\u0107 wsp\u00f3ln\u0105 infrastruktur\u0119 dla wszystkich potencjalnych target\u00f3w j\u0119zyka. Dzi\u0119ki temu jego tw\u00f3rcy nie b\u0119d\u0105 musieli ka\u017cdorazowo implementowa\u0107 tych samych funkcjonalno\u015bci na potrzeby JVM, WebAssembly czy Androida, co ma znacznie przyspieszy\u0107 ewolucje Kotlina. Zmiana jest wi\u0119c na tyle du\u017ca, \u017ce uznano za zasadne odpowiednie ukoronowanie jej podbiciem numeracji.<\/p>\n","innerContent":["\n<p>Tw\u00f3rcy og\u0142osili bowiem, \u017ce wydanie 1.9 b\u0119dzie ostatnim z linii 1.x. Wersja 1.10 si\u0119 nie poka\u017ce, zamiast niej przeskoczymy od razu do wydania 2.0. Wynika\u0107 ma to z faktu, \u017ce to w\u0142a\u015bnie na t\u0105 wersje planowane jest wydanie d\u0142ugo oczekiwanego kompilatora K2 \u2013 \u201ejednego, by wszystkimi rz\u0105dzi\u0107\u201d i maj\u0105cego zapewni\u0107 wsp\u00f3ln\u0105 infrastruktur\u0119 dla wszystkich potencjalnych target\u00f3w j\u0119zyka. Dzi\u0119ki temu jego tw\u00f3rcy nie b\u0119d\u0105 musieli ka\u017cdorazowo implementowa\u0107 tych samych funkcjonalno\u015bci na potrzeby JVM, WebAssembly czy Androida, co ma znacznie przyspieszy\u0107 ewolucje Kotlina. Zmiana jest wi\u0119c na tyle du\u017ca, \u017ce uznano za zasadne odpowiednie ukoronowanie jej podbiciem numeracji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zmiana \u201edu\u017cej\u201d wersji j\u0119zyka potrafi\u0142a mocno zamiesza\u0107 w ekosystemie danego j\u0119zyka, jednak w wypadku Kotlina JetBrains obiecuje bardzo stabilny proces migracji. Ma by\u0107 to mo\u017cliwe do osi\u0105gni\u0119cia dzi\u0119ki dw\u00f3m sk\u0142adowym. Po pierwsze, zmiany motywuj\u0105ce podbicie numeracji odbywaj\u0105 si\u0119 pod mask\u0105, a tw\u00f3rcy celowo nie planuj\u0105 wprowadza\u0107 w nowym wydaniu \u017cadnych nowych nowo\u015bci w samym syntaksie j\u0119zyka \u2013 te zostawiaj\u0105 sobie na wydania 2.x, kt\u00f3re przyjd\u0105 po udanym przej\u015bciu na K2 (a ju\u017c kilka k\u0105sk\u00f3w zapowiedziano). Dodatkowo jednak JetBrains zyskuje na tym, \u017ce kontroluje zar\u00f3wno Kotlina, jak i jest g\u0142\u00f3wnym dostawc\u0105 narz\u0119dzi do niego. Pozwala to bowiem na znacznie sprawniejsze przeprowadzenie ca\u0142ej operacji, gdy wi\u0119kszo\u015b\u0107 najwa\u017cniejszego toolingu mo\u017ce by\u0107 rozwijana r\u00f3wnolegle z j\u0119zykiem.<\/p>\n","innerContent":["\n<p>Zmiana \u201edu\u017cej\u201d wersji j\u0119zyka potrafi\u0142a mocno zamiesza\u0107 w ekosystemie danego j\u0119zyka, jednak w wypadku Kotlina JetBrains obiecuje bardzo stabilny proces migracji. Ma by\u0107 to mo\u017cliwe do osi\u0105gni\u0119cia dzi\u0119ki dw\u00f3m sk\u0142adowym. Po pierwsze, zmiany motywuj\u0105ce podbicie numeracji odbywaj\u0105 si\u0119 pod mask\u0105, a tw\u00f3rcy celowo nie planuj\u0105 wprowadza\u0107 w nowym wydaniu \u017cadnych nowych nowo\u015bci w samym syntaksie j\u0119zyka \u2013 te zostawiaj\u0105 sobie na wydania 2.x, kt\u00f3re przyjd\u0105 po udanym przej\u015bciu na K2 (a ju\u017c kilka k\u0105sk\u00f3w zapowiedziano). Dodatkowo jednak JetBrains zyskuje na tym, \u017ce kontroluje zar\u00f3wno Kotlina, jak i jest g\u0142\u00f3wnym dostawc\u0105 narz\u0119dzi do niego. Pozwala to bowiem na znacznie sprawniejsze przeprowadzenie ca\u0142ej operacji, gdy wi\u0119kszo\u015b\u0107 najwa\u017cniejszego toolingu mo\u017ce by\u0107 rozwijana r\u00f3wnolegle z j\u0119zykiem.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-11.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">JetBrians Applem DevToolingu<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-11.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">JetBrians Applem DevToolingu<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/will-valhalla-bring-better-nulls\">Will Valhalla bring better nulls to Java? - JVM Weekly #33<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/will-valhalla-bring-better-nulls\">Will Valhalla bring better nulls to Java? - JVM Weekly #33<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/play-framework-is-reborn-like-a-phoenix\">Play Framework is reborn like a phoenix from the ashes.... and gets rid of Akka - JVM Weekly vol. 60<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/play-framework-is-reborn-like-a-phoenix\">Play Framework is reborn like a phoenix from the ashes.... and gets rid of Akka - JVM Weekly vol. 60<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/tldw-opinionated-wrap-up-of-kotlinconf\">TLDW: Opinionated Wrap-up of KotlinConf 2023 Keynote - JVM Weekly vol. 40<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/tldw-opinionated-wrap-up-of-kotlinconf\">TLDW: Opinionated Wrap-up of KotlinConf 2023 Keynote - JVM Weekly vol. 40<\/a><\/li>\n"]}],"innerHTML":"\n<ul>\n\n\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym Roman Elizarov odszed\u0142 z Kotlina<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym Roman Elizarov odszed\u0142 z Kotlina<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/2vzPY2f.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/2vzPY2f.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zostaj\u0105c w \u015bwiecie Kotlina ko\u0144c\u00f3wk\u0105 roku gruchn\u0119\u0142a du\u017ca informacja. Roman Elizarov, lead projektu, og\u0142osi\u0142 swoje odej\u015bcie z JetBrains z powod\u00f3w osobistych, ko\u0144cz\u0105c w ten spos\u00f3b r\u00f3wnie\u017c swoj\u0105 prac\u0119 nad j\u0119zykiem. Po\u017cegnanie odby\u0142o si\u0119 seri\u0105 tweet\u00f3w, w kt\u00f3rych wyra\u017caj\u0105c wdzi\u0119czno\u015b\u0107 za mo\u017cliwo\u015b\u0107 pracy nad Kotlinem i podkre\u015blaj\u0105c swoje wielkie uznanie dla spo\u0142eczno\u015bci Kotlina.<\/p>\n","innerContent":["\n<p>Zostaj\u0105c w \u015bwiecie Kotlina ko\u0144c\u00f3wk\u0105 roku gruchn\u0119\u0142a du\u017ca informacja. Roman Elizarov, lead projektu, og\u0142osi\u0142 swoje odej\u015bcie z JetBrains z powod\u00f3w osobistych, ko\u0144cz\u0105c w ten spos\u00f3b r\u00f3wnie\u017c swoj\u0105 prac\u0119 nad j\u0119zykiem. Po\u017cegnanie odby\u0142o si\u0119 seri\u0105 tweet\u00f3w, w kt\u00f3rych wyra\u017caj\u0105c wdzi\u0119czno\u015b\u0107 za mo\u017cliwo\u015b\u0107 pracy nad Kotlinem i podkre\u015blaj\u0105c swoje wielkie uznanie dla spo\u0142eczno\u015bci Kotlina.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dowiedzieli\u015bmy si\u0119 te\u017c kto w przysz\u0142o\u015bci stanie za sterami j\u0119zyka \u2013 <a href=\"https:\/\/twitter.com\/@MZarechenskiy\">Mikhail Zarechenskiy<\/a>, wcze\u015bniej pracuj\u0105cy za kulisami w JetBrains, zostanie g\u0142\u00f3wnym projektantem Kotlina. Kluczowe zmiany w zespole obejmuj\u0105 te\u017c <a href=\"https:\/\/twitter.com\/hhariri\">Hadi Hariri<\/a>, kt\u00f3rego mo\u017cecie zna\u0107 jako Co-hosta podcastu Talking Kotlin \u2013 przejmie on teraz wi\u0119cej obowi\u0105zk\u00f3w poza dzia\u0142aniami promocyjnymi i jego zaanga\u017cowaniem w KotlinConf. R\u00f3wnie\u017c drugi prowadz\u0105cy Talking Kotlin, <a href=\"https:\/\/twitter.com\/sebi_io\">Sebastian Aigner<\/a>, b\u0119dzie odgrywa\u0107 teraz wa\u017cniejsz\u0105 rol\u0119 w Kotlin Foundation, szczeg\u00f3lnie w wsparciu inicjatyw szerszego ekosystemu Kotlin. <a href=\"https:\/\/twitter.com\/HeyTolstoy\">Egor Tolstoy<\/a> dalej za\u015b b\u0119dzie kierowa\u0107 zespo\u0142em od strony Product Managementu.<\/p>\n","innerContent":["\n<p>Dowiedzieli\u015bmy si\u0119 te\u017c kto w przysz\u0142o\u015bci stanie za sterami j\u0119zyka \u2013 <a href=\"https:\/\/twitter.com\/@MZarechenskiy\">Mikhail Zarechenskiy<\/a>, wcze\u015bniej pracuj\u0105cy za kulisami w JetBrains, zostanie g\u0142\u00f3wnym projektantem Kotlina. Kluczowe zmiany w zespole obejmuj\u0105 te\u017c <a href=\"https:\/\/twitter.com\/hhariri\">Hadi Hariri<\/a>, kt\u00f3rego mo\u017cecie zna\u0107 jako Co-hosta podcastu Talking Kotlin \u2013 przejmie on teraz wi\u0119cej obowi\u0105zk\u00f3w poza dzia\u0142aniami promocyjnymi i jego zaanga\u017cowaniem w KotlinConf. R\u00f3wnie\u017c drugi prowadz\u0105cy Talking Kotlin, <a href=\"https:\/\/twitter.com\/sebi_io\">Sebastian Aigner<\/a>, b\u0119dzie odgrywa\u0107 teraz wa\u017cniejsz\u0105 rol\u0119 w Kotlin Foundation, szczeg\u00f3lnie w wsparciu inicjatyw szerszego ekosystemu Kotlin. <a href=\"https:\/\/twitter.com\/HeyTolstoy\">Egor Tolstoy<\/a> dalej za\u015b b\u0119dzie kierowa\u0107 zespo\u0142em od strony Product Managementu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.io\/pl\/duze-zmiany-w-leadershipie-kotlina-jvm-weekly-vol-152\/\">Major changes in Kotlin\u2019s leadership: Roman Elizarov departs from JetBrains<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.io\/pl\/duze-zmiany-w-leadershipie-kotlina-jvm-weekly-vol-152\/\">Major changes in Kotlin\u2019s leadership: Roman Elizarov departs from JetBrains<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym doczekali\u015bmy si\u0119 wysypu ciekawych nowych wyda\u0144<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">Rok, w kt\u00f3rym doczekali\u015bmy si\u0119 wysypu ciekawych nowych wyda\u0144<\/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\">Frameworki<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Frameworki<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/723JU7m.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/723JU7m.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Spring Framework 6.1 I Spring Boot 3.2<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Spring Framework 6.1 I Spring Boot 3.2<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W Spring Framework 6.1 pojawi\u0142o si\u0119 wsparcie dla dw\u00f3ch kluczowych nowo\u015bci: Wirtualnych W\u0105tk\u00f3w oraz Projektu CRAC. Dla przypomnienia: Wirtualne W\u0105tki to nowy koncept w Javie, wprowadzony w JDK 21 w ramach Projektu Loom, kt\u00f3ry zmienia podej\u015bcie do wsp\u00f3\u0142bie\u017cno\u015bci. W przeciwie\u0144stwie do tradycyjnych w\u0105tk\u00f3w, kt\u00f3re s\u0105 zarz\u0105dzane przez system operacyjny, w\u0105tki wirtualne s\u0105 zarz\u0105dzane przez JVM, co pozwala na tworzenie du\u017cej liczby w\u0105tk\u00f3w bez narzutu zwi\u0105zanego z tradycyjnymi w\u0105tkami.<\/p>\n","innerContent":["\n<p>W Spring Framework 6.1 pojawi\u0142o si\u0119 wsparcie dla dw\u00f3ch kluczowych nowo\u015bci: Wirtualnych W\u0105tk\u00f3w oraz Projektu CRAC. Dla przypomnienia: Wirtualne W\u0105tki to nowy koncept w Javie, wprowadzony w JDK 21 w ramach Projektu Loom, kt\u00f3ry zmienia podej\u015bcie do wsp\u00f3\u0142bie\u017cno\u015bci. W przeciwie\u0144stwie do tradycyjnych w\u0105tk\u00f3w, kt\u00f3re s\u0105 zarz\u0105dzane przez system operacyjny, w\u0105tki wirtualne s\u0105 zarz\u0105dzane przez JVM, co pozwala na tworzenie du\u017cej liczby w\u0105tk\u00f3w bez narzutu zwi\u0105zanego z tradycyjnymi w\u0105tkami.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Projekt CRAC (Checkpoint\/Restore in Application Continuation) pozwala za\u015b na zapisanie stanu dzia\u0142aj\u0105cej JVM i jego przywr\u00f3cenie, skracaj\u0105c czas rozruchu aplikacji. To rozwi\u0105zanie redukuje problem \"zimnego startu\" aplikacji Javowych, co jest szczeg\u00f3lnie istotne dla aplikacji serwerowych i serverless. Spring integruje si\u0119 z CRAC, umo\u017cliwiaj\u0105c kontrolowane checkpointy i przywracanie stanu JVM.<\/p>\n","innerContent":["\n<p>Projekt CRAC (Checkpoint\/Restore in Application Continuation) pozwala za\u015b na zapisanie stanu dzia\u0142aj\u0105cej JVM i jego przywr\u00f3cenie, skracaj\u0105c czas rozruchu aplikacji. To rozwi\u0105zanie redukuje problem \"zimnego startu\" aplikacji Javowych, co jest szczeg\u00f3lnie istotne dla aplikacji serwerowych i serverless. Spring integruje si\u0119 z CRAC, umo\u017cliwiaj\u0105c kontrolowane checkpointy i przywracanie stanu JVM.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dodatkowo, w Spring Boot 3.2.0 wprowadzono rozszerzone wsparcie dla Apache Pulsara oraz interfejs RestClient z Spring Framework 6.1, kt\u00f3ry dostarcza prekonfigurowany klient HTTP do obs\u0142ugi zapyta\u0144 REST. Dodano tak\u017ce wsparcie dla <code>JdbcClient<\/code> oraz automatyczne logowanie Correlation Id podczas korzystania z Micrometera. Spring Boot 3.2.0 u\u0142atwia tak\u017ce budowanie obraz\u00f3w Docker z u\u017cyciem standardu Cloud-Native Buildpacks.<\/p>\n","innerContent":["\n<p>Dodatkowo, w Spring Boot 3.2.0 wprowadzono rozszerzone wsparcie dla Apache Pulsara oraz interfejs RestClient z Spring Framework 6.1, kt\u00f3ry dostarcza prekonfigurowany klient HTTP do obs\u0142ugi zapyta\u0144 REST. Dodano tak\u017ce wsparcie dla <code>JdbcClient<\/code> oraz automatyczne logowanie Correlation Id podczas korzystania z Micrometera. Spring Boot 3.2.0 u\u0142atwia tak\u017ce budowanie obraz\u00f3w Docker z u\u017cyciem standardu Cloud-Native Buildpacks.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/spring-framework-61-and-spring-boot\">Spring Framework 6.1 and Spring Boot 3.2: The tastiest bites<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/spring-framework-61-and-spring-boot\">Spring Framework 6.1 and Spring Boot 3.2: The tastiest bites<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Quarkus 3.0<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Quarkus 3.0<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Quarkus 3.0 wprowadza rozbudowane Dev UI, kt\u00f3re u\u0142atwia zarz\u0105dzanie i konfiguracj\u0119 aplikacji. Dzi\u0119ki funkcji Dev Mode, Quarkus umo\u017cliwia Continuous Testing, co przyczynia si\u0119 do wydajno\u015bci i komfortu pracy deweloper\u00f3w.<\/p>\n","innerContent":["\n<p>Quarkus 3.0 wprowadza rozbudowane Dev UI, kt\u00f3re u\u0142atwia zarz\u0105dzanie i konfiguracj\u0119 aplikacji. Dzi\u0119ki funkcji Dev Mode, Quarkus umo\u017cliwia Continuous Testing, co przyczynia si\u0119 do wydajno\u015bci i komfortu pracy deweloper\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Niezwykle ciekaw\u0105 nowo\u015bci\u0105 jest te\u017c Mutiny2, biblioteka stworzona przez zesp\u00f3\u0142 Quarkusa do programowania reaktywnego i asynchronicznego. Mutiny2 ma na celu uproszczenie kodu reaktywnego, oferuj\u0105c podej\u015bcie bardziej intuicyjne od innych bibliotek, jak RxJava i Project Reactor. Jest to tak\u017ce symboliczne zamkni\u0119cie pewnej epoki, poniewa\u017c Mutiny w nowej wersji przechodzi z w\u0142asnej implementacji Reactive Streams API na standardowe <code>java.util.concurrent.Flow<\/code>.<\/p>\n","innerContent":["\n<p>Niezwykle ciekaw\u0105 nowo\u015bci\u0105 jest te\u017c Mutiny2, biblioteka stworzona przez zesp\u00f3\u0142 Quarkusa do programowania reaktywnego i asynchronicznego. Mutiny2 ma na celu uproszczenie kodu reaktywnego, oferuj\u0105c podej\u015bcie bardziej intuicyjne od innych bibliotek, jak RxJava i Project Reactor. Jest to tak\u017ce symboliczne zamkni\u0119cie pewnej epoki, poniewa\u017c Mutiny w nowej wersji przechodzi z w\u0142asnej implementacji Reactive Streams API na standardowe <code>java.util.concurrent.Flow<\/code>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jednak cho\u0107 Quarkus 3.0 przynosi wiele cennych zmian, brakuje pe\u0142nego wsparcia dla wirtualnych w\u0105tk\u00f3w, kt\u00f3re by\u0142o wspominane jako jedna z obiecuj\u0105cych funkcji.<\/p>\n","innerContent":["\n<p>Jednak cho\u0107 Quarkus 3.0 przynosi wiele cennych zmian, brakuje pe\u0142nego wsparcia dla wirtualnych w\u0105tk\u00f3w, kt\u00f3re by\u0142o wspominane jako jedna z obiecuj\u0105cych funkcji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/a-peek-under-the-hood-of-java-dynamic\">A peek under-the-hood of Java: Dynamic Agents and \"tearing\" - JVM Weekly vol. 43<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/a-peek-under-the-hood-of-java-dynamic\">A peek under-the-hood of Java: Dynamic Agents and \"tearing\" - JVM Weekly vol. 43<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Micronaut 4.0<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Micronaut 4.0<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Micronaut Framework 4.0 porzuca wsparcia dla wersji Java starszych ni\u017c JDK 17, co umo\u017cliwi\u0142o dostosowanie API do nowych sk\u0142adni j\u0119zyka, takich jak Java Records, Sealed Classes, Switch Expressions, Text Blocks czy Pattern Matching dla instanceof. Klient HTTP Micronaut zosta\u0142 zaktualizowany do wersji opartej na kliencie HTTP Java wprowadzonym w JDK 11, co poprawi\u0142o wydajno\u015b\u0107. Micronaut 4.0 zosta\u0142 te\u017c zoptymalizowany pod k\u0105tem wykorzystania GraalVM, dzi\u0119ki czemu kompilowanie aplikacji Micronaut zale\u017cnych od innych bibliotek sta\u0142o si\u0119 \u0142atwiejsze.<\/p>\n","innerContent":["\n<p>Micronaut Framework 4.0 porzuca wsparcia dla wersji Java starszych ni\u017c JDK 17, co umo\u017cliwi\u0142o dostosowanie API do nowych sk\u0142adni j\u0119zyka, takich jak Java Records, Sealed Classes, Switch Expressions, Text Blocks czy Pattern Matching dla instanceof. Klient HTTP Micronaut zosta\u0142 zaktualizowany do wersji opartej na kliencie HTTP Java wprowadzonym w JDK 11, co poprawi\u0142o wydajno\u015b\u0107. Micronaut 4.0 zosta\u0142 te\u017c zoptymalizowany pod k\u0105tem wykorzystania GraalVM, dzi\u0119ki czemu kompilowanie aplikacji Micronaut zale\u017cnych od innych bibliotek sta\u0142o si\u0119 \u0142atwiejsze.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ponadto, nowe wydanie wprowadza lepsze wsparcie dla chmur, modu\u0142ow\u0105 architektur\u0119 oraz wst\u0119pne wsparcie dla <code>VirtualThreads<\/code>. Dodatkowo, Micronaut Serialization sta\u0142 si\u0119 domy\u015blnym modu\u0142em oferuj\u0105cym wydajne i bezpieczne interfejsy API serializacji\/deserializacji JSON.<\/p>\n","innerContent":["\n<p>Ponadto, nowe wydanie wprowadza lepsze wsparcie dla chmur, modu\u0142ow\u0105 architektur\u0119 oraz wst\u0119pne wsparcie dla <code>VirtualThreads<\/code>. Dodatkowo, Micronaut Serialization sta\u0142 si\u0119 domy\u015blnym modu\u0142em oferuj\u0105cym wydajne i bezpieczne interfejsy API serializacji\/deserializacji JSON.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/rust-written-jvm-and-bytecode-transpiler\">Rust-written JVM and Bytecode Transpiler: A Masterclass in Learning-by-Doing - JVM Weekly vol. 51<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/rust-written-jvm-and-bytecode-transpiler\">Rust-written JVM and Bytecode Transpiler: A Masterclass in Learning-by-Doing - JVM Weekly vol. 51<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Helidon 4.0<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Helidon 4.0<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Helidon 4 zosta\u0142 pierwszym na \u015bwiecie frameworkiem do mikroserwis\u00f3w opartym o wirtualne w\u0105tki. G\u0142\u00f3wn\u0105 zmian\u0105 przychodz\u0105c\u0105 z wydaniem by\u0142o bowiem zast\u0105pienie Netty now\u0105 implementacj\u0105 serwera o nazwie N\u00edma. N\u00edma zosta\u0142 zaprojektowany tak, aby w pe\u0142ni wykorzystywa\u0107 wirtualne w\u0105tki Java 21, umo\u017cliwiaj\u0105c ka\u017cdemu requestowi dzia\u0142anie na dedykowanym wirtualnym w\u0105tku. Upraszcza to proces wykonywania blokuj\u0105cych operacji i zapewnia wysoki poziom wsp\u00f3\u0142bie\u017cno\u015bci, eliminuj\u0105c w ten spos\u00f3b potrzeb\u0119 skomplikowanego kodu asynchronicznego, co zwi\u0119ksza wydajno\u015b\u0107, zw\u0142aszcza (wed\u0142ug doniesie\u0144 samych tw\u00f3rc\u00f3w) w Helidon MP. Oznacza to r\u00f3wnie\u017c, \u017ce doczekali\u015bmy si\u0119 pierwszego framework wymagaj\u0105cego do dzia\u0142ania... Java 21.<\/p>\n","innerContent":["\n<p>Helidon 4 zosta\u0142 pierwszym na \u015bwiecie frameworkiem do mikroserwis\u00f3w opartym o wirtualne w\u0105tki. G\u0142\u00f3wn\u0105 zmian\u0105 przychodz\u0105c\u0105 z wydaniem by\u0142o bowiem zast\u0105pienie Netty now\u0105 implementacj\u0105 serwera o nazwie N\u00edma. N\u00edma zosta\u0142 zaprojektowany tak, aby w pe\u0142ni wykorzystywa\u0107 wirtualne w\u0105tki Java 21, umo\u017cliwiaj\u0105c ka\u017cdemu requestowi dzia\u0142anie na dedykowanym wirtualnym w\u0105tku. Upraszcza to proces wykonywania blokuj\u0105cych operacji i zapewnia wysoki poziom wsp\u00f3\u0142bie\u017cno\u015bci, eliminuj\u0105c w ten spos\u00f3b potrzeb\u0119 skomplikowanego kodu asynchronicznego, co zwi\u0119ksza wydajno\u015b\u0107, zw\u0142aszcza (wed\u0142ug doniesie\u0144 samych tw\u00f3rc\u00f3w) w Helidon MP. Oznacza to r\u00f3wnie\u017c, \u017ce doczekali\u015bmy si\u0119 pierwszego framework wymagaj\u0105cego do dzia\u0142ania... Java 21.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/10\/image-10.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Nie martw si\u0119 Netty, dalej mamy Ci\u0119 w sercach.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/10\/image-10.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Nie martw si\u0119 Netty, dalej mamy Ci\u0119 w sercach.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Helidon SE, stanowi\u0105cy podstawowy zestaw API dla Helidon, r\u00f3wnie\u017c przeszed\u0142 spor\u0105 transformacj\u0119. Adopcja wirtualnych w\u0105tk\u00f3w umo\u017cliwi\u0142a przej\u015bcie od asynchronicznych API do blokuj\u0105cych (a\u017c si\u0119 sam dziwie pisz\u0105c to zdanie). Ta zmiana upraszcza kod, czyni\u0105c go \u0142atwiejszym w pisaniu, utrzymaniu i zrozumieniu \u2013 daje nam to przedsmak tego, co czeka pewnie w przysz\u0142o\u015bci ca\u0142y ekosystem. Osoby korzystaj\u0105ce z Helidon 3 SE b\u0119d\u0105 musia\u0142y niestety znacznie dostosowa\u0107 sw\u00f3j kod do zaktualizowanych API. Chocia\u017c mo\u017ce to wymaga\u0107 pewnego pocz\u0105tkowego wysi\u0142ku, korzy\u015bci w postaci zwi\u0119kszonej wydajno\u015bci i prostoty kodu wydaj\u0105 si\u0119 tego warte.<\/p>\n","innerContent":["\n<p>Helidon SE, stanowi\u0105cy podstawowy zestaw API dla Helidon, r\u00f3wnie\u017c przeszed\u0142 spor\u0105 transformacj\u0119. Adopcja wirtualnych w\u0105tk\u00f3w umo\u017cliwi\u0142a przej\u015bcie od asynchronicznych API do blokuj\u0105cych (a\u017c si\u0119 sam dziwie pisz\u0105c to zdanie). Ta zmiana upraszcza kod, czyni\u0105c go \u0142atwiejszym w pisaniu, utrzymaniu i zrozumieniu \u2013 daje nam to przedsmak tego, co czeka pewnie w przysz\u0142o\u015bci ca\u0142y ekosystem. Osoby korzystaj\u0105ce z Helidon 3 SE b\u0119d\u0105 musia\u0142y niestety znacznie dostosowa\u0107 sw\u00f3j kod do zaktualizowanych API. Chocia\u017c mo\u017ce to wymaga\u0107 pewnego pocz\u0105tkowego wysi\u0142ku, korzy\u015bci w postaci zwi\u0119kszonej wydajno\u015bci i prostoty kodu wydaj\u0105 si\u0119 tego warte.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/major-changes-in-kotlins-leadership\">Major changes in Kotlin's leadership: Roman Elizarov departs from JetBrains \u2013 JVM Weekly vol. 59<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/major-changes-in-kotlins-leadership\">Major changes in Kotlin's leadership: Roman Elizarov departs from JetBrains \u2013 JVM Weekly vol. 59<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Dropwizard 3.0 i 4.0<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Dropwizard 3.0 i 4.0<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pami\u0119tam czasy, gdy u\u017cywa\u0142em Dropwizarda, kiedy ten szumnie obiecuj\u0105cy framework znajdowa\u0142 si\u0119 na samym szczycie popularno\u015bci. Mimo pierwotnego entuzjazmu, DropWizard zacz\u0105\u0142 traci\u0107 na znaczeniu i premiera wersji 3.0 i 4.0 przesz\u0142a bez echa w \u015bwiecie technologii.<\/p>\n","innerContent":["\n<p>Pami\u0119tam czasy, gdy u\u017cywa\u0142em Dropwizarda, kiedy ten szumnie obiecuj\u0105cy framework znajdowa\u0142 si\u0119 na samym szczycie popularno\u015bci. Mimo pierwotnego entuzjazmu, DropWizard zacz\u0105\u0142 traci\u0107 na znaczeniu i premiera wersji 3.0 i 4.0 przesz\u0142a bez echa w \u015bwiecie technologii.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pow\u00f3d dw\u00f3ch wersji na raz jest prosty: Dropwizard 3.0 opiera si\u0119 na Java EE i przestrzeni nazw <code>javax.<\/code>, dzi\u0119ki czemu migracja z Dropwizard 2.x do wersji 3.0 powinna by\u0107 minimalna dla wielu projekt\u00f3w. Natomiast Dropwizard 4.0 opiera si\u0119 na zale\u017cno\u015bciach Jakarta EE oraz przestrzeni nazw <code>jakarta.<\/code>, co mo\u017ce wi\u0105za\u0107 si\u0119 z wi\u0119kszym nak\u0142adem pracy przy migracji z Dropwizard 2.x do wersji 4.x.<\/p>\n","innerContent":["\n<p>Pow\u00f3d dw\u00f3ch wersji na raz jest prosty: Dropwizard 3.0 opiera si\u0119 na Java EE i przestrzeni nazw <code>javax.<\/code>, dzi\u0119ki czemu migracja z Dropwizard 2.x do wersji 3.0 powinna by\u0107 minimalna dla wielu projekt\u00f3w. Natomiast Dropwizard 4.0 opiera si\u0119 na zale\u017cno\u015bciach Jakarta EE oraz przestrzeni nazw <code>jakarta.<\/code>, co mo\u017ce wi\u0105za\u0107 si\u0119 z wi\u0119kszym nak\u0142adem pracy przy migracji z Dropwizard 2.x do wersji 4.x.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Obie wersje \u0142\u0105czy te\u017c troch\u0119 wsp\u00f3lnych zmian \u2013 podniesienie wymaganej wersji Javy do 11, wprowadzenie struktury pakiet\u00f3w opartej o JPMS (mam wra\u017cenie, \u017ce to jedno z pierwszych narz\u0119dzi bior\u0105cych ten standard na powa\u017cnie), aktualizacj\u0119 Jetty do wersji 10.0.x (kt\u00f3ra te\u017c wymaga minimum Javy 11), aktualizacj\u0119 Apache HttpClient do wersji 5.x oraz usuni\u0119cie wsparcia dla JUnit 4.x (przeniesione do dropwizard-testing-junit4). Dodatkowo, tylko Dropwizard 4.0 dosta\u0142 wsparcie dla Hibernate 6.0, wymagaj\u0105cego przej\u015bcia na <code>jakarta.<\/code><\/p>\n","innerContent":["\n<p>Obie wersje \u0142\u0105czy te\u017c troch\u0119 wsp\u00f3lnych zmian \u2013 podniesienie wymaganej wersji Javy do 11, wprowadzenie struktury pakiet\u00f3w opartej o JPMS (mam wra\u017cenie, \u017ce to jedno z pierwszych narz\u0119dzi bior\u0105cych ten standard na powa\u017cnie), aktualizacj\u0119 Jetty do wersji 10.0.x (kt\u00f3ra te\u017c wymaga minimum Javy 11), aktualizacj\u0119 Apache HttpClient do wersji 5.x oraz usuni\u0119cie wsparcia dla JUnit 4.x (przeniesione do dropwizard-testing-junit4). Dodatkowo, tylko Dropwizard 4.0 dosta\u0142 wsparcie dla Hibernate 6.0, wymagaj\u0105cego przej\u015bcia na <code>jakarta.<\/code><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/dropwizard-returns-with-parallel\">Dropwizard returns with parallel 3.0 and 4.0 release - JVM Weekly vol. 39<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/dropwizard-returns-with-parallel\">Dropwizard returns with parallel 3.0 and 4.0 release - JVM Weekly vol. 39<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Play Framework 2.9 i 3.0<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Play Framework 2.9 i 3.0<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kolejne podw\u00f3jne wydanie. Play Framework powr\u00f3ci\u0142 bowiem z nowymi wydaniami 2.9 i 3.0. Kiedy\u015b uwa\u017cany za g\u0142\u00f3wnego konkurenta Springa, Play wr\u00f3ci\u0142 do \u017cycia po tym jak zosta\u0142 przekazany spo\u0142eczno\u015bci po pewnym okresie stagnacji i kontrowersji zwi\u0105zanych z toksyczn\u0105 now\u0105 licencj\u0105 Akka, kt\u00f3rego to rozwi\u0105zania wykorzystywa\u0142 wewn\u0119trznie.<\/p>\n","innerContent":["\n<p>Kolejne podw\u00f3jne wydanie. Play Framework powr\u00f3ci\u0142 bowiem z nowymi wydaniami 2.9 i 3.0. Kiedy\u015b uwa\u017cany za g\u0142\u00f3wnego konkurenta Springa, Play wr\u00f3ci\u0142 do \u017cycia po tym jak zosta\u0142 przekazany spo\u0142eczno\u015bci po pewnym okresie stagnacji i kontrowersji zwi\u0105zanych z toksyczn\u0105 now\u0105 licencj\u0105 Akka, kt\u00f3rego to rozwi\u0105zania wykorzystywa\u0142 wewn\u0119trznie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dlatego wydanie 3.0 przynosi migracj\u0119 z Akki do Apache Pekko, forka Akka 2.6.x. Play 3.0 korzysta teraz z Pekko i jego komponent\u00f3w HTTP. Jednak\u017ce, dla aplikacji silnie zintegrowanych z Akk\u0105, ta zmiana mo\u017ce wymaga\u0107 pewnych wysi\u0142k\u00f3w migracyjnych. Dlatego r\u00f3wnocze\u015bnie wydano r\u00f3wnie\u017c Play 2.9, kt\u00f3re kontynuuje wykorzystanie Akki i Akka HTTP.<\/p>\n","innerContent":["\n<p>Dlatego wydanie 3.0 przynosi migracj\u0119 z Akki do Apache Pekko, forka Akka 2.6.x. Play 3.0 korzysta teraz z Pekko i jego komponent\u00f3w HTTP. Jednak\u017ce, dla aplikacji silnie zintegrowanych z Akk\u0105, ta zmiana mo\u017ce wymaga\u0107 pewnych wysi\u0142k\u00f3w migracyjnych. Dlatego r\u00f3wnocze\u015bnie wydano r\u00f3wnie\u017c Play 2.9, kt\u00f3re kontynuuje wykorzystanie Akki i Akka HTTP.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Poza powy\u017cszym Play 2.9 i 3.0 skupiaj\u0105 si\u0119 na wsparciu dla zaktualizowanych j\u0119zyk\u00f3w programowania, kompatybilno\u015bci z Scala 3, a tak\u017ce na dostosowaniu do nowszych wersji bibliotek, takich jak Akka HTTP 10.2, Guice 6.0.0 i Jackson 2.14. Warto zaznaczy\u0107, \u017ce Play Framework 3.0 przestaje wspiera\u0107 starsze wersje Javy, a minimalna wymagana wersja to Java 11.<\/p>\n","innerContent":["\n<p>Poza powy\u017cszym Play 2.9 i 3.0 skupiaj\u0105 si\u0119 na wsparciu dla zaktualizowanych j\u0119zyk\u00f3w programowania, kompatybilno\u015bci z Scala 3, a tak\u017ce na dostosowaniu do nowszych wersji bibliotek, takich jak Akka HTTP 10.2, Guice 6.0.0 i Jackson 2.14. Warto zaznaczy\u0107, \u017ce Play Framework 3.0 przestaje wspiera\u0107 starsze wersje Javy, a minimalna wymagana wersja to Java 11.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/play-framework-is-reborn-like-a-phoenix\">Play Framework is reborn like a phoenix from the ashes.... and gets rid of Akka - JVM Weekly vol. 60<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/play-framework-is-reborn-like-a-phoenix\">Play Framework is reborn like a phoenix from the ashes.... and gets rid of Akka - JVM Weekly vol. 60<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Grails 6<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Grails 6<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Grails 6.0, najnowsza ods\u0142ona frameworka do tworzenia aplikacji webowych w j\u0119zyku Groovy, wprowadza kilka istotnych usprawnie\u0144. Najwa\u017cniejsz\u0105 nowo\u015bci\u0105 jest Grails Forge UI, kt\u00f3ry umo\u017cliwia programistom bardziej efektywne zarz\u0105dzanie projektami napisanymi w tym frameworku. Nowy interfejs dostarcza uproszczonego procesu inicjowania projekt\u00f3w, intuicyjnej nawigacji, walidacji w czasie rzeczywistym, wizualnego zarz\u0105dzania zale\u017cno\u015bciami oraz responsywnego designu.<\/p>\n","innerContent":["\n<p>Grails 6.0, najnowsza ods\u0142ona frameworka do tworzenia aplikacji webowych w j\u0119zyku Groovy, wprowadza kilka istotnych usprawnie\u0144. Najwa\u017cniejsz\u0105 nowo\u015bci\u0105 jest Grails Forge UI, kt\u00f3ry umo\u017cliwia programistom bardziej efektywne zarz\u0105dzanie projektami napisanymi w tym frameworku. Nowy interfejs dostarcza uproszczonego procesu inicjowania projekt\u00f3w, intuicyjnej nawigacji, walidacji w czasie rzeczywistym, wizualnego zarz\u0105dzania zale\u017cno\u015bciami oraz responsywnego designu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Grails 6.0 r\u00f3wnie\u017c wzmocni\u0142 integracj\u0119 z Micronaut, u\u0142atwiaj\u0105c korzystanie z bean\u00f3w Micronauta w komponentach Grails oraz wykorzystuj\u0105c klienta HTTP Micronaut do bardziej p\u0142ynnej interakcji z REST API. Warto zaznaczy\u0107, \u017ce r\u00f3wnie\u017c Grails 6.0 podnosi minimalne wymagania dotycz\u0105ce JDK do wersji 11.<\/p>\n","innerContent":["\n<p>Grails 6.0 r\u00f3wnie\u017c wzmocni\u0142 integracj\u0119 z Micronaut, u\u0142atwiaj\u0105c korzystanie z bean\u00f3w Micronauta w komponentach Grails oraz wykorzystuj\u0105c klienta HTTP Micronaut do bardziej p\u0142ynnej interakcji z REST API. Warto zaznaczy\u0107, \u017ce r\u00f3wnie\u017c Grails 6.0 podnosi minimalne wymagania dotycz\u0105ce JDK do wersji 11.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/panama-opencl-and-tornadovm-javas\">Panama, OpenCL and TornadoVM: Java's entry into the GPU world - JVM Weekly vol. 55<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/panama-opencl-and-tornadovm-javas\">Panama, OpenCL and TornadoVM: Java's entry into the GPU world - JVM Weekly vol. 55<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">WildFly 30<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">WildFly 30<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Swoj\u0105 premier\u0119 mia\u0142 te\u017c okr\u0105g\u0142y WildFly 30. Mimo \u017ce oficjalna rekomendacja to nadal JDK 17 lub 11, znacz\u0105ca cz\u0119\u015b\u0107 tego wydania zosta\u0142a po\u015bwi\u0119cona integracji z Java SE 21. Najnowsza wersja przechodzi na tej wersji testy certyfikacyjne zar\u00f3wno Jakarta EE 10 Core Profile, jak i Microprofile. Wraz z coraz wi\u0119kszym naciskiem na JDK 21 przewiduje si\u0119, \u017ce WildFly 30 mo\u017ce by\u0107 ostatnim, kt\u00f3re wspiera JDK 11.<\/p>\n","innerContent":["\n<p>Swoj\u0105 premier\u0119 mia\u0142 te\u017c okr\u0105g\u0142y WildFly 30. Mimo \u017ce oficjalna rekomendacja to nadal JDK 17 lub 11, znacz\u0105ca cz\u0119\u015b\u0107 tego wydania zosta\u0142a po\u015bwi\u0119cona integracji z Java SE 21. Najnowsza wersja przechodzi na tej wersji testy certyfikacyjne zar\u00f3wno Jakarta EE 10 Core Profile, jak i Microprofile. Wraz z coraz wi\u0119kszym naciskiem na JDK 21 przewiduje si\u0119, \u017ce WildFly 30 mo\u017ce by\u0107 ostatnim, kt\u00f3re wspiera JDK 11.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dodatkowo, wraz z przyj\u015bciem WildFly 30 nast\u0105pi\u0142a zmiana licencji z Lesser General Public License 2.1 na Apache Software License 2.0, podsumowuj\u0105c w ten spos\u00f3b d\u0142ugoletni\u0105 \u015bcie\u017ck\u0119. Przej\u015bcie z Lesser General Public License 2.1 (LGPL 2.1) na Apache Software License 2.0 (ASL 2.0) oznacza przej\u015bcie z licencji \u201es\u0142abej\u201d copyleft na bardziej liberaln\u0105.<\/p>\n","innerContent":["\n<p>Dodatkowo, wraz z przyj\u015bciem WildFly 30 nast\u0105pi\u0142a zmiana licencji z Lesser General Public License 2.1 na Apache Software License 2.0, podsumowuj\u0105c w ten spos\u00f3b d\u0142ugoletni\u0105 \u015bcie\u017ck\u0119. Przej\u015bcie z Lesser General Public License 2.1 (LGPL 2.1) na Apache Software License 2.0 (ASL 2.0) oznacza przej\u015bcie z licencji \u201es\u0142abej\u201d copyleft na bardziej liberaln\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/major-changes-in-kotlins-leadership\">Major changes in Kotlin\u2019s leadership: Roman Elizarov departs from JetBrains<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/major-changes-in-kotlins-leadership\">Major changes in Kotlin\u2019s leadership: Roman Elizarov departs from JetBrains<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Vaadin Hilla 2.0<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Vaadin Hilla 2.0<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Oko\u0142o rok temu Vaadin zaprezentowa\u0142 Hille, nowy framework webowy dla programist\u00f3w Java, kt\u00f3ry umo\u017cliwia tworzenie kompletnych aplikacji z backendem opartym na Spring Boot i frontendem napisanym w TypeScript. Wcze\u015bniej znany jako Vaadin Fusion, Hille oferuje sp\u00f3jn\u0105 konfiguracj\u0119 dla Java i TypeScript, bogaty zestaw komponent\u00f3w interfejsu u\u017cytkownika oraz konkuruj\u0105cy z JHipsterem stos technologiczny.<\/p>\n","innerContent":["\n<p>Oko\u0142o rok temu Vaadin zaprezentowa\u0142 Hille, nowy framework webowy dla programist\u00f3w Java, kt\u00f3ry umo\u017cliwia tworzenie kompletnych aplikacji z backendem opartym na Spring Boot i frontendem napisanym w TypeScript. Wcze\u015bniej znany jako Vaadin Fusion, Hille oferuje sp\u00f3jn\u0105 konfiguracj\u0119 dla Java i TypeScript, bogaty zestaw komponent\u00f3w interfejsu u\u017cytkownika oraz konkuruj\u0105cy z JHipsterem stos technologiczny.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W najnowszej wersji 2.0 dodano ulepszony generator TypeScript, wsparcie dla WebSocket\u00f3w, kompatybilno\u015b\u0107 z GraalVM Native Image, uproszczon\u0105 tworzenie motyw\u00f3w graficznych i narz\u0119dzie SSO Kit do szybkiego wdro\u017cenia logowania jednokrotnego (SSO). Ta wersja korzysta z Spring Boot 3, Java 17 i Jakarta EE 10.<\/p>\n","innerContent":["\n<p>W najnowszej wersji 2.0 dodano ulepszony generator TypeScript, wsparcie dla WebSocket\u00f3w, kompatybilno\u015b\u0107 z GraalVM Native Image, uproszczon\u0105 tworzenie motyw\u00f3w graficznych i narz\u0119dzie SSO Kit do szybkiego wdro\u017cenia logowania jednokrotnego (SSO). Ta wersja korzysta z Spring Boot 3, Java 17 i Jakarta EE 10.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/jdk-21-strikes-back-stable-virtual\">JDK 21 Strikes Back: Stable Virtual Threads and Generational ZGC - JVM Weekly vol. 37<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/jdk-21-strikes-back-stable-virtual\">JDK 21 Strikes Back: Stable Virtual Threads and Generational ZGC - JVM Weekly vol. 37<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Tooling<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Tooling<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/Cb5NxD4.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/Cb5NxD4.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">AI Assistant w IntelliJ Idea<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">AI Assistant w IntelliJ Idea<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wydanie IntelliJ IDEA 2023.3 przynios\u0142o dost\u0119pnego dla wszystkich zainteresowanych Asystent AI, kt\u00f3ry opu\u015bci\u0142 faz\u0119 testow\u0105. Oferuje on ulepszon\u0105 generacj\u0119 kodu bezpo\u015brednio w edytorze, kontekstow\u0105 czat AI do zapyta\u0144 zwi\u0105zanych z projektem oraz akcje AI \u015bwiadome projektu, wykorzystuj\u0105ce rozszerzony kontekst do uzyskania bardziej kompleksowych wynik\u00f3w. Wyobra\u017acie sobie taki ChatGPT wbudowany w Wasze IDE, z kilkoma dodatkowymi usprawniaczami dzi\u0119ki byciu mocno zintegrowanym z samym IDE \u2013 tak zwanymi AI Actions.<\/p>\n","innerContent":["\n<p>Wydanie IntelliJ IDEA 2023.3 przynios\u0142o dost\u0119pnego dla wszystkich zainteresowanych Asystent AI, kt\u00f3ry opu\u015bci\u0142 faz\u0119 testow\u0105. Oferuje on ulepszon\u0105 generacj\u0119 kodu bezpo\u015brednio w edytorze, kontekstow\u0105 czat AI do zapyta\u0144 zwi\u0105zanych z projektem oraz akcje AI \u015bwiadome projektu, wykorzystuj\u0105ce rozszerzony kontekst do uzyskania bardziej kompleksowych wynik\u00f3w. Wyobra\u017acie sobie taki ChatGPT wbudowany w Wasze IDE, z kilkoma dodatkowymi usprawniaczami dzi\u0119ki byciu mocno zintegrowanym z samym IDE \u2013 tak zwanymi AI Actions.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/docker-acquires-atomicjar-company\">Docker acquires AtomicJar, company behind Testcontainers - JVM Weekly vol. 64<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/docker-acquires-atomicjar-company\">Docker acquires AtomicJar, company behind Testcontainers - JVM Weekly vol. 64<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Gradle 8.0<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Gradle 8.0<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ga\u0142\u0105\u017a Gradle 8.x to przede wszystkim prace nad Kotlin DSL, alternatywn\u0105 sk\u0142adni\u0105 do tradycyjnego Groovy DSL, zapewniaj\u0105c lepsze podpowiadania sk\u0142adni przy edycji, kt\u00f3re sta\u0142o si\u0119 od tego wydania wariantem domy\u015blnym. Wraz z Gradle 8.0 poprawiona zostala kompilacji skrypt\u00f3w poprzez wprowadzenie interpretera dla deklaratywnych blok\u00f3w plugin\u00f3w {} w skryptach .gradle.kts, co daje zysk rz\u0119du 20%, zbli\u017caj\u0105c czas procesowania Kotlin DSL do Gradle DSL.<\/p>\n","innerContent":["\n<p>Ga\u0142\u0105\u017a Gradle 8.x to przede wszystkim prace nad Kotlin DSL, alternatywn\u0105 sk\u0142adni\u0105 do tradycyjnego Groovy DSL, zapewniaj\u0105c lepsze podpowiadania sk\u0142adni przy edycji, kt\u00f3re sta\u0142o si\u0119 od tego wydania wariantem domy\u015blnym. Wraz z Gradle 8.0 poprawiona zostala kompilacji skrypt\u00f3w poprzez wprowadzenie interpretera dla deklaratywnych blok\u00f3w plugin\u00f3w {} w skryptach .gradle.kts, co daje zysk rz\u0119du 20%, zbli\u017caj\u0105c czas procesowania Kotlin DSL do Gradle DSL.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ale je\u015bli chodzi o Gradle, to jeszcze ciekawsze rzeczy pokaza\u0142o JetBrains.<\/p>\n","innerContent":["\n<p>Ale je\u015bli chodzi o Gradle, to jeszcze ciekawsze rzeczy pokaza\u0142o JetBrains.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/curious-about-carbon-footprint-your\">Curious about Carbon Footprint your application has? There's a tool to measure it - JVM Weekly #34<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/curious-about-carbon-footprint-your\">Curious about Carbon Footprint your application has? There's a tool to measure it - JVM Weekly #34<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Amper od JetBrains<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Amper od JetBrains<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Programi\u015bci do\u015bwiadczaj\u0105 zmieniaj\u0105cych si\u0119 trend\u00f3w w zarz\u0105dzaniu procesami budowania i integracji ci\u0105g\u0142ej. W ostatnich latach (a mo\u017ce nawet dekadzie), popularne sta\u0142y si\u0119 rozwi\u0105zania CI\/CD jak Github Actions czy TravisCI, oparte na deklaratywnych konfiguracjach w YAML. W ekosystemie Javy, mimo dost\u0119pno\u015bci Mavena z jego XML-em, wielu deweloper\u00f3w przenios\u0142o si\u0119 na Gradle ze wzgl\u0119du na jego wi\u0119ksz\u0105 elastyczno\u015b\u0107, cho\u0107 czasami prowadzi to do skomplikowanych skrypt\u00f3w.<\/p>\n","innerContent":["\n<p>Programi\u015bci do\u015bwiadczaj\u0105 zmieniaj\u0105cych si\u0119 trend\u00f3w w zarz\u0105dzaniu procesami budowania i integracji ci\u0105g\u0142ej. W ostatnich latach (a mo\u017ce nawet dekadzie), popularne sta\u0142y si\u0119 rozwi\u0105zania CI\/CD jak Github Actions czy TravisCI, oparte na deklaratywnych konfiguracjach w YAML. W ekosystemie Javy, mimo dost\u0119pno\u015bci Mavena z jego XML-em, wielu deweloper\u00f3w przenios\u0142o si\u0119 na Gradle ze wzgl\u0119du na jego wi\u0119ksz\u0105 elastyczno\u015b\u0107, cho\u0107 czasami prowadzi to do skomplikowanych skrypt\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ten trend wskazuje na ci\u0105g\u0142e wyzwania w zarz\u0105dzaniu z\u0142o\u017conymi projektami, szczeg\u00f3lnie w JetBrains, gdzie Kotlin Multiplatform uwidoczni\u0142 problematyk\u0119 Gradle. W odpowiedzi na te wyzwania, JetBrains rozpocz\u0105\u0142o Project Amper, maj\u0105cym na celu uproszczenie konfiguracji konfiguracji Gradle przez u\u017cycie YAML. Amper obecnie wspiera Kotlin i Kotlin Multiplatform, a tak\u017ce Jav\u0119 i Swifta. Ta inicjatywa ma na celu uczynienie Gradle bardziej dost\u0119pnym i mniej skomplikowanym.<\/p>\n","innerContent":["\n<p>Ten trend wskazuje na ci\u0105g\u0142e wyzwania w zarz\u0105dzaniu z\u0142o\u017conymi projektami, szczeg\u00f3lnie w JetBrains, gdzie Kotlin Multiplatform uwidoczni\u0142 problematyk\u0119 Gradle. W odpowiedzi na te wyzwania, JetBrains rozpocz\u0105\u0142o Project Amper, maj\u0105cym na celu uproszczenie konfiguracji konfiguracji Gradle przez u\u017cycie YAML. Amper obecnie wspiera Kotlin i Kotlin Multiplatform, a tak\u017ce Jav\u0119 i Swifta. Ta inicjatywa ma na celu uczynienie Gradle bardziej dost\u0119pnym i mniej skomplikowanym.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-14.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Chyba nigdy nie uciekniemy od YAML-a<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-14.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Chyba nigdy nie uciekniemy od YAML-a<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/amper-by-jetbrains-defining-gradle\">Amper by JetBrains: Defining Gradle Builds through YAML - JVM Weekly vol. 61<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/amper-by-jetbrains-defining-gradle\">Amper by JetBrains: Defining Gradle Builds through YAML - JVM Weekly vol. 61<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Oficjalne Java Extension for Visual Studio Code od Oracle<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Oficjalne Java Extension for Visual Studio Code od Oracle<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Oracle opublikowa\u0142o oficjalne rozszerzenie Javy dla \u015brodowiska Visual Studio Code, co stanowi stanowi z ich strony znaczny krok w uznaniu VSCode jako alternatywy dla tradycyjnych \u015brodowisk programistycznych. Pomimo istnienia wyspecjalizowanych narz\u0119dzi dla Javy, jak Intellij, coraz wi\u0119cej programist\u00f3w, w tym studenci i ci pracuj\u0105cy z r\u00f3\u017cnymi j\u0119zykami, preferuje u\u017cywanie tego toola. Rozszerzenie dostarcza funkcje takie jak auto-uzupe\u0142nianie, pod\u015bwietlanie b\u0142\u0119d\u00f3w, wsparcie dla debugowania oraz integracj\u0119 z projektami Gradle i Maven. Wa\u017cn\u0105 cech\u0105 jest wykorzystanie serwera j\u0119zyka opartego na protokole Language Server Protocol, pochodz\u0105cego z NetBeans (o samym LSP mo\u017cecie poczyta\u0107 troch\u0119 ni\u017cej).<\/p>\n","innerContent":["\n<p>Oracle opublikowa\u0142o oficjalne rozszerzenie Javy dla \u015brodowiska Visual Studio Code, co stanowi stanowi z ich strony znaczny krok w uznaniu VSCode jako alternatywy dla tradycyjnych \u015brodowisk programistycznych. Pomimo istnienia wyspecjalizowanych narz\u0119dzi dla Javy, jak Intellij, coraz wi\u0119cej programist\u00f3w, w tym studenci i ci pracuj\u0105cy z r\u00f3\u017cnymi j\u0119zykami, preferuje u\u017cywanie tego toola. Rozszerzenie dostarcza funkcje takie jak auto-uzupe\u0142nianie, pod\u015bwietlanie b\u0142\u0119d\u00f3w, wsparcie dla debugowania oraz integracj\u0119 z projektami Gradle i Maven. Wa\u017cn\u0105 cech\u0105 jest wykorzystanie serwera j\u0119zyka opartego na protokole Language Server Protocol, pochodz\u0105cego z NetBeans (o samym LSP mo\u017cecie poczyta\u0107 troch\u0119 ni\u017cej).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.io\/pl\/duze-zmiany-w-leadershipie-kotlina-jvm-weekly-vol-152\/\">Major changes in Kotlin\u2019s leadership: Roman Elizarov departs from JetBrains<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.io\/pl\/duze-zmiany-w-leadershipie-kotlina-jvm-weekly-vol-152\/\">Major changes in Kotlin\u2019s leadership: Roman Elizarov departs from JetBrains<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Azul Zulu JDK 17 with CRaC support<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Azul Zulu JDK 17 with CRaC support<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Azul wyda\u0142 wersje swojego OpenJDK 17 - Zulu - z wbudowanym wsparciem dla CRaC API. Jak ju\u017c wspomnia\u0142em przy Springu, CRaC API umo\u017cliwia tworzenie \"checkpoint\u00f3w\" w trakcie pracy aplikacji, co pozwala na zapisanie pe\u0142nego stanu \u015brodowiska uruchomieniowego. Dzia\u0142a to podobnie do funkcji Save State w emulatorach, gdzie zapisywany jest ca\u0142y stan pami\u0119ci na dysk i mo\u017ce by\u0107 p\u00f3\u017aniej odtwarzany. Azul jest pierwszym dostawc\u0105, kt\u00f3ry oferuje komercyjne wsparcie dla tej technologii, co mo\u017ce by\u0107 interesuj\u0105ce w\u0142a\u015bnie dla early adopter\u00f3w nowych featur\u00f3w Spring Framework 6.1.<\/p>\n","innerContent":["\n<p>Azul wyda\u0142 wersje swojego OpenJDK 17 - Zulu - z wbudowanym wsparciem dla CRaC API. Jak ju\u017c wspomnia\u0142em przy Springu, CRaC API umo\u017cliwia tworzenie \"checkpoint\u00f3w\" w trakcie pracy aplikacji, co pozwala na zapisanie pe\u0142nego stanu \u015brodowiska uruchomieniowego. Dzia\u0142a to podobnie do funkcji Save State w emulatorach, gdzie zapisywany jest ca\u0142y stan pami\u0119ci na dysk i mo\u017ce by\u0107 p\u00f3\u017aniej odtwarzany. Azul jest pierwszym dostawc\u0105, kt\u00f3ry oferuje komercyjne wsparcie dla tej technologii, co mo\u017ce by\u0107 interesuj\u0105ce w\u0142a\u015bnie dla early adopter\u00f3w nowych featur\u00f3w Spring Framework 6.1.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/loial-a-new-player-among-serialization\">JEP 450: The child of Project Lilliput - JVM Weekly vol. 44<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/loial-a-new-player-among-serialization\">JEP 450: The child of Project Lilliput - JVM Weekly vol. 44<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Liberica JDK Performance Edition<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Liberica JDK Performance Edition<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>BellSoft wprowadzi\u0142 na rynek Liberica JDK Performance Edition, zmodyfikowan\u0105 wersj\u0119 JDK 11, w kt\u00f3rej zintegrowano poprawki wydajno\u015bciowe z JDK 17. To rozwi\u0105zanie umo\u017cliwia firmom korzystaj\u0105cym z JDK 11 zwi\u0119kszenie wydajno\u015bci aplikacji o 10-15% bez konieczno\u015bci zmian w kodzie. Liberica JDK Performance Edition jest dost\u0119pna dla subskrybent\u00f3w Liberica JDK od 1 sierpnia bez dodatkowych op\u0142at i jest dostarczana wraz z innymi narz\u0119dziami od BellSoft.<\/p>\n","innerContent":["\n<p>BellSoft wprowadzi\u0142 na rynek Liberica JDK Performance Edition, zmodyfikowan\u0105 wersj\u0119 JDK 11, w kt\u00f3rej zintegrowano poprawki wydajno\u015bciowe z JDK 17. To rozwi\u0105zanie umo\u017cliwia firmom korzystaj\u0105cym z JDK 11 zwi\u0119kszenie wydajno\u015bci aplikacji o 10-15% bez konieczno\u015bci zmian w kodzie. Liberica JDK Performance Edition jest dost\u0119pna dla subskrybent\u00f3w Liberica JDK od 1 sierpnia bez dodatkowych op\u0142at i jest dostarczana wraz z innymi narz\u0119dziami od BellSoft.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/fury-compromise-between-speed-and\">Fury: Compromise between speed and flexibility in the serialization process - JVM Weekly vol. 53<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/fury-compromise-between-speed-and\">Fury: Compromise between speed and flexibility in the serialization process - JVM Weekly vol. 53<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Nowi ciekawi gracze<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Nowi ciekawi gracze<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/I1zbPjY.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/I1zbPjY.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Fury<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Fury<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Fury, stworzony przez Ant Group, to nowa biblioteka do serializacji, \u0141\u0105czy ona wydajno\u015b\u0107 serializacji statycznej z elastyczno\u015bci\u0105 dynamicznej serializacji, co mo\u017ce znale\u017a\u0107 zastosowanie w przypadku, gdy potrzebna jest du\u017ca przepustowo\u015b\u0107 w masowej transmisji danych. Oferuje ona pe\u0142n\u0105 kompatybilno\u015b\u0107 z rozwi\u0105zaniami ju\u017c istniej\u0105cymi w Javie i wykorzystuje nie tylko zaawansowane techniki serializacji, ale te\u017c operacje SIMD z Vector API oraz podej\u015bcie Zero-Copy, minimalizuj\u0105c op\u00f3\u017anienia podczas transferu danych. Fury wykorzystuje tak\u017ce kompilator JIT, kt\u00f3ry generuje zoptymalizowany kod serializacji w czasie rzeczywistym.<\/p>\n","innerContent":["\n<p>Fury, stworzony przez Ant Group, to nowa biblioteka do serializacji, \u0141\u0105czy ona wydajno\u015b\u0107 serializacji statycznej z elastyczno\u015bci\u0105 dynamicznej serializacji, co mo\u017ce znale\u017a\u0107 zastosowanie w przypadku, gdy potrzebna jest du\u017ca przepustowo\u015b\u0107 w masowej transmisji danych. Oferuje ona pe\u0142n\u0105 kompatybilno\u015b\u0107 z rozwi\u0105zaniami ju\u017c istniej\u0105cymi w Javie i wykorzystuje nie tylko zaawansowane techniki serializacji, ale te\u017c operacje SIMD z Vector API oraz podej\u015bcie Zero-Copy, minimalizuj\u0105c op\u00f3\u017anienia podczas transferu danych. Fury wykorzystuje tak\u017ce kompilator JIT, kt\u00f3ry generuje zoptymalizowany kod serializacji w czasie rzeczywistym.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/fury-compromise-between-speed-and\">Fury: Compromise between speed and flexibility in the serialization process - JVM Weekly vol. 53<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/fury-compromise-between-speed-and\">Fury: Compromise between speed and flexibility in the serialization process - JVM Weekly vol. 53<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">EclipseStore 1.0<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">EclipseStore 1.0<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>MicroStream rozwi\u0105zanie, kt\u00f3re zapewnia trwa\u0142o\u015b\u0107 danych w spos\u00f3b \"databaseless\" natywne dla Javy, skrojone dla mikroserwis\u00f3w i \u015brodowisk serverless. Pozwala na zapisywanie graf\u00f3w obiekt\u00f3w Java w pami\u0119ci bez ogranicze\u0144 dotycz\u0105cych ich wielko\u015bci czy z\u0142o\u017cono\u015bci, zapewniaj\u0105c jednocze\u015bnie pe\u0142n\u0105 sp\u00f3jno\u015b\u0107 transakcji. MicroStream w 2023 zosta\u0142 przekszta\u0142cony w oficjalny projekt Eclipse Foundation o nazwie EclipseStore 1.0, a wszystkie nowe funkcje b\u0119d\u0105 teraz wydawane w jego ramach. To nie oznacza jednak ko\u0144ca rozwoju, a wr\u0119cz przeciwnie - zesp\u00f3\u0142 MicroStream nadal b\u0119dzie aktywnie pracowa\u0107 nad projektem. Co istotne, EclipseStore ma pozosta\u0107 kluczowym elementem strategii komercyjnej MicroStream, stanowi\u0105c baz\u0119 dla oferty MicroStream Cluster i MicroStream Enterprise.<\/p>\n","innerContent":["\n<p>MicroStream rozwi\u0105zanie, kt\u00f3re zapewnia trwa\u0142o\u015b\u0107 danych w spos\u00f3b \"databaseless\" natywne dla Javy, skrojone dla mikroserwis\u00f3w i \u015brodowisk serverless. Pozwala na zapisywanie graf\u00f3w obiekt\u00f3w Java w pami\u0119ci bez ogranicze\u0144 dotycz\u0105cych ich wielko\u015bci czy z\u0142o\u017cono\u015bci, zapewniaj\u0105c jednocze\u015bnie pe\u0142n\u0105 sp\u00f3jno\u015b\u0107 transakcji. MicroStream w 2023 zosta\u0142 przekszta\u0142cony w oficjalny projekt Eclipse Foundation o nazwie EclipseStore 1.0, a wszystkie nowe funkcje b\u0119d\u0105 teraz wydawane w jego ramach. To nie oznacza jednak ko\u0144ca rozwoju, a wr\u0119cz przeciwnie - zesp\u00f3\u0142 MicroStream nadal b\u0119dzie aktywnie pracowa\u0107 nad projektem. Co istotne, EclipseStore ma pozosta\u0107 kluczowym elementem strategii komercyjnej MicroStream, stanowi\u0105c baz\u0119 dla oferty MicroStream Cluster i MicroStream Enterprise.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/java-kotlin-scala-insights-from-state\">Java, Kotlin, Scala: Insights from State of Developer Ecosystem 2023 - JVM Weekly vol. 62<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/java-kotlin-scala-insights-from-state\">Java, Kotlin, Scala: Insights from State of Developer Ecosystem 2023 - JVM Weekly vol. 62<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">JoularJX 2.0<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">JoularJX 2.0<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>JoularJX 2.0 to narz\u0119dzie, kt\u00f3rego celem jest umo\u017cliwienie programistom dok\u0142adnego monitorowania i analizy zu\u017cycia energii na r\u00f3\u017cnych urz\u0105dzeniach i systemach operacyjnych. U\u017cywa do tego zaawansowanych modeli pomagaj\u0105cych w oszacowaniu zu\u017cycia energii przez kluczowe komponenty sprz\u0119towe, takie jak procesor i pami\u0119\u0107, oraz dostarcza szczeg\u00f3\u0142owe raporty i wizualizacje zu\u017cycia. Narz\u0119dzie to wpisuje si\u0119 w rosn\u0105ce zapotrzebowanie na zr\u00f3wnowa\u017cone praktyki programistyczne i efektywno\u015b\u0107 energetyczn\u0105 w bran\u017cy IT.<\/p>\n","innerContent":["\n<p>JoularJX 2.0 to narz\u0119dzie, kt\u00f3rego celem jest umo\u017cliwienie programistom dok\u0142adnego monitorowania i analizy zu\u017cycia energii na r\u00f3\u017cnych urz\u0105dzeniach i systemach operacyjnych. U\u017cywa do tego zaawansowanych modeli pomagaj\u0105cych w oszacowaniu zu\u017cycia energii przez kluczowe komponenty sprz\u0119towe, takie jak procesor i pami\u0119\u0107, oraz dostarcza szczeg\u00f3\u0142owe raporty i wizualizacje zu\u017cycia. Narz\u0119dzie to wpisuje si\u0119 w rosn\u0105ce zapotrzebowanie na zr\u00f3wnowa\u017cone praktyki programistyczne i efektywno\u015b\u0107 energetyczn\u0105 w bran\u017cy IT.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kluczow\u0105 nowo\u015bci\u0105 w wersji 2.0 jest mo\u017cliwo\u015b\u0107 \u015bledzenia zu\u017cycia mocy i energii na poziomie poszczeg\u00f3lnych metod w kodzie. Dzi\u0119ki temu programi\u015bci mog\u0105 uzyska\u0107 bardziej szczeg\u00f3\u0142owy wgl\u0105d w to, kt\u00f3re cz\u0119\u015bci ich aplikacji s\u0105 najbardziej energoch\u0142onne<\/p>\n","innerContent":["\n<p>Kluczow\u0105 nowo\u015bci\u0105 w wersji 2.0 jest mo\u017cliwo\u015b\u0107 \u015bledzenia zu\u017cycia mocy i energii na poziomie poszczeg\u00f3lnych metod w kodzie. Dzi\u0119ki temu programi\u015bci mog\u0105 uzyska\u0107 bardziej szczeg\u00f3\u0142owy wgl\u0105d w to, kt\u00f3re cz\u0119\u015bci ich aplikacji s\u0105 najbardziej energoch\u0142onne<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/curious-about-carbon-footprint-your\">Curious about Carbon Footprint your application has? There's a tool to measure it - JVM Weekly #34<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/curious-about-carbon-footprint-your\">Curious about Carbon Footprint your application has? There's a tool to measure it - JVM Weekly #34<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Nowo\u015bci w \u015bwiecie Kotlina i Scali<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Nowo\u015bci w \u015bwiecie Kotlina i Scali<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/77yQv5n.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/77yQv5n.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>No to jeszcze zerknijmy co u kuzyn\u00f3w Javy, kt\u00f3rzy zawsze smaj\u0105 si\u0119 za nieco lepszych ni\u017c ona sama \ud83d\ude09<\/p>\n","innerContent":["\n<p>No to jeszcze zerknijmy co u kuzyn\u00f3w Javy, kt\u00f3rzy zawsze smaj\u0105 si\u0119 za nieco lepszych ni\u017c ona sama \ud83d\ude09<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Kotlin Mulitplatform Stable<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Kotlin Mulitplatform Stable<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kotlin Multiplatform (KMP) osi\u0105gn\u0105\u0142 stabilno\u015b\u0107 i gotowo\u015b\u0107 do u\u017cytku produkcyjnego, co jest znacz\u0105cym krokiem dla deweloper\u00f3w mobilnych. Technologia umo\u017cliwia wsp\u00f3\u0142dzielenie kodu mi\u0119dzy r\u00f3\u017cnymi platformami, zacieraj\u0105c granice mi\u0119dzy rozwojem cross-platformowym a natywnym. Pozwala na integracje r\u00f3\u017cnych \u015brodowisk, jak Android, iOS, a tak\u017ce aplikacje serwerowe, cho\u0107 w tym ostatnim przypadku synergii jest nieco mniej. Si\u0142\u0119 KMP pokazuj\u0105 biblioteki takie jak cho\u0107by Compose Multiplatform.<\/p>\n","innerContent":["\n<p>Kotlin Multiplatform (KMP) osi\u0105gn\u0105\u0142 stabilno\u015b\u0107 i gotowo\u015b\u0107 do u\u017cytku produkcyjnego, co jest znacz\u0105cym krokiem dla deweloper\u00f3w mobilnych. Technologia umo\u017cliwia wsp\u00f3\u0142dzielenie kodu mi\u0119dzy r\u00f3\u017cnymi platformami, zacieraj\u0105c granice mi\u0119dzy rozwojem cross-platformowym a natywnym. Pozwala na integracje r\u00f3\u017cnych \u015brodowisk, jak Android, iOS, a tak\u017ce aplikacje serwerowe, cho\u0107 w tym ostatnim przypadku synergii jest nieco mniej. Si\u0142\u0119 KMP pokazuj\u0105 biblioteki takie jak cho\u0107by Compose Multiplatform.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/open.substack.com\/pub\/vived\/p\/play-framework-is-reborn-like-a-phoenix\">Play Framework is reborn like a phoenix from the ashes.... and gets rid of Akka - JVM Weekly vol. 60<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/open.substack.com\/pub\/vived\/p\/play-framework-is-reborn-like-a-phoenix\">Play Framework is reborn like a phoenix from the ashes.... and gets rid of Akka - JVM Weekly vol. 60<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">AWS SDK for Kotlin<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">AWS SDK for Kotlin<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Podczas tegorocznej edycji konferencji Amazon Web Services re:Invent w Las Vegas, og\u0142oszono wydanie AWS SDK dla Kotlina. SDK zosta\u0142o zaprojektowane z uwzgl\u0119dnieniem idiomatycznych cech j\u0119zyka, w\u0142\u0105czaj\u0105c w to specjalistyczne DSL-e oraz wsparcie dla asynchronicznych wywo\u0142a\u0144 us\u0142ug AWS za pomoc\u0105 coroutines. Aktualna wersja SDK umo\u017cliwia u\u017cycie w aplikacjach serwerowych oraz Android API w wersji 24+, jednak w planach s\u0105 dodatkowe wsparcia dla innych platform, w tym Kotlin\/Native.<\/p>\n","innerContent":["\n<p>Podczas tegorocznej edycji konferencji Amazon Web Services re:Invent w Las Vegas, og\u0142oszono wydanie AWS SDK dla Kotlina. SDK zosta\u0142o zaprojektowane z uwzgl\u0119dnieniem idiomatycznych cech j\u0119zyka, w\u0142\u0105czaj\u0105c w to specjalistyczne DSL-e oraz wsparcie dla asynchronicznych wywo\u0142a\u0144 us\u0142ug AWS za pomoc\u0105 coroutines. Aktualna wersja SDK umo\u017cliwia u\u017cycie w aplikacjach serwerowych oraz Android API w wersji 24+, jednak w planach s\u0105 dodatkowe wsparcia dla innych platform, w tym Kotlin\/Native.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n","innerContent":["\n<p><strong>Wi\u0119cej szczeg\u00f3\u0142\u00f3w znajdziecie w poni\u017cszych edycjach:<\/strong><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/java-kotlin-scala-insights-from-state\">Java, Kotlin, Scala: Insights from State of Developer Ecosystem 2023 - JVM Weekly vol. 62<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/java-kotlin-scala-insights-from-state\">Java, Kotlin, Scala: Insights from State of Developer Ecosystem 2023 - JVM Weekly vol. 62<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":4},"innerBlocks":[],"innerHTML":"\n<h4 class=\"wp-block-heading\">Scala Metals 1.0<\/h4>\n","innerContent":["\n<h4 class=\"wp-block-heading\">Scala Metals 1.0<\/h4>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Language Server Protocol (LSP) to otwarty protok\u00f3\u0142 oparty na JSON-RPC, umo\u017cliwiaj\u0105cy interakcj\u0119 mi\u0119dzy edytorami IDE a serwerami j\u0119zykowymi, kt\u00f3re oferuj\u0105 funkcje specyficzne dla j\u0119zyka, takie jak autouzupe\u0142nianie czy przej\u015bcie do definicji. Dzi\u0119ki LSP, serwer j\u0119zyka raz stworzony mo\u017ce by\u0107 wykorzystywany w wielu narz\u0119dziach, co eliminuje konieczno\u015b\u0107 wielokrotnego wykonywania tej samej pracy.<\/p>\n","innerContent":["\n<p>Language Server Protocol (LSP) to otwarty protok\u00f3\u0142 oparty na JSON-RPC, umo\u017cliwiaj\u0105cy interakcj\u0119 mi\u0119dzy edytorami IDE a serwerami j\u0119zykowymi, kt\u00f3re oferuj\u0105 funkcje specyficzne dla j\u0119zyka, takie jak autouzupe\u0142nianie czy przej\u015bcie do definicji. Dzi\u0119ki LSP, serwer j\u0119zyka raz stworzony mo\u017ce by\u0107 wykorzystywany w wielu narz\u0119dziach, co eliminuje konieczno\u015b\u0107 wielokrotnego wykonywania tej samej pracy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wa\u017cnym osi\u0105gni\u0119ciem w tym obszarze jest wydanie Metals 1.0, dojrza\u0142ego serwera j\u0119zykowego dla Scali. Jego rozw\u00f3j to efekt wsp\u00f3\u0142pracy wielu cz\u0142onk\u00f3w spo\u0142eczno\u015bci Scala. Metals 1.0, nazwany kodowo Silver, opr\u00f3cz standardowych funkcji LSP, oferuje dodatkowe funkcje jak wsparcie dla projekt\u00f3w z wieloma rootami, uruchamianie regu\u0142 Scalafix i lepsze wsparcie dla Scala CLI. Obs\u0142uguje najnowsze wersje Scali (Scala 3.3.0, Scala 2.12.18, Scala 2.13.11).<\/p>\n","innerContent":["\n<p>Wa\u017cnym osi\u0105gni\u0119ciem w tym obszarze jest wydanie Metals 1.0, dojrza\u0142ego serwera j\u0119zykowego dla Scali. Jego rozw\u00f3j to efekt wsp\u00f3\u0142pracy wielu cz\u0142onk\u00f3w spo\u0142eczno\u015bci Scala. Metals 1.0, nazwany kodowo Silver, opr\u00f3cz standardowych funkcji LSP, oferuje dodatkowe funkcje jak wsparcie dla projekt\u00f3w z wieloma rootami, uruchamianie regu\u0142 Scalafix i lepsze wsparcie dla Scala CLI. Obs\u0142uguje najnowsze wersje Scali (Scala 3.3.0, Scala 2.12.18, Scala 2.13.11).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/rust-written-jvm-and-bytecode-transpiler\">Rust-written JVM and Bytecode Transpiler: A Masterclass in Learning-by-Doing - JVM Weekly vol. 51<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/rust-written-jvm-and-bytecode-transpiler\">Rust-written JVM and Bytecode Transpiler: A Masterclass in Learning-by-Doing - JVM Weekly vol. 51<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">No i na ko\u0144cu - rok, w kt\u00f3rym ekosystem Java wskoczy\u0142 na wagonik Hype zwi\u0105zany z AI<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">No i na ko\u0144cu - rok, w kt\u00f3rym ekosystem Java wskoczy\u0142 na wagonik Hype zwi\u0105zany z AI<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/FiI3atp.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/FiI3atp.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>No bo takiej ilo\u015bci nowo\u015bci to si\u0119 chyba absolutnie nikt nie spodziewa\u0142. A to i tak tylko te ciekawsze.<\/p>\n","innerContent":["\n<p>No bo takiej ilo\u015bci nowo\u015bci to si\u0119 chyba absolutnie nikt nie spodziewa\u0142. A to i tak tylko te ciekawsze.<\/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\">langchain4j<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">langchain4j<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><code>langchain4j<\/code> to za\u015b&nbsp;javowy wrapper do LangChain - stworzonego przez Harrisona Chase\u2019a frameworku skoncentrowanego na Du\u017cych Modelach J\u0119zykowych (LLMach), takich jak GPT-3, GPT-3.5 i GPT-4 od OpenAI. Zosta\u0142 zaprezentowany pod koniec pa\u017adziernika 2022 i zaprojektowany z my\u015bl\u0105 o tworzeniu nie tyle eksperyment\u00f3w, co produkcyjnych aplikacji opartych o LLMy. LangChain umo\u017cliwia tworzenie \u0142anch\u00f3w r\u00f3\u017cnych komponent\u00f3w, takich jak szablony dla r\u00f3\u017cnych typ\u00f3w prompt\u00f3w, integracj\u0119 z r\u00f3\u017cnymi modelami LLM, czy agent\u00f3w korzystaj\u0105cych z LLM do podejmowania decyzji, Wprowadza te\u017c koncepcje kr\u00f3tko- i d\u0142ugoterminow\u0105 pami\u0119\u0107.<\/p>\n","innerContent":["\n<p><code>langchain4j<\/code> to za\u015b&nbsp;javowy wrapper do LangChain - stworzonego przez Harrisona Chase\u2019a frameworku skoncentrowanego na Du\u017cych Modelach J\u0119zykowych (LLMach), takich jak GPT-3, GPT-3.5 i GPT-4 od OpenAI. Zosta\u0142 zaprezentowany pod koniec pa\u017adziernika 2022 i zaprojektowany z my\u015bl\u0105 o tworzeniu nie tyle eksperyment\u00f3w, co produkcyjnych aplikacji opartych o LLMy. LangChain umo\u017cliwia tworzenie \u0142anch\u00f3w r\u00f3\u017cnych komponent\u00f3w, takich jak szablony dla r\u00f3\u017cnych typ\u00f3w prompt\u00f3w, integracj\u0119 z r\u00f3\u017cnymi modelami LLM, czy agent\u00f3w korzystaj\u0105cych z LLM do podejmowania decyzji, Wprowadza te\u017c koncepcje kr\u00f3tko- i d\u0142ugoterminow\u0105 pami\u0119\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/jvms-open-source-all-stars-june-2023\">JVM\u2019s Open Source All-Stars, June 2023: LLMs Edition - JVM Weekly vol. 48<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/jvms-open-source-all-stars-june-2023\">JVM\u2019s Open Source All-Stars, June 2023: LLMs Edition - JVM Weekly vol. 48<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Semantic Kernel for Java<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Semantic Kernel for Java<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Microsoft r\u00f3wnie\u017c ma swoje SDK podobne do LangChainie o nazwie Semantic Kernel (SK), kt\u00f3re umo\u017cliwia integracj\u0119 du\u017cych modeli j\u0119zykowych AI (LLM) z konwencjonalnymi j\u0119zykami programowania, w tym Jav\u0105. SDK to \u0142\u0105czy j\u0119zyk naturalny, tradycyjny kod i pami\u0119\u0107 opart\u0105 o embeddingi, tworz\u0105c rozszerzalny model programowania. W praktyce, Semantic Kernel for Java pozwala programistom na p\u0142ynn\u0105 integracj\u0119 us\u0142ug AI, takich jak Azure OpenAI, z ich aplikacjami, wykorzystuj\u0105c model oparty o tak zwane skillach. Programi\u015bci mog\u0105 te\u017c&nbsp;tworzy\u0107 inteligentne plany przy u\u017cyciu Planner\u00f3w, \u0142\u0105cz\u0105c umiej\u0119tno\u015bci wykonywania z\u0142o\u017conych dzia\u0142a\u0144 z generatywn\u0105 sztuczn\u0105 inteligencj\u0105.<\/p>\n","innerContent":["\n<p>Microsoft r\u00f3wnie\u017c ma swoje SDK podobne do LangChainie o nazwie Semantic Kernel (SK), kt\u00f3re umo\u017cliwia integracj\u0119 du\u017cych modeli j\u0119zykowych AI (LLM) z konwencjonalnymi j\u0119zykami programowania, w tym Jav\u0105. SDK to \u0142\u0105czy j\u0119zyk naturalny, tradycyjny kod i pami\u0119\u0107 opart\u0105 o embeddingi, tworz\u0105c rozszerzalny model programowania. W praktyce, Semantic Kernel for Java pozwala programistom na p\u0142ynn\u0105 integracj\u0119 us\u0142ug AI, takich jak Azure OpenAI, z ich aplikacjami, wykorzystuj\u0105c model oparty o tak zwane skillach. Programi\u015bci mog\u0105 te\u017c&nbsp;tworzy\u0107 inteligentne plany przy u\u017cyciu Planner\u00f3w, \u0142\u0105cz\u0105c umiej\u0119tno\u015bci wykonywania z\u0142o\u017conych dzia\u0142a\u0144 z generatywn\u0105 sztuczn\u0105 inteligencj\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/vived.substack.com\/p\/rust-written-jvm-and-bytecode-transpiler\">Rust-written JVM and Bytecode Transpiler: A Masterclass in Learning-by-Doing - JVM Weekly vol. 51<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/vived.substack.com\/p\/rust-written-jvm-and-bytecode-transpiler\">Rust-written JVM and Bytecode Transpiler: A Masterclass in Learning-by-Doing - JVM Weekly vol. 51<\/a><\/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\">Spring AI<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Spring AI<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Spring AI, zainicjowany przez Marka Pollacka, to nowy projekt maj\u0105cy na celu stworzenie mostu mi\u0119dzy zaawansowanymi modelami AI (szczeg\u00f3lnie z wariantami GPT), a typowymi wzorcami Springa w tworzeniu aplikacji. Projekt Spring AI czerpie inspiracj\u0119 z LangChain, LlamaIndex i Semantic Kernel, d\u0105\u017c\u0105c do oferowania programistom Spring podobnego do\u015bwiadczenia AI. Wprowadza on wsp\u00f3lny interfejs API do interakcji z modelami, rozwija \"prompty\" kluczowe dla komunikacji z AI, a tak\u017ce oferuje parsery do konwersji ich odpowiedziami na zwyk\u0142e POJO. Ponadto, zdaj\u0105c sobie spraw\u0119 z ryzyk zwi\u0105zanych z zarz\u0105dzaniem wra\u017cliwymi danymi w LLM-ach, umo\u017cliwia integracj\u0119 z bazami wektorowymi, u\u0142atwiaj\u0105c ich wykorzystanie bez konieczno\u015bci re-treningu modeli.<\/p>\n","innerContent":["\n<p>Spring AI, zainicjowany przez Marka Pollacka, to nowy projekt maj\u0105cy na celu stworzenie mostu mi\u0119dzy zaawansowanymi modelami AI (szczeg\u00f3lnie z wariantami GPT), a typowymi wzorcami Springa w tworzeniu aplikacji. Projekt Spring AI czerpie inspiracj\u0119 z LangChain, LlamaIndex i Semantic Kernel, d\u0105\u017c\u0105c do oferowania programistom Spring podobnego do\u015bwiadczenia AI. Wprowadza on wsp\u00f3lny interfejs API do interakcji z modelami, rozwija \"prompty\" kluczowe dla komunikacji z AI, a tak\u017ce oferuje parsery do konwersji ich odpowiedziami na zwyk\u0142e POJO. Ponadto, zdaj\u0105c sobie spraw\u0119 z ryzyk zwi\u0105zanych z zarz\u0105dzaniem wra\u017cliwymi danymi w LLM-ach, umo\u017cliwia integracj\u0119 z bazami wektorowymi, u\u0142atwiaj\u0105c ich wykorzystanie bez konieczno\u015bci re-treningu modeli.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/panama-opencl-and-tornadovm-javas\">Panama, OpenCL and TornadoVM: Java's entry into the GPU world - JVM Weekly vol. 55<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/panama-opencl-and-tornadovm-javas\">Panama, OpenCL and TornadoVM: Java's entry into the GPU world - JVM Weekly vol. 55<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">quarkus-langchain4j<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">quarkus-langchain4j<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Rozszerzenie <code>quarkus-langchain4j<\/code> 0.1 stanowi\u0142o istotny krok w kierunku bardziej intuicyjnego i efektywnego wykorzystania sztucznej inteligencji w tworzeniu oprogramowania. Wsp\u00f3\u0142pracuj\u0105c z Dmytro Liubarskyi i zespo\u0142em LangChain4j, Quarkus skupi\u0142 si\u0119 w rozszerzeniu na integracji LLM-\u00f3w z aplikacjami napisanymi w tym w\u0142a\u015bnie framework\u00f3w.<\/p>\n","innerContent":["\n<p>Rozszerzenie <code>quarkus-langchain4j<\/code> 0.1 stanowi\u0142o istotny krok w kierunku bardziej intuicyjnego i efektywnego wykorzystania sztucznej inteligencji w tworzeniu oprogramowania. Wsp\u00f3\u0142pracuj\u0105c z Dmytro Liubarskyi i zespo\u0142em LangChain4j, Quarkus skupi\u0142 si\u0119 w rozszerzeniu na integracji LLM-\u00f3w z aplikacjami napisanymi w tym w\u0142a\u015bnie framework\u00f3w.<\/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\">JVector<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">JVector<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Bazy Wektorowe odgrywaj\u0105 istotn\u0105 rol\u0119 w nowoczesnych aplikacjach AI, u\u0142atwiaj\u0105c rozbudow\u0119 bazy wiedzy modeli i dostarczanie precyzyjnych odpowiedzi, minimalizuj\u0105c ryzyko b\u0142\u0119d\u00f3w czy \u201ehalucynacji\u201d AI. JVector, napisany w czystej Javie, to embeddowalny silnik wyszukiwania wektorowego, kt\u00f3ry nap\u0119dza DataStax Astra i integruje si\u0119 z Apache Cassandra. Oferuje on znacz\u0105ce ulepszenia w stosunku do wyszukiwania wektorowego w Apache Lucene, u\u017cywaj\u0105c zaawansowanego algorytmu DiskANN, kt\u00f3ry jest ponad 10 razy szybszy ni\u017c Lucene dla du\u017cych zbior\u00f3w danych. Jest przeznaczony do prostej integracji, zachowuj\u0105c wysok\u0105 wydajno\u015b\u0107, korzystaj\u0105c przy tym z Vector API i instrukcji SIMD z projektu Panama.<\/p>\n","innerContent":["\n<p>Bazy Wektorowe odgrywaj\u0105 istotn\u0105 rol\u0119 w nowoczesnych aplikacjach AI, u\u0142atwiaj\u0105c rozbudow\u0119 bazy wiedzy modeli i dostarczanie precyzyjnych odpowiedzi, minimalizuj\u0105c ryzyko b\u0142\u0119d\u00f3w czy \u201ehalucynacji\u201d AI. JVector, napisany w czystej Javie, to embeddowalny silnik wyszukiwania wektorowego, kt\u00f3ry nap\u0119dza DataStax Astra i integruje si\u0119 z Apache Cassandra. Oferuje on znacz\u0105ce ulepszenia w stosunku do wyszukiwania wektorowego w Apache Lucene, u\u017cywaj\u0105c zaawansowanego algorytmu DiskANN, kt\u00f3ry jest ponad 10 razy szybszy ni\u017c Lucene dla du\u017cych zbior\u00f3w danych. Jest przeznaczony do prostej integracji, zachowuj\u0105c wysok\u0105 wydajno\u015b\u0107, korzystaj\u0105c przy tym z Vector API i instrukcji SIMD z projektu Panama.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/pulumi-infrastructure-as-a-code-in\">Pulumi: Infrastructure-as-a-Code in Java, Kotlin and Scala - JVM Weekly vol. 58<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/pulumi-infrastructure-as-a-code-in\">Pulumi: Infrastructure-as-a-Code in Java, Kotlin and Scala - JVM Weekly vol. 58<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Jlama<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Jlama<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jlama to silnik przetwarzania dla LLM, kompatybilny z modelami takimi jak Llama, Llama2 czy GPT-2 (kt\u00f3ry tak\u017ce zosta\u0142 udost\u0119pniony), a tak\u017ce z formatem modelu Huggingface SafeTensors. Aby dzia\u0142a\u0107, wymaga on Javy 20, gdy\u017c korzysta ze wspomnianego ju\u017c Vector API, dzi\u0119ki czemu umo\u017cliwia szybkie obliczenia wektorowe niezb\u0119dne podczas wnioskowania z modeli.<\/p>\n","innerContent":["\n<p>Jlama to silnik przetwarzania dla LLM, kompatybilny z modelami takimi jak Llama, Llama2 czy GPT-2 (kt\u00f3ry tak\u017ce zosta\u0142 udost\u0119pniony), a tak\u017ce z formatem modelu Huggingface SafeTensors. Aby dzia\u0142a\u0107, wymaga on Javy 20, gdy\u017c korzysta ze wspomnianego ju\u017c Vector API, dzi\u0119ki czemu umo\u017cliwia szybkie obliczenia wektorowe niezb\u0119dne podczas wnioskowania z modeli.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/fury-compromise-between-speed-and\">Fury: Compromise between speed and flexibility in the serialization process - JVM Weekly vol. 53<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/fury-compromise-between-speed-and\">Fury: Compromise between speed and flexibility in the serialization process - JVM Weekly vol. 53<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a class=\"autolink\" href=\"https:\/\/llama2.java\">llama2.java<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a class=\"autolink\" href=\"https:\/\/llama2.java\">llama2.java<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a class=\"autolink\" href=\"https:\/\/llama2.java\">llama2.java<\/a> jest bezpo\u015brednim portem llama2.scala, kt\u00f3ry z kolei bazuje na llama2.c stworzonym przez Andreja Karpathy\u2019ego. Projekt ma na celu s\u0142u\u017cy\u0107 jako pole do testowania nowych funkcji j\u0119zykowych, ale tak\u017ce por\u00f3wnywa\u0107 wydajno\u015b\u0107 GraalVM w stosunku do wersji w C. W repozytorium znajduj\u0105 si\u0119 odpowiednie testy wydajno\u015bciowe. Aby skorzysta\u0107 z tej biblioteki, potrzebujesz Javy w wersji 20+, wraz ze wsparciem dla MemorySegment i Vector API.<\/p>\n","innerContent":["\n<p><a class=\"autolink\" href=\"https:\/\/llama2.java\">llama2.java<\/a> jest bezpo\u015brednim portem llama2.scala, kt\u00f3ry z kolei bazuje na llama2.c stworzonym przez Andreja Karpathy\u2019ego. Projekt ma na celu s\u0142u\u017cy\u0107 jako pole do testowania nowych funkcji j\u0119zykowych, ale tak\u017ce por\u00f3wnywa\u0107 wydajno\u015b\u0107 GraalVM w stosunku do wersji w C. W repozytorium znajduj\u0105 si\u0119 odpowiednie testy wydajno\u015bciowe. Aby skorzysta\u0107 z tej biblioteki, potrzebujesz Javy w wersji 20+, wraz ze wsparciem dla MemorySegment i Vector API.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/fury-compromise-between-speed-and\">Fury: Compromise between speed and flexibility in the serialization process - JVM Weekly vol. 53<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/fury-compromise-between-speed-and\">Fury: Compromise between speed and flexibility in the serialization process - JVM Weekly vol. 53<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">Amazon Q Code Transformation<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">Amazon Q Code Transformation<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Amazon Q, asystent AI dost\u0119pny dla Visual Studio Code oraz IntelliJ dla u\u017cytkownik\u00f3w z licencj\u0105 CodeWhisperer Professional, wprowadza now\u0105 funkcj\u0119 zwan\u0105 Code Transformation. Ta funkcja pozwala na inteligentny, masowy refaktoring, automatyzuj\u0105c powtarzalne zadania programistyczne. Obecnie Amazon Q koncentruje si\u0119 na modernizacji aplikacji Java, umo\u017cliwiaj\u0105c przekszta\u0142cenie kodu z Java 8 lub Java 11 na najnowszy LTS, czyli Java 17. Amazon Q jest obecnie w wersji Preview, co oznacza pewne ograniczenia \u2013 na przyk\u0142ad wspiera tylko projekty oparte na Mavenie.<\/p>\n","innerContent":["\n<p>Amazon Q, asystent AI dost\u0119pny dla Visual Studio Code oraz IntelliJ dla u\u017cytkownik\u00f3w z licencj\u0105 CodeWhisperer Professional, wprowadza now\u0105 funkcj\u0119 zwan\u0105 Code Transformation. Ta funkcja pozwala na inteligentny, masowy refaktoring, automatyzuj\u0105c powtarzalne zadania programistyczne. Obecnie Amazon Q koncentruje si\u0119 na modernizacji aplikacji Java, umo\u017cliwiaj\u0105c przekszta\u0142cenie kodu z Java 8 lub Java 11 na najnowszy LTS, czyli Java 17. Amazon Q jest obecnie w wersji Preview, co oznacza pewne ograniczenia \u2013 na przyk\u0142ad wspiera tylko projekty oparte na Mavenie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/vived.substack.com\/p\/amazon-q-code-transform-automatic\">Amazon Q Code Transform: Automatic migration from JDK 1.8 to JDK 17 - JVM Weekly vol. 65<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/vived.substack.com\/p\/amazon-q-code-transform-automatic\">Amazon Q Code Transform: Automatic migration from JDK 1.8 to JDK 17 - JVM Weekly vol. 65<\/a><\/li>\n"]}],"innerHTML":"\n<ul><\/ul>\n","innerContent":["\n<ul>",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\">SD4J (Stable Diffusion in Java)<\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\">SD4J (Stable Diffusion in Java)<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Oracle Open Source wypu\u015bci\u0142o projekt <a href=\"https:\/\/github.com\/oracle-samples\/sd4j\">SD4J<\/a>, b\u0119d\u0105cy implementacj\u0105 inferencji Stable Diffusion dzia\u0142aj\u0105ca na bazie ONNX Runtime, napisana w j\u0119zyku Java. Jest to zmodyfikowana wersja implementacji w C#, wyposa\u017cona w GUI dla powtarzalnej generacji obraz\u00f3w oraz wsparcie dla negatywnych wej\u015b\u0107 tekstowych. Celem projektu jest demonstracja wykorzystania ONNX Runtime w Javie oraz najlepszych praktyk zwi\u0105zanych z wydajno\u015bci\u0105 w ONNX Runtime.<\/p>\n","innerContent":["\n<p>Oracle Open Source wypu\u015bci\u0142o projekt <a href=\"https:\/\/github.com\/oracle-samples\/sd4j\">SD4J<\/a>, b\u0119d\u0105cy implementacj\u0105 inferencji Stable Diffusion dzia\u0142aj\u0105ca na bazie ONNX Runtime, napisana w j\u0119zyku Java. Jest to zmodyfikowana wersja implementacji w C#, wyposa\u017cona w GUI dla powtarzalnej generacji obraz\u00f3w oraz wsparcie dla negatywnych wej\u015b\u0107 tekstowych. Celem projektu jest demonstracja wykorzystania ONNX Runtime w Javie oraz najlepszych praktyk zwi\u0105zanych z wydajno\u015bci\u0105 w ONNX Runtime.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/E2QuvIz.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/01\/E2QuvIz.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Mam nadzieje, \u017ce pod k\u0105tem ekosystemu JVM 2024 b\u0119dzie przynajmniej tak ciekawy jak 2023.<\/p>\n","innerContent":["\n<p>Mam nadzieje, \u017ce pod k\u0105tem ekosystemu JVM 2024 b\u0119dzie przynajmniej tak ciekawy jak 2023.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>PS: Je\u015bli dotarli\u015bcie a\u017c tutaj, to znaczy \u017ce si\u0119 chyba podoba\u0142o \ud83e\udd42 Dlatego je\u015bli znacie kogo\u015b, komu JVM Weekly mog\u0142oby si\u0119 przyda\u0107 - podrzu\u0107cie mu ten newsletter na pocz\u0105tku 2024!<\/p>\n","innerContent":["\n<p>PS: Je\u015bli dotarli\u015bcie a\u017c tutaj, to znaczy \u017ce si\u0119 chyba podoba\u0142o \ud83e\udd42 Dlatego je\u015bli znacie kogo\u015b, komu JVM Weekly mog\u0142oby si\u0119 przyda\u0107 - podrzu\u0107cie mu ten newsletter na pocz\u0105tku 2024!<\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/17468","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=17468"}],"version-history":[{"count":4,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/17468\/revisions"}],"predecessor-version":[{"id":17474,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/17468\/revisions\/17474"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/17470"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=17468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=17468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=17468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}