{"id":10188,"date":"2021-02-02T08:56:21","date_gmt":"2021-02-02T07:56:21","guid":{"rendered":"https:\/\/vived.io\/jvm-tuesday-23\/"},"modified":"2022-09-19T13:10:57","modified_gmt":"2022-09-19T11:10:57","slug":"jvm-tuesday-23","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/jvm-tuesday-23\/","title":{"rendered":"JVM Tuesday vol. 23"},"content":{"rendered":"<h2 id=\"1-jep-356-enhanced-pseudo-random-number-generators\" data-num=1>1. <a href=\"https:\/\/openjdk.java.net\/jeps\/356\">JEP 356: Enhanced Pseudo-Random Number Generators<\/a><\/h2>\n<p>Czym by\u0142by JVM Tuesday bez nowego JEPa? Czu\u0107, \u017ce Java 17 zbli\u017ca si\u0119 wielkimi krokami, bo coraz wi\u0119cej wiemy o zaplanowanych do niej featur\u00f3w. Tym razem na warsztat wzi\u0119to nieco zapomniany, maj\u0105cy swoje korzenie w 2017 roku, proposal przynosz\u0105cy ze sob\u0105 zmiany, w tym jak Java obs\u0142uguje generatory liczb losowych.<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e3e2acd2.png\" alt=\"\" \/><figcaption>\u017ar\u00f3d\u0142o: dilbert.com<\/figcaption><\/figure>\n<p>Ka\u017cdy, kto programuje nieco d\u0142u\u017cej ni\u017c par\u0119 miesi\u0119cy, wie \u017ce w deterministycznym \u015bwiecie komputer\u00f3w osi\u0105gni\u0119cie prawdziwej losowo\u015bci jest prawie niemo\u017cliwe. Za przyk\u0142ad niech pos\u0142u\u017cy popularna strona <a href=\"http:\/\/random.org\">random.org<\/a>, kt\u00f3ra u\u017cywa szum\u00f3w atmosferycznych do generowania kolejnych warto\u015bci (cho\u0107 zwolennicy determinizmu i czciciele <a href=\"https:\/\/pl.wikipedia.org\/wiki\/Demon_Laplace%E2%80%99a\">Demona Laplace<\/a> pewnie by z t\u0105 metodologi\u0105 dyskutowali). Og\u00f3lnie rzecz ujmuj\u0105c, ka\u017cda z metod uzyskania warto\u015bci losowej, to swego rodzaju trik. Klasyczny Random zaimplementowany w Javie to \u201c<a href=\"https:\/\/pl.qaz.wiki\/wiki\/Linear_congruential_generator\">Liniowy generator kongruencjalny<\/a>\u201d, kt\u00f3ry jest metod\u0105 do\u015b\u0107 prymitywn\u0105, przez co np. nie mo\u017ce by\u0107 u\u017cywany w kryptografii. Java posiada kilka alternatywnych implementacji radomizer\u00f3w, jednak mimo tego \u017ce implementuj\u0105 one dok\u0142adnie te same metody, nie posiada\u0142y one wsp\u00f3lnej abstrakcji. JEP 356 dostarczy interfejs <em>RandomGenerator<\/em>, kt\u00f3ry to pozwoli na wygodn\u0105 zmian\u0119 algorytmu losowo\u015bci w zale\u017cno\u015bci od potrzeb.<\/p>\n<p>PS1: Je\u015bli interesuje Was temat nowoczesnych metod randomizacji, JEP zawiera bardzo bogat\u0105 bibliografie.<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e3eae4ab.png\" alt=\"\" \/><figcaption>PS2: Nie pr\u00f3bujcie czasem teraz pisa\u0107 swojego w\u0142asnego Randoma . Ludzie z XKCD przyj\u0119li do tego jedyne s\u0142uszne podej\u015bcie.<\/figcaption><\/figure>\n<h3 id=\"-r-d-a-\">\u0179r\u00f3d\u0142a:<\/h3>\n<ol>\n<li><a href=\"https:\/\/openjdk.java.net\/jeps\/356\">JEP o kt\u00f3rym jest ca\u0142a sekcja<\/a><\/li>\n<li><a href=\"https:\/\/pl.wikipedia.org\/wiki\/Demon_Laplace\u2019a\">Demon Laplace&#8217;a na Wikipedii<\/a><\/li>\n<li><a href=\"https:\/\/pl.qaz.wiki\/wiki\/Linear_congruential_generator\">Liniowy generator kongruencji<\/a><\/li>\n<\/ol>\n<h2 id=\"2-quarkus-1-11-wydany\" data-num=2>2. <a href=\"https:\/\/quarkus.io\/blog\/quarkus-1-11-0-final-released\/\">Quarkus 1.11 wydany<\/a><\/h2>\n<p>Quarkus jest bardzo interesuj\u0105cym nowym frameworkiem, na kt\u00f3rego u\u017cycie, w jakim\u015b projekcie mocno ostrze sobie z\u0119by. Prawdopodobnie jest to zwi\u0105zane z moj\u0105 niezdrow\u0105 (zdaniem wielu ) sympati\u0105 do Javy EE, dodatkowo podbudowan\u0105 \u015bwietnym <a href=\"https:\/\/airhacks.fm\/\">podcastem Adama Biena<\/a>, gdzie Quarkus promowany jest jako najlepsza inwencja ludzko\u015bci od czasu krojonego chleba. Podobnie jak sw\u00f3j bezpo\u015bredni konkurent, Helidon, Quarkus implementuj\u0105 Microprofile Jakarty EE. Nasz dzisiejszy bohater zebra\u0142 jednak wok\u00f3\u0142 siebie on wi\u0119ksz\u0105 spo\u0142eczno\u015b\u0107 i wysun\u0105\u0142 si\u0119 na do\u015b\u0107 wyra\u017ane prowadzenie (niech \u015bwiadczy o tym cho\u0107by ponad 3x wi\u0119cej gwiazdek na Githubie).<\/p>\n<p>Co te\u017c przynosi nowy \u201cminor\u201d Quarkusa, \u017ce za\u0142apa\u0142 si\u0119 do naszej edycji? Poza lepszymi metrykami (czy te\u017c macie wra\u017cenie, \u017ce ka\u017cda nowa edycja framework\u00f3w Javowych wi\u0105\u017ce si\u0119 z jakim\u015b grzebaniem w Micrometrze?) najciekawszym z punktu widzenia programisty jest RESTEasy Reactive.<\/p>\n<p>Jest to nowa implementacja standardu JAX-RS, kt\u00f3ra oryginalnie powsta\u0142a na potrzeby Vert.x, kt\u00f3ra teraz \u00a0przygarni\u0119ta zosta\u0142a przez framework ze stajni RedHata (jakby co to my dalej o Quarkusie). RESTEasy Reactive umo\u017cliwia pisanie kontroler\u00f3w w spos\u00f3b w pe\u0142ni deklaratywny i przezroczysty dla u\u017cytkownika ko\u0144cowego. Tak przezroczysty i g\u0142\u0119boko integruj\u0105cy si\u0119, \u017ce poza fragmentem POMa z odpowiedni\u0105 zale\u017cno\u015bci\u0105 w zasadzie ci\u0119\u017cko pokaza\u0107 fragment kodu z u\u017cyciem &#8211; musz\u0119 przyzna\u0107, \u017ce jestem pod wra\u017ceniem, jak elegancko zosta\u0142o to zaimplementowane.<\/p>\n<pre><code>@ApplicationScoped\npublic class RoutesEndpoint {\n    @Route(path = &quot;\/hello-world&quot;)\n    void hello(RoutingContext rc) {\n        rc.response().end(&quot;hello&quot;);\n    }\n}<\/code><\/pre>\n<p>teraz mo\u017cna zapisa\u0107 przy u\u017cyciu o wiele czytelniejszego<\/p>\n<pre><code>@Path(&quot;\/hello-world&quot;)\npublic class ReasteasyEndpoint {\n    @GET\n    public String hello(){\n        return &quot;hello&quot;;\n    }\n}\n<\/code><\/pre>\n<p>przy zachowaniu pe\u0142nej reaktywno\u015bci. Classy .<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e4045767.png\" alt=\"\" \/><figcaption>Ale nie ok\u0142amujmy si\u0119 &#8211; <a href=\"https:\/\/quarkus.io\/blog\/quarkus-1-11-0-final-released\/#jackson\">i tak ka\u017cdy wie, \u017ce najwa\u017cniejsz\u0105 zmian\u0105 jest domy\u015blna warto\u015b\u0107 FAIL_ON_UNKNOWN_PROPERTIES Jacksona na false.<\/a><\/figcaption><\/figure>\n<h3 id=\"-r-d-a--1\">\u0179r\u00f3d\u0142a:<\/h3>\n<ol>\n<li><a href=\"https:\/\/quarkus.io\/blog\/quarkus-1-11-0-final-released\/\">Quarkus 1.11 Release Notes<\/a><\/li>\n<li><a href=\"https:\/\/airhacks.fm\">AirHacks.fm<\/a><\/li>\n<li><a href=\"https:\/\/quarkus.io\/guides\/resteasy-reactive\">RESTEasy Reactive Guide<\/a><\/li>\n<\/ol>\n<h2 id=\"3-roadmapa-kotlina-zaktualizowana\" data-num=3>3. <a href=\"https:\/\/kotlinlang.org\/roadmap.html\">Roadmapa Kotlina zaktualizowana<\/a><\/h2>\n<p>Na koniec &#8211; Kotlin. I to w formie interesuj\u0105cej dla ka\u017cdego, kto lubi wiedzie\u0107 przed kolegami z pokoju o nowinkach, poniewa\u017c Jetbrains opublikowa\u0142o aktualizacj\u0119 roadmapy swojego j\u0119zyka.<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img loading=\"lazy\" decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/9_image.png\" sizes=\"auto, (min-width: 720px) 720px\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/10_image.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/11_image.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/12_image.png 1600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/9_image.png 1965w\" alt=\"\" width=\"1965\" height=\"1065\" \/><figcaption><a href=\"https:\/\/youtrack.jetbrains.com\/agiles\/153-1251\/current?_ga=2.151470844.4544702.1612214267-2115173943.1611134431\">Link do pe\u0142nej Roadmapy<\/a> na YouTrack<\/figcaption><\/figure>\n<p>Co ciekawego nam przynosi? Na pewno warto przyjrze\u0107 si\u0119 statusowi prac. Od czasu ostatniego update&#8217;u, programistom z Jetbrains i skumulowanej wok\u00f3\u0142 nich spo\u0142eczno\u015bci, uda\u0142o si\u0119 dowie\u017a\u0107 kilka interesuj\u0105cych nowo\u015bci. Z pewno\u015bci\u0105 na codzienny komfort pracy wp\u0142ynie fakt, \u017ce nowa wersja kompilatora Kotlina (ETA: Kotlin 1.5) w du\u017cych projektach dzia\u0142a ok. ~2 razy szybciej wed\u0142ug syntetycznych test\u00f3w. Aktualizacji doczeka\u0142y si\u0119 r\u00f3wnie\u017c popularne koroutyny, kt\u00f3re w swojej wersji 1.4 otrzyma\u0142y nowy mechanizm, znany jako SharedFlow &#8211; <a href=\"https:\/\/kotlin.github.io\/kotlinx.coroutines\/kotlinx-coroutines-core\/kotlinx.coroutines.flow\/-shared-flow\/\">\u201cgor\u0105c\u0105\u201d (\u017cyj\u0105c\u0105 niezale\u017cnie od podpi\u0119cia listener\u00f3w)<\/a> implementacje dobrze znanych, \u201czimnych\u201d obiekt\u00f3w Flow.<\/p>\n<p>Bardzo interesuj\u0105co prezentuj\u0105 si\u0119 r\u00f3wnie\u017c rzeczy kt\u00f3re na roadmap\u0119 trafi\u0142y. Wspomniany przed chwil\u0105 nowy kompilator rozbudowany ma zosta\u0107 o wsparcie inkrementalnej kompilacji. Opr\u00f3cz tego, Kotlin Native ma zosta\u0107 wzbogacony o wsparcie procesor\u00f3w M1. Dalsz\u0105 ewolucj\u0119 przechodzi\u0107 b\u0119dzie oczywi\u015bcie r\u00f3wnie\u017c Kotlinowa asynchroniczno\u015b\u0107: <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-44336?_ga=2.179718753.4544702.1612214267-2115173943.1611134431\">Kana\u0142y (Channels) maj\u0105 otrzyma nowe API<\/a>. kotlinx-serialization, cichy bohater ostatnich miesi\u0119cy, r\u00f3wnie\u017c szykuje swoj\u0105 wersj\u0119 <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-44335?_ga=2.155665406.4544702.1612214267-2115173943.1611134431\">1.2<\/a>, zawieraj\u0105c\u0105 m.in. stabilne wsparcie ProtoBufa.<\/p>\n<p>Tw\u00f3rcy chwal\u0105 si\u0119 r\u00f3wnie\u017c tym, \u017ce na powa\u017cnie wzi\u0119li si\u0119 za dokumentacj\u0119, kt\u00f3ra ma dosta\u0107 odrobin\u0119 serca.<\/p>\n<p>Zmiany nie s\u0105 du\u017ce, ale mi\u0142o \u017ce JetBrains jest bardzo transparentne ze swoimi pracami. B\u0119d\u0119 nudny, ale osobi\u015bcie dalej najbardziej czekam na wsparcie nowo\u015bci z Javy, takich jak rekordy czy sealed classy (ostatnio trafi\u0142em np. \u00a0na <a href=\"https:\/\/zsmb.co\/sealed-goodies-coming-in-kotlin-1-5\/\">ciekawy artyku\u0142<\/a> pokazuj\u0105cy, ile Kotlinowa implementacja tego feature mo\u017ce na tym zyska\u0107).<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e443ae96.png\" alt=\"\" \/><figcaption>Bo w ko\u0144cu wszyscy to wiemy. I niech zacznie si\u0119 wojna<\/figcaption><\/figure>\n<h3 id=\"-r-d-a--2\">\u0179r\u00f3d\u0142a:<\/h3>\n<ol>\n<li><a href=\"https:\/\/kotlinlang.org\/roadmap.html\">Roadmapa Kotlina<\/a><\/li>\n<li><a href=\"https:\/\/youtrack.jetbrains.com\/agiles\/153-1251\/current?_ga=2.151470844.4544702.1612214267-2115173943.1611134431\">Link do pe\u0142nej Roadmapy na YouTrack<\/a><\/li>\n<li><a href=\"https:\/\/kotlin.github.io\/kotlinx.coroutines\/kotlinx-coroutines-core\/kotlinx.coroutines.flow\/-shared-flow\/\">SharedFlow<\/a><\/li>\n<li><a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-44336?_ga=2.179718753.4544702.1612214267-2115173943.1611134431\">kotlinx.coroutines 1.5<\/a><\/li>\n<li><a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-44335?_ga=2.155665406.4544702.1612214267-2115173943.1611134431\">kotlinx.serialization 1.2<\/a><\/li>\n<li><a href=\"https:\/\/zsmb.co\/sealed-goodies-coming-in-kotlin-1-5\/\">Sealed goodies coming in Kotlin 1.5<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Witamy w kolejny wtorek &#8211; dzisiaj troch\u0119 o generatorach liczb losowych w Javie, dalszych planach na rozw\u00f3j Kotlina oraz &#8222;minorze&#8221; frameworku kt\u00f3ry #nikogo poza OP (ale i tak warto przeczyta\u0107 \ud83d\ude01 )<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259],"tags":[],"class_list":["post-10188","post","type-post","status-publish","format-standard","hentry","category-jvm-pl"],"acf":{"weekly_summary":true,"estimated_reading_time":"4"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JVM Tuesday vol. 23 - 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-tuesday-23\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JVM Tuesday vol. 23 - Vived\" \/>\n<meta property=\"og:description\" content=\"Witamy w kolejny wtorek - dzisiaj troch\u0119 o generatorach liczb losowych w Javie, dalszych planach na rozw\u00f3j Kotlina oraz &quot;minorze&quot; frameworku kt\u00f3ry #nikogo poza OP (ale i tak warto przeczyta\u0107 \ud83d\ude01 )\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/jvm-tuesday-23\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-02T07:56:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:10:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e3e2acd2.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-tuesday-23\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-23\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"JVM Tuesday vol. 23\",\"datePublished\":\"2021-02-02T07:56:21+00:00\",\"dateModified\":\"2022-09-19T11:10:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-23\/\"},\"wordCount\":907,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-23\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e3e2acd2.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-tuesday-23\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-23\/\",\"url\":\"https:\/\/vived.io\/pl\/jvm-tuesday-23\/\",\"name\":\"JVM Tuesday vol. 23 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-23\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-23\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e3e2acd2.png\",\"datePublished\":\"2021-02-02T07:56:21+00:00\",\"dateModified\":\"2022-09-19T11:10:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-23\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-tuesday-23\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-23\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e3e2acd2.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e3e2acd2.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-23\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JVM Tuesday vol. 23\"}]},{\"@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":"JVM Tuesday vol. 23 - 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-tuesday-23\/","og_locale":"pl_PL","og_type":"article","og_title":"JVM Tuesday vol. 23 - Vived","og_description":"Witamy w kolejny wtorek - dzisiaj troch\u0119 o generatorach liczb losowych w Javie, dalszych planach na rozw\u00f3j Kotlina oraz \"minorze\" frameworku kt\u00f3ry #nikogo poza OP (ale i tak warto przeczyta\u0107 \ud83d\ude01 )","og_url":"https:\/\/vived.io\/pl\/jvm-tuesday-23\/","og_site_name":"Vived","article_published_time":"2021-02-02T07:56:21+00:00","article_modified_time":"2022-09-19T11:10:57+00:00","og_image":[{"url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e3e2acd2.png","type":"","width":"","height":""}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-23\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-23\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"JVM Tuesday vol. 23","datePublished":"2021-02-02T07:56:21+00:00","dateModified":"2022-09-19T11:10:57+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-23\/"},"wordCount":907,"commentCount":0,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-23\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e3e2acd2.png","articleSection":["JVM"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/vived.io\/pl\/jvm-tuesday-23\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-23\/","url":"https:\/\/vived.io\/pl\/jvm-tuesday-23\/","name":"JVM Tuesday vol. 23 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-23\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-23\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e3e2acd2.png","datePublished":"2021-02-02T07:56:21+00:00","dateModified":"2022-09-19T11:10:57+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-23\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/jvm-tuesday-23\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-23\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e3e2acd2.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e3e2acd2.png"},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-23\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"JVM Tuesday vol. 23"}]},{"@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":null,"attrs":[],"innerBlocks":[],"innerHTML":"<h2 id=\"1-jep-356-enhanced-pseudo-random-number-generators-\">1. <a href=\"https:\/\/openjdk.java.net\/jeps\/356\">JEP 356: Enhanced Pseudo-Random Number Generators<\/a><\/h2>\nCzym by\u0142by JVM Tuesday bez nowego JEPa? Czu\u0107, \u017ce Java 17 zbli\u017ca si\u0119 wielkimi krokami, bo coraz wi\u0119cej wiemy o zaplanowanych do niej featur\u00f3w. Tym razem na warsztat wzi\u0119to nieco zapomniany, maj\u0105cy swoje korzenie w 2017 roku, proposal przynosz\u0105cy ze sob\u0105 zmiany, w tym jak Java obs\u0142uguje generatory liczb losowych.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e3e2acd2.png\" alt=\"\" \/>\n<figcaption>\u017ar\u00f3d\u0142o: dilbert.com<\/figcaption><\/figure>\nKa\u017cdy, kto programuje nieco d\u0142u\u017cej ni\u017c par\u0119 miesi\u0119cy, wie \u017ce w deterministycznym \u015bwiecie komputer\u00f3w osi\u0105gni\u0119cie prawdziwej losowo\u015bci jest prawie niemo\u017cliwe. Za przyk\u0142ad niech pos\u0142u\u017cy popularna strona <a href=\"http:\/\/random.org\">random.org<\/a>, kt\u00f3ra u\u017cywa szum\u00f3w atmosferycznych do generowania kolejnych warto\u015bci (cho\u0107 zwolennicy determinizmu i czciciele <a href=\"https:\/\/pl.wikipedia.org\/wiki\/Demon_Laplace%E2%80%99a\">Demona Laplace<\/a> pewnie by z t\u0105 metodologi\u0105 dyskutowali). Og\u00f3lnie rzecz ujmuj\u0105c, ka\u017cda z metod uzyskania warto\u015bci losowej, to swego rodzaju trik. Klasyczny Random zaimplementowany w Javie to \u201c<a href=\"https:\/\/pl.qaz.wiki\/wiki\/Linear_congruential_generator\">Liniowy generator kongruencjalny<\/a>\u201d, kt\u00f3ry jest metod\u0105 do\u015b\u0107 prymitywn\u0105, przez co np. nie mo\u017ce by\u0107 u\u017cywany w kryptografii. Java posiada kilka alternatywnych implementacji radomizer\u00f3w, jednak mimo tego \u017ce implementuj\u0105 one dok\u0142adnie te same metody, nie posiada\u0142y one wsp\u00f3lnej abstrakcji. JEP 356 dostarczy interfejs <em>RandomGenerator<\/em>, kt\u00f3ry to pozwoli na wygodn\u0105 zmian\u0119 algorytmu losowo\u015bci w zale\u017cno\u015bci od potrzeb.\n\nPS1: Je\u015bli interesuje Was temat nowoczesnych metod randomizacji, JEP zawiera bardzo bogat\u0105 bibliografie.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e3eae4ab.png\" alt=\"\" \/>\n\n<figcaption>PS2: Nie pr\u00f3bujcie czasem teraz pisa\u0107 swojego w\u0142asnego Randoma . Ludzie z XKCD przyj\u0119li do tego jedyne s\u0142uszne podej\u015bcie.<\/figcaption><\/figure>\n<h3 id=\"-r-d-a-\">\u0179r\u00f3d\u0142a:<\/h3>\n<ol>\n \t<li><a href=\"https:\/\/openjdk.java.net\/jeps\/356\">JEP o kt\u00f3rym jest ca\u0142a sekcja<\/a><\/li>\n \t<li><a href=\"https:\/\/pl.wikipedia.org\/wiki\/Demon_Laplace\u2019a\">Demon Laplace'a na Wikipedii<\/a><\/li>\n \t<li><a href=\"https:\/\/pl.qaz.wiki\/wiki\/Linear_congruential_generator\">Liniowy generator kongruencji<\/a><\/li>\n<\/ol>\n<h2 id=\"2-quarkus-1-11-wydany-\">2. <a href=\"https:\/\/quarkus.io\/blog\/quarkus-1-11-0-final-released\/\">Quarkus 1.11 wydany<\/a><\/h2>\nQuarkus jest bardzo interesuj\u0105cym nowym frameworkiem, na kt\u00f3rego u\u017cycie, w jakim\u015b projekcie mocno ostrze sobie z\u0119by. Prawdopodobnie jest to zwi\u0105zane z moj\u0105 niezdrow\u0105 (zdaniem wielu ) sympati\u0105 do Javy EE, dodatkowo podbudowan\u0105 \u015bwietnym <a href=\"https:\/\/airhacks.fm\/\">podcastem Adama Biena<\/a>, gdzie Quarkus promowany jest jako najlepsza inwencja ludzko\u015bci od czasu krojonego chleba. Podobnie jak sw\u00f3j bezpo\u015bredni konkurent, Helidon, Quarkus implementuj\u0105 Microprofile Jakarty EE. Nasz dzisiejszy bohater zebra\u0142 jednak wok\u00f3\u0142 siebie on wi\u0119ksz\u0105 spo\u0142eczno\u015b\u0107 i wysun\u0105\u0142 si\u0119 na do\u015b\u0107 wyra\u017ane prowadzenie (niech \u015bwiadczy o tym cho\u0107by ponad 3x wi\u0119cej gwiazdek na Githubie).\n\nCo te\u017c przynosi nowy \u201cminor\u201d Quarkusa, \u017ce za\u0142apa\u0142 si\u0119 do naszej edycji? Poza lepszymi metrykami (czy te\u017c macie wra\u017cenie, \u017ce ka\u017cda nowa edycja framework\u00f3w Javowych wi\u0105\u017ce si\u0119 z jakim\u015b grzebaniem w Micrometrze?) najciekawszym z punktu widzenia programisty jest RESTEasy Reactive.\n\nJest to nowa implementacja standardu JAX-RS, kt\u00f3ra oryginalnie powsta\u0142a na potrzeby Vert.x, kt\u00f3ra teraz \u00a0przygarni\u0119ta zosta\u0142a przez framework ze stajni RedHata (jakby co to my dalej o Quarkusie). RESTEasy Reactive umo\u017cliwia pisanie kontroler\u00f3w w spos\u00f3b w pe\u0142ni deklaratywny i przezroczysty dla u\u017cytkownika ko\u0144cowego. Tak przezroczysty i g\u0142\u0119boko integruj\u0105cy si\u0119, \u017ce poza fragmentem POMa z odpowiedni\u0105 zale\u017cno\u015bci\u0105 w zasadzie ci\u0119\u017cko pokaza\u0107 fragment kodu z u\u017cyciem - musz\u0119 przyzna\u0107, \u017ce jestem pod wra\u017ceniem, jak elegancko zosta\u0142o to zaimplementowane.\n<pre><code>@ApplicationScoped\npublic class RoutesEndpoint {\n    @Route(path = \"\/hello-world\")\n    void hello(RoutingContext rc) {\n        rc.response().end(\"hello\");\n    }\n}<\/code><\/pre>\nteraz mo\u017cna zapisa\u0107 przy u\u017cyciu o wiele czytelniejszego\n<pre><code>@Path(\"\/hello-world\")\npublic class ReasteasyEndpoint {\n    @GET\n    public String hello(){\n        return \"hello\";\n    }\n}\n<\/code><\/pre>\nprzy zachowaniu pe\u0142nej reaktywno\u015bci. Classy .\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e4045767.png\" alt=\"\" \/>\n\n<figcaption>Ale nie ok\u0142amujmy si\u0119 - <a href=\"https:\/\/quarkus.io\/blog\/quarkus-1-11-0-final-released\/#jackson\">i tak ka\u017cdy wie, \u017ce najwa\u017cniejsz\u0105 zmian\u0105 jest domy\u015blna warto\u015b\u0107 FAIL_ON_UNKNOWN_PROPERTIES Jacksona na false.<\/a><\/figcaption><\/figure>\n<h3 id=\"-r-d-a--1\">\u0179r\u00f3d\u0142a:<\/h3>\n<ol>\n \t<li><a href=\"https:\/\/quarkus.io\/blog\/quarkus-1-11-0-final-released\/\">Quarkus 1.11 Release Notes<\/a><\/li>\n \t<li><a href=\"https:\/\/airhacks.fm\">AirHacks.fm<\/a><\/li>\n \t<li><a href=\"https:\/\/quarkus.io\/guides\/resteasy-reactive\">RESTEasy Reactive Guide<\/a><\/li>\n<\/ol>\n<h2 id=\"3-roadmapa-kotlina-zaktualizowana-\">3. <a href=\"https:\/\/kotlinlang.org\/roadmap.html\">Roadmapa Kotlina zaktualizowana<\/a><\/h2>\nNa koniec - Kotlin. I to w formie interesuj\u0105cej dla ka\u017cdego, kto lubi wiedzie\u0107 przed kolegami z pokoju o nowinkach, poniewa\u017c Jetbrains opublikowa\u0142o aktualizacj\u0119 roadmapy swojego j\u0119zyka.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/9_image.png\" sizes=\"(min-width: 720px) 720px\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/10_image.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/11_image.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/12_image.png 1600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/9_image.png 1965w\" alt=\"\" width=\"1965\" height=\"1065\" \/>\n\n<figcaption><a href=\"https:\/\/youtrack.jetbrains.com\/agiles\/153-1251\/current?_ga=2.151470844.4544702.1612214267-2115173943.1611134431\">Link do pe\u0142nej Roadmapy<\/a> na YouTrack<\/figcaption><\/figure>\nCo ciekawego nam przynosi? Na pewno warto przyjrze\u0107 si\u0119 statusowi prac. Od czasu ostatniego update'u, programistom z Jetbrains i skumulowanej wok\u00f3\u0142 nich spo\u0142eczno\u015bci, uda\u0142o si\u0119 dowie\u017a\u0107 kilka interesuj\u0105cych nowo\u015bci. Z pewno\u015bci\u0105 na codzienny komfort pracy wp\u0142ynie fakt, \u017ce nowa wersja kompilatora Kotlina (ETA: Kotlin 1.5) w du\u017cych projektach dzia\u0142a ok. ~2 razy szybciej wed\u0142ug syntetycznych test\u00f3w. Aktualizacji doczeka\u0142y si\u0119 r\u00f3wnie\u017c popularne koroutyny, kt\u00f3re w swojej wersji 1.4 otrzyma\u0142y nowy mechanizm, znany jako SharedFlow - <a href=\"https:\/\/kotlin.github.io\/kotlinx.coroutines\/kotlinx-coroutines-core\/kotlinx.coroutines.flow\/-shared-flow\/\">\u201cgor\u0105c\u0105\u201d (\u017cyj\u0105c\u0105 niezale\u017cnie od podpi\u0119cia listener\u00f3w)<\/a> implementacje dobrze znanych, \u201czimnych\u201d obiekt\u00f3w Flow.\n\nBardzo interesuj\u0105co prezentuj\u0105 si\u0119 r\u00f3wnie\u017c rzeczy kt\u00f3re na roadmap\u0119 trafi\u0142y. Wspomniany przed chwil\u0105 nowy kompilator rozbudowany ma zosta\u0107 o wsparcie inkrementalnej kompilacji. Opr\u00f3cz tego, Kotlin Native ma zosta\u0107 wzbogacony o wsparcie procesor\u00f3w M1. Dalsz\u0105 ewolucj\u0119 przechodzi\u0107 b\u0119dzie oczywi\u015bcie r\u00f3wnie\u017c Kotlinowa asynchroniczno\u015b\u0107: <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-44336?_ga=2.179718753.4544702.1612214267-2115173943.1611134431\">Kana\u0142y (Channels) maj\u0105 otrzyma nowe API<\/a>. kotlinx-serialization, cichy bohater ostatnich miesi\u0119cy, r\u00f3wnie\u017c szykuje swoj\u0105 wersj\u0119 <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-44335?_ga=2.155665406.4544702.1612214267-2115173943.1611134431\">1.2<\/a>, zawieraj\u0105c\u0105 m.in. stabilne wsparcie ProtoBufa.\n\nTw\u00f3rcy chwal\u0105 si\u0119 r\u00f3wnie\u017c tym, \u017ce na powa\u017cnie wzi\u0119li si\u0119 za dokumentacj\u0119, kt\u00f3ra ma dosta\u0107 odrobin\u0119 serca.\n\nZmiany nie s\u0105 du\u017ce, ale mi\u0142o \u017ce JetBrains jest bardzo transparentne ze swoimi pracami. B\u0119d\u0119 nudny, ale osobi\u015bcie dalej najbardziej czekam na wsparcie nowo\u015bci z Javy, takich jak rekordy czy sealed classy (ostatnio trafi\u0142em np. \u00a0na <a href=\"https:\/\/zsmb.co\/sealed-goodies-coming-in-kotlin-1-5\/\">ciekawy artyku\u0142<\/a> pokazuj\u0105cy, ile Kotlinowa implementacja tego feature mo\u017ce na tym zyska\u0107).\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e443ae96.png\" alt=\"\" \/>\n\n<figcaption>Bo w ko\u0144cu wszyscy to wiemy. I niech zacznie si\u0119 wojna<\/figcaption><\/figure>\n<h3 id=\"-r-d-a--2\">\u0179r\u00f3d\u0142a:<\/h3>\n<ol>\n \t<li><a href=\"https:\/\/kotlinlang.org\/roadmap.html\">Roadmapa Kotlina<\/a><\/li>\n \t<li><a href=\"https:\/\/youtrack.jetbrains.com\/agiles\/153-1251\/current?_ga=2.151470844.4544702.1612214267-2115173943.1611134431\">Link do pe\u0142nej Roadmapy na YouTrack<\/a><\/li>\n \t<li><a href=\"https:\/\/kotlin.github.io\/kotlinx.coroutines\/kotlinx-coroutines-core\/kotlinx.coroutines.flow\/-shared-flow\/\">SharedFlow<\/a><\/li>\n \t<li><a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-44336?_ga=2.179718753.4544702.1612214267-2115173943.1611134431\">kotlinx.coroutines 1.5<\/a><\/li>\n \t<li><a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-44335?_ga=2.155665406.4544702.1612214267-2115173943.1611134431\">kotlinx.serialization 1.2<\/a><\/li>\n \t<li><a href=\"https:\/\/zsmb.co\/sealed-goodies-coming-in-kotlin-1-5\/\">Sealed goodies coming in Kotlin 1.5<\/a><\/li>\n<\/ol>","innerContent":["<h2 id=\"1-jep-356-enhanced-pseudo-random-number-generators-\">1. <a href=\"https:\/\/openjdk.java.net\/jeps\/356\">JEP 356: Enhanced Pseudo-Random Number Generators<\/a><\/h2>\nCzym by\u0142by JVM Tuesday bez nowego JEPa? Czu\u0107, \u017ce Java 17 zbli\u017ca si\u0119 wielkimi krokami, bo coraz wi\u0119cej wiemy o zaplanowanych do niej featur\u00f3w. Tym razem na warsztat wzi\u0119to nieco zapomniany, maj\u0105cy swoje korzenie w 2017 roku, proposal przynosz\u0105cy ze sob\u0105 zmiany, w tym jak Java obs\u0142uguje generatory liczb losowych.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e3e2acd2.png\" alt=\"\" \/>\n<figcaption>\u017ar\u00f3d\u0142o: dilbert.com<\/figcaption><\/figure>\nKa\u017cdy, kto programuje nieco d\u0142u\u017cej ni\u017c par\u0119 miesi\u0119cy, wie \u017ce w deterministycznym \u015bwiecie komputer\u00f3w osi\u0105gni\u0119cie prawdziwej losowo\u015bci jest prawie niemo\u017cliwe. Za przyk\u0142ad niech pos\u0142u\u017cy popularna strona <a href=\"http:\/\/random.org\">random.org<\/a>, kt\u00f3ra u\u017cywa szum\u00f3w atmosferycznych do generowania kolejnych warto\u015bci (cho\u0107 zwolennicy determinizmu i czciciele <a href=\"https:\/\/pl.wikipedia.org\/wiki\/Demon_Laplace%E2%80%99a\">Demona Laplace<\/a> pewnie by z t\u0105 metodologi\u0105 dyskutowali). Og\u00f3lnie rzecz ujmuj\u0105c, ka\u017cda z metod uzyskania warto\u015bci losowej, to swego rodzaju trik. Klasyczny Random zaimplementowany w Javie to \u201c<a href=\"https:\/\/pl.qaz.wiki\/wiki\/Linear_congruential_generator\">Liniowy generator kongruencjalny<\/a>\u201d, kt\u00f3ry jest metod\u0105 do\u015b\u0107 prymitywn\u0105, przez co np. nie mo\u017ce by\u0107 u\u017cywany w kryptografii. Java posiada kilka alternatywnych implementacji radomizer\u00f3w, jednak mimo tego \u017ce implementuj\u0105 one dok\u0142adnie te same metody, nie posiada\u0142y one wsp\u00f3lnej abstrakcji. JEP 356 dostarczy interfejs <em>RandomGenerator<\/em>, kt\u00f3ry to pozwoli na wygodn\u0105 zmian\u0119 algorytmu losowo\u015bci w zale\u017cno\u015bci od potrzeb.\n\nPS1: Je\u015bli interesuje Was temat nowoczesnych metod randomizacji, JEP zawiera bardzo bogat\u0105 bibliografie.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e3eae4ab.png\" alt=\"\" \/>\n\n<figcaption>PS2: Nie pr\u00f3bujcie czasem teraz pisa\u0107 swojego w\u0142asnego Randoma . Ludzie z XKCD przyj\u0119li do tego jedyne s\u0142uszne podej\u015bcie.<\/figcaption><\/figure>\n<h3 id=\"-r-d-a-\">\u0179r\u00f3d\u0142a:<\/h3>\n<ol>\n \t<li><a href=\"https:\/\/openjdk.java.net\/jeps\/356\">JEP o kt\u00f3rym jest ca\u0142a sekcja<\/a><\/li>\n \t<li><a href=\"https:\/\/pl.wikipedia.org\/wiki\/Demon_Laplace\u2019a\">Demon Laplace'a na Wikipedii<\/a><\/li>\n \t<li><a href=\"https:\/\/pl.qaz.wiki\/wiki\/Linear_congruential_generator\">Liniowy generator kongruencji<\/a><\/li>\n<\/ol>\n<h2 id=\"2-quarkus-1-11-wydany-\">2. <a href=\"https:\/\/quarkus.io\/blog\/quarkus-1-11-0-final-released\/\">Quarkus 1.11 wydany<\/a><\/h2>\nQuarkus jest bardzo interesuj\u0105cym nowym frameworkiem, na kt\u00f3rego u\u017cycie, w jakim\u015b projekcie mocno ostrze sobie z\u0119by. Prawdopodobnie jest to zwi\u0105zane z moj\u0105 niezdrow\u0105 (zdaniem wielu ) sympati\u0105 do Javy EE, dodatkowo podbudowan\u0105 \u015bwietnym <a href=\"https:\/\/airhacks.fm\/\">podcastem Adama Biena<\/a>, gdzie Quarkus promowany jest jako najlepsza inwencja ludzko\u015bci od czasu krojonego chleba. Podobnie jak sw\u00f3j bezpo\u015bredni konkurent, Helidon, Quarkus implementuj\u0105 Microprofile Jakarty EE. Nasz dzisiejszy bohater zebra\u0142 jednak wok\u00f3\u0142 siebie on wi\u0119ksz\u0105 spo\u0142eczno\u015b\u0107 i wysun\u0105\u0142 si\u0119 na do\u015b\u0107 wyra\u017ane prowadzenie (niech \u015bwiadczy o tym cho\u0107by ponad 3x wi\u0119cej gwiazdek na Githubie).\n\nCo te\u017c przynosi nowy \u201cminor\u201d Quarkusa, \u017ce za\u0142apa\u0142 si\u0119 do naszej edycji? Poza lepszymi metrykami (czy te\u017c macie wra\u017cenie, \u017ce ka\u017cda nowa edycja framework\u00f3w Javowych wi\u0105\u017ce si\u0119 z jakim\u015b grzebaniem w Micrometrze?) najciekawszym z punktu widzenia programisty jest RESTEasy Reactive.\n\nJest to nowa implementacja standardu JAX-RS, kt\u00f3ra oryginalnie powsta\u0142a na potrzeby Vert.x, kt\u00f3ra teraz \u00a0przygarni\u0119ta zosta\u0142a przez framework ze stajni RedHata (jakby co to my dalej o Quarkusie). RESTEasy Reactive umo\u017cliwia pisanie kontroler\u00f3w w spos\u00f3b w pe\u0142ni deklaratywny i przezroczysty dla u\u017cytkownika ko\u0144cowego. Tak przezroczysty i g\u0142\u0119boko integruj\u0105cy si\u0119, \u017ce poza fragmentem POMa z odpowiedni\u0105 zale\u017cno\u015bci\u0105 w zasadzie ci\u0119\u017cko pokaza\u0107 fragment kodu z u\u017cyciem - musz\u0119 przyzna\u0107, \u017ce jestem pod wra\u017ceniem, jak elegancko zosta\u0142o to zaimplementowane.\n<pre><code>@ApplicationScoped\npublic class RoutesEndpoint {\n    @Route(path = \"\/hello-world\")\n    void hello(RoutingContext rc) {\n        rc.response().end(\"hello\");\n    }\n}<\/code><\/pre>\nteraz mo\u017cna zapisa\u0107 przy u\u017cyciu o wiele czytelniejszego\n<pre><code>@Path(\"\/hello-world\")\npublic class ReasteasyEndpoint {\n    @GET\n    public String hello(){\n        return \"hello\";\n    }\n}\n<\/code><\/pre>\nprzy zachowaniu pe\u0142nej reaktywno\u015bci. Classy .\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e4045767.png\" alt=\"\" \/>\n\n<figcaption>Ale nie ok\u0142amujmy si\u0119 - <a href=\"https:\/\/quarkus.io\/blog\/quarkus-1-11-0-final-released\/#jackson\">i tak ka\u017cdy wie, \u017ce najwa\u017cniejsz\u0105 zmian\u0105 jest domy\u015blna warto\u015b\u0107 FAIL_ON_UNKNOWN_PROPERTIES Jacksona na false.<\/a><\/figcaption><\/figure>\n<h3 id=\"-r-d-a--1\">\u0179r\u00f3d\u0142a:<\/h3>\n<ol>\n \t<li><a href=\"https:\/\/quarkus.io\/blog\/quarkus-1-11-0-final-released\/\">Quarkus 1.11 Release Notes<\/a><\/li>\n \t<li><a href=\"https:\/\/airhacks.fm\">AirHacks.fm<\/a><\/li>\n \t<li><a href=\"https:\/\/quarkus.io\/guides\/resteasy-reactive\">RESTEasy Reactive Guide<\/a><\/li>\n<\/ol>\n<h2 id=\"3-roadmapa-kotlina-zaktualizowana-\">3. <a href=\"https:\/\/kotlinlang.org\/roadmap.html\">Roadmapa Kotlina zaktualizowana<\/a><\/h2>\nNa koniec - Kotlin. I to w formie interesuj\u0105cej dla ka\u017cdego, kto lubi wiedzie\u0107 przed kolegami z pokoju o nowinkach, poniewa\u017c Jetbrains opublikowa\u0142o aktualizacj\u0119 roadmapy swojego j\u0119zyka.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/9_image.png\" sizes=\"(min-width: 720px) 720px\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/10_image.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/11_image.png 1000w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/12_image.png 1600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/9_image.png 1965w\" alt=\"\" width=\"1965\" height=\"1065\" \/>\n\n<figcaption><a href=\"https:\/\/youtrack.jetbrains.com\/agiles\/153-1251\/current?_ga=2.151470844.4544702.1612214267-2115173943.1611134431\">Link do pe\u0142nej Roadmapy<\/a> na YouTrack<\/figcaption><\/figure>\nCo ciekawego nam przynosi? Na pewno warto przyjrze\u0107 si\u0119 statusowi prac. Od czasu ostatniego update'u, programistom z Jetbrains i skumulowanej wok\u00f3\u0142 nich spo\u0142eczno\u015bci, uda\u0142o si\u0119 dowie\u017a\u0107 kilka interesuj\u0105cych nowo\u015bci. Z pewno\u015bci\u0105 na codzienny komfort pracy wp\u0142ynie fakt, \u017ce nowa wersja kompilatora Kotlina (ETA: Kotlin 1.5) w du\u017cych projektach dzia\u0142a ok. ~2 razy szybciej wed\u0142ug syntetycznych test\u00f3w. Aktualizacji doczeka\u0142y si\u0119 r\u00f3wnie\u017c popularne koroutyny, kt\u00f3re w swojej wersji 1.4 otrzyma\u0142y nowy mechanizm, znany jako SharedFlow - <a href=\"https:\/\/kotlin.github.io\/kotlinx.coroutines\/kotlinx-coroutines-core\/kotlinx.coroutines.flow\/-shared-flow\/\">\u201cgor\u0105c\u0105\u201d (\u017cyj\u0105c\u0105 niezale\u017cnie od podpi\u0119cia listener\u00f3w)<\/a> implementacje dobrze znanych, \u201czimnych\u201d obiekt\u00f3w Flow.\n\nBardzo interesuj\u0105co prezentuj\u0105 si\u0119 r\u00f3wnie\u017c rzeczy kt\u00f3re na roadmap\u0119 trafi\u0142y. Wspomniany przed chwil\u0105 nowy kompilator rozbudowany ma zosta\u0107 o wsparcie inkrementalnej kompilacji. Opr\u00f3cz tego, Kotlin Native ma zosta\u0107 wzbogacony o wsparcie procesor\u00f3w M1. Dalsz\u0105 ewolucj\u0119 przechodzi\u0107 b\u0119dzie oczywi\u015bcie r\u00f3wnie\u017c Kotlinowa asynchroniczno\u015b\u0107: <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-44336?_ga=2.179718753.4544702.1612214267-2115173943.1611134431\">Kana\u0142y (Channels) maj\u0105 otrzyma nowe API<\/a>. kotlinx-serialization, cichy bohater ostatnich miesi\u0119cy, r\u00f3wnie\u017c szykuje swoj\u0105 wersj\u0119 <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-44335?_ga=2.155665406.4544702.1612214267-2115173943.1611134431\">1.2<\/a>, zawieraj\u0105c\u0105 m.in. stabilne wsparcie ProtoBufa.\n\nTw\u00f3rcy chwal\u0105 si\u0119 r\u00f3wnie\u017c tym, \u017ce na powa\u017cnie wzi\u0119li si\u0119 za dokumentacj\u0119, kt\u00f3ra ma dosta\u0107 odrobin\u0119 serca.\n\nZmiany nie s\u0105 du\u017ce, ale mi\u0142o \u017ce JetBrains jest bardzo transparentne ze swoimi pracami. B\u0119d\u0119 nudny, ale osobi\u015bcie dalej najbardziej czekam na wsparcie nowo\u015bci z Javy, takich jak rekordy czy sealed classy (ostatnio trafi\u0142em np. \u00a0na <a href=\"https:\/\/zsmb.co\/sealed-goodies-coming-in-kotlin-1-5\/\">ciekawy artyku\u0142<\/a> pokazuj\u0105cy, ile Kotlinowa implementacja tego feature mo\u017ce na tym zyska\u0107).\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0e443ae96.png\" alt=\"\" \/>\n\n<figcaption>Bo w ko\u0144cu wszyscy to wiemy. I niech zacznie si\u0119 wojna<\/figcaption><\/figure>\n<h3 id=\"-r-d-a--2\">\u0179r\u00f3d\u0142a:<\/h3>\n<ol>\n \t<li><a href=\"https:\/\/kotlinlang.org\/roadmap.html\">Roadmapa Kotlina<\/a><\/li>\n \t<li><a href=\"https:\/\/youtrack.jetbrains.com\/agiles\/153-1251\/current?_ga=2.151470844.4544702.1612214267-2115173943.1611134431\">Link do pe\u0142nej Roadmapy na YouTrack<\/a><\/li>\n \t<li><a href=\"https:\/\/kotlin.github.io\/kotlinx.coroutines\/kotlinx-coroutines-core\/kotlinx.coroutines.flow\/-shared-flow\/\">SharedFlow<\/a><\/li>\n \t<li><a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-44336?_ga=2.179718753.4544702.1612214267-2115173943.1611134431\">kotlinx.coroutines 1.5<\/a><\/li>\n \t<li><a href=\"https:\/\/youtrack.jetbrains.com\/issue\/KT-44335?_ga=2.155665406.4544702.1612214267-2115173943.1611134431\">kotlinx.serialization 1.2<\/a><\/li>\n \t<li><a href=\"https:\/\/zsmb.co\/sealed-goodies-coming-in-kotlin-1-5\/\">Sealed goodies coming in Kotlin 1.5<\/a><\/li>\n<\/ol>"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10188","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=10188"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10188\/revisions"}],"predecessor-version":[{"id":10588,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10188\/revisions\/10588"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=10188"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=10188"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=10188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}