{"id":9360,"date":"2022-08-17T14:27:14","date_gmt":"2022-08-17T12:27:14","guid":{"rendered":"https:\/\/vived.io\/?p=9360"},"modified":"2022-09-19T13:10:34","modified_gmt":"2022-09-19T11:10:34","slug":"jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/","title":{"rendered":"Android dostaje wsparcie dla JDK 11 &#8211; JVM Weekly #100"},"content":{"rendered":"\n<h2 id=\"1-pierwszy-nowy-jep-od-dlugiego-czasu\" data-num=1>1. Pierwszy nowy JEP od d\u0142ugiego czasu!<\/h2>\n\n\n\n<p>Od pewnego czasu nie mieli\u015bmy okazji informowa\u0107 Was o \u017cadnych nowych JEP-ach. Powody s\u0105 (podejrzewam) dwa: sezon wakacyjny oraz okres przygotowywania premiery nowego JDK. Powoli jednak sierpie\u0144 zbli\u017ca si\u0119 ku ko\u0144cowi, JDK 19 otrzyma\u0142o ju\u017c swojego pierwszego Release Candidate, mo\u017cna wi\u0119c my\u015ble\u0107 o przysz\u0142o\u015bci. St\u0105d mam niew\u0105tpliw\u0105 rado\u015b\u0107 poinformowa\u0107 Was, \u017ce w naszej setnej edycji pojawia si\u0119 kandydacki <a href=\"https:\/\/openjdk.org\/jeps\/429\">JEP 429: Extent-Local Variables (Incubator)<\/a>. Przyjrzyjmy si\u0119 zatem, co si\u0119 za nim kryje.<\/p>\n\n\n\n<p>Czym s\u0105 <code>extent-local variables<\/code>? Jest to alternatywa dla istniej\u0105cego <code>ThreadLocal<\/code>, stworzona jako kompan Project Loom. Ich celem jest umo\u017cliwi\u0107 wsp\u00f3\u0142dzielenie niemutowanych danych w obr\u0119bie i pomi\u0119dzy w\u0105tkami. Ich u\u017cycie wygl\u0105da\u0107 ma w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>final static ExtentLocal&lt;...&gt; V = new ExtentLocal&lt;&gt;();\n\n\/\/ In some method\nExtentLocal.where(V, &lt;value&gt;)\n           .run(() -&gt; { ... V.get() ... call methods ... });\n<\/code><\/pre>\n\n\n\n<p>Powy\u017csza struktura posiada kilka zalet. Po pierwsze, umo\u017cliwia okre\u015blenie bardzo konkretnego zakresu &#8222;obowi\u0105zywania&#8221; zmiennej &#8211; co\u015b czego nie da\u0142o si\u0119 uzyska\u0107 w przypadku zwyk\u0142ego ThreadLocala, b\u0119d\u0105cego swoistym workiem na dane. W powy\u017cszym przypadku, <code>V<\/code> nie posiada metody <code>.set<\/code> &#8211; jest wi\u0119c (niestety, wy\u0142\u0105cznie w &#8222;p\u0142ytki&#8221; spos\u00f3b) niemutowalne, dodatkowo powinno by\u0107 deklarowane jako <code>final<\/code>, a jej warto\u015b\u0107 ustawiana jest wy\u0142\u0105cznie w metodzie <code>where<\/code>. W nieco zawi\u0142y, ale efektywny spos\u00f3b rozwi\u0105za\u0107 ma to problem przypadkowej podmiany warto\u015bci referencji pochodz\u0105cej z ThreadLocala.<\/p>\n\n\n\n<p>Co ze starym, dobrym, przyzwanym ju\u017c w tym tek\u015bcie ThreadLocal? Tutaj uspokoj\u0119: nowy typ zmiennych z JEP 429 nie ma na celu jego zast\u0105pienia i wymuszania jego migracji. Oba rozwi\u0105zania b\u0119d\u0105 \u017cy\u0142y r\u00f3wnolegle. Polecam jednak lektur\u0119 nowego JEP-a ka\u017cdemu (\u015bwiadomemu) u\u017cytkownikowi ThreadLocal &#8211; przy motywacji rozszerzenia Javy o <code>extent-local variables<\/code>, tw\u00f3rcy wypunktowali sporo wad (ale r\u00f3wnie\u017c zalet) istniej\u0105cego rozwi\u0105zania.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"450\" height=\"299\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-23.png\" alt=\"\" class=\"wp-image-9390\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-23.png 450w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-23-300x199.png 300w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><figcaption>Aczkolwiek wi\u0119kszo\u015b\u0107 tych zarzut\u00f3w to programistyczny fat-shaming.<\/figcaption><\/figure><\/div>\n\n\n<p>Po powy\u017cszym JEP-ie wida\u0107, jak mocno Loom kieruje dalszym rozwojem j\u0119zyka. A jak ju\u017c o Loomie mowa&#8230;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/openjdk.org\/jeps\/429\">JEP 429: Extent-Local Variables (Incubator)<\/a><\/li><\/ul>\n\n\n\n<h2 id=\"2-jetty-dostaje-wsparcie-dla-projektu-loom\" data-num=2>2. Jetty dostaje wsparcie dla Projektu Loom<\/h2>\n\n\n\n<p>Jetty, biblioteka dostarczaj\u0105ca samodzieln\u0105 implementacje web server i kontenera servlet\u00f3w, pozostaje jednym z najpopularniejszych rozwi\u0105za\u0144 tego typu. Wprawdzie konkurencja pod postaci\u0105 cho\u0107by Embedded Tomcat, Undertow czy Netty do\u015b\u0107 mocno go ostatnio podgryza, to jednak z perspektywy programist\u00f3w bardzo dobra nowina &#8211; konkurencja wymusza ci\u0105g\u0142y rozw\u00f3j. Dlatego te\u017c z rado\u015bci\u0105 informujemy o oficjalnym <a href=\"https:\/\/github.com\/eclipse\/jetty.project\/issues\/8007\">wsparciu projektu dla Looma<\/a>.<\/p>\n\n\n\n<p>Zmiany wejd\u0105 w \u017cycie wraz z nowymi wersjami Jetty&#8217;ego 10.0.x (najpierw wspierana ma by\u0107 10.0.x), ale ca\u0142o\u015b\u0107 przyci\u0105ga wzrok nie tylko z powodu bycia kolejnym du\u017cym projektem wspieraj\u0105cym Looma. Osobi\u015bcie uwa\u017cam za bardzo uroczy fakt, \u017ce sam Alan Bateman zasugerowa\u0142 w zamkni\u0119tym PullReque\u015bcie poprawki, kt\u00f3re tw\u00f3rcy wprowadzili. Jest dla mnie zawsze co\u015b bardzo uroczego w tym, jak tw\u00f3rcy Javy odpowiadaj\u0105 na w\u0105tki redditowe\/hackernewsowe czy w\u0142a\u015bnie robi\u0105 Code Review projektom.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-16.png\" alt=\"\" class=\"wp-image-9362\" width=\"582\" height=\"500\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-16.png 582w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-16-300x258.png 300w\" sizes=\"auto, (max-width: 582px) 100vw, 582px\" \/><figcaption>Tak to widz\u0119.<\/figcaption><\/figure><\/div>\n\n\n<p>Je\u015bli kto\u015b jest ciekawy jak ca\u0142o\u015b\u0107 zosta\u0142a zaimplementowana &#8211; tutaj macie <a href=\"https:\/\/github.com\/eclipse\/jetty.project\/commit\/be3d16bdbbb63cc0df7e4964d8a47e3e376a631d\">konkretny commit<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/github.com\/eclipse\/jetty.project\/issues\/8007\">Support Loom #8007<\/a><\/li><\/ul>\n\n\n\n<h2 id=\"3-android-13-przynosi-wsparcie-javy-11\" data-num=3>3. Android 13 przynosi wsparcie Javy 11<\/h2>\n\n\n\n<p>Pocz\u0105tkiem tygodnia premier\u0119 mia\u0142 nowy Android 13. Dobrze pokazuje to pewn\u0105 zmian\u0119 my\u015blenia o tym systemie. Kiedy\u015b by\u0142a to naprawd\u0119 du\u017ce wydarzenie, dzi\u015b premiera w tym wypadku oznacza\u0142a &#8222;zmergowanie&#8221; ca\u0142o\u015bci do g\u0142\u00f3wnej ga\u0142\u0119zi AOSP (Android Open-Source Project) oraz wypuszczenie nowej wersji na Pixele, w oczekiwaniu na ruchy reszty graczy rynkowych &#8211; troch\u0119 jak to ma miejsce w wypadku Kernela Linuxa. R\u00f3wnie\u017c lista nowo\u015bci z mojej perspektywy jest dosy\u0107 zbli\u017cona &#8211; z punktu widzenia u\u017cytkownika, Android 13 to troch\u0119 wi\u0119ksze mo\u017cliwo\u015bci personalizacji (min. wersji j\u0119zykowej konkretnych aplikacji)<\/p>\n\n\n\n<p>Z punktu widzenia programisty jest troch\u0119 wi\u0005\u0119cej. Oczywi\u015bcie, mamy standardowe poprawki wydajno\u015bciowe (lepszy Garbage Collector i szybszy dost\u0119p JNI) poza tym nowo\u015bci dla programist\u00f3w, jak nowe API do font\u00f3w u\u0142atwiaj\u0105ce np. prac\u0119 z nie-\u0142aci\u0144skim alfabetem czy lepszy performance renderingu, a tak\u017ce wsparcie dla standardu <a href=\"https:\/\/docs.microsoft.com\/en-us\/typography\/opentype\/spec\/colr\">COLRV1<\/a>. Pojawia si\u0119 te\u017c min. wsparcie dla Bluetooth LE Audio czy MIDI 2.0, a tak\u017ce lepsza obs\u0142uga shader\u00f3w. Wisienk\u0105 na torcie jest masa nowych uprawnie\u0144, kt\u00f3re tw\u00f3rcy musz\u0105 zbiera\u0107 od u\u017cytkownik\u00f3w przed dost\u0119pem do ich danych.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"Intel - Our Jokes Aren&#039;t Like Your Jokes...\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/M61xXdVlP5o?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><figcaption>W sumie to nawet fajnie te zmiany, ale jednak kontent do\u015b\u0107 niszowy.<\/figcaption><\/figure>\n\n\n\n<p>Jednak g\u0142\u00f3wny pow\u00f3d, dla kt\u00f3rego tutaj pisz\u0119, jest przej\u015bcie Androida na JDK 11. Najnowsza edycja wewn\u0119trznie przesz\u0142a na Java 11, wprowadzaj\u0105c do platformy min. Mo\u017cliwo\u015b\u0107 u\u017cywania <code>var<\/code>, <code>VarHandle<\/code> z <code>java.utl.concurrent<\/code> czy wielu innych pomocniczych API (jak <code>ifPresentOrElse()<\/code> na Optionalach \u2764\ufe0f). Wida\u0107, \u017ce wyniki procesu Google\/Oracle z zesz\u0142ego roku rozwi\u0105za\u0142y tw\u00f3rcom r\u0119ce i powoli b\u0119d\u0105 wdra\u017ca\u0107 nowo\u015bci z Javy do Androida.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-17.png\" alt=\"\" class=\"wp-image-9369\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-17.png 640w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-17-300x225.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption>Ja wiem, \u017ce to jest no-news: pewnie i tak wszyscy teraz u\u017cywaj\u0105 ju\u017c Kotlina.<\/figcaption><\/figure><\/div>\n\n\n<p>Pe\u0142n\u0105 list\u0119 zmian znajdziecie tutaj od nieocenionych <a href=\"https:\/\/www.xda-developers.com\/android-13\/\">XDA Developers<\/a>.<\/p>\n\n\n\n<p>BTW: Wiedzieli\u015bcie, \u017ce Google dalej internalowo u\u017cywa nazw deser\u00f3w do nazywania kolejnych wersji Androida? &#8222;Trzynastka&#8221; to internalowo &#8222;Tiramisu&#8221;.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/DSC02002-1024x683.jpeg\" alt=\"\" class=\"wp-image-9366\" width=\"768\" height=\"512\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/DSC02002-1024x683.jpeg 1024w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/DSC02002-300x200.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/DSC02002-768x512.jpeg 768w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/DSC02002.jpeg 1080w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><figcaption>Prywata: Tak si\u0119 nazywa\u0142a te\u017c&nbsp;moja \u015bp. ukochana \u015awinka Morska \ud83d\udc94. Goodnight, Sweet Prince.<\/figcaption><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/android-developers.googleblog.com\/2022\/08\/android-13-is-in-aosp.html\">Android 13 is in AOSP!<\/a><\/li><li><a href=\"https:\/\/www.xda-developers.com\/android-13\/\">Android 13 \u201cTiramisu\u201d: Everything we know so far about Google\u2019s next big update!<\/a><\/li><\/ul>\n\n\n\n<h2 id=\"4-kotlinowy-release-radar\" data-num=4>4. (Kotlinowy) Release Radar<\/h2>\n\n\n\n<p>A na koniec &#8211; Release Radar. Tym razem taki mocno Kotlinowy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/github.com\/ExpediaGroup\/graphql-kotlin\/releases\/tag\/6.0.0\">graphql-kotlin 6.0<\/a><\/h3>\n\n\n\n<p>U\u017cywacie GraphQL? Je\u015bli tak, specjalnie dla Was zaczniemy od nowego, du\u017cego wydania Kotlin GraphQL, biblioteki rozwijanej przez ExpediaGroup. Dzi\u0119ki nowemu wydaniu, du\u017co prostsze ma by\u0107 propagowanie kontekstu kortyn, kt\u00f3ry teraz b\u0119dzie bezpo\u015brednio dost\u0119pny dla u\u017cytkownik\u00f3w API. Ca\u0142o\u015b\u0107 otrzyma\u0142a te\u017c wszystkie poprawki pochodz\u0105ce z <code>graphql-java<\/code>, nad kt\u00f3r\u0105 jest wrapperem &#8211; tw\u00f3rcy zaktualizowali &#8222;bebechy&#8221; do jej wersji 18. Biblioteka otrzyma\u0142a te\u017c wsparcie dla specyfikacji Apollo Federation w wersji v2, u\u0142atwiaj\u0105cej modularyzacj\u0119 GraphQL-owego &#8222;grafu&#8221;, a tak\u017ce APQ &#8211; Apollo Automatic Persisted Queries.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/poker-face-poker.gif\" alt=\"\" class=\"wp-image-9381\" width=\"440\" height=\"244\"\/><figcaption>Wida\u0107 mocno, \u017ce to w\u0142a\u015bnie Apollo rozdaje karty i ustala zasady gry w przestrzeni GraphQL.<\/figcaption><\/figure><\/div>\n\n\n<p>A jak ju\u017c jeste\u015bmy przy temacie GraphQL i Apollo, to tw\u00f3rcy Apollo Kotlin poszli bardzo mocno w Multiplatform, a sama platforma dosta\u0142a nowy Memory Manager, kt\u00f3ry stanie si\u0119 oficjalnie obowi\u0105zuj\u0105cym rozwi\u0105zaniem wraz z <a href=\"https:\/\/www.apollographql.com\/blog\/mobile\/kotlin\/apollo-kotlin-new-multiplatform-memory-manager\/\">premier\u0105 Kotlin 1.7.20<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2022\/08\/kotlin-api-for-apache-spark-v1-2-udts-udfs-rdds-compatibility-and-more\/\">Kotlin API for Apache Spark 1.2<\/a><\/h3>\n\n\n\n<p>Teraz wywo\u0142ujemy do odpowiedzi u\u017cytkownik\u00f3w Sparka. Nowe Kotlin API for Apache Spark 1.2 to du\u017cy powiew \u015bwie\u017co\u015bci dla u\u017cytkownik\u00f3w Sparka, poniewa\u017c po d\u0142ugim okresie oczekiwania tw\u00f3rcy wreszcie dostarczyli wsparcie dla wcze\u015bniej niedost\u0119pnych <em>User-defined Types<\/em> i <em>User-Defined Functions<\/em>. Teraz tw\u00f3rcy aplikacji mog\u0105 tworzy\u0107 za pomoc\u0105 Kotlinowego API nowe struktury danych, a tak\u017ce operatory, kt\u00f3re potem mo\u017cna u\u017cy\u0107 w trakcie querowania zbioru danych. Zwi\u0119kszona te\u017c zosta\u0142a <a href=\"https:\/\/datalore.jetbrains.com\/view\/notebook\/a7LD9DVJyxTBnt7DqdPaaY\">kompatybilno\u015b\u0107 z Jupyter Notebookiem<\/a>.<\/p>\n\n\n\n<p>Opr\u00f3cz tego sportowano scalowe API dla <em>Resilient Distributed Datasets<\/em> &#8211; do tej pory podstaw\u0105 by\u0142 wariant javowy, kt\u00f3ry jednak posiada\u0142 kilka ogranicze\u0144, wymuszonych przez ograniczon\u0105 ekspresyjno\u015b\u0107 samej Javy. Jako, \u017ce Kotlin jest pod tym wzgl\u0119dem nowocze\u015bniejszym j\u0119zykiem, zdecydowano si\u0119 oprze\u0107 nowy wariant API o edycje Scalow\u0105.<\/p>\n\n\n\n<p>Ciekawostka: \u017ceby zachowa\u0107 pe\u0142n\u0105 kompatybilno\u015b\u0107 ze Sparkiem i edycj\u0105 scalow\u0105, JetBrains wypu\u015bci\u0142o 14(!) r\u00f3\u017cnych wersji API, wspieraj\u0105cych kombinacje Sparka od 3.0.0 do 3.3.0 oraz Scali od 2.12 do 2.13 &#8211; robi\u0105 to dla wszystkich tych, kt\u00f3rzy z jakiego\u015b powodu nie s\u0105 w stanie u\u017cywa\u0107 na produkcji najnowszych wersji kt\u00f3rego\u015b z projekt\u00f3w.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-22-1024x586.png\" alt=\"\" class=\"wp-image-9384\" width=\"512\" height=\"293\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-22-1024x586.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-22-300x172.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-22-768x440.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-22-1536x879.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-22.png 1887w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><figcaption>Nie ka\u017cdy bohater nosi peleryn\u0119 #pdk<\/figcaption><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/blog.jetbrains.com\/ktor\/2022\/08\/12\/ktor-2-1-0-released-and-it-comes-with-goodies\/\">Ktor 2.1<\/a><\/h3>\n\n\n\n<p>A na koniec &#8211; Ktor. Jeden ze standardowy projekt\u00f3w JetBrains doczeka\u0142 si\u0119 bowiem pierwszej du\u017cej aktualizacji po wydaniu wersji 2.0.<\/p>\n\n\n\n<p>Nowy Ktor to przede wszystkim narz\u0119dzi\u00f3wka. Przede wszystkim pojawi\u0142o si\u0119 ktor CLI (co ciekawe, napisany w Kotlin Native!), umo\u017cliwiaj\u0105cy stworzenie nowego projektu. Narz\u0119dzie dost\u0119pne jest na razie na macOS i Linux, z wersj\u0105 Windows dost\u0119pn\u0105 w przysz\u0142o\u015bci. Instrukcje pobrania <a href=\"https:\/\/github.com\/ktorio\/ktor-cli\/releases\/tag\/2.1.0-beta-1\">znajdziecie w oficjalnym repozytorium projektu<\/a>.<\/p>\n\n\n\n<p>To jednak nie jedyny nowy spos\u00f3b na tworzenie nowego projektu ze wsparciem ktor&#8217;a. Pami\u0119tacie jeszcze Yeomana? Ten kiedy\u015b bardzo popularny frontendowy generator projekt\u00f3w z biegiem lat rozszerzy\u0142 sw\u00f3j zakres dzia\u0142ania, dostarczaj\u0105c tak zwane &#8222;generatory&#8221; przeznaczone r\u00f3wnie\u017c na inne stacki technologiczne. Tym razem pad\u0142o w\u0142a\u015bnie na Ktora. Przyzna\u0107 si\u0119, kto u\u017cywa\u0142 lub u\u017cywa jeszcze yeomana?<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"677\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-20.png\" alt=\"\" class=\"wp-image-9376\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-20.png 500w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-20-222x300.png 222w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><figcaption>Podejrzewam, \u017ce pytam nie tej publiki co trzeba <a href=\"https:\/\/pl.wikipedia.org\/wiki\/Yeoman\">[Wikipedia]<\/a><\/figcaption><\/figure><\/div>\n\n\n<p>Ostatnim z narz\u0119dzi kt\u00f3re mog\u0105 nam u\u0142atwi\u0107 prac\u0119 z ktor-em jest nowy plugin gardle, u\u0142atwiaj\u0105cy releasowanie aplikacji. Wynikowy artefakt mo\u017ce by\u0107 teraz \u0142atwo skonfigurowany z pomoc\u0105 gradlowego DSL do postaci FatJara, obrazu Dockerowego lub GraalVM-owej binarki.<\/p>\n\n\n\n<p>A w bonusie: Fani YAMLa mog\u0105 za\u015b teraz u\u017cywa\u0107 w\u0142a\u015bnie tego standardu do definiowania konfiguracji.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/giphy-1-1.gif\" alt=\"\" class=\"wp-image-9395\" width=\"275\" height=\"212\"\/><figcaption>Fani YAMLa \ud83d\udc46<\/figcaption><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\nOmni Man, CC BY-SA 4.0 <https: creativecommons.org=\"\" licenses=\"\" by-sa=\"\" 4.0=\"\">, via Wikimedia Commons<\/https:>\n","protected":false},"excerpt":{"rendered":"<p>Nadesz\u0142a edycja 100! A w niej wreszcie pierwszy JEP od d\u0142ugiego czasu, nowy Android, wsparcie Wirtualnych W\u0105tk\u00f3w w Jetty oraz bardzo du\u017co releas\u00f3w Kotlinowych.<\/p>\n","protected":false},"author":10,"featured_media":9405,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259],"tags":[],"class_list":["post-9360","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm-pl"],"acf":{"estimated_reading_time":"7","feature_image_blog":{"ID":9408,"id":9408,"title":"pexels-photo-6880219","filename":"pexels-photo-6880219.jpeg","filesize":117939,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-6880219.jpeg","link":"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/pexels-photo-6880219-2\/","alt":"","author":"10","description":"","caption":"","name":"pexels-photo-6880219-2","status":"inherit","uploaded_to":9360,"date":"2022-08-17 12:21:37","modified":"2022-08-17 12:23:36","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":1125,"height":750,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-6880219-150x150.jpeg","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-6880219-300x200.jpeg","medium-width":300,"medium-height":200,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-6880219-768x512.jpeg","medium_large-width":768,"medium_large-height":512,"large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-6880219-1024x683.jpeg","large-width":1024,"large-height":683,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-6880219.jpeg","1536x1536-width":1125,"1536x1536-height":750,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-6880219.jpeg","2048x2048-width":1125,"2048x2048-height":750,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-6880219.jpeg","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":200,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-6880219.jpeg","gform-image-choice-md-width":400,"gform-image-choice-md-height":267,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-6880219.jpeg","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":400}},"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/JVM-Weekly-1200x628_V2.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>Android dostaje wsparcie dla JDK 11 - JVM Weekly #100 - 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\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Android dostaje wsparcie dla JDK 11 - JVM Weekly #100 - Vived\" \/>\n<meta property=\"og:description\" content=\"Nadesz\u0142a edycja 100! A w niej wreszcie pierwszy JEP od d\u0142ugiego czasu, nowy Android, wsparcie Wirtualnych W\u0105tk\u00f3w w Jetty oraz bardzo du\u017co releas\u00f3w Kotlinowych.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-17T12:27:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:10:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/JVM-Weekly-1200x628_V2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Artur Skowro\u0144ski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Android dostaje wsparcie dla JDK 11 &#8211; JVM Weekly #100\",\"datePublished\":\"2022-08-17T12:27:14+00:00\",\"dateModified\":\"2022-09-19T11:10:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/\"},\"wordCount\":1490,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/JVM-Weekly-1200x628_V2.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/\",\"url\":\"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/\",\"name\":\"Android dostaje wsparcie dla JDK 11 - JVM Weekly #100 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/JVM-Weekly-1200x628_V2.png\",\"datePublished\":\"2022-08-17T12:27:14+00:00\",\"dateModified\":\"2022-09-19T11:10:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/JVM-Weekly-1200x628_V2.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/JVM-Weekly-1200x628_V2.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Android dostaje wsparcie dla JDK 11 &#8211; JVM Weekly #100\"}]},{\"@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":"Android dostaje wsparcie dla JDK 11 - JVM Weekly #100 - 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\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/","og_locale":"pl_PL","og_type":"article","og_title":"Android dostaje wsparcie dla JDK 11 - JVM Weekly #100 - Vived","og_description":"Nadesz\u0142a edycja 100! A w niej wreszcie pierwszy JEP od d\u0142ugiego czasu, nowy Android, wsparcie Wirtualnych W\u0105tk\u00f3w w Jetty oraz bardzo du\u017co releas\u00f3w Kotlinowych.","og_url":"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/","og_site_name":"Vived","article_published_time":"2022-08-17T12:27:14+00:00","article_modified_time":"2022-09-19T11:10:34+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/JVM-Weekly-1200x628_V2.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\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Android dostaje wsparcie dla JDK 11 &#8211; JVM Weekly #100","datePublished":"2022-08-17T12:27:14+00:00","dateModified":"2022-09-19T11:10:34+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/"},"wordCount":1490,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/JVM-Weekly-1200x628_V2.png","articleSection":["JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/","url":"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/","name":"Android dostaje wsparcie dla JDK 11 - JVM Weekly #100 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/JVM-Weekly-1200x628_V2.png","datePublished":"2022-08-17T12:27:14+00:00","dateModified":"2022-09-19T11:10:34+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/JVM-Weekly-1200x628_V2.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/JVM-Weekly-1200x628_V2.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/jvm-weekly-100-android-dostaje-wsparcie-dla-jdk-11\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Android dostaje wsparcie dla JDK 11 &#8211; JVM Weekly #100"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3","name":"Artur Skowro\u0144ski","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","caption":"Artur Skowro\u0144ski"}}]}},"blocks_vived":[{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>1. Pierwszy nowy JEP od d\u0142ugiego czasu!<\/h2>\n","innerContent":["\n<h2>1. Pierwszy nowy JEP od d\u0142ugiego czasu!<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Od pewnego czasu nie mieli\u015bmy okazji informowa\u0107 Was o \u017cadnych nowych JEP-ach. Powody s\u0105 (podejrzewam) dwa: sezon wakacyjny oraz okres przygotowywania premiery nowego JDK. Powoli jednak sierpie\u0144 zbli\u017ca si\u0119 ku ko\u0144cowi, JDK 19 otrzyma\u0142o ju\u017c swojego pierwszego Release Candidate, mo\u017cna wi\u0119c my\u015ble\u0107 o przysz\u0142o\u015bci. St\u0105d mam niew\u0105tpliw\u0105 rado\u015b\u0107 poinformowa\u0107 Was, \u017ce w naszej setnej edycji pojawia si\u0119 kandydacki <a href=\"https:\/\/openjdk.org\/jeps\/429\">JEP 429: Extent-Local Variables (Incubator)<\/a>. Przyjrzyjmy si\u0119 zatem, co si\u0119 za nim kryje.<\/p>\n","innerContent":["\n<p>Od pewnego czasu nie mieli\u015bmy okazji informowa\u0107 Was o \u017cadnych nowych JEP-ach. Powody s\u0105 (podejrzewam) dwa: sezon wakacyjny oraz okres przygotowywania premiery nowego JDK. Powoli jednak sierpie\u0144 zbli\u017ca si\u0119 ku ko\u0144cowi, JDK 19 otrzyma\u0142o ju\u017c swojego pierwszego Release Candidate, mo\u017cna wi\u0119c my\u015ble\u0107 o przysz\u0142o\u015bci. St\u0105d mam niew\u0105tpliw\u0105 rado\u015b\u0107 poinformowa\u0107 Was, \u017ce w naszej setnej edycji pojawia si\u0119 kandydacki <a href=\"https:\/\/openjdk.org\/jeps\/429\">JEP 429: Extent-Local Variables (Incubator)<\/a>. Przyjrzyjmy si\u0119 zatem, co si\u0119 za nim kryje.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Czym s\u0105 <code>extent-local variables<\/code>? Jest to alternatywa dla istniej\u0105cego <code>ThreadLocal<\/code>, stworzona jako kompan Project Loom. Ich celem jest umo\u017cliwi\u0107 wsp\u00f3\u0142dzielenie niemutowanych danych w obr\u0119bie i pomi\u0119dzy w\u0105tkami. Ich u\u017cycie wygl\u0105da\u0107 ma w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n","innerContent":["\n<p>Czym s\u0105 <code>extent-local variables<\/code>? Jest to alternatywa dla istniej\u0105cego <code>ThreadLocal<\/code>, stworzona jako kompan Project Loom. Ich celem jest umo\u017cliwi\u0107 wsp\u00f3\u0142dzielenie niemutowanych danych w obr\u0119bie i pomi\u0119dzy w\u0105tkami. Ich u\u017cycie wygl\u0105da\u0107 ma w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>final static ExtentLocal&lt;...&gt; V = new ExtentLocal&lt;&gt;();\n\n\/\/ In some method\nExtentLocal.where(V, &lt;value&gt;)\n           .run(() -&gt; { ... V.get() ... call methods ... });\n<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>final static ExtentLocal&lt;...&gt; V = new ExtentLocal&lt;&gt;();\n\n\/\/ In some method\nExtentLocal.where(V, &lt;value&gt;)\n           .run(() -&gt; { ... V.get() ... call methods ... });\n<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Powy\u017csza struktura posiada kilka zalet. Po pierwsze, umo\u017cliwia okre\u015blenie bardzo konkretnego zakresu \"obowi\u0105zywania\" zmiennej - co\u015b czego nie da\u0142o si\u0119 uzyska\u0107 w przypadku zwyk\u0142ego ThreadLocala, b\u0119d\u0105cego swoistym workiem na dane. W powy\u017cszym przypadku, <code>V<\/code> nie posiada metody <code>.set<\/code> - jest wi\u0119c (niestety, wy\u0142\u0105cznie w \"p\u0142ytki\" spos\u00f3b) niemutowalne, dodatkowo powinno by\u0107 deklarowane jako <code>final<\/code>, a jej warto\u015b\u0107 ustawiana jest wy\u0142\u0105cznie w metodzie <code>where<\/code>. W nieco zawi\u0142y, ale efektywny spos\u00f3b rozwi\u0105za\u0107 ma to problem przypadkowej podmiany warto\u015bci referencji pochodz\u0105cej z ThreadLocala.<\/p>\n","innerContent":["\n<p>Powy\u017csza struktura posiada kilka zalet. Po pierwsze, umo\u017cliwia okre\u015blenie bardzo konkretnego zakresu \"obowi\u0105zywania\" zmiennej - co\u015b czego nie da\u0142o si\u0119 uzyska\u0107 w przypadku zwyk\u0142ego ThreadLocala, b\u0119d\u0105cego swoistym workiem na dane. W powy\u017cszym przypadku, <code>V<\/code> nie posiada metody <code>.set<\/code> - jest wi\u0119c (niestety, wy\u0142\u0105cznie w \"p\u0142ytki\" spos\u00f3b) niemutowalne, dodatkowo powinno by\u0107 deklarowane jako <code>final<\/code>, a jej warto\u015b\u0107 ustawiana jest wy\u0142\u0105cznie w metodzie <code>where<\/code>. W nieco zawi\u0142y, ale efektywny spos\u00f3b rozwi\u0105za\u0107 ma to problem przypadkowej podmiany warto\u015bci referencji pochodz\u0105cej z ThreadLocala.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Co ze starym, dobrym, przyzwanym ju\u017c w tym tek\u015bcie ThreadLocal? Tutaj uspokoj\u0119: nowy typ zmiennych z JEP 429 nie ma na celu jego zast\u0105pienia i wymuszania jego migracji. Oba rozwi\u0105zania b\u0119d\u0105 \u017cy\u0142y r\u00f3wnolegle. Polecam jednak lektur\u0119 nowego JEP-a ka\u017cdemu (\u015bwiadomemu) u\u017cytkownikowi ThreadLocal - przy motywacji rozszerzenia Javy o <code>extent-local variables<\/code>, tw\u00f3rcy wypunktowali sporo wad (ale r\u00f3wnie\u017c zalet) istniej\u0105cego rozwi\u0105zania.<\/p>\n","innerContent":["\n<p>Co ze starym, dobrym, przyzwanym ju\u017c w tym tek\u015bcie ThreadLocal? Tutaj uspokoj\u0119: nowy typ zmiennych z JEP 429 nie ma na celu jego zast\u0105pienia i wymuszania jego migracji. Oba rozwi\u0105zania b\u0119d\u0105 \u017cy\u0142y r\u00f3wnolegle. Polecam jednak lektur\u0119 nowego JEP-a ka\u017cdemu (\u015bwiadomemu) u\u017cytkownikowi ThreadLocal - przy motywacji rozszerzenia Javy o <code>extent-local variables<\/code>, tw\u00f3rcy wypunktowali sporo wad (ale r\u00f3wnie\u017c zalet) istniej\u0105cego rozwi\u0105zania.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":9390,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-23.png\" alt=\"\" class=\"wp-image-9390\"\/><figcaption>Aczkolwiek wi\u0119kszo\u015b\u0107 tych zarzut\u00f3w to programistyczny fat-shaming.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-23.png\" alt=\"\" class=\"wp-image-9390\"\/><figcaption>Aczkolwiek wi\u0119kszo\u015b\u0107 tych zarzut\u00f3w to programistyczny fat-shaming.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Po powy\u017cszym JEP-ie wida\u0107, jak mocno Loom kieruje dalszym rozwojem j\u0119zyka. A jak ju\u017c o Loomie mowa...<\/p>\n","innerContent":["\n<p>Po powy\u017cszym JEP-ie wida\u0107, jak mocno Loom kieruje dalszym rozwojem j\u0119zyka. A jak ju\u017c o Loomie mowa...<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/openjdk.org\/jeps\/429\">JEP 429: Extent-Local Variables (Incubator)<\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/openjdk.org\/jeps\/429\">JEP 429: Extent-Local Variables (Incubator)<\/a><\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. Jetty dostaje wsparcie dla Projektu Loom<\/h2>\n","innerContent":["\n<h2>2. Jetty dostaje wsparcie dla Projektu Loom<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jetty, biblioteka dostarczaj\u0105ca samodzieln\u0105 implementacje web server i kontenera servlet\u00f3w, pozostaje jednym z najpopularniejszych rozwi\u0105za\u0144 tego typu. Wprawdzie konkurencja pod postaci\u0105 cho\u0107by Embedded Tomcat, Undertow czy Netty do\u015b\u0107 mocno go ostatnio podgryza, to jednak z perspektywy programist\u00f3w bardzo dobra nowina - konkurencja wymusza ci\u0105g\u0142y rozw\u00f3j. Dlatego te\u017c z rado\u015bci\u0105 informujemy o oficjalnym <a href=\"https:\/\/github.com\/eclipse\/jetty.project\/issues\/8007\">wsparciu projektu dla Looma<\/a>.<\/p>\n","innerContent":["\n<p>Jetty, biblioteka dostarczaj\u0105ca samodzieln\u0105 implementacje web server i kontenera servlet\u00f3w, pozostaje jednym z najpopularniejszych rozwi\u0105za\u0144 tego typu. Wprawdzie konkurencja pod postaci\u0105 cho\u0107by Embedded Tomcat, Undertow czy Netty do\u015b\u0107 mocno go ostatnio podgryza, to jednak z perspektywy programist\u00f3w bardzo dobra nowina - konkurencja wymusza ci\u0105g\u0142y rozw\u00f3j. Dlatego te\u017c z rado\u015bci\u0105 informujemy o oficjalnym <a href=\"https:\/\/github.com\/eclipse\/jetty.project\/issues\/8007\">wsparciu projektu dla Looma<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zmiany wejd\u0105 w \u017cycie wraz z nowymi wersjami Jetty'ego 10.0.x (najpierw wspierana ma by\u0107 10.0.x), ale ca\u0142o\u015b\u0107 przyci\u0105ga wzrok nie tylko z powodu bycia kolejnym du\u017cym projektem wspieraj\u0105cym Looma. Osobi\u015bcie uwa\u017cam za bardzo uroczy fakt, \u017ce sam Alan Bateman zasugerowa\u0142 w zamkni\u0119tym PullReque\u015bcie poprawki, kt\u00f3re tw\u00f3rcy wprowadzili. Jest dla mnie zawsze co\u015b bardzo uroczego w tym, jak tw\u00f3rcy Javy odpowiadaj\u0105 na w\u0105tki redditowe\/hackernewsowe czy w\u0142a\u015bnie robi\u0105 Code Review projektom.<\/p>\n","innerContent":["\n<p>Zmiany wejd\u0105 w \u017cycie wraz z nowymi wersjami Jetty'ego 10.0.x (najpierw wspierana ma by\u0107 10.0.x), ale ca\u0142o\u015b\u0107 przyci\u0105ga wzrok nie tylko z powodu bycia kolejnym du\u017cym projektem wspieraj\u0105cym Looma. Osobi\u015bcie uwa\u017cam za bardzo uroczy fakt, \u017ce sam Alan Bateman zasugerowa\u0142 w zamkni\u0119tym PullReque\u015bcie poprawki, kt\u00f3re tw\u00f3rcy wprowadzili. Jest dla mnie zawsze co\u015b bardzo uroczego w tym, jak tw\u00f3rcy Javy odpowiadaj\u0105 na w\u0105tki redditowe\/hackernewsowe czy w\u0142a\u015bnie robi\u0105 Code Review projektom.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":9362,"width":582,"height":500,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-16.png\" alt=\"\" class=\"wp-image-9362\" width=\"582\" height=\"500\"\/><figcaption>Tak to widz\u0119.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-16.png\" alt=\"\" class=\"wp-image-9362\" width=\"582\" height=\"500\"\/><figcaption>Tak to widz\u0119.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli kto\u015b jest ciekawy jak ca\u0142o\u015b\u0107 zosta\u0142a zaimplementowana - tutaj macie <a href=\"https:\/\/github.com\/eclipse\/jetty.project\/commit\/be3d16bdbbb63cc0df7e4964d8a47e3e376a631d\">konkretny commit<\/a>.<\/p>\n","innerContent":["\n<p>Je\u015bli kto\u015b jest ciekawy jak ca\u0142o\u015b\u0107 zosta\u0142a zaimplementowana - tutaj macie <a href=\"https:\/\/github.com\/eclipse\/jetty.project\/commit\/be3d16bdbbb63cc0df7e4964d8a47e3e376a631d\">konkretny commit<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/github.com\/eclipse\/jetty.project\/issues\/8007\">Support Loom #8007<\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/github.com\/eclipse\/jetty.project\/issues\/8007\">Support Loom #8007<\/a><\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. Android 13 przynosi wsparcie Javy 11<\/h2>\n","innerContent":["\n<h2>3. Android 13 przynosi wsparcie Javy 11<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pocz\u0105tkiem tygodnia premier\u0119 mia\u0142 nowy Android 13. Dobrze pokazuje to pewn\u0105 zmian\u0119 my\u015blenia o tym systemie. Kiedy\u015b by\u0142a to naprawd\u0119 du\u017ce wydarzenie, dzi\u015b premiera w tym wypadku oznacza\u0142a \"zmergowanie\" ca\u0142o\u015bci do g\u0142\u00f3wnej ga\u0142\u0119zi AOSP (Android Open-Source Project) oraz wypuszczenie nowej wersji na Pixele, w oczekiwaniu na ruchy reszty graczy rynkowych - troch\u0119 jak to ma miejsce w wypadku Kernela Linuxa. R\u00f3wnie\u017c lista nowo\u015bci z mojej perspektywy jest dosy\u0107 zbli\u017cona - z punktu widzenia u\u017cytkownika, Android 13 to troch\u0119 wi\u0119ksze mo\u017cliwo\u015bci personalizacji (min. wersji j\u0119zykowej konkretnych aplikacji)<\/p>\n","innerContent":["\n<p>Pocz\u0105tkiem tygodnia premier\u0119 mia\u0142 nowy Android 13. Dobrze pokazuje to pewn\u0105 zmian\u0119 my\u015blenia o tym systemie. Kiedy\u015b by\u0142a to naprawd\u0119 du\u017ce wydarzenie, dzi\u015b premiera w tym wypadku oznacza\u0142a \"zmergowanie\" ca\u0142o\u015bci do g\u0142\u00f3wnej ga\u0142\u0119zi AOSP (Android Open-Source Project) oraz wypuszczenie nowej wersji na Pixele, w oczekiwaniu na ruchy reszty graczy rynkowych - troch\u0119 jak to ma miejsce w wypadku Kernela Linuxa. R\u00f3wnie\u017c lista nowo\u015bci z mojej perspektywy jest dosy\u0107 zbli\u017cona - z punktu widzenia u\u017cytkownika, Android 13 to troch\u0119 wi\u0119ksze mo\u017cliwo\u015bci personalizacji (min. wersji j\u0119zykowej konkretnych aplikacji)<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Z punktu widzenia programisty jest troch\u0119 wi\u0005\u0119cej. Oczywi\u015bcie, mamy standardowe poprawki wydajno\u015bciowe (lepszy Garbage Collector i szybszy dost\u0119p JNI) poza tym nowo\u015bci dla programist\u00f3w, jak nowe API do font\u00f3w u\u0142atwiaj\u0105ce np. prac\u0119 z nie-\u0142aci\u0144skim alfabetem czy lepszy performance renderingu, a tak\u017ce wsparcie dla standardu <a href=\"https:\/\/docs.microsoft.com\/en-us\/typography\/opentype\/spec\/colr\">COLRV1<\/a>. Pojawia si\u0119 te\u017c min. wsparcie dla Bluetooth LE Audio czy MIDI 2.0, a tak\u017ce lepsza obs\u0142uga shader\u00f3w. Wisienk\u0105 na torcie jest masa nowych uprawnie\u0144, kt\u00f3re tw\u00f3rcy musz\u0105 zbiera\u0107 od u\u017cytkownik\u00f3w przed dost\u0119pem do ich danych.<\/p>\n","innerContent":["\n<p>Z punktu widzenia programisty jest troch\u0119 wi\u0005\u0119cej. Oczywi\u015bcie, mamy standardowe poprawki wydajno\u015bciowe (lepszy Garbage Collector i szybszy dost\u0119p JNI) poza tym nowo\u015bci dla programist\u00f3w, jak nowe API do font\u00f3w u\u0142atwiaj\u0105ce np. prac\u0119 z nie-\u0142aci\u0144skim alfabetem czy lepszy performance renderingu, a tak\u017ce wsparcie dla standardu <a href=\"https:\/\/docs.microsoft.com\/en-us\/typography\/opentype\/spec\/colr\">COLRV1<\/a>. Pojawia si\u0119 te\u017c min. wsparcie dla Bluetooth LE Audio czy MIDI 2.0, a tak\u017ce lepsza obs\u0142uga shader\u00f3w. Wisienk\u0105 na torcie jest masa nowych uprawnie\u0144, kt\u00f3re tw\u00f3rcy musz\u0105 zbiera\u0107 od u\u017cytkownik\u00f3w przed dost\u0119pem do ich danych.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=M61xXdVlP5o","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=M61xXdVlP5o\n<\/div><figcaption>W sumie to nawet fajnie te zmiany, ale jednak kontent do\u015b\u0107 niszowy.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=M61xXdVlP5o\n<\/div><figcaption>W sumie to nawet fajnie te zmiany, ale jednak kontent do\u015b\u0107 niszowy.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jednak g\u0142\u00f3wny pow\u00f3d, dla kt\u00f3rego tutaj pisz\u0119, jest przej\u015bcie Androida na JDK 11. Najnowsza edycja wewn\u0119trznie przesz\u0142a na Java 11, wprowadzaj\u0105c do platformy min. Mo\u017cliwo\u015b\u0107 u\u017cywania <code>var<\/code>, <code>VarHandle<\/code> z <code>java.utl.concurrent<\/code> czy wielu innych pomocniczych API (jak <code>ifPresentOrElse()<\/code> na Optionalach \u2764\ufe0f). Wida\u0107, \u017ce wyniki procesu Google\/Oracle z zesz\u0142ego roku rozwi\u0105za\u0142y tw\u00f3rcom r\u0119ce i powoli b\u0119d\u0105 wdra\u017ca\u0107 nowo\u015bci z Javy do Androida.<\/p>\n","innerContent":["\n<p>Jednak g\u0142\u00f3wny pow\u00f3d, dla kt\u00f3rego tutaj pisz\u0119, jest przej\u015bcie Androida na JDK 11. Najnowsza edycja wewn\u0119trznie przesz\u0142a na Java 11, wprowadzaj\u0105c do platformy min. Mo\u017cliwo\u015b\u0107 u\u017cywania <code>var<\/code>, <code>VarHandle<\/code> z <code>java.utl.concurrent<\/code> czy wielu innych pomocniczych API (jak <code>ifPresentOrElse()<\/code> na Optionalach \u2764\ufe0f). Wida\u0107, \u017ce wyniki procesu Google\/Oracle z zesz\u0142ego roku rozwi\u0105za\u0142y tw\u00f3rcom r\u0119ce i powoli b\u0119d\u0105 wdra\u017ca\u0107 nowo\u015bci z Javy do Androida.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":9369,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-17.png\" alt=\"\" class=\"wp-image-9369\"\/><figcaption>Ja wiem, \u017ce to jest no-news: pewnie i tak wszyscy teraz u\u017cywaj\u0105 ju\u017c Kotlina.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-17.png\" alt=\"\" class=\"wp-image-9369\"\/><figcaption>Ja wiem, \u017ce to jest no-news: pewnie i tak wszyscy teraz u\u017cywaj\u0105 ju\u017c Kotlina.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pe\u0142n\u0105 list\u0119 zmian znajdziecie tutaj od nieocenionych <a href=\"https:\/\/www.xda-developers.com\/android-13\/\">XDA Developers<\/a>.<\/p>\n","innerContent":["\n<p>Pe\u0142n\u0105 list\u0119 zmian znajdziecie tutaj od nieocenionych <a href=\"https:\/\/www.xda-developers.com\/android-13\/\">XDA Developers<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>BTW: Wiedzieli\u015bcie, \u017ce Google dalej internalowo u\u017cywa nazw deser\u00f3w do nazywania kolejnych wersji Androida? \"Trzynastka\" to internalowo \"Tiramisu\".<\/p>\n","innerContent":["\n<p>BTW: Wiedzieli\u015bcie, \u017ce Google dalej internalowo u\u017cywa nazw deser\u00f3w do nazywania kolejnych wersji Androida? \"Trzynastka\" to internalowo \"Tiramisu\".<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":9366,"width":768,"height":512,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/DSC02002-1024x683.jpeg\" alt=\"\" class=\"wp-image-9366\" width=\"768\" height=\"512\"\/><figcaption>Prywata: Tak si\u0119 nazywa\u0142a te\u017c&nbsp;moja \u015bp. ukochana \u015awinka Morska \ud83d\udc94. Goodnight, Sweet Prince.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/DSC02002-1024x683.jpeg\" alt=\"\" class=\"wp-image-9366\" width=\"768\" height=\"512\"\/><figcaption>Prywata: Tak si\u0119 nazywa\u0142a te\u017c&nbsp;moja \u015bp. ukochana \u015awinka Morska \ud83d\udc94. Goodnight, Sweet Prince.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/android-developers.googleblog.com\/2022\/08\/android-13-is-in-aosp.html\">Android 13 is in AOSP!<\/a><\/li><li><a href=\"https:\/\/www.xda-developers.com\/android-13\/\">Android 13 \u201cTiramisu\u201d: Everything we know so far about Google\u2019s next big update!<\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/android-developers.googleblog.com\/2022\/08\/android-13-is-in-aosp.html\">Android 13 is in AOSP!<\/a><\/li><li><a href=\"https:\/\/www.xda-developers.com\/android-13\/\">Android 13 \u201cTiramisu\u201d: Everything we know so far about Google\u2019s next big update!<\/a><\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>4. (Kotlinowy) Release Radar<\/h2>\n","innerContent":["\n<h2>4. (Kotlinowy) Release Radar<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A na koniec - Release Radar. Tym razem taki mocno Kotlinowy.<\/p>\n","innerContent":["\n<p>A na koniec - Release Radar. Tym razem taki mocno Kotlinowy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3><a href=\"https:\/\/github.com\/ExpediaGroup\/graphql-kotlin\/releases\/tag\/6.0.0\">graphql-kotlin 6.0<\/a><\/h3>\n","innerContent":["\n<h3><a href=\"https:\/\/github.com\/ExpediaGroup\/graphql-kotlin\/releases\/tag\/6.0.0\">graphql-kotlin 6.0<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>U\u017cywacie GraphQL? Je\u015bli tak, specjalnie dla Was zaczniemy od nowego, du\u017cego wydania Kotlin GraphQL, biblioteki rozwijanej przez ExpediaGroup. Dzi\u0119ki nowemu wydaniu, du\u017co prostsze ma by\u0107 propagowanie kontekstu kortyn, kt\u00f3ry teraz b\u0119dzie bezpo\u015brednio dost\u0119pny dla u\u017cytkownik\u00f3w API. Ca\u0142o\u015b\u0107 otrzyma\u0142a te\u017c wszystkie poprawki pochodz\u0105ce z <code>graphql-java<\/code>, nad kt\u00f3r\u0105 jest wrapperem - tw\u00f3rcy zaktualizowali \"bebechy\" do jej wersji 18. Biblioteka otrzyma\u0142a te\u017c wsparcie dla specyfikacji Apollo Federation w wersji v2, u\u0142atwiaj\u0105cej modularyzacj\u0119 GraphQL-owego \"grafu\", a tak\u017ce APQ - Apollo Automatic Persisted Queries.<\/p>\n","innerContent":["\n<p>U\u017cywacie GraphQL? Je\u015bli tak, specjalnie dla Was zaczniemy od nowego, du\u017cego wydania Kotlin GraphQL, biblioteki rozwijanej przez ExpediaGroup. Dzi\u0119ki nowemu wydaniu, du\u017co prostsze ma by\u0107 propagowanie kontekstu kortyn, kt\u00f3ry teraz b\u0119dzie bezpo\u015brednio dost\u0119pny dla u\u017cytkownik\u00f3w API. Ca\u0142o\u015b\u0107 otrzyma\u0142a te\u017c wszystkie poprawki pochodz\u0105ce z <code>graphql-java<\/code>, nad kt\u00f3r\u0105 jest wrapperem - tw\u00f3rcy zaktualizowali \"bebechy\" do jej wersji 18. Biblioteka otrzyma\u0142a te\u017c wsparcie dla specyfikacji Apollo Federation w wersji v2, u\u0142atwiaj\u0105cej modularyzacj\u0119 GraphQL-owego \"grafu\", a tak\u017ce APQ - Apollo Automatic Persisted Queries.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":9381,"width":440,"height":244,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/poker-face-poker.gif\" alt=\"\" class=\"wp-image-9381\" width=\"440\" height=\"244\"\/><figcaption>Wida\u0107 mocno, \u017ce to w\u0142a\u015bnie Apollo rozdaje karty i ustala zasady gry w przestrzeni GraphQL.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/poker-face-poker.gif\" alt=\"\" class=\"wp-image-9381\" width=\"440\" height=\"244\"\/><figcaption>Wida\u0107 mocno, \u017ce to w\u0142a\u015bnie Apollo rozdaje karty i ustala zasady gry w przestrzeni GraphQL.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A jak ju\u017c jeste\u015bmy przy temacie GraphQL i Apollo, to tw\u00f3rcy Apollo Kotlin poszli bardzo mocno w Multiplatform, a sama platforma dosta\u0142a nowy Memory Manager, kt\u00f3ry stanie si\u0119 oficjalnie obowi\u0105zuj\u0105cym rozwi\u0105zaniem wraz z <a href=\"https:\/\/www.apollographql.com\/blog\/mobile\/kotlin\/apollo-kotlin-new-multiplatform-memory-manager\/\">premier\u0105 Kotlin 1.7.20<\/a>.<\/p>\n","innerContent":["\n<p>A jak ju\u017c jeste\u015bmy przy temacie GraphQL i Apollo, to tw\u00f3rcy Apollo Kotlin poszli bardzo mocno w Multiplatform, a sama platforma dosta\u0142a nowy Memory Manager, kt\u00f3ry stanie si\u0119 oficjalnie obowi\u0105zuj\u0105cym rozwi\u0105zaniem wraz z <a href=\"https:\/\/www.apollographql.com\/blog\/mobile\/kotlin\/apollo-kotlin-new-multiplatform-memory-manager\/\">premier\u0105 Kotlin 1.7.20<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2022\/08\/kotlin-api-for-apache-spark-v1-2-udts-udfs-rdds-compatibility-and-more\/\">Kotlin API for Apache Spark 1.2<\/a><\/h3>\n","innerContent":["\n<h3><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2022\/08\/kotlin-api-for-apache-spark-v1-2-udts-udfs-rdds-compatibility-and-more\/\">Kotlin API for Apache Spark 1.2<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Teraz wywo\u0142ujemy do odpowiedzi u\u017cytkownik\u00f3w Sparka. Nowe Kotlin API for Apache Spark 1.2 to du\u017cy powiew \u015bwie\u017co\u015bci dla u\u017cytkownik\u00f3w Sparka, poniewa\u017c po d\u0142ugim okresie oczekiwania tw\u00f3rcy wreszcie dostarczyli wsparcie dla wcze\u015bniej niedost\u0119pnych <em>User-defined Types<\/em> i <em>User-Defined Functions<\/em>. Teraz tw\u00f3rcy aplikacji mog\u0105 tworzy\u0107 za pomoc\u0105 Kotlinowego API nowe struktury danych, a tak\u017ce operatory, kt\u00f3re potem mo\u017cna u\u017cy\u0107 w trakcie querowania zbioru danych. Zwi\u0119kszona te\u017c zosta\u0142a <a href=\"https:\/\/datalore.jetbrains.com\/view\/notebook\/a7LD9DVJyxTBnt7DqdPaaY\">kompatybilno\u015b\u0107 z Jupyter Notebookiem<\/a>.<\/p>\n","innerContent":["\n<p>Teraz wywo\u0142ujemy do odpowiedzi u\u017cytkownik\u00f3w Sparka. Nowe Kotlin API for Apache Spark 1.2 to du\u017cy powiew \u015bwie\u017co\u015bci dla u\u017cytkownik\u00f3w Sparka, poniewa\u017c po d\u0142ugim okresie oczekiwania tw\u00f3rcy wreszcie dostarczyli wsparcie dla wcze\u015bniej niedost\u0119pnych <em>User-defined Types<\/em> i <em>User-Defined Functions<\/em>. Teraz tw\u00f3rcy aplikacji mog\u0105 tworzy\u0107 za pomoc\u0105 Kotlinowego API nowe struktury danych, a tak\u017ce operatory, kt\u00f3re potem mo\u017cna u\u017cy\u0107 w trakcie querowania zbioru danych. Zwi\u0119kszona te\u017c zosta\u0142a <a href=\"https:\/\/datalore.jetbrains.com\/view\/notebook\/a7LD9DVJyxTBnt7DqdPaaY\">kompatybilno\u015b\u0107 z Jupyter Notebookiem<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Opr\u00f3cz tego sportowano scalowe API dla <em>Resilient Distributed Datasets<\/em> - do tej pory podstaw\u0105 by\u0142 wariant javowy, kt\u00f3ry jednak posiada\u0142 kilka ogranicze\u0144, wymuszonych przez ograniczon\u0105 ekspresyjno\u015b\u0107 samej Javy. Jako, \u017ce Kotlin jest pod tym wzgl\u0119dem nowocze\u015bniejszym j\u0119zykiem, zdecydowano si\u0119 oprze\u0107 nowy wariant API o edycje Scalow\u0105.<\/p>\n","innerContent":["\n<p>Opr\u00f3cz tego sportowano scalowe API dla <em>Resilient Distributed Datasets<\/em> - do tej pory podstaw\u0105 by\u0142 wariant javowy, kt\u00f3ry jednak posiada\u0142 kilka ogranicze\u0144, wymuszonych przez ograniczon\u0105 ekspresyjno\u015b\u0107 samej Javy. Jako, \u017ce Kotlin jest pod tym wzgl\u0119dem nowocze\u015bniejszym j\u0119zykiem, zdecydowano si\u0119 oprze\u0107 nowy wariant API o edycje Scalow\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ciekawostka: \u017ceby zachowa\u0107 pe\u0142n\u0105 kompatybilno\u015b\u0107 ze Sparkiem i edycj\u0105 scalow\u0105, JetBrains wypu\u015bci\u0142o 14(!) r\u00f3\u017cnych wersji API, wspieraj\u0105cych kombinacje Sparka od 3.0.0 do 3.3.0 oraz Scali od 2.12 do 2.13 - robi\u0105 to dla wszystkich tych, kt\u00f3rzy z jakiego\u015b powodu nie s\u0105 w stanie u\u017cywa\u0107 na produkcji najnowszych wersji kt\u00f3rego\u015b z projekt\u00f3w.<\/p>\n","innerContent":["\n<p>Ciekawostka: \u017ceby zachowa\u0107 pe\u0142n\u0105 kompatybilno\u015b\u0107 ze Sparkiem i edycj\u0105 scalow\u0105, JetBrains wypu\u015bci\u0142o 14(!) r\u00f3\u017cnych wersji API, wspieraj\u0105cych kombinacje Sparka od 3.0.0 do 3.3.0 oraz Scali od 2.12 do 2.13 - robi\u0105 to dla wszystkich tych, kt\u00f3rzy z jakiego\u015b powodu nie s\u0105 w stanie u\u017cywa\u0107 na produkcji najnowszych wersji kt\u00f3rego\u015b z projekt\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":9384,"width":512,"height":293,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-22-1024x586.png\" alt=\"\" class=\"wp-image-9384\" width=\"512\" height=\"293\"\/><figcaption>Nie ka\u017cdy bohater nosi peleryn\u0119 #pdk<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-22-1024x586.png\" alt=\"\" class=\"wp-image-9384\" width=\"512\" height=\"293\"\/><figcaption>Nie ka\u017cdy bohater nosi peleryn\u0119 #pdk<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3><a href=\"https:\/\/blog.jetbrains.com\/ktor\/2022\/08\/12\/ktor-2-1-0-released-and-it-comes-with-goodies\/\">Ktor 2.1<\/a><\/h3>\n","innerContent":["\n<h3><a href=\"https:\/\/blog.jetbrains.com\/ktor\/2022\/08\/12\/ktor-2-1-0-released-and-it-comes-with-goodies\/\">Ktor 2.1<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A na koniec - Ktor. Jeden ze standardowy projekt\u00f3w JetBrains doczeka\u0142 si\u0119 bowiem pierwszej du\u017cej aktualizacji po wydaniu wersji 2.0.<\/p>\n","innerContent":["\n<p>A na koniec - Ktor. Jeden ze standardowy projekt\u00f3w JetBrains doczeka\u0142 si\u0119 bowiem pierwszej du\u017cej aktualizacji po wydaniu wersji 2.0.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nowy Ktor to przede wszystkim narz\u0119dzi\u00f3wka. Przede wszystkim pojawi\u0142o si\u0119 ktor CLI (co ciekawe, napisany w Kotlin Native!), umo\u017cliwiaj\u0105cy stworzenie nowego projektu. Narz\u0119dzie dost\u0119pne jest na razie na macOS i Linux, z wersj\u0105 Windows dost\u0119pn\u0105 w przysz\u0142o\u015bci. Instrukcje pobrania <a href=\"https:\/\/github.com\/ktorio\/ktor-cli\/releases\/tag\/2.1.0-beta-1\">znajdziecie w oficjalnym repozytorium projektu<\/a>.<\/p>\n","innerContent":["\n<p>Nowy Ktor to przede wszystkim narz\u0119dzi\u00f3wka. Przede wszystkim pojawi\u0142o si\u0119 ktor CLI (co ciekawe, napisany w Kotlin Native!), umo\u017cliwiaj\u0105cy stworzenie nowego projektu. Narz\u0119dzie dost\u0119pne jest na razie na macOS i Linux, z wersj\u0105 Windows dost\u0119pn\u0105 w przysz\u0142o\u015bci. Instrukcje pobrania <a href=\"https:\/\/github.com\/ktorio\/ktor-cli\/releases\/tag\/2.1.0-beta-1\">znajdziecie w oficjalnym repozytorium projektu<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To jednak nie jedyny nowy spos\u00f3b na tworzenie nowego projektu ze wsparciem ktor'a. Pami\u0119tacie jeszcze Yeomana? Ten kiedy\u015b bardzo popularny frontendowy generator projekt\u00f3w z biegiem lat rozszerzy\u0142 sw\u00f3j zakres dzia\u0142ania, dostarczaj\u0105c tak zwane \"generatory\" przeznaczone r\u00f3wnie\u017c na inne stacki technologiczne. Tym razem pad\u0142o w\u0142a\u015bnie na Ktora. Przyzna\u0107 si\u0119, kto u\u017cywa\u0142 lub u\u017cywa jeszcze yeomana?<\/p>\n","innerContent":["\n<p>To jednak nie jedyny nowy spos\u00f3b na tworzenie nowego projektu ze wsparciem ktor'a. Pami\u0119tacie jeszcze Yeomana? Ten kiedy\u015b bardzo popularny frontendowy generator projekt\u00f3w z biegiem lat rozszerzy\u0142 sw\u00f3j zakres dzia\u0142ania, dostarczaj\u0105c tak zwane \"generatory\" przeznaczone r\u00f3wnie\u017c na inne stacki technologiczne. Tym razem pad\u0142o w\u0142a\u015bnie na Ktora. Przyzna\u0107 si\u0119, kto u\u017cywa\u0142 lub u\u017cywa jeszcze yeomana?<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":9376,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-20.png\" alt=\"\" class=\"wp-image-9376\"\/><figcaption>Podejrzewam, \u017ce pytam nie tej publiki co trzeba <a href=\"https:\/\/pl.wikipedia.org\/wiki\/Yeoman\">[Wikipedia]<\/a><\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-20.png\" alt=\"\" class=\"wp-image-9376\"\/><figcaption>Podejrzewam, \u017ce pytam nie tej publiki co trzeba <a href=\"https:\/\/pl.wikipedia.org\/wiki\/Yeoman\">[Wikipedia]<\/a><\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ostatnim z narz\u0119dzi kt\u00f3re mog\u0105 nam u\u0142atwi\u0107 prac\u0119 z ktor-em jest nowy plugin gardle, u\u0142atwiaj\u0105cy releasowanie aplikacji. Wynikowy artefakt mo\u017ce by\u0107 teraz \u0142atwo skonfigurowany z pomoc\u0105 gradlowego DSL do postaci FatJara, obrazu Dockerowego lub GraalVM-owej binarki.<\/p>\n","innerContent":["\n<p>Ostatnim z narz\u0119dzi kt\u00f3re mog\u0105 nam u\u0142atwi\u0107 prac\u0119 z ktor-em jest nowy plugin gardle, u\u0142atwiaj\u0105cy releasowanie aplikacji. Wynikowy artefakt mo\u017ce by\u0107 teraz \u0142atwo skonfigurowany z pomoc\u0105 gradlowego DSL do postaci FatJara, obrazu Dockerowego lub GraalVM-owej binarki.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A w bonusie: Fani YAMLa mog\u0105 za\u015b teraz u\u017cywa\u0107 w\u0142a\u015bnie tego standardu do definiowania konfiguracji.<\/p>\n","innerContent":["\n<p>A w bonusie: Fani YAMLa mog\u0105 za\u015b teraz u\u017cywa\u0107 w\u0142a\u015bnie tego standardu do definiowania konfiguracji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":9395,"width":275,"height":212,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/giphy-1-1.gif\" alt=\"\" class=\"wp-image-9395\" width=\"275\" height=\"212\"\/><figcaption>Fani YAMLa \ud83d\udc46<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/giphy-1-1.gif\" alt=\"\" class=\"wp-image-9395\" width=\"275\" height=\"212\"\/><figcaption>Fani YAMLa \ud83d\udc46<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/html","attrs":[],"innerBlocks":[],"innerHTML":"\nOmni Man, CC BY-SA 4.0 <https: creativecommons.org=\"\" licenses=\"\" by-sa=\"\" 4.0=\"\">, via Wikimedia Commons<\/https:>\n","innerContent":["\nOmni Man, CC BY-SA 4.0 <https: creativecommons.org=\"\" licenses=\"\" by-sa=\"\" 4.0=\"\">, via Wikimedia Commons<\/https:>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9360","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=9360"}],"version-history":[{"count":6,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9360\/revisions"}],"predecessor-version":[{"id":9416,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9360\/revisions\/9416"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/9405"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=9360"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=9360"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=9360"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}