{"id":17620,"date":"2024-02-08T00:14:52","date_gmt":"2024-02-07T23:14:52","guid":{"rendered":"https:\/\/vived.io\/?p=17620"},"modified":"2024-02-08T09:41:17","modified_gmt":"2024-02-08T08:41:17","slug":"1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/","title":{"rendered":"1BRC, czyli po co nam Moonshoty? &#8211; JVM Weekly vol. 162"},"content":{"rendered":"\n<h2 id=\"1-1brc-czyli-po-co-nam-moonshoty\" data-num=1>1. 1BRC, czyli po co nam Moonshoty?<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1792\" height=\"1024\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-1.jpeg\" alt=\"\" class=\"wp-image-17630\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-1.jpeg 1792w, https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-1-300x171.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-1-1024x585.jpeg 1024w, https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-1-768x439.jpeg 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-1-1536x878.jpeg 1536w\" sizes=\"auto, (max-width: 1792px) 100vw, 1792px\" \/><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Ground Control to Major\u00a0Tom<br>Ground Control to Major\u00a0Tom<br>Take your protein pills. And put your helmet on&#8230;<\/p>\n<\/blockquote>\n\n\n\n<p>Zaczniemy sobie dzisiaj od ksi\u0105\u017cki &#8211; ot\u00f3\u017c aktualnie na moim czytniku go\u015bci wspania\u0142e &#8222;Chip Wars&#8221;, czyli ksi\u0105\u017cka przedstawiaj\u0105ca kulisy powstania bran\u017cy mikroprocesor\u00f3w. To co jest w niej fascynuj\u0105ce to fakt, \u017ce autorzy skupiaj\u0105 si\u0119 w niej nie na aspekcie technologicznym (przez ten w zasadzie si\u0119 prze\u015blizguj\u0105), ale przedstawiaj\u0105 realia ekonomiczno-spo\u0142eczne, kt\u00f3re potrafi\u0105 zmieni\u0107 nowink\u0119 techniczn\u0105 w realn\u0105 rewolucje. Czasem potrzeba po prostu troch\u0119 sprzyjaj\u0105cych okoliczno\u015bci, a zw\u0142aszcza realnych wyzwa\u0144, kt\u00f3re zmusz\u0105 inteligentnych in\u017cynier\u00f3w do przesuwania istniej\u0105cych granic tego, na co technologia pozwala. Mamy na to nawet w bran\u017cy termin &#8211; tak zwane &#8222;moonshot\u00f3w&#8221;.<\/p>\n\n\n\n<p class=\"has-text-align-center has-small-font-size\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/K3gIAMJ.jpg\" alt=\"\"><br>Og\u00f3lnie ksi\u0105\u017ck\u0119 bardzo polecam, kapitalnie si\u0119 j\u0105 czyta.<\/p>\n\n\n\n<p>Termin &#8222;moonshot&#8221; w kontek\u015bcie technologii i innowacji wywodzi si\u0119 z monumentalnego osi\u0105gni\u0119cia misji Apollo 11, kt\u00f3ra zako\u0144czy\u0142a si\u0119 pierwszym l\u0105dowaniem cz\u0142owieka na Ksi\u0119\u017cycu w 1969 roku. To historyczne wydarzenie sta\u0142o si\u0119 symbolem ambitnych, eksploracyjnych i prze\u0142omowych projekt\u00f3w, maj\u0105cych na celu osi\u0105gni\u0119cie tego, co wcze\u015bniej uwa\u017cano za niemo\u017cliwe. Istota moonshot polega na skupieniu si\u0119 na wielkich, \u015bmia\u0142ych celach; chodzi o podejmowanie ogromnych wyzwa\u0144 bez gwarantowanego wyniku, wykorzystuj\u0105c prze\u0142omowe technologie i innowacyjne my\u015blenie, aby przesuwa\u0107 granice tego, co jest osi\u0105galne.<\/p>\n\n\n\n<p>Dziedzictwo l\u0105dowania na Ksi\u0119\u017cycu wykracza daleko poza samo historyczne wydarzenie, wp\u0142ywaj\u0105c na liczne aspekty naszego codziennego \u017cycia. Technologie opracowane dla potrzeb eksploracji kosmosu doprowadzi\u0142y do powstania wielu pochodnych korzy\u015bci dla spo\u0142ecze\u0144stwa, od post\u0119p\u00f3w w telekomunikacji i informatyce, po nauki o materia\u0142ach i technologi\u0119 medyczn\u0105. Na przyk\u0142ad zminiaturyzowana elektronika (st\u0105d pocz\u0105tkowe nawi\u0105zanie do &#8222;Chip Wars&#8221;), pocz\u0105tkowo rozwijana dla misji kosmicznych, utorowa\u0142a drog\u0119 dla malutkich, mocarnych urz\u0105dze\u0144 komputerowych, kt\u00f3rych u\u017cywamy ka\u017cdego dnia. D\u0105\u017c\u0105c do pozornie nieosi\u0105galnych cel\u00f3w, projekty moonshot nie tylko rozszerzaj\u0105 nasze mo\u017cliwo\u015bci technologiczne, ale tak\u017ce inspiruj\u0105 przysz\u0142e pokolenia do kontynuowania eksploracji i przesuwania granic tego, co jest mo\u017cliwe.<\/p>\n\n\n\n<p>Dlatego te\u017c pozostaje chyba ostatnim cz\u0142owiekiem, kt\u00f3ry kibicuje Mecie w ich pracach nad Metaversum. Metaverse (jak bardzo szalone si\u0119 wydaje) ma potencja\u0142 do zrewolucjonizowania sposobu, w jaki \u017cyjemy i pracujemy. Wyobra\u017amy sobie wirtualne spotkania z klientami, bez wzgl\u0119du na ich lokalizacj\u0119 (bez ca\u0142ego zm\u0119czenia zwi\u0105zanego z pozostawaniem w jednym pokoju ca\u0142y dzie\u0144 i przeskakiwania z pokoju do pokoju), czy zwiedzanie muze\u00f3w i galerii sztuki bez wychodzenia z domu. To s\u0105 fajne koncepty, je\u015bli nie skupimy si\u0119 tylko i wy\u0142\u0105cznie na ryzykach (cho\u0107 o nich te\u017c nie mo\u017cna zapomina\u0107). A ilo\u015b\u0107 technologii, kt\u00f3re b\u0119d\u0105 musia\u0142y powsta\u0107, \u017ceby to rzeczywi\u015bcie zadzia\u0142a\u0142o jest wr\u0119cz niesamowita &#8211; i te ma\u0142e rewolucje ju\u017c si\u0119 dziej\u0105. Wystarczy spojrze\u0107, jak przyst\u0119pnie wycenione w stosunku do mo\u017cliwo\u015bci s\u0105 ichniejsze google Meta Quest 3. Lekcj\u0105, kt\u00f3r\u0105 wyci\u0105gn\u0105\u0107 mo\u017cna ze wspomnianego Chip Wars jest to, \u017ce to w\u0142a\u015bnie masowo\u015b\u0107 jest tym co sprawia, \u017ce rozw\u00f3j technologii idzie do przodu. I dalej wierze w VR, mimo \u017ce ca\u0142y \u015bwiat obecnie robi sobie jaja z Apple Vision Pro.<\/p>\n\n\n\n<p class=\"has-text-align-center has-small-font-size\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/5HfXqtF.jpg\" alt=\"\"><br>Powy\u017cszy obrazek ukradzione od Kena Kousena i jego newslettera <a href=\"https:\/\/kenkousen.substack.com\/p\/tales-from-the-jar-side-uncensored\">Tales of the Jar Side<\/a> \ud83d\ude03<\/p>\n\n\n\n<p>No dobra, ale do brzegu, bo to JVM Weekly, a ja tutaj histori\u0119 \u017cycia opowiadam. A wszystko zmierza ku temu, \u017ce w zesz\u0142y czwartek dosz\u0142o do og\u0142oszenia wynik\u00f3w One Billion Row Challenge, kt\u00f3re dla mnie spe\u0142nia mas\u0119 kryteri\u00f3w opisywanych powy\u017cej moonshot\u00f3w. Mamy ambitny cel, \u015bwietne przyw\u00f3dztwo projektu ze strony Gunnara Morlinga oraz setki najlepszych programist\u00f3w Javy pr\u00f3buj\u0105cych przesuwa\u0107 kolejne granice tego, co uwa\u017cali\u015bmy za mo\u017cliwe je\u015bli chodzi o wydajno\u015b\u0107 aplikacji napisanych w Javie. Ostatecznie uda\u0142o si\u0119 zej\u015b\u0107 grubo poni\u017cej dw\u00f3ch sekund, a to ju\u017c s\u0105 warto\u015bci wr\u0119cz kosmiczne. Jestem pewien, \u017ce wyniki rywalizacji b\u0119d\u0105 wykorzystane podczas planowania dalszego rozwoju JDK.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"680\" height=\"429\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image.png\" alt=\"\" class=\"wp-image-17626\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image.png 680w, https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-300x189.png 300w\" sizes=\"auto, (max-width: 680px) 100vw, 680px\" \/><\/figure><\/div>\n\n\n<p>Bardzo ciekawym jest to, \u017ce wi\u0119kszo\u015b\u0107 najlepszych rozwi\u0105za\u0144 wykorzystuje GraalVM Native Images oraz <code>sun.misc.Unsafe<\/code>. To pierwsze jest \u015bwietnym case study dla tych, kt\u00f3rzy szukali dowod\u00f3w na wydajno\u015b\u0107 GraalVM &#8211; mnie osobi\u015bcie ju\u017c zacz\u0119\u0142o si\u0119 to przydawa\u0107 przy rozmowach z klientami. Je\u015bli za\u015b chodzi o <code>sun.misc.Unsafe<\/code>, to po tym jak udowodni\u0142o ono swoj\u0105 przydatno\u015b\u0107 w naszym ma\u0142ym &#8222;moonshotcie&#8221;, pi\u0142eczka stoi po stronie tw\u00f3rc\u00f3w OpenJDK. Autorzy <a href=\"https:\/\/openjdk.org\/jeps\/8323072\">JEP draft: Deprecate Memory-Access Methods in sun.misc.Unsafe for Removal<\/a> maj\u0105 pewnie teraz ci\u0119\u017cki orzech do zgryzienia.<\/p>\n\n\n\n<p>Je\u017celi jeste\u015bcie ciekawi, jaka czarna magia zosta\u0142a wykorzystana, to Nicolai Parlog nagra\u0142 webinar z tw\u00f3rcami najwydajniejszych rozwi\u0105za\u0144. Prawdziwa pigu\u0142a wiedzy dla ka\u017cdego, kto chcia\u0142by pozna\u0107 najbardziej obskurne detale wydajno\u015bci JVM.<\/p>\n\n\n\n<!-- Add a placeholder for the Twitch embed -->\n<div id=\"twitch-embed\"><\/div>\n\n<!-- Load the Twitch embed script -->\n<script src=\"https:\/\/player.twitch.tv\/js\/embed\/v1.js\"><\/script>\n\n<!-- Create a Twitch.Player object. This will render within the placeholder div -->\n<script type=\"text\/javascript\">\n  new Twitch.Player(\"twitch-embed\", {\n    video: \"2050175537\"\n  });\n<\/script>\n\n\n\n<p>Osobi\u015bcie najbardziej lubi\u0119 fragment, w kt\u00f3rym Thomas t\u0142umaczy, dlaczego kompilator AoT Graala \/ JIT + FMM nie s\u0105 w stanie automatycznie osi\u0105gn\u0105\u0107 wydajno\u015bci r\u0119cznego u\u017cycia <code>sun.misc.Unsafe<\/code>. Ale ca\u0142o\u015b\u0107 jest totalnie warta obejrzenia &#8211; a\u017c przyjemnie si\u0119 patrzy jak wszyscy si\u0119 dobrze bawi\u0105 na tym streamie.<\/p>\n\n\n\n<h2 id=\"2-praktycznie-o-project-babylon-automatyczna-rozniczkowanie-za-pomoca-refleksji-kodu\" data-num=2>2. Praktycznie o Project Babylon: Automatyczna r\u00f3\u017cniczkowanie za pomoc\u0105 refleksji kodu<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1792\" height=\"1024\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-2.jpeg\" alt=\"\" class=\"wp-image-17632\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-2.jpeg 1792w, https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-2-300x171.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-2-1024x585.jpeg 1024w, https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-2-768x439.jpeg 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-2-1536x878.jpeg 1536w\" sizes=\"auto, (max-width: 1792px) 100vw, 1792px\" \/><\/figure>\n\n\n\n<p>Wida\u0107, \u017ce 2024 ruszy\u0142 z kopyta. Dwa tygodnie temu pisa\u0142em o nowych Design Docach od Briana Goetza dotycz\u0105cych konceptu Deconstructors, teraz przyszed\u0142 czas na pierwszy oficjalny tekst opisuj\u0105cy mo\u017cliwo\u015bci u\u017cycia Project Babylon.<\/p>\n\n\n\n<p>Artyku\u0142 <a href=\"https:\/\/openjdk.org\/projects\/babylon\/articles\/auto-diff\">Automatic differentiation of Java code using Code Reflection<\/a> autorstwa Paula Sandoza omawia koncepcj\u0119 i implementacj\u0119 automatycznego r\u00f3\u017cniczkowania metod Java reprezentuj\u0105cych funkcje matematyczne za pomoc\u0105 Code Reflection. Poprzez uzyskanie symbolicznej reprezentacji metody program mo\u017ce zastosowa\u0107 regu\u0142y r\u00f3\u017cniczkowania do wygenerowania metody r\u00f3\u017cniczkowej. W bardzo uproszczony spos\u00f3b ca\u0142o\u015b\u0107 mo\u017cna sprowadzi\u0107 do nast\u0119puj\u0105cych punkt\u00f3w (kilka krok\u00f3w z artyku\u0142u pomin\u0105\u0142em dla klarowno\u015bci):<\/p>\n\n\n\n<p>Metoda Java, kt\u00f3r\u0105 chcemy zr\u00f3\u017cniczkowa\u0107, jest oznaczana za pomoc\u0105 adnotacji <code>@CodeReflection<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@CodeReflection\nstatic double f(double x, double y) {\n    return x * (-Math.sin(x * y) + y) * 4.0d;\n}\n<\/code><\/pre>\n\n\n\n<p>W czasie kompilacji dla oznaczonej metody tworzony jest Code Model, kt\u00f3ry jest symboliczn\u0105 reprezentacj\u0105 tej metody, a nast\u0119pnie u\u017cywaj\u0105c refleksji Java, uzyskujemy dost\u0119p do modelu kodu oznaczonej metody, kt\u00f3ry przyjmuje form\u0119 drzewa.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Method fm = T.class.getDeclaredMethod(&quot;f&quot;, double.class, double.class);\nOptional&lt;CoreOps.FuncOp&gt; o = fm.getCodeModel();\nCoreOps.FuncOp fcm = o.orElseThrow();\n<\/code><\/pre>\n\n\n\n<p>Potem nast\u0119puje sam proces r\u00f3\u017cniczkowania (nie b\u0119d\u0119 tego przykleja\u0142, ci\u0119\u017cka matma &#8211; zagl\u0105dnijcie do <a href=\"https:\/\/openjdk.org\/projects\/babylon\/articles\/auto-diff\">oryginalnego artyku\u0142u<\/a>, a na jego podstawie zr\u00f3\u017cniczkowanych operacji tworzony jest nowy model kodu, kt\u00f3ry reprezentuje pochodn\u0105 metody. Zr\u00f3\u017cniczkowany model kodu jest kompilowany do bajtkodu Java, a skompilowany bajtkod mo\u017ce by\u0107 wykonywany, aby obliczy\u0107 warto\u015bci pochodnych.<\/p>\n\n\n\n<p>Efektem jest binarny ekwiwalent poni\u017cszych funkcji:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>static double df_dx(double x, double y) {\n    return (-Math.sin(x * y) + y - x * Math.cos(x * y) * y) * 4.0d;\n}\n\nstatic double df_dy(double x, double y) {\n    return x * (1 - Math.cos(x * y) * x) * 4.0d;\n}\n<\/code><\/pre>\n\n\n\n<p>Mamy do czynienia z relatywnie prostym do zrozumienia, ale nie tak bardzo oderwanym od rzeczywisto\u015bci przyk\u0142adem. Artyku\u0142 podkre\u015bla znaczenie automatycznego r\u00f3\u017cniczkowania w uczeniu maszynowym, gdzie modele matematyczne s\u0105 trenowane przez tak zwane &#8222;algorytmy gradientu prostego&#8221; wymagaj\u0105ce obliczania gradient\u00f3w. Proces r\u0119cznego r\u00f3\u017cniczkowania jest podatny na b\u0142\u0119dy i \u017cmudny, szczeg\u00f3lnie dla skomplikowanych funkcji, co czyni automatyczne r\u00f3\u017cniczkowanie cennym narz\u0119dziem dla programist\u00f3w i pokazem tego, jakie nowe mo\u017cliwo\u015bci ju\u017c nied\u0142ugo dostaniemy jako programi\u015bci. Jak pisa\u0142em w ostatniej edycji, Project Babylon szybko wskoczy\u0142 do mojej topki najciekawszych projekt\u00f3w dziej\u0105cych si\u0119 w ramach JDK i obiecuje, \u017ce b\u0119d\u0119 \u015bledzi\u0142 wszystkich nowych og\u0142osze\u0144 z nim zwi\u0105zanych.<\/p>\n\n\n\n<h2 id=\"3-release-radar\" data-num=3>3. Release Radar<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1792\" height=\"1024\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image.jpeg\" alt=\"\" class=\"wp-image-17627\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image.jpeg 1792w, https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-300x171.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-1024x585.jpeg 1024w, https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-768x439.jpeg 768w, https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-1536x878.jpeg 1536w\" sizes=\"auto, (max-width: 1792px) 100vw, 1792px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/pkl-lang.org\/blog\/introducing-pkl.html\">Pkl<\/a><\/h3>\n\n\n\n<p>A dzisiejszy Release Radar zaczynamy od nietypowego &#8211; nowego j\u0119zyka programowania(!) do konfiguracji (!!) od Apple (!!!). Nietypowo jak na JVM Weekly, prawda? Ale nie martwcie si\u0119, zaraz wszystko si\u0119 wyja\u015bni.<\/p>\n\n\n\n<p>Pkl (Pickle) to j\u0119zyk programowania zaprojektowany specjalnie do tworzenia konfiguracji, adresuj\u0105c ograniczenia statycznych j\u0119zyk\u00f3w konfiguracyjnych takich jak JSON czy YAML kt\u00f3re cz\u0119sto nie radz\u0105 sobie z z\u0142o\u017cono\u015bci\u0105 i ekspresyjno\u015bci\u0105. Pkl bierze za cel po\u0142\u0105czy\u0107 w sobie prostot\u0119 i deklaratywno\u015b\u0107 format\u00f3w statycznych z elastyczno\u015bci\u0105 j\u0119zyk\u00f3w programowania og\u00f3lnego przeznaczenia. To pozwala Pkl oferowa\u0107 klasy, funkcje, warunki i p\u0119tle, umo\u017cliwiaj\u0105c tworzenie bardziej zaawansowanych i reu\u017cywalnych skrypt\u00f3w konfiguracyjnych.<\/p>\n\n\n\n<p>Poni\u017cej przyk\u0142ad umo\u017cliwiaj\u0105cy stworzenie 4 instancji bazy danych<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>module Application\n\nclass Database {\n  username: String\n  password: String\n  port: UInt16\n}\n\nhidden db: Application.Database = new {\n  username = &quot;admin&quot;\n  password = read(&quot;env:DATABASE_PASSWORD&quot;)\n}\n\nsidecars {\n  for (offset in List(0, 1, 2)) {\n    (db) {\n      port = 6000 + offset\n    }\n  }\n}\n<\/code><\/pre>\n\n\n\n<p>Co wygeneruje nam poni\u017cszego JSON-a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  &quot;sidecars&quot;: &#091;\n    {\n      &quot;username&quot;: &quot;admin&quot;,\n      &quot;password&quot;: &quot;hunter2&quot;,\n      &quot;port&quot;: 6000,\n    },\n    {\n      &quot;username&quot;: &quot;admin&quot;,\n      &quot;password&quot;: &quot;hunter2&quot;,\n      &quot;port&quot;: 6001,\n    },\n    {\n      &quot;username&quot;: &quot;admin&quot;,\n      &quot;password&quot;: &quot;hunter2&quot;,\n      &quot;port&quot;: 6002,\n    }\n  ]\n}\n<\/code><\/pre>\n\n\n\n<p>Co wi\u0119cej, Pkl jest zaprojektowany, by by\u0107 skalowalnym, bezpiecznym i przyjemnym w pisaniu, poprzez posiadanie wbudowanych mechanizm\u00f3w walidacji.<\/p>\n\n\n\n<p class=\"has-text-align-center has-small-font-size\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/MCTXW12.png\" alt=\"\"><br>Czyli pozostaje kolejnym narz\u0119dziem, kt\u00f3rego istnienie pozwala nam jeszcze bardziej nienawidzi\u0107 YAML-a.<\/p>\n\n\n\n<p>No dobra, ale wr\u00f3\u0107my do oryginalnie postawionego pytania &#8211; sk\u0105d pojawienie si\u0119 narz\u0119dzia w dzisiejszym przegl\u0105dzie? Wynika to z technologii, kt\u00f3ra zosta\u0142a u\u017cyta do tworzenia CLI towarzysz\u0105cego j\u0119zykowi. O ile coraz cz\u0119\u015bciej do podobnych zastosowa\u0144 u\u017cywa si\u0119 dzisiaj Rusta, to w tym przypadku ca\u0142o\u015b\u0107 zosta\u0142a napisana w Javie, i dystrybuowana jest jako binarny natywny obraz GraalVM. Nie jest to cz\u0119sto spotykany format, a Pkl pokazuje, \u017ce technologia posiada zastosowanie nie tylko na serwerze, ale i w aplikacjach CLI.<\/p>\n\n\n\n<p class=\"has-text-align-center has-small-font-size\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/rtf2wBq.jpg\" alt=\"\"><br>Mo\u017ce jednak 2024 to nie b\u0119dzie rok Rusta?<\/p>\n\n\n\n<h2 id=\"cheerpj-3-0\" data-num=4><a href=\"https:\/\/labs.leaningtech.com\/blog\/cheerpj-3.0\">CheerpJ 3.0<\/a><\/h2>\n\n\n\n<p>CheerpJ to implementacja JVM oparta o WebAssembly, kt\u00f3ra umo\u017cliwia uruchamianie aplikacji Java bezpo\u015brednio w przegl\u0105darce, bez potrzeby instalowania wtyczek czy samej Javy. Dzi\u0119ki wsparciu pe\u0142nego zbioru funkcjonalno\u015bci OpenJDK, pozwala na odtworzenie du\u017cych, niezmodyfikowanych aplikacji i bibliotek Javowych w wi\u0119kszo\u015bci nowoczesnych przegl\u0105darek. CheerpJ obs\u0142uguje te\u017c stare aplety Java i aplikacje Java Web Start, o czym ostatnio mia\u0142em okazje pisa\u0107 <a href=\"https:\/\/vived.substack.com\/p\/amazon-q-code-transform-automatic\">przy okazji wskrzeszenia starej przegl\u0105darkowe gry Dragon Court<\/a>.<\/p>\n\n\n\n<p>CheerpJ 3.0, najnowsza &#8222;du\u017ca&#8221; wersja, jest napisana w zasadzie od nowa, korzystaj\u0105c z siedmioletnich do\u015bwiadcze\u0144 pracy nad innymi projektami opartymi na WebAssembly, takich jak CheerpX (odpowiednika CheerpJ dla Flasha). &#8222;Tr\u00f3jeczka&#8221; poprawia wydajno\u015b\u0107, zw\u0142aszcza czas uruchamiania, poprzez potrzeby usuni\u0119cie kompilacji Ahead-Of-Time przy pierwszym uruchomieniu. Oferuje WebAssembly JVM i kompilator JIT dla bajtkodu Java, a tak\u017ce zwirtualizowan\u0105 warstw\u0119 systemow\u0105 dla system\u00f3w plik\u00f3w i sieci.<\/p>\n\n\n\n<p>CheerpJ 3.0 obs\u0142uguje na ten moment tylko Jav\u0119 8, ale w dalszej cz\u0119\u015bci roku ju\u017c jest zapowiedziane wsparcie dla Javy 11. Aby zademonstrowa\u0107 jej mo\u017cliwo\u015bci, tw\u00f3rcy u\u017cyli nic innego jak&#8230; Minecrafta, umo\u017cliwiaj\u0105c jego uruchomienie w\u0142a\u015bnie w oknie przegl\u0105darki.<\/p>\n\n\n\n<p class=\"has-text-align-center has-small-font-size\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a88789bb9bd.png\" alt=\"\"><br>To teraz czekam na osi\u0105gni\u0119cie <a href=\"https:\/\/medium.com\/graalvm\/java-on-truffle-going-fully-metacircular-215531e3f840\">Metacircularity<\/a> poprzez napisanie JVM w Minecrafcie. <a href=\"https:\/\/www.electronicdesign.com\/technologies\/embedded\/video\/21212550\/electronic-design-chungus-2-a-very-powerful-1-hz-minecraft-cpu\">Hardware powoli si\u0119 tworzy<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/bell-sw.com\/blog\/bellsoft-releases-liberica-jdk-21-for-risc-v-with-support\/\">Liberica JDK 21 &#8211; RISC-V Edition<\/a><\/h3>\n\n\n\n<p>Liberia lubuje si\u0119 w nietypowych dystrybucjach JDK. Mieli\u015bmy ju\u017c w zesz\u0142ym roku Liberica JDK Performance Edition &#8211; wariant JDK 11 z poprawkami wydajno\u015bciowymi, a teraz przychodzi wariant JDK dzia\u0142aj\u0105cy natywnie na procesorach w architekturze RISC-V.<\/p>\n\n\n\n<p>Coraz popularniejsze, g\u0142\u00f3wnie ze wzgl\u0119du na sw\u00f3j otwarty charakter, RISC-V nie jest wbrew pozorom procesorem, a raczej modelem programowym procesora (z angielskiego ISA) opartego o filozofi\u0119 dostarczania \u015bci\u015ble wyspecjalizowanego zestawu instrukcji (reduced instruction set computer \u2013 RISC w\u0142a\u015bnie). Cytuj\u0105c Wikipedi\u0119:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>W kontra\u015bcie do wi\u0119kszo\u015bci ISA, RISC-V mo\u017ce by\u0107 swobodnie u\u017cywany w dowolnym celu, umo\u017cliwiaj\u0105c ka\u017cdemu projektowanie, produkcj\u0119 i sprzeda\u017c czip\u00f3w i oprogramowania RISC-V. Chocia\u017c nie jest pierwsz\u0105 otwart\u0105 architektur\u0105 ISA ma du\u017ce znaczenie, poniewa\u017c zosta\u0142 zaprojektowany z my\u015bl\u0105 o nowoczesnych skomputeryzowanych urz\u0105dzeniach, takich jak ogromne chmury obliczeniowe, wysokiej klasy telefony kom\u00f3rkowe i najmniejsze systemy wbudowane.<\/p>\n<\/blockquote>\n\n\n\n<p>Wsparcie dla RISC-V pojawi\u0142o si\u0119 ju\u017c przy okazji JDK 19, ale z tego co si\u0119 orientuje Liberica jest pierwszym vendorem, kt\u00f3ry zapewni\u0142 \u0142atw\u0105 do pobrania dystrybucje. Je\u015bli si\u0119 myl\u0119, poprawcie mnie prosz\u0119 w komentarzach &#8211; te\u017c ch\u0119tnie si\u0119 czego\u015b nowego dowiem \ud83d\ude42<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/quarkus.io\/blog\/quarkus-3-7-released\/\">Quarkus 3.7<\/a><\/h3>\n\n\n\n<p>Najnowszy Quarkus 3.7 nie tylko pobija wymagan\u0105 wersj\u0119 Javy do JDK 17, ale tak\u017ce rozpoczyna proces porz\u0105dkowania nazewnictwa RESTEasy Reactive. Ta wersja usprawnia te\u017c wsparcie dla Hibernate, aktualizuj\u0105c Quarkusa do najnowszych stabilnych wersji popularnego Javowevego ORM oraz wprowadzaj\u0105c endpoint do zarz\u0105dzania Hibernate Search. Pozbywa si\u0119 tak\u017ce wymogu korzystania z przestarza\u0142ej ju\u017c wersji Okhttp\/Okio, dodano te\u017c wsparcie dla adnotacji <code>@MeterTag<\/code> pozwalaj\u0105cej na dokonfigurowanie Micrometer.<\/p>\n\n\n\n<p>Quarkus 3.7 to ostatnie wydanie przed Quarkus 3.8, kt\u00f3ry b\u0119dzie wersj\u0105 LTS. To wi\u0119c te\u017c ostatnia szansa, \u017ceby spo\u0142eczno\u015b\u0107 mog\u0142a ca\u0142o\u015b\u0107 gruntownie przetestowa\u0107, do czego zach\u0119cam.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/github.com\/langchain4j\/langchain4j\/blob\/main\/README.md\">langchain4j 0.26<\/a><\/h3>\n\n\n\n<p>Najnowsze wydanie <code>langchain4j<\/code>, wersja 0.26, wprowadza szereg nowych funkcji podstawowych oraz integracji, maj\u0105cych na celu wzmocnienie mo\u017cliwo\u015bci frameworka w przetwarzaniu i analizie danych j\u0119zykowych. W\u015br\u00f3d godnych uwagi nowych funkcji podstawowych znajduje si\u0119 implementacja zaawansowanego modelu Augmented Generation (RAG) &#8211; czyli mo\u017cliwo\u015b\u0107 tworzenia nowych odpowiedzi na bazie zadanego tekstu \u017ar\u00f3d\u0142owego, czy te\u017c wsparcie dla multimodalnych danych wej\u015bciowych &#8211; czyli \u0142\u0105cz\u0105cych tekst i grafik\u0119, ju\u017c w tej chwili pozwala na to ChatGPT, aby rozwi\u0105zywa\u0107 cho\u0107by zadania z matematyki.<\/p>\n\n\n\n<p class=\"has-text-align-center has-small-font-size\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/xAlUrAA.png\" alt=\"\"><br>Chyba nigdzie GPT nie jest tak nadu\u017cywane jak w edukacji<\/p>\n\n\n\n<p>Pod wzgl\u0119dem integracji, to wydanie poszerza kompatybilno\u015b\u0107 frameworka z r\u00f3\u017cnymi dostawcami modeli, takimi jak Mistral AI, Wenxin Qianfan i Cohere Rerank, oraz tak zwanych &#8222;magazyn\u00f3w embedding\u00f3w&#8221;, takich jak Azure AI Search, Qdrant i Vearch. \u0141adowarki dokument\u00f3w obejmuj\u0105 teraz wsparcie dla Azure Blob Storage, GitHub i Tencent COS. Ponadto, w\u015br\u00f3d znacz\u0105cych aktualizacji znajduje si\u0119 wsparcie dla danych wej\u015bciowych obraz\u00f3w i skr\u00f3conych embedding\u00f3w w OpenAI, generowanie obraz\u00f3w w Vertex AI oraz wsparcie dla danych wej\u015bciowych obraz\u00f3w w Ollama i Qwen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/javalin.io\/news\/javalin-6.0.0-stable.html\">Javalin 6.0<\/a><\/h3>\n\n\n\n<p>Javalin 6 to najnowsza wersja popularnego frameworka webowego dla Javy i Kotlin, k\u0142ad\u0105cego nacisk na prostot\u0119 oraz interoperacyjno\u015b\u0107 mi\u0119dzy tymi j\u0119zykami. Jest to de facto nak\u0142adka na serwer Jetty, skupiaj\u0105ca si\u0119 przede wszystkim na warstwie webowej. Javalin wyr\u00f3\u017cnia si\u0119 swoimi ma\u0142ymi rozmiarami i \u0142atwym zrozumieniem ca\u0142o\u015bci &#8211; jego kod \u017ar\u00f3d\u0142owy to tylko oko\u0142o 8000 linii kodu Java\/Kotlin oraz dodatkowo oko\u0142o 12000 linii test\u00f3w.<\/p>\n\n\n\n<p class=\"has-text-align-center has-small-font-size\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/1IO5GwV.jpg\" alt=\"\"><br>Zawsze szanuje narz\u0119dzia, kt\u00f3rych wewn\u0119trzne dzia\u0142anie da si\u0119 zrozumie\u0107 podczas d\u0142u\u017cszego \u015bniadania.<\/p>\n\n\n\n<p>Javalin 6 wprowadza wiele nowo\u015bci, w tym kompletne przepisanie systemu plugin\u00f3w czy przemodelowanie konfiguracji Jetty&#8217;ego. Wy\u0142\u0105czono te\u017c domy\u015blne u\u017cycie Wirtualnych W\u0105tk\u00f3w, w nowej wersji niezb\u0119dne jest u\u017cycie flagi <code>config.useVirtualThreads = true<\/code> i kompatybilnej wersji JDK. Usuni\u0119to te\u017c interfejs <code>AccessManager<\/code> i zmieniono podej\u015bcie do zarz\u0105dzania uprawnieniami, co stanowi g\u0142\u00f3wn\u0105 cz\u0119\u015b\u0107 opisan\u0105 przez towarzysz\u0105cy wydaniu migration guide.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.wildfly.org\/news\/2024\/01\/25\/WildFly31-Released\/\">WildFly 31<\/a><\/h3>\n\n\n\n<p>WildFly 31 obejmuj\u0105 aktualizacj\u0119 MicroProfile do wersji 6.1, Hibernate do wersji 6.4 oraz wprowadzenie wsparcia (w wersji Preview) dla Jakarta MVC 2.1 poprzez projekt Eclipse Krazo. Ponadto, Reactive Messaging umo\u017cliwia teraz komunikacje przez AMQP. Pod mask\u0105, WildFly doczeka\u0142 si\u0119 te\u017c zmian w modularyzacji, umo\u017cliwiaj\u0105cej \u0142atwiejszy rozw\u00f3j rozszerze\u0144 oraz transparentne definiowanie stabilno\u015bci poszczeg\u00f3lnych fragment\u00f3w.<\/p>\n\n\n\n<p>Poza aktualizacjami samego serwera, WildFly og\u0142osi\u0142 r\u00f3wnie\u017c dost\u0119pno\u015b\u0107 bety WildFly Glow, zestawu narz\u0119dzi maj\u0105cych na celu uproszczenie i optymalizacj\u0119 instalacji WildFly w r\u00f3\u017cnych \u015brodowiskach, g\u0142\u00f3wnie chmurowych. WildFly Glow analizuje artefakty aplikacji, aby zarekomendowa\u0107 niezb\u0119dne pakiety funkcjonalno\u015bci i warstw Galleon (wsparcie Wildfly dla obraz\u00f3w Dockerowych), u\u0142atwiaj\u0105c sprawn\u0105 i efektywn\u0105 konfiguracj\u0119 serwera.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dzisiaj Release Radar, Code Reflection oraz podsumowanie akcji 1BRC. Plus troch\u0119 filozoforowania z mojej strony.<\/p>\n","protected":false},"author":10,"featured_media":17622,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259],"tags":[],"class_list":["post-17620","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm-pl"],"acf":{"estimated_reading_time":"13","feature_image_blog":false,"weekly_summary":false,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/Group-780-1.png","feature_image_visible":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>1BRC, czyli po co nam Moonshoty? - JVM Weekly vol. 162 - 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\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"1BRC, czyli po co nam Moonshoty? - JVM Weekly vol. 162 - Vived\" \/>\n<meta property=\"og:description\" content=\"Dzisiaj Release Radar, Code Reflection oraz podsumowanie akcji 1BRC. Plus troch\u0119 filozoforowania z mojej strony.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2024-02-07T23:14:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-02-08T08:41:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/Group-780-1024x576.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"576\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Artur Skowro\u0144ski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"1BRC, czyli po co nam Moonshoty? &#8211; JVM Weekly vol. 162\",\"datePublished\":\"2024-02-07T23:14:52+00:00\",\"dateModified\":\"2024-02-08T08:41:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/\"},\"wordCount\":2519,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/Group-780.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/\",\"url\":\"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/\",\"name\":\"1BRC, czyli po co nam Moonshoty? - JVM Weekly vol. 162 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/Group-780.png\",\"datePublished\":\"2024-02-07T23:14:52+00:00\",\"dateModified\":\"2024-02-08T08:41:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/Group-780.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/Group-780.png\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"1BRC, czyli po co nam Moonshoty? &#8211; JVM Weekly vol. 162\"}]},{\"@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":"1BRC, czyli po co nam Moonshoty? - JVM Weekly vol. 162 - 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\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/","og_locale":"pl_PL","og_type":"article","og_title":"1BRC, czyli po co nam Moonshoty? - JVM Weekly vol. 162 - Vived","og_description":"Dzisiaj Release Radar, Code Reflection oraz podsumowanie akcji 1BRC. Plus troch\u0119 filozoforowania z mojej strony.","og_url":"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/","og_site_name":"Vived","article_published_time":"2024-02-07T23:14:52+00:00","article_modified_time":"2024-02-08T08:41:17+00:00","og_image":[{"width":1024,"height":576,"url":"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/Group-780-1024x576.png","type":"image\/png"}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"1BRC, czyli po co nam Moonshoty? &#8211; JVM Weekly vol. 162","datePublished":"2024-02-07T23:14:52+00:00","dateModified":"2024-02-08T08:41:17+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/"},"wordCount":2519,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/Group-780.png","articleSection":["JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/","url":"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/","name":"1BRC, czyli po co nam Moonshoty? - JVM Weekly vol. 162 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/Group-780.png","datePublished":"2024-02-07T23:14:52+00:00","dateModified":"2024-02-08T08:41:17+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/Group-780.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/Group-780.png","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/1brc-czyli-po-co-nam-moonshoty-jvm-weekly-vol-162\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"1BRC, czyli po co nam Moonshoty? &#8211; JVM Weekly vol. 162"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3","name":"Artur Skowro\u0144ski","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","caption":"Artur Skowro\u0144ski"}}]}},"blocks_vived":[{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">1. 1BRC, czyli po co nam Moonshoty?<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">1. 1BRC, czyli po co nam Moonshoty?<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":17630},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-1.jpeg\" alt=\"\" class=\"wp-image-17630\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-1.jpeg\" alt=\"\" class=\"wp-image-17630\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/quote","attrs":[],"innerBlocks":[{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ground Control to Major\u00a0Tom<br>Ground Control to Major\u00a0Tom<br>Take your protein pills. And put your helmet on...<\/p>\n","innerContent":["\n<p>Ground Control to Major\u00a0Tom<br>Ground Control to Major\u00a0Tom<br>Take your protein pills. And put your helmet on...<\/p>\n"]}],"innerHTML":"\n<blockquote class=\"wp-block-quote\"><\/blockquote>\n","innerContent":["\n<blockquote class=\"wp-block-quote\">",null,"<\/blockquote>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zaczniemy sobie dzisiaj od ksi\u0105\u017cki - ot\u00f3\u017c aktualnie na moim czytniku go\u015bci wspania\u0142e \"Chip Wars\", czyli ksi\u0105\u017cka przedstawiaj\u0105ca kulisy powstania bran\u017cy mikroprocesor\u00f3w. To co jest w niej fascynuj\u0105ce to fakt, \u017ce autorzy skupiaj\u0105 si\u0119 w niej nie na aspekcie technologicznym (przez ten w zasadzie si\u0119 prze\u015blizguj\u0105), ale przedstawiaj\u0105 realia ekonomiczno-spo\u0142eczne, kt\u00f3re potrafi\u0105 zmieni\u0107 nowink\u0119 techniczn\u0105 w realn\u0105 rewolucje. Czasem potrzeba po prostu troch\u0119 sprzyjaj\u0105cych okoliczno\u015bci, a zw\u0142aszcza realnych wyzwa\u0144, kt\u00f3re zmusz\u0105 inteligentnych in\u017cynier\u00f3w do przesuwania istniej\u0105cych granic tego, na co technologia pozwala. Mamy na to nawet w bran\u017cy termin - tak zwane \"moonshot\u00f3w\".<\/p>\n","innerContent":["\n<p>Zaczniemy sobie dzisiaj od ksi\u0105\u017cki - ot\u00f3\u017c aktualnie na moim czytniku go\u015bci wspania\u0142e \"Chip Wars\", czyli ksi\u0105\u017cka przedstawiaj\u0105ca kulisy powstania bran\u017cy mikroprocesor\u00f3w. To co jest w niej fascynuj\u0105ce to fakt, \u017ce autorzy skupiaj\u0105 si\u0119 w niej nie na aspekcie technologicznym (przez ten w zasadzie si\u0119 prze\u015blizguj\u0105), ale przedstawiaj\u0105 realia ekonomiczno-spo\u0142eczne, kt\u00f3re potrafi\u0105 zmieni\u0107 nowink\u0119 techniczn\u0105 w realn\u0105 rewolucje. Czasem potrzeba po prostu troch\u0119 sprzyjaj\u0105cych okoliczno\u015bci, a zw\u0142aszcza realnych wyzwa\u0144, kt\u00f3re zmusz\u0105 inteligentnych in\u017cynier\u00f3w do przesuwania istniej\u0105cych granic tego, na co technologia pozwala. Mamy na to nawet w bran\u017cy termin - tak zwane \"moonshot\u00f3w\".<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":{"align":"center","fontSize":"small"},"innerBlocks":[],"innerHTML":"\n<p class=\"has-text-align-center has-small-font-size\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/K3gIAMJ.jpg\" alt=\"\"><br>Og\u00f3lnie ksi\u0105\u017ck\u0119 bardzo polecam, kapitalnie si\u0119 j\u0105 czyta.<\/p>\n","innerContent":["\n<p class=\"has-text-align-center has-small-font-size\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/K3gIAMJ.jpg\" alt=\"\"><br>Og\u00f3lnie ksi\u0105\u017ck\u0119 bardzo polecam, kapitalnie si\u0119 j\u0105 czyta.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Termin \"moonshot\" w kontek\u015bcie technologii i innowacji wywodzi si\u0119 z monumentalnego osi\u0105gni\u0119cia misji Apollo 11, kt\u00f3ra zako\u0144czy\u0142a si\u0119 pierwszym l\u0105dowaniem cz\u0142owieka na Ksi\u0119\u017cycu w 1969 roku. To historyczne wydarzenie sta\u0142o si\u0119 symbolem ambitnych, eksploracyjnych i prze\u0142omowych projekt\u00f3w, maj\u0105cych na celu osi\u0105gni\u0119cie tego, co wcze\u015bniej uwa\u017cano za niemo\u017cliwe. Istota moonshot polega na skupieniu si\u0119 na wielkich, \u015bmia\u0142ych celach; chodzi o podejmowanie ogromnych wyzwa\u0144 bez gwarantowanego wyniku, wykorzystuj\u0105c prze\u0142omowe technologie i innowacyjne my\u015blenie, aby przesuwa\u0107 granice tego, co jest osi\u0105galne.<\/p>\n","innerContent":["\n<p>Termin \"moonshot\" w kontek\u015bcie technologii i innowacji wywodzi si\u0119 z monumentalnego osi\u0105gni\u0119cia misji Apollo 11, kt\u00f3ra zako\u0144czy\u0142a si\u0119 pierwszym l\u0105dowaniem cz\u0142owieka na Ksi\u0119\u017cycu w 1969 roku. To historyczne wydarzenie sta\u0142o si\u0119 symbolem ambitnych, eksploracyjnych i prze\u0142omowych projekt\u00f3w, maj\u0105cych na celu osi\u0105gni\u0119cie tego, co wcze\u015bniej uwa\u017cano za niemo\u017cliwe. Istota moonshot polega na skupieniu si\u0119 na wielkich, \u015bmia\u0142ych celach; chodzi o podejmowanie ogromnych wyzwa\u0144 bez gwarantowanego wyniku, wykorzystuj\u0105c prze\u0142omowe technologie i innowacyjne my\u015blenie, aby przesuwa\u0107 granice tego, co jest osi\u0105galne.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dziedzictwo l\u0105dowania na Ksi\u0119\u017cycu wykracza daleko poza samo historyczne wydarzenie, wp\u0142ywaj\u0105c na liczne aspekty naszego codziennego \u017cycia. Technologie opracowane dla potrzeb eksploracji kosmosu doprowadzi\u0142y do powstania wielu pochodnych korzy\u015bci dla spo\u0142ecze\u0144stwa, od post\u0119p\u00f3w w telekomunikacji i informatyce, po nauki o materia\u0142ach i technologi\u0119 medyczn\u0105. Na przyk\u0142ad zminiaturyzowana elektronika (st\u0105d pocz\u0105tkowe nawi\u0105zanie do \"Chip Wars\"), pocz\u0105tkowo rozwijana dla misji kosmicznych, utorowa\u0142a drog\u0119 dla malutkich, mocarnych urz\u0105dze\u0144 komputerowych, kt\u00f3rych u\u017cywamy ka\u017cdego dnia. D\u0105\u017c\u0105c do pozornie nieosi\u0105galnych cel\u00f3w, projekty moonshot nie tylko rozszerzaj\u0105 nasze mo\u017cliwo\u015bci technologiczne, ale tak\u017ce inspiruj\u0105 przysz\u0142e pokolenia do kontynuowania eksploracji i przesuwania granic tego, co jest mo\u017cliwe.<\/p>\n","innerContent":["\n<p>Dziedzictwo l\u0105dowania na Ksi\u0119\u017cycu wykracza daleko poza samo historyczne wydarzenie, wp\u0142ywaj\u0105c na liczne aspekty naszego codziennego \u017cycia. Technologie opracowane dla potrzeb eksploracji kosmosu doprowadzi\u0142y do powstania wielu pochodnych korzy\u015bci dla spo\u0142ecze\u0144stwa, od post\u0119p\u00f3w w telekomunikacji i informatyce, po nauki o materia\u0142ach i technologi\u0119 medyczn\u0105. Na przyk\u0142ad zminiaturyzowana elektronika (st\u0105d pocz\u0105tkowe nawi\u0105zanie do \"Chip Wars\"), pocz\u0105tkowo rozwijana dla misji kosmicznych, utorowa\u0142a drog\u0119 dla malutkich, mocarnych urz\u0105dze\u0144 komputerowych, kt\u00f3rych u\u017cywamy ka\u017cdego dnia. D\u0105\u017c\u0105c do pozornie nieosi\u0105galnych cel\u00f3w, projekty moonshot nie tylko rozszerzaj\u0105 nasze mo\u017cliwo\u015bci technologiczne, ale tak\u017ce inspiruj\u0105 przysz\u0142e pokolenia do kontynuowania eksploracji i przesuwania granic tego, co jest mo\u017cliwe.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dlatego te\u017c pozostaje chyba ostatnim cz\u0142owiekiem, kt\u00f3ry kibicuje Mecie w ich pracach nad Metaversum. Metaverse (jak bardzo szalone si\u0119 wydaje) ma potencja\u0142 do zrewolucjonizowania sposobu, w jaki \u017cyjemy i pracujemy. Wyobra\u017amy sobie wirtualne spotkania z klientami, bez wzgl\u0119du na ich lokalizacj\u0119 (bez ca\u0142ego zm\u0119czenia zwi\u0105zanego z pozostawaniem w jednym pokoju ca\u0142y dzie\u0144 i przeskakiwania z pokoju do pokoju), czy zwiedzanie muze\u00f3w i galerii sztuki bez wychodzenia z domu. To s\u0105 fajne koncepty, je\u015bli nie skupimy si\u0119 tylko i wy\u0142\u0105cznie na ryzykach (cho\u0107 o nich te\u017c nie mo\u017cna zapomina\u0107). A ilo\u015b\u0107 technologii, kt\u00f3re b\u0119d\u0105 musia\u0142y powsta\u0107, \u017ceby to rzeczywi\u015bcie zadzia\u0142a\u0142o jest wr\u0119cz niesamowita - i te ma\u0142e rewolucje ju\u017c si\u0119 dziej\u0105. Wystarczy spojrze\u0107, jak przyst\u0119pnie wycenione w stosunku do mo\u017cliwo\u015bci s\u0105 ichniejsze google Meta Quest 3. Lekcj\u0105, kt\u00f3r\u0105 wyci\u0105gn\u0105\u0107 mo\u017cna ze wspomnianego Chip Wars jest to, \u017ce to w\u0142a\u015bnie masowo\u015b\u0107 jest tym co sprawia, \u017ce rozw\u00f3j technologii idzie do przodu. I dalej wierze w VR, mimo \u017ce ca\u0142y \u015bwiat obecnie robi sobie jaja z Apple Vision Pro.<\/p>\n","innerContent":["\n<p>Dlatego te\u017c pozostaje chyba ostatnim cz\u0142owiekiem, kt\u00f3ry kibicuje Mecie w ich pracach nad Metaversum. Metaverse (jak bardzo szalone si\u0119 wydaje) ma potencja\u0142 do zrewolucjonizowania sposobu, w jaki \u017cyjemy i pracujemy. Wyobra\u017amy sobie wirtualne spotkania z klientami, bez wzgl\u0119du na ich lokalizacj\u0119 (bez ca\u0142ego zm\u0119czenia zwi\u0105zanego z pozostawaniem w jednym pokoju ca\u0142y dzie\u0144 i przeskakiwania z pokoju do pokoju), czy zwiedzanie muze\u00f3w i galerii sztuki bez wychodzenia z domu. To s\u0105 fajne koncepty, je\u015bli nie skupimy si\u0119 tylko i wy\u0142\u0105cznie na ryzykach (cho\u0107 o nich te\u017c nie mo\u017cna zapomina\u0107). A ilo\u015b\u0107 technologii, kt\u00f3re b\u0119d\u0105 musia\u0142y powsta\u0107, \u017ceby to rzeczywi\u015bcie zadzia\u0142a\u0142o jest wr\u0119cz niesamowita - i te ma\u0142e rewolucje ju\u017c si\u0119 dziej\u0105. Wystarczy spojrze\u0107, jak przyst\u0119pnie wycenione w stosunku do mo\u017cliwo\u015bci s\u0105 ichniejsze google Meta Quest 3. Lekcj\u0105, kt\u00f3r\u0105 wyci\u0105gn\u0105\u0107 mo\u017cna ze wspomnianego Chip Wars jest to, \u017ce to w\u0142a\u015bnie masowo\u015b\u0107 jest tym co sprawia, \u017ce rozw\u00f3j technologii idzie do przodu. I dalej wierze w VR, mimo \u017ce ca\u0142y \u015bwiat obecnie robi sobie jaja z Apple Vision Pro.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":{"align":"center","fontSize":"small"},"innerBlocks":[],"innerHTML":"\n<p class=\"has-text-align-center has-small-font-size\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/5HfXqtF.jpg\" alt=\"\"><br>Powy\u017cszy obrazek ukradzione od Kena Kousena i jego newslettera <a href=\"https:\/\/kenkousen.substack.com\/p\/tales-from-the-jar-side-uncensored\">Tales of the Jar Side<\/a> \ud83d\ude03<\/p>\n","innerContent":["\n<p class=\"has-text-align-center has-small-font-size\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/5HfXqtF.jpg\" alt=\"\"><br>Powy\u017cszy obrazek ukradzione od Kena Kousena i jego newslettera <a href=\"https:\/\/kenkousen.substack.com\/p\/tales-from-the-jar-side-uncensored\">Tales of the Jar Side<\/a> \ud83d\ude03<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>No dobra, ale do brzegu, bo to JVM Weekly, a ja tutaj histori\u0119 \u017cycia opowiadam. A wszystko zmierza ku temu, \u017ce w zesz\u0142y czwartek dosz\u0142o do og\u0142oszenia wynik\u00f3w One Billion Row Challenge, kt\u00f3re dla mnie spe\u0142nia mas\u0119 kryteri\u00f3w opisywanych powy\u017cej moonshot\u00f3w. Mamy ambitny cel, \u015bwietne przyw\u00f3dztwo projektu ze strony Gunnara Morlinga oraz setki najlepszych programist\u00f3w Javy pr\u00f3buj\u0105cych przesuwa\u0107 kolejne granice tego, co uwa\u017cali\u015bmy za mo\u017cliwe je\u015bli chodzi o wydajno\u015b\u0107 aplikacji napisanych w Javie. Ostatecznie uda\u0142o si\u0119 zej\u015b\u0107 grubo poni\u017cej dw\u00f3ch sekund, a to ju\u017c s\u0105 warto\u015bci wr\u0119cz kosmiczne. Jestem pewien, \u017ce wyniki rywalizacji b\u0119d\u0105 wykorzystane podczas planowania dalszego rozwoju JDK.<\/p>\n","innerContent":["\n<p>No dobra, ale do brzegu, bo to JVM Weekly, a ja tutaj histori\u0119 \u017cycia opowiadam. A wszystko zmierza ku temu, \u017ce w zesz\u0142y czwartek dosz\u0142o do og\u0142oszenia wynik\u00f3w One Billion Row Challenge, kt\u00f3re dla mnie spe\u0142nia mas\u0119 kryteri\u00f3w opisywanych powy\u017cej moonshot\u00f3w. Mamy ambitny cel, \u015bwietne przyw\u00f3dztwo projektu ze strony Gunnara Morlinga oraz setki najlepszych programist\u00f3w Javy pr\u00f3buj\u0105cych przesuwa\u0107 kolejne granice tego, co uwa\u017cali\u015bmy za mo\u017cliwe je\u015bli chodzi o wydajno\u015b\u0107 aplikacji napisanych w Javie. Ostatecznie uda\u0142o si\u0119 zej\u015b\u0107 grubo poni\u017cej dw\u00f3ch sekund, a to ju\u017c s\u0105 warto\u015bci wr\u0119cz kosmiczne. Jestem pewien, \u017ce wyniki rywalizacji b\u0119d\u0105 wykorzystane podczas planowania dalszego rozwoju JDK.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":17626},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image.png\" alt=\"\" class=\"wp-image-17626\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image.png\" alt=\"\" class=\"wp-image-17626\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Bardzo ciekawym jest to, \u017ce wi\u0119kszo\u015b\u0107 najlepszych rozwi\u0105za\u0144 wykorzystuje GraalVM Native Images oraz <code>sun.misc.Unsafe<\/code>. To pierwsze jest \u015bwietnym case study dla tych, kt\u00f3rzy szukali dowod\u00f3w na wydajno\u015b\u0107 GraalVM - mnie osobi\u015bcie ju\u017c zacz\u0119\u0142o si\u0119 to przydawa\u0107 przy rozmowach z klientami. Je\u015bli za\u015b chodzi o <code>sun.misc.Unsafe<\/code>, to po tym jak udowodni\u0142o ono swoj\u0105 przydatno\u015b\u0107 w naszym ma\u0142ym \"moonshotcie\", pi\u0142eczka stoi po stronie tw\u00f3rc\u00f3w OpenJDK. Autorzy <a href=\"https:\/\/openjdk.org\/jeps\/8323072\">JEP draft: Deprecate Memory-Access Methods in sun.misc.Unsafe for Removal<\/a> maj\u0105 pewnie teraz ci\u0119\u017cki orzech do zgryzienia.<\/p>\n","innerContent":["\n<p>Bardzo ciekawym jest to, \u017ce wi\u0119kszo\u015b\u0107 najlepszych rozwi\u0105za\u0144 wykorzystuje GraalVM Native Images oraz <code>sun.misc.Unsafe<\/code>. To pierwsze jest \u015bwietnym case study dla tych, kt\u00f3rzy szukali dowod\u00f3w na wydajno\u015b\u0107 GraalVM - mnie osobi\u015bcie ju\u017c zacz\u0119\u0142o si\u0119 to przydawa\u0107 przy rozmowach z klientami. Je\u015bli za\u015b chodzi o <code>sun.misc.Unsafe<\/code>, to po tym jak udowodni\u0142o ono swoj\u0105 przydatno\u015b\u0107 w naszym ma\u0142ym \"moonshotcie\", pi\u0142eczka stoi po stronie tw\u00f3rc\u00f3w OpenJDK. Autorzy <a href=\"https:\/\/openjdk.org\/jeps\/8323072\">JEP draft: Deprecate Memory-Access Methods in sun.misc.Unsafe for Removal<\/a> maj\u0105 pewnie teraz ci\u0119\u017cki orzech do zgryzienia.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u017celi jeste\u015bcie ciekawi, jaka czarna magia zosta\u0142a wykorzystana, to Nicolai Parlog nagra\u0142 webinar z tw\u00f3rcami najwydajniejszych rozwi\u0105za\u0144. Prawdziwa pigu\u0142a wiedzy dla ka\u017cdego, kto chcia\u0142by pozna\u0107 najbardziej obskurne detale wydajno\u015bci JVM.<\/p>\n","innerContent":["\n<p>Je\u017celi jeste\u015bcie ciekawi, jaka czarna magia zosta\u0142a wykorzystana, to Nicolai Parlog nagra\u0142 webinar z tw\u00f3rcami najwydajniejszych rozwi\u0105za\u0144. Prawdziwa pigu\u0142a wiedzy dla ka\u017cdego, kto chcia\u0142by pozna\u0107 najbardziej obskurne detale wydajno\u015bci JVM.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/html","attrs":[],"innerBlocks":[],"innerHTML":"\n<!-- Add a placeholder for the Twitch embed -->\n<div id=\"twitch-embed\"><\/div>\n\n<!-- Load the Twitch embed script -->\n<script src=\"https:\/\/player.twitch.tv\/js\/embed\/v1.js\"><\/script>\n\n<!-- Create a Twitch.Player object. This will render within the placeholder div -->\n<script type=\"text\/javascript\">\n  new Twitch.Player(\"twitch-embed\", {\n    video: \"2050175537\"\n  });\n<\/script>\n","innerContent":["\n<!-- Add a placeholder for the Twitch embed -->\n<div id=\"twitch-embed\"><\/div>\n\n<!-- Load the Twitch embed script -->\n<script src=\"https:\/\/player.twitch.tv\/js\/embed\/v1.js\"><\/script>\n\n<!-- Create a Twitch.Player object. This will render within the placeholder div -->\n<script type=\"text\/javascript\">\n  new Twitch.Player(\"twitch-embed\", {\n    video: \"2050175537\"\n  });\n<\/script>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Osobi\u015bcie najbardziej lubi\u0119 fragment, w kt\u00f3rym Thomas t\u0142umaczy, dlaczego kompilator AoT Graala \/ JIT + FMM nie s\u0105 w stanie automatycznie osi\u0105gn\u0105\u0107 wydajno\u015bci r\u0119cznego u\u017cycia <code>sun.misc.Unsafe<\/code>. Ale ca\u0142o\u015b\u0107 jest totalnie warta obejrzenia - a\u017c przyjemnie si\u0119 patrzy jak wszyscy si\u0119 dobrze bawi\u0105 na tym streamie.<\/p>\n","innerContent":["\n<p>Osobi\u015bcie najbardziej lubi\u0119 fragment, w kt\u00f3rym Thomas t\u0142umaczy, dlaczego kompilator AoT Graala \/ JIT + FMM nie s\u0105 w stanie automatycznie osi\u0105gn\u0105\u0107 wydajno\u015bci r\u0119cznego u\u017cycia <code>sun.misc.Unsafe<\/code>. Ale ca\u0142o\u015b\u0107 jest totalnie warta obejrzenia - a\u017c przyjemnie si\u0119 patrzy jak wszyscy si\u0119 dobrze bawi\u0105 na tym streamie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">2. Praktycznie o Project Babylon: Automatyczna r\u00f3\u017cniczkowanie za pomoc\u0105 refleksji kodu<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">2. Praktycznie o Project Babylon: Automatyczna r\u00f3\u017cniczkowanie za pomoc\u0105 refleksji kodu<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":17632},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-2.jpeg\" alt=\"\" class=\"wp-image-17632\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image-2.jpeg\" alt=\"\" class=\"wp-image-17632\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wida\u0107, \u017ce 2024 ruszy\u0142 z kopyta. Dwa tygodnie temu pisa\u0142em o nowych Design Docach od Briana Goetza dotycz\u0105cych konceptu Deconstructors, teraz przyszed\u0142 czas na pierwszy oficjalny tekst opisuj\u0105cy mo\u017cliwo\u015bci u\u017cycia Project Babylon.<\/p>\n","innerContent":["\n<p>Wida\u0107, \u017ce 2024 ruszy\u0142 z kopyta. Dwa tygodnie temu pisa\u0142em o nowych Design Docach od Briana Goetza dotycz\u0105cych konceptu Deconstructors, teraz przyszed\u0142 czas na pierwszy oficjalny tekst opisuj\u0105cy mo\u017cliwo\u015bci u\u017cycia Project Babylon.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Artyku\u0142 <a href=\"https:\/\/openjdk.org\/projects\/babylon\/articles\/auto-diff\">Automatic differentiation of Java code using Code Reflection<\/a> autorstwa Paula Sandoza omawia koncepcj\u0119 i implementacj\u0119 automatycznego r\u00f3\u017cniczkowania metod Java reprezentuj\u0105cych funkcje matematyczne za pomoc\u0105 Code Reflection. Poprzez uzyskanie symbolicznej reprezentacji metody program mo\u017ce zastosowa\u0107 regu\u0142y r\u00f3\u017cniczkowania do wygenerowania metody r\u00f3\u017cniczkowej. W bardzo uproszczony spos\u00f3b ca\u0142o\u015b\u0107 mo\u017cna sprowadzi\u0107 do nast\u0119puj\u0105cych punkt\u00f3w (kilka krok\u00f3w z artyku\u0142u pomin\u0105\u0142em dla klarowno\u015bci):<\/p>\n","innerContent":["\n<p>Artyku\u0142 <a href=\"https:\/\/openjdk.org\/projects\/babylon\/articles\/auto-diff\">Automatic differentiation of Java code using Code Reflection<\/a> autorstwa Paula Sandoza omawia koncepcj\u0119 i implementacj\u0119 automatycznego r\u00f3\u017cniczkowania metod Java reprezentuj\u0105cych funkcje matematyczne za pomoc\u0105 Code Reflection. Poprzez uzyskanie symbolicznej reprezentacji metody program mo\u017ce zastosowa\u0107 regu\u0142y r\u00f3\u017cniczkowania do wygenerowania metody r\u00f3\u017cniczkowej. W bardzo uproszczony spos\u00f3b ca\u0142o\u015b\u0107 mo\u017cna sprowadzi\u0107 do nast\u0119puj\u0105cych punkt\u00f3w (kilka krok\u00f3w z artyku\u0142u pomin\u0105\u0142em dla klarowno\u015bci):<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Metoda Java, kt\u00f3r\u0105 chcemy zr\u00f3\u017cniczkowa\u0107, jest oznaczana za pomoc\u0105 adnotacji <code>@CodeReflection<\/code>.<\/p>\n","innerContent":["\n<p>Metoda Java, kt\u00f3r\u0105 chcemy zr\u00f3\u017cniczkowa\u0107, jest oznaczana za pomoc\u0105 adnotacji <code>@CodeReflection<\/code>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>@CodeReflection\nstatic double f(double x, double y) {\n    return x * (-Math.sin(x * y) + y) * 4.0d;\n}\n<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>@CodeReflection\nstatic double f(double x, double y) {\n    return x * (-Math.sin(x * y) + y) * 4.0d;\n}\n<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W czasie kompilacji dla oznaczonej metody tworzony jest Code Model, kt\u00f3ry jest symboliczn\u0105 reprezentacj\u0105 tej metody, a nast\u0119pnie u\u017cywaj\u0105c refleksji Java, uzyskujemy dost\u0119p do modelu kodu oznaczonej metody, kt\u00f3ry przyjmuje form\u0119 drzewa.<\/p>\n","innerContent":["\n<p>W czasie kompilacji dla oznaczonej metody tworzony jest Code Model, kt\u00f3ry jest symboliczn\u0105 reprezentacj\u0105 tej metody, a nast\u0119pnie u\u017cywaj\u0105c refleksji Java, uzyskujemy dost\u0119p do modelu kodu oznaczonej metody, kt\u00f3ry przyjmuje form\u0119 drzewa.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>Method fm = T.class.getDeclaredMethod(\"f\", double.class, double.class);\nOptional&lt;CoreOps.FuncOp&gt; o = fm.getCodeModel();\nCoreOps.FuncOp fcm = o.orElseThrow();\n<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>Method fm = T.class.getDeclaredMethod(\"f\", double.class, double.class);\nOptional&lt;CoreOps.FuncOp&gt; o = fm.getCodeModel();\nCoreOps.FuncOp fcm = o.orElseThrow();\n<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Potem nast\u0119puje sam proces r\u00f3\u017cniczkowania (nie b\u0119d\u0119 tego przykleja\u0142, ci\u0119\u017cka matma - zagl\u0105dnijcie do <a href=\"https:\/\/openjdk.org\/projects\/babylon\/articles\/auto-diff\">oryginalnego artyku\u0142u<\/a>, a na jego podstawie zr\u00f3\u017cniczkowanych operacji tworzony jest nowy model kodu, kt\u00f3ry reprezentuje pochodn\u0105 metody. Zr\u00f3\u017cniczkowany model kodu jest kompilowany do bajtkodu Java, a skompilowany bajtkod mo\u017ce by\u0107 wykonywany, aby obliczy\u0107 warto\u015bci pochodnych.<\/p>\n","innerContent":["\n<p>Potem nast\u0119puje sam proces r\u00f3\u017cniczkowania (nie b\u0119d\u0119 tego przykleja\u0142, ci\u0119\u017cka matma - zagl\u0105dnijcie do <a href=\"https:\/\/openjdk.org\/projects\/babylon\/articles\/auto-diff\">oryginalnego artyku\u0142u<\/a>, a na jego podstawie zr\u00f3\u017cniczkowanych operacji tworzony jest nowy model kodu, kt\u00f3ry reprezentuje pochodn\u0105 metody. Zr\u00f3\u017cniczkowany model kodu jest kompilowany do bajtkodu Java, a skompilowany bajtkod mo\u017ce by\u0107 wykonywany, aby obliczy\u0107 warto\u015bci pochodnych.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Efektem jest binarny ekwiwalent poni\u017cszych funkcji:<\/p>\n","innerContent":["\n<p>Efektem jest binarny ekwiwalent poni\u017cszych funkcji:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>static double df_dx(double x, double y) {\n    return (-Math.sin(x * y) + y - x * Math.cos(x * y) * y) * 4.0d;\n}\n\nstatic double df_dy(double x, double y) {\n    return x * (1 - Math.cos(x * y) * x) * 4.0d;\n}\n<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>static double df_dx(double x, double y) {\n    return (-Math.sin(x * y) + y - x * Math.cos(x * y) * y) * 4.0d;\n}\n\nstatic double df_dy(double x, double y) {\n    return x * (1 - Math.cos(x * y) * x) * 4.0d;\n}\n<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Mamy do czynienia z relatywnie prostym do zrozumienia, ale nie tak bardzo oderwanym od rzeczywisto\u015bci przyk\u0142adem. Artyku\u0142 podkre\u015bla znaczenie automatycznego r\u00f3\u017cniczkowania w uczeniu maszynowym, gdzie modele matematyczne s\u0105 trenowane przez tak zwane \"algorytmy gradientu prostego\" wymagaj\u0105ce obliczania gradient\u00f3w. Proces r\u0119cznego r\u00f3\u017cniczkowania jest podatny na b\u0142\u0119dy i \u017cmudny, szczeg\u00f3lnie dla skomplikowanych funkcji, co czyni automatyczne r\u00f3\u017cniczkowanie cennym narz\u0119dziem dla programist\u00f3w i pokazem tego, jakie nowe mo\u017cliwo\u015bci ju\u017c nied\u0142ugo dostaniemy jako programi\u015bci. Jak pisa\u0142em w ostatniej edycji, Project Babylon szybko wskoczy\u0142 do mojej topki najciekawszych projekt\u00f3w dziej\u0105cych si\u0119 w ramach JDK i obiecuje, \u017ce b\u0119d\u0119 \u015bledzi\u0142 wszystkich nowych og\u0142osze\u0144 z nim zwi\u0105zanych.<\/p>\n","innerContent":["\n<p>Mamy do czynienia z relatywnie prostym do zrozumienia, ale nie tak bardzo oderwanym od rzeczywisto\u015bci przyk\u0142adem. Artyku\u0142 podkre\u015bla znaczenie automatycznego r\u00f3\u017cniczkowania w uczeniu maszynowym, gdzie modele matematyczne s\u0105 trenowane przez tak zwane \"algorytmy gradientu prostego\" wymagaj\u0105ce obliczania gradient\u00f3w. Proces r\u0119cznego r\u00f3\u017cniczkowania jest podatny na b\u0142\u0119dy i \u017cmudny, szczeg\u00f3lnie dla skomplikowanych funkcji, co czyni automatyczne r\u00f3\u017cniczkowanie cennym narz\u0119dziem dla programist\u00f3w i pokazem tego, jakie nowe mo\u017cliwo\u015bci ju\u017c nied\u0142ugo dostaniemy jako programi\u015bci. Jak pisa\u0142em w ostatniej edycji, Project Babylon szybko wskoczy\u0142 do mojej topki najciekawszych projekt\u00f3w dziej\u0105cych si\u0119 w ramach JDK i obiecuje, \u017ce b\u0119d\u0119 \u015bledzi\u0142 wszystkich nowych og\u0142osze\u0144 z nim zwi\u0105zanych.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">3. Release Radar<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">3. Release Radar<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":17627},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image.jpeg\" alt=\"\" class=\"wp-image-17627\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/image.jpeg\" alt=\"\" class=\"wp-image-17627\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/pkl-lang.org\/blog\/introducing-pkl.html\">Pkl<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/pkl-lang.org\/blog\/introducing-pkl.html\">Pkl<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A dzisiejszy Release Radar zaczynamy od nietypowego - nowego j\u0119zyka programowania(!) do konfiguracji (!!) od Apple (!!!). Nietypowo jak na JVM Weekly, prawda? Ale nie martwcie si\u0119, zaraz wszystko si\u0119 wyja\u015bni.<\/p>\n","innerContent":["\n<p>A dzisiejszy Release Radar zaczynamy od nietypowego - nowego j\u0119zyka programowania(!) do konfiguracji (!!) od Apple (!!!). Nietypowo jak na JVM Weekly, prawda? Ale nie martwcie si\u0119, zaraz wszystko si\u0119 wyja\u015bni.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pkl (Pickle) to j\u0119zyk programowania zaprojektowany specjalnie do tworzenia konfiguracji, adresuj\u0105c ograniczenia statycznych j\u0119zyk\u00f3w konfiguracyjnych takich jak JSON czy YAML kt\u00f3re cz\u0119sto nie radz\u0105 sobie z z\u0142o\u017cono\u015bci\u0105 i ekspresyjno\u015bci\u0105. Pkl bierze za cel po\u0142\u0105czy\u0107 w sobie prostot\u0119 i deklaratywno\u015b\u0107 format\u00f3w statycznych z elastyczno\u015bci\u0105 j\u0119zyk\u00f3w programowania og\u00f3lnego przeznaczenia. To pozwala Pkl oferowa\u0107 klasy, funkcje, warunki i p\u0119tle, umo\u017cliwiaj\u0105c tworzenie bardziej zaawansowanych i reu\u017cywalnych skrypt\u00f3w konfiguracyjnych.<\/p>\n","innerContent":["\n<p>Pkl (Pickle) to j\u0119zyk programowania zaprojektowany specjalnie do tworzenia konfiguracji, adresuj\u0105c ograniczenia statycznych j\u0119zyk\u00f3w konfiguracyjnych takich jak JSON czy YAML kt\u00f3re cz\u0119sto nie radz\u0105 sobie z z\u0142o\u017cono\u015bci\u0105 i ekspresyjno\u015bci\u0105. Pkl bierze za cel po\u0142\u0105czy\u0107 w sobie prostot\u0119 i deklaratywno\u015b\u0107 format\u00f3w statycznych z elastyczno\u015bci\u0105 j\u0119zyk\u00f3w programowania og\u00f3lnego przeznaczenia. To pozwala Pkl oferowa\u0107 klasy, funkcje, warunki i p\u0119tle, umo\u017cliwiaj\u0105c tworzenie bardziej zaawansowanych i reu\u017cywalnych skrypt\u00f3w konfiguracyjnych.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Poni\u017cej przyk\u0142ad umo\u017cliwiaj\u0105cy stworzenie 4 instancji bazy danych<\/p>\n","innerContent":["\n<p>Poni\u017cej przyk\u0142ad umo\u017cliwiaj\u0105cy stworzenie 4 instancji bazy danych<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>module Application\n\nclass Database {\n  username: String\n  password: String\n  port: UInt16\n}\n\nhidden db: Application.Database = new {\n  username = \"admin\"\n  password = read(\"env:DATABASE_PASSWORD\")\n}\n\nsidecars {\n  for (offset in List(0, 1, 2)) {\n    (db) {\n      port = 6000 + offset\n    }\n  }\n}\n<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>module Application\n\nclass Database {\n  username: String\n  password: String\n  port: UInt16\n}\n\nhidden db: Application.Database = new {\n  username = \"admin\"\n  password = read(\"env:DATABASE_PASSWORD\")\n}\n\nsidecars {\n  for (offset in List(0, 1, 2)) {\n    (db) {\n      port = 6000 + offset\n    }\n  }\n}\n<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Co wygeneruje nam poni\u017cszego JSON-a:<\/p>\n","innerContent":["\n<p>Co wygeneruje nam poni\u017cszego JSON-a:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>{\n  \"sidecars\": &#91;\n    {\n      \"username\": \"admin\",\n      \"password\": \"hunter2\",\n      \"port\": 6000,\n    },\n    {\n      \"username\": \"admin\",\n      \"password\": \"hunter2\",\n      \"port\": 6001,\n    },\n    {\n      \"username\": \"admin\",\n      \"password\": \"hunter2\",\n      \"port\": 6002,\n    }\n  ]\n}\n<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>{\n  \"sidecars\": &#91;\n    {\n      \"username\": \"admin\",\n      \"password\": \"hunter2\",\n      \"port\": 6000,\n    },\n    {\n      \"username\": \"admin\",\n      \"password\": \"hunter2\",\n      \"port\": 6001,\n    },\n    {\n      \"username\": \"admin\",\n      \"password\": \"hunter2\",\n      \"port\": 6002,\n    }\n  ]\n}\n<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Co wi\u0119cej, Pkl jest zaprojektowany, by by\u0107 skalowalnym, bezpiecznym i przyjemnym w pisaniu, poprzez posiadanie wbudowanych mechanizm\u00f3w walidacji.<\/p>\n","innerContent":["\n<p>Co wi\u0119cej, Pkl jest zaprojektowany, by by\u0107 skalowalnym, bezpiecznym i przyjemnym w pisaniu, poprzez posiadanie wbudowanych mechanizm\u00f3w walidacji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":{"align":"center","fontSize":"small"},"innerBlocks":[],"innerHTML":"\n<p class=\"has-text-align-center has-small-font-size\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/MCTXW12.png\" alt=\"\"><br>Czyli pozostaje kolejnym narz\u0119dziem, kt\u00f3rego istnienie pozwala nam jeszcze bardziej nienawidzi\u0107 YAML-a.<\/p>\n","innerContent":["\n<p class=\"has-text-align-center has-small-font-size\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/MCTXW12.png\" alt=\"\"><br>Czyli pozostaje kolejnym narz\u0119dziem, kt\u00f3rego istnienie pozwala nam jeszcze bardziej nienawidzi\u0107 YAML-a.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>No dobra, ale wr\u00f3\u0107my do oryginalnie postawionego pytania - sk\u0105d pojawienie si\u0119 narz\u0119dzia w dzisiejszym przegl\u0105dzie? Wynika to z technologii, kt\u00f3ra zosta\u0142a u\u017cyta do tworzenia CLI towarzysz\u0105cego j\u0119zykowi. O ile coraz cz\u0119\u015bciej do podobnych zastosowa\u0144 u\u017cywa si\u0119 dzisiaj Rusta, to w tym przypadku ca\u0142o\u015b\u0107 zosta\u0142a napisana w Javie, i dystrybuowana jest jako binarny natywny obraz GraalVM. Nie jest to cz\u0119sto spotykany format, a Pkl pokazuje, \u017ce technologia posiada zastosowanie nie tylko na serwerze, ale i w aplikacjach CLI.<\/p>\n","innerContent":["\n<p>No dobra, ale wr\u00f3\u0107my do oryginalnie postawionego pytania - sk\u0105d pojawienie si\u0119 narz\u0119dzia w dzisiejszym przegl\u0105dzie? Wynika to z technologii, kt\u00f3ra zosta\u0142a u\u017cyta do tworzenia CLI towarzysz\u0105cego j\u0119zykowi. O ile coraz cz\u0119\u015bciej do podobnych zastosowa\u0144 u\u017cywa si\u0119 dzisiaj Rusta, to w tym przypadku ca\u0142o\u015b\u0107 zosta\u0142a napisana w Javie, i dystrybuowana jest jako binarny natywny obraz GraalVM. Nie jest to cz\u0119sto spotykany format, a Pkl pokazuje, \u017ce technologia posiada zastosowanie nie tylko na serwerze, ale i w aplikacjach CLI.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":{"align":"center","fontSize":"small"},"innerBlocks":[],"innerHTML":"\n<p class=\"has-text-align-center has-small-font-size\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/rtf2wBq.jpg\" alt=\"\"><br>Mo\u017ce jednak 2024 to nie b\u0119dzie rok Rusta?<\/p>\n","innerContent":["\n<p class=\"has-text-align-center has-small-font-size\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/rtf2wBq.jpg\" alt=\"\"><br>Mo\u017ce jednak 2024 to nie b\u0119dzie rok Rusta?<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/labs.leaningtech.com\/blog\/cheerpj-3.0\">CheerpJ 3.0<\/a><\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/labs.leaningtech.com\/blog\/cheerpj-3.0\">CheerpJ 3.0<\/a><\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>CheerpJ to implementacja JVM oparta o WebAssembly, kt\u00f3ra umo\u017cliwia uruchamianie aplikacji Java bezpo\u015brednio w przegl\u0105darce, bez potrzeby instalowania wtyczek czy samej Javy. Dzi\u0119ki wsparciu pe\u0142nego zbioru funkcjonalno\u015bci OpenJDK, pozwala na odtworzenie du\u017cych, niezmodyfikowanych aplikacji i bibliotek Javowych w wi\u0119kszo\u015bci nowoczesnych przegl\u0105darek. CheerpJ obs\u0142uguje te\u017c stare aplety Java i aplikacje Java Web Start, o czym ostatnio mia\u0142em okazje pisa\u0107 <a href=\"https:\/\/vived.substack.com\/p\/amazon-q-code-transform-automatic\">przy okazji wskrzeszenia starej przegl\u0105darkowe gry Dragon Court<\/a>.<\/p>\n","innerContent":["\n<p>CheerpJ to implementacja JVM oparta o WebAssembly, kt\u00f3ra umo\u017cliwia uruchamianie aplikacji Java bezpo\u015brednio w przegl\u0105darce, bez potrzeby instalowania wtyczek czy samej Javy. Dzi\u0119ki wsparciu pe\u0142nego zbioru funkcjonalno\u015bci OpenJDK, pozwala na odtworzenie du\u017cych, niezmodyfikowanych aplikacji i bibliotek Javowych w wi\u0119kszo\u015bci nowoczesnych przegl\u0105darek. CheerpJ obs\u0142uguje te\u017c stare aplety Java i aplikacje Java Web Start, o czym ostatnio mia\u0142em okazje pisa\u0107 <a href=\"https:\/\/vived.substack.com\/p\/amazon-q-code-transform-automatic\">przy okazji wskrzeszenia starej przegl\u0105darkowe gry Dragon Court<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>CheerpJ 3.0, najnowsza \"du\u017ca\" wersja, jest napisana w zasadzie od nowa, korzystaj\u0105c z siedmioletnich do\u015bwiadcze\u0144 pracy nad innymi projektami opartymi na WebAssembly, takich jak CheerpX (odpowiednika CheerpJ dla Flasha). \"Tr\u00f3jeczka\" poprawia wydajno\u015b\u0107, zw\u0142aszcza czas uruchamiania, poprzez potrzeby usuni\u0119cie kompilacji Ahead-Of-Time przy pierwszym uruchomieniu. Oferuje WebAssembly JVM i kompilator JIT dla bajtkodu Java, a tak\u017ce zwirtualizowan\u0105 warstw\u0119 systemow\u0105 dla system\u00f3w plik\u00f3w i sieci.<\/p>\n","innerContent":["\n<p>CheerpJ 3.0, najnowsza \"du\u017ca\" wersja, jest napisana w zasadzie od nowa, korzystaj\u0105c z siedmioletnich do\u015bwiadcze\u0144 pracy nad innymi projektami opartymi na WebAssembly, takich jak CheerpX (odpowiednika CheerpJ dla Flasha). \"Tr\u00f3jeczka\" poprawia wydajno\u015b\u0107, zw\u0142aszcza czas uruchamiania, poprzez potrzeby usuni\u0119cie kompilacji Ahead-Of-Time przy pierwszym uruchomieniu. Oferuje WebAssembly JVM i kompilator JIT dla bajtkodu Java, a tak\u017ce zwirtualizowan\u0105 warstw\u0119 systemow\u0105 dla system\u00f3w plik\u00f3w i sieci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>CheerpJ 3.0 obs\u0142uguje na ten moment tylko Jav\u0119 8, ale w dalszej cz\u0119\u015bci roku ju\u017c jest zapowiedziane wsparcie dla Javy 11. Aby zademonstrowa\u0107 jej mo\u017cliwo\u015bci, tw\u00f3rcy u\u017cyli nic innego jak... Minecrafta, umo\u017cliwiaj\u0105c jego uruchomienie w\u0142a\u015bnie w oknie przegl\u0105darki.<\/p>\n","innerContent":["\n<p>CheerpJ 3.0 obs\u0142uguje na ten moment tylko Jav\u0119 8, ale w dalszej cz\u0119\u015bci roku ju\u017c jest zapowiedziane wsparcie dla Javy 11. Aby zademonstrowa\u0107 jej mo\u017cliwo\u015bci, tw\u00f3rcy u\u017cyli nic innego jak... Minecrafta, umo\u017cliwiaj\u0105c jego uruchomienie w\u0142a\u015bnie w oknie przegl\u0105darki.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":{"align":"center","fontSize":"small"},"innerBlocks":[],"innerHTML":"\n<p class=\"has-text-align-center has-small-font-size\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a88789bb9bd.png\" alt=\"\"><br>To teraz czekam na osi\u0105gni\u0119cie <a href=\"https:\/\/medium.com\/graalvm\/java-on-truffle-going-fully-metacircular-215531e3f840\">Metacircularity<\/a> poprzez napisanie JVM w Minecrafcie. <a href=\"https:\/\/www.electronicdesign.com\/technologies\/embedded\/video\/21212550\/electronic-design-chungus-2-a-very-powerful-1-hz-minecraft-cpu\">Hardware powoli si\u0119 tworzy<\/a>.<\/p>\n","innerContent":["\n<p class=\"has-text-align-center has-small-font-size\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a88789bb9bd.png\" alt=\"\"><br>To teraz czekam na osi\u0105gni\u0119cie <a href=\"https:\/\/medium.com\/graalvm\/java-on-truffle-going-fully-metacircular-215531e3f840\">Metacircularity<\/a> poprzez napisanie JVM w Minecrafcie. <a href=\"https:\/\/www.electronicdesign.com\/technologies\/embedded\/video\/21212550\/electronic-design-chungus-2-a-very-powerful-1-hz-minecraft-cpu\">Hardware powoli si\u0119 tworzy<\/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\"><a href=\"https:\/\/bell-sw.com\/blog\/bellsoft-releases-liberica-jdk-21-for-risc-v-with-support\/\">Liberica JDK 21 - RISC-V Edition<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/bell-sw.com\/blog\/bellsoft-releases-liberica-jdk-21-for-risc-v-with-support\/\">Liberica JDK 21 - RISC-V Edition<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Liberia lubuje si\u0119 w nietypowych dystrybucjach JDK. Mieli\u015bmy ju\u017c w zesz\u0142ym roku Liberica JDK Performance Edition - wariant JDK 11 z poprawkami wydajno\u015bciowymi, a teraz przychodzi wariant JDK dzia\u0142aj\u0105cy natywnie na procesorach w architekturze RISC-V.<\/p>\n","innerContent":["\n<p>Liberia lubuje si\u0119 w nietypowych dystrybucjach JDK. Mieli\u015bmy ju\u017c w zesz\u0142ym roku Liberica JDK Performance Edition - wariant JDK 11 z poprawkami wydajno\u015bciowymi, a teraz przychodzi wariant JDK dzia\u0142aj\u0105cy natywnie na procesorach w architekturze RISC-V.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Coraz popularniejsze, g\u0142\u00f3wnie ze wzgl\u0119du na sw\u00f3j otwarty charakter, RISC-V nie jest wbrew pozorom procesorem, a raczej modelem programowym procesora (z angielskiego ISA) opartego o filozofi\u0119 dostarczania \u015bci\u015ble wyspecjalizowanego zestawu instrukcji (reduced instruction set computer \u2013 RISC w\u0142a\u015bnie). Cytuj\u0105c Wikipedi\u0119:<\/p>\n","innerContent":["\n<p>Coraz popularniejsze, g\u0142\u00f3wnie ze wzgl\u0119du na sw\u00f3j otwarty charakter, RISC-V nie jest wbrew pozorom procesorem, a raczej modelem programowym procesora (z angielskiego ISA) opartego o filozofi\u0119 dostarczania \u015bci\u015ble wyspecjalizowanego zestawu instrukcji (reduced instruction set computer \u2013 RISC w\u0142a\u015bnie). Cytuj\u0105c Wikipedi\u0119:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/quote","attrs":[],"innerBlocks":[{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W kontra\u015bcie do wi\u0119kszo\u015bci ISA, RISC-V mo\u017ce by\u0107 swobodnie u\u017cywany w dowolnym celu, umo\u017cliwiaj\u0105c ka\u017cdemu projektowanie, produkcj\u0119 i sprzeda\u017c czip\u00f3w i oprogramowania RISC-V. Chocia\u017c nie jest pierwsz\u0105 otwart\u0105 architektur\u0105 ISA ma du\u017ce znaczenie, poniewa\u017c zosta\u0142 zaprojektowany z my\u015bl\u0105 o nowoczesnych skomputeryzowanych urz\u0105dzeniach, takich jak ogromne chmury obliczeniowe, wysokiej klasy telefony kom\u00f3rkowe i najmniejsze systemy wbudowane.<\/p>\n","innerContent":["\n<p>W kontra\u015bcie do wi\u0119kszo\u015bci ISA, RISC-V mo\u017ce by\u0107 swobodnie u\u017cywany w dowolnym celu, umo\u017cliwiaj\u0105c ka\u017cdemu projektowanie, produkcj\u0119 i sprzeda\u017c czip\u00f3w i oprogramowania RISC-V. Chocia\u017c nie jest pierwsz\u0105 otwart\u0105 architektur\u0105 ISA ma du\u017ce znaczenie, poniewa\u017c zosta\u0142 zaprojektowany z my\u015bl\u0105 o nowoczesnych skomputeryzowanych urz\u0105dzeniach, takich jak ogromne chmury obliczeniowe, wysokiej klasy telefony kom\u00f3rkowe i najmniejsze systemy wbudowane.<\/p>\n"]}],"innerHTML":"\n<blockquote class=\"wp-block-quote\"><\/blockquote>\n","innerContent":["\n<blockquote class=\"wp-block-quote\">",null,"<\/blockquote>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wsparcie dla RISC-V pojawi\u0142o si\u0119 ju\u017c przy okazji JDK 19, ale z tego co si\u0119 orientuje Liberica jest pierwszym vendorem, kt\u00f3ry zapewni\u0142 \u0142atw\u0105 do pobrania dystrybucje. Je\u015bli si\u0119 myl\u0119, poprawcie mnie prosz\u0119 w komentarzach - te\u017c ch\u0119tnie si\u0119 czego\u015b nowego dowiem :)<\/p>\n","innerContent":["\n<p>Wsparcie dla RISC-V pojawi\u0142o si\u0119 ju\u017c przy okazji JDK 19, ale z tego co si\u0119 orientuje Liberica jest pierwszym vendorem, kt\u00f3ry zapewni\u0142 \u0142atw\u0105 do pobrania dystrybucje. Je\u015bli si\u0119 myl\u0119, poprawcie mnie prosz\u0119 w komentarzach - te\u017c ch\u0119tnie si\u0119 czego\u015b nowego dowiem :)<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/quarkus.io\/blog\/quarkus-3-7-released\/\">Quarkus 3.7<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/quarkus.io\/blog\/quarkus-3-7-released\/\">Quarkus 3.7<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Najnowszy Quarkus 3.7 nie tylko pobija wymagan\u0105 wersj\u0119 Javy do JDK 17, ale tak\u017ce rozpoczyna proces porz\u0105dkowania nazewnictwa RESTEasy Reactive. Ta wersja usprawnia te\u017c wsparcie dla Hibernate, aktualizuj\u0105c Quarkusa do najnowszych stabilnych wersji popularnego Javowevego ORM oraz wprowadzaj\u0105c endpoint do zarz\u0105dzania Hibernate Search. Pozbywa si\u0119 tak\u017ce wymogu korzystania z przestarza\u0142ej ju\u017c wersji Okhttp\/Okio, dodano te\u017c wsparcie dla adnotacji <code>@MeterTag<\/code> pozwalaj\u0105cej na dokonfigurowanie Micrometer.<\/p>\n","innerContent":["\n<p>Najnowszy Quarkus 3.7 nie tylko pobija wymagan\u0105 wersj\u0119 Javy do JDK 17, ale tak\u017ce rozpoczyna proces porz\u0105dkowania nazewnictwa RESTEasy Reactive. Ta wersja usprawnia te\u017c wsparcie dla Hibernate, aktualizuj\u0105c Quarkusa do najnowszych stabilnych wersji popularnego Javowevego ORM oraz wprowadzaj\u0105c endpoint do zarz\u0105dzania Hibernate Search. Pozbywa si\u0119 tak\u017ce wymogu korzystania z przestarza\u0142ej ju\u017c wersji Okhttp\/Okio, dodano te\u017c wsparcie dla adnotacji <code>@MeterTag<\/code> pozwalaj\u0105cej na dokonfigurowanie Micrometer.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Quarkus 3.7 to ostatnie wydanie przed Quarkus 3.8, kt\u00f3ry b\u0119dzie wersj\u0105 LTS. To wi\u0119c te\u017c ostatnia szansa, \u017ceby spo\u0142eczno\u015b\u0107 mog\u0142a ca\u0142o\u015b\u0107 gruntownie przetestowa\u0107, do czego zach\u0119cam.<\/p>\n","innerContent":["\n<p>Quarkus 3.7 to ostatnie wydanie przed Quarkus 3.8, kt\u00f3ry b\u0119dzie wersj\u0105 LTS. To wi\u0119c te\u017c ostatnia szansa, \u017ceby spo\u0142eczno\u015b\u0107 mog\u0142a ca\u0142o\u015b\u0107 gruntownie przetestowa\u0107, do czego zach\u0119cam.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/github.com\/langchain4j\/langchain4j\/blob\/main\/README.md\">langchain4j 0.26<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/github.com\/langchain4j\/langchain4j\/blob\/main\/README.md\">langchain4j 0.26<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Najnowsze wydanie <code>langchain4j<\/code>, wersja 0.26, wprowadza szereg nowych funkcji podstawowych oraz integracji, maj\u0105cych na celu wzmocnienie mo\u017cliwo\u015bci frameworka w przetwarzaniu i analizie danych j\u0119zykowych. W\u015br\u00f3d godnych uwagi nowych funkcji podstawowych znajduje si\u0119 implementacja zaawansowanego modelu Augmented Generation (RAG) - czyli mo\u017cliwo\u015b\u0107 tworzenia nowych odpowiedzi na bazie zadanego tekstu \u017ar\u00f3d\u0142owego, czy te\u017c wsparcie dla multimodalnych danych wej\u015bciowych - czyli \u0142\u0105cz\u0105cych tekst i grafik\u0119, ju\u017c w tej chwili pozwala na to ChatGPT, aby rozwi\u0105zywa\u0107 cho\u0107by zadania z matematyki.<\/p>\n","innerContent":["\n<p>Najnowsze wydanie <code>langchain4j<\/code>, wersja 0.26, wprowadza szereg nowych funkcji podstawowych oraz integracji, maj\u0105cych na celu wzmocnienie mo\u017cliwo\u015bci frameworka w przetwarzaniu i analizie danych j\u0119zykowych. W\u015br\u00f3d godnych uwagi nowych funkcji podstawowych znajduje si\u0119 implementacja zaawansowanego modelu Augmented Generation (RAG) - czyli mo\u017cliwo\u015b\u0107 tworzenia nowych odpowiedzi na bazie zadanego tekstu \u017ar\u00f3d\u0142owego, czy te\u017c wsparcie dla multimodalnych danych wej\u015bciowych - czyli \u0142\u0105cz\u0105cych tekst i grafik\u0119, ju\u017c w tej chwili pozwala na to ChatGPT, aby rozwi\u0105zywa\u0107 cho\u0107by zadania z matematyki.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":{"align":"center","fontSize":"small"},"innerBlocks":[],"innerHTML":"\n<p class=\"has-text-align-center has-small-font-size\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/xAlUrAA.png\" alt=\"\"><br>Chyba nigdzie GPT nie jest tak nadu\u017cywane jak w edukacji<\/p>\n","innerContent":["\n<p class=\"has-text-align-center has-small-font-size\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/xAlUrAA.png\" alt=\"\"><br>Chyba nigdzie GPT nie jest tak nadu\u017cywane jak w edukacji<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pod wzgl\u0119dem integracji, to wydanie poszerza kompatybilno\u015b\u0107 frameworka z r\u00f3\u017cnymi dostawcami modeli, takimi jak Mistral AI, Wenxin Qianfan i Cohere Rerank, oraz tak zwanych \"magazyn\u00f3w embedding\u00f3w\", takich jak Azure AI Search, Qdrant i Vearch. \u0141adowarki dokument\u00f3w obejmuj\u0105 teraz wsparcie dla Azure Blob Storage, GitHub i Tencent COS. Ponadto, w\u015br\u00f3d znacz\u0105cych aktualizacji znajduje si\u0119 wsparcie dla danych wej\u015bciowych obraz\u00f3w i skr\u00f3conych embedding\u00f3w w OpenAI, generowanie obraz\u00f3w w Vertex AI oraz wsparcie dla danych wej\u015bciowych obraz\u00f3w w Ollama i Qwen.<\/p>\n","innerContent":["\n<p>Pod wzgl\u0119dem integracji, to wydanie poszerza kompatybilno\u015b\u0107 frameworka z r\u00f3\u017cnymi dostawcami modeli, takimi jak Mistral AI, Wenxin Qianfan i Cohere Rerank, oraz tak zwanych \"magazyn\u00f3w embedding\u00f3w\", takich jak Azure AI Search, Qdrant i Vearch. \u0141adowarki dokument\u00f3w obejmuj\u0105 teraz wsparcie dla Azure Blob Storage, GitHub i Tencent COS. Ponadto, w\u015br\u00f3d znacz\u0105cych aktualizacji znajduje si\u0119 wsparcie dla danych wej\u015bciowych obraz\u00f3w i skr\u00f3conych embedding\u00f3w w OpenAI, generowanie obraz\u00f3w w Vertex AI oraz wsparcie dla danych wej\u015bciowych obraz\u00f3w w Ollama i Qwen.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/javalin.io\/news\/javalin-6.0.0-stable.html\">Javalin 6.0<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/javalin.io\/news\/javalin-6.0.0-stable.html\">Javalin 6.0<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Javalin 6 to najnowsza wersja popularnego frameworka webowego dla Javy i Kotlin, k\u0142ad\u0105cego nacisk na prostot\u0119 oraz interoperacyjno\u015b\u0107 mi\u0119dzy tymi j\u0119zykami. Jest to de facto nak\u0142adka na serwer Jetty, skupiaj\u0105ca si\u0119 przede wszystkim na warstwie webowej. Javalin wyr\u00f3\u017cnia si\u0119 swoimi ma\u0142ymi rozmiarami i \u0142atwym zrozumieniem ca\u0142o\u015bci - jego kod \u017ar\u00f3d\u0142owy to tylko oko\u0142o 8000 linii kodu Java\/Kotlin oraz dodatkowo oko\u0142o 12000 linii test\u00f3w.<\/p>\n","innerContent":["\n<p>Javalin 6 to najnowsza wersja popularnego frameworka webowego dla Javy i Kotlin, k\u0142ad\u0105cego nacisk na prostot\u0119 oraz interoperacyjno\u015b\u0107 mi\u0119dzy tymi j\u0119zykami. Jest to de facto nak\u0142adka na serwer Jetty, skupiaj\u0105ca si\u0119 przede wszystkim na warstwie webowej. Javalin wyr\u00f3\u017cnia si\u0119 swoimi ma\u0142ymi rozmiarami i \u0142atwym zrozumieniem ca\u0142o\u015bci - jego kod \u017ar\u00f3d\u0142owy to tylko oko\u0142o 8000 linii kodu Java\/Kotlin oraz dodatkowo oko\u0142o 12000 linii test\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":{"align":"center","fontSize":"small"},"innerBlocks":[],"innerHTML":"\n<p class=\"has-text-align-center has-small-font-size\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/1IO5GwV.jpg\" alt=\"\"><br>Zawsze szanuje narz\u0119dzia, kt\u00f3rych wewn\u0119trzne dzia\u0142anie da si\u0119 zrozumie\u0107 podczas d\u0142u\u017cszego \u015bniadania.<\/p>\n","innerContent":["\n<p class=\"has-text-align-center has-small-font-size\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2024\/02\/1IO5GwV.jpg\" alt=\"\"><br>Zawsze szanuje narz\u0119dzia, kt\u00f3rych wewn\u0119trzne dzia\u0142anie da si\u0119 zrozumie\u0107 podczas d\u0142u\u017cszego \u015bniadania.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Javalin 6 wprowadza wiele nowo\u015bci, w tym kompletne przepisanie systemu plugin\u00f3w czy przemodelowanie konfiguracji Jetty'ego. Wy\u0142\u0105czono te\u017c domy\u015blne u\u017cycie Wirtualnych W\u0105tk\u00f3w, w nowej wersji niezb\u0119dne jest u\u017cycie flagi <code>config.useVirtualThreads = true<\/code> i kompatybilnej wersji JDK. Usuni\u0119to te\u017c interfejs <code>AccessManager<\/code> i zmieniono podej\u015bcie do zarz\u0105dzania uprawnieniami, co stanowi g\u0142\u00f3wn\u0105 cz\u0119\u015b\u0107 opisan\u0105 przez towarzysz\u0105cy wydaniu migration guide.<\/p>\n","innerContent":["\n<p>Javalin 6 wprowadza wiele nowo\u015bci, w tym kompletne przepisanie systemu plugin\u00f3w czy przemodelowanie konfiguracji Jetty'ego. Wy\u0142\u0105czono te\u017c domy\u015blne u\u017cycie Wirtualnych W\u0105tk\u00f3w, w nowej wersji niezb\u0119dne jest u\u017cycie flagi <code>config.useVirtualThreads = true<\/code> i kompatybilnej wersji JDK. Usuni\u0119to te\u017c interfejs <code>AccessManager<\/code> i zmieniono podej\u015bcie do zarz\u0105dzania uprawnieniami, co stanowi g\u0142\u00f3wn\u0105 cz\u0119\u015b\u0107 opisan\u0105 przez towarzysz\u0105cy wydaniu migration guide.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.wildfly.org\/news\/2024\/01\/25\/WildFly31-Released\/\">WildFly 31<\/a><\/h3>\n","innerContent":["\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.wildfly.org\/news\/2024\/01\/25\/WildFly31-Released\/\">WildFly 31<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>WildFly 31 obejmuj\u0105 aktualizacj\u0119 MicroProfile do wersji 6.1, Hibernate do wersji 6.4 oraz wprowadzenie wsparcia (w wersji Preview) dla Jakarta MVC 2.1 poprzez projekt Eclipse Krazo. Ponadto, Reactive Messaging umo\u017cliwia teraz komunikacje przez AMQP. Pod mask\u0105, WildFly doczeka\u0142 si\u0119 te\u017c zmian w modularyzacji, umo\u017cliwiaj\u0105cej \u0142atwiejszy rozw\u00f3j rozszerze\u0144 oraz transparentne definiowanie stabilno\u015bci poszczeg\u00f3lnych fragment\u00f3w.<\/p>\n","innerContent":["\n<p>WildFly 31 obejmuj\u0105 aktualizacj\u0119 MicroProfile do wersji 6.1, Hibernate do wersji 6.4 oraz wprowadzenie wsparcia (w wersji Preview) dla Jakarta MVC 2.1 poprzez projekt Eclipse Krazo. Ponadto, Reactive Messaging umo\u017cliwia teraz komunikacje przez AMQP. Pod mask\u0105, WildFly doczeka\u0142 si\u0119 te\u017c zmian w modularyzacji, umo\u017cliwiaj\u0105cej \u0142atwiejszy rozw\u00f3j rozszerze\u0144 oraz transparentne definiowanie stabilno\u015bci poszczeg\u00f3lnych fragment\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Poza aktualizacjami samego serwera, WildFly og\u0142osi\u0142 r\u00f3wnie\u017c dost\u0119pno\u015b\u0107 bety WildFly Glow, zestawu narz\u0119dzi maj\u0105cych na celu uproszczenie i optymalizacj\u0119 instalacji WildFly w r\u00f3\u017cnych \u015brodowiskach, g\u0142\u00f3wnie chmurowych. WildFly Glow analizuje artefakty aplikacji, aby zarekomendowa\u0107 niezb\u0119dne pakiety funkcjonalno\u015bci i warstw Galleon (wsparcie Wildfly dla obraz\u00f3w Dockerowych), u\u0142atwiaj\u0105c sprawn\u0105 i efektywn\u0105 konfiguracj\u0119 serwera.<\/p>\n","innerContent":["\n<p>Poza aktualizacjami samego serwera, WildFly og\u0142osi\u0142 r\u00f3wnie\u017c dost\u0119pno\u015b\u0107 bety WildFly Glow, zestawu narz\u0119dzi maj\u0105cych na celu uproszczenie i optymalizacj\u0119 instalacji WildFly w r\u00f3\u017cnych \u015brodowiskach, g\u0142\u00f3wnie chmurowych. WildFly Glow analizuje artefakty aplikacji, aby zarekomendowa\u0107 niezb\u0119dne pakiety funkcjonalno\u015bci i warstw Galleon (wsparcie Wildfly dla obraz\u00f3w Dockerowych), u\u0142atwiaj\u0105c sprawn\u0105 i efektywn\u0105 konfiguracj\u0119 serwera.<\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/17620","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=17620"}],"version-history":[{"count":7,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/17620\/revisions"}],"predecessor-version":[{"id":17640,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/17620\/revisions\/17640"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/17622"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=17620"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=17620"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=17620"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}