{"id":17007,"date":"2023-11-15T12:54:32","date_gmt":"2023-11-15T11:54:32","guid":{"rendered":"https:\/\/vived.io\/?p=17007"},"modified":"2023-11-16T09:33:38","modified_gmt":"2023-11-16T08:33:38","slug":"amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/","title":{"rendered":"Amper od JetBrains: definiowanie build\u00f3w Gradle poprzez YAML  &#8211; JVM Weekly vol. 153"},"content":{"rendered":"\n<h2 id=\"1-powazna-sekcja-o-powaznych-tematach-czyli-nowosci-w-obsludze-kryptografii\" data-num=1>1. Powa\u017cna sekcja o powa\u017cnych tematach &#8211; czyli nowo\u015bci w obs\u0142udze kryptografii<\/h2>\n\n\n\n<p>Zaczniemy sobie od temat\u00f3w zwi\u0105zanych z bezpiecze\u0144stwem, bo w zesz\u0142ym tygodniu dostali\u015bmy ciekawe og\u0142oszenie od samego Oracle.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"448\" height=\"274\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-9.png\" alt=\"\" class=\"wp-image-17008\" style=\"aspect-ratio:1.635036496350365;width:448px;height:auto\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-9.png 448w, https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-9-300x183.png 300w\" sizes=\"auto, (max-width: 448px) 100vw, 448px\" \/><figcaption class=\"wp-element-caption\">Obowi\u0105zkowe XKCD na prze\u0142amanie zanim p\u00f3jdziemy dalej.<\/figcaption><\/figure><\/div>\n\n\n<p>JCA, czyli Java Cryptography Architecture, to zestaw interfejs\u00f3w (wprowadzony w JDK 1.1 w 1997), umo\u017cliwiaj\u0105cych integracj\u0119 i dost\u0119p do r\u00f3\u017cnorodnych operacji kryptograficznych, takich jak szyfrowanie, podpisywanie czy generowanie kluczy. Jipher JCE to rozwi\u0105zanie od Oracle, zaprojektowane jako implementacja JCA i integruje ono wst\u0119pnie skonfigurowan\u0105 i zgodn\u0105 z FIPS wersj\u0119 OpenSSL 3.0, specjalnie dostosowan\u0105 do obs\u0142ugi algorytm\u00f3w dozwolonych przez standardy FIPS. Podczas <a href=\"https:\/\/blogs.oracle.com\/developers\/post\/open-sourcing-jipher\">KubeCon North America 2023 Oracle og\u0142osi\u0142o<\/a>, \u017ce rozwi\u0105zanie (b\u0119d\u0105ce wcze\u015bniej komponentem ich chmury) zostanie oddane spo\u0142eczno\u015bci.<\/p>\n\n\n\n<p>No to teraz troch\u0119 o FIPS. Jest to skr\u00f3t od Federal Information Processing Standards, publicznie og\u0142aszanych standard\u00f3w, opracowanych przez National Institute of Standards and Technology (NIST) w Stanach Zjednoczonych. Te s\u0105 stosowane w rz\u0105dowych systemach komputerowych (z wyj\u0105tkiem system\u00f3w zwi\u0105zanych z obronno\u015bci\u0105), aby zapewni\u0107 ich bezpiecze\u0144stwo i interoperacyjno\u015b\u0107. Obejmuje to w\u0142a\u015bnie wspomniany modu\u0142 FIPS OpenSSL 3.0.<\/p>\n\n\n\n<p>S\u0142owem klucz og\u0142oszenia jest wi\u0119c szeroko rozumiany &#8222;compliance&#8221;, aczkolwiek to co wyr\u00f3\u017cnia Jipher JCE to r\u00f3wnie\u017c wydajno\u015b\u0107 &#8211; ca\u0142o\u015b\u0107 zbudowana zosta\u0142a bowiem w oparciu o Project Panama, co daje jej przewag\u0119 nad starsz\u0105 konkurencj\u0105 typu <a href=\"https:\/\/www.bouncycastle.org\">Bouncy Castle<\/a>&#8230; podobno, bo na razie dostali\u015bmy dopiero zapowied\u017a wprowadzenia rozwi\u0105zania do OpenJDK.<\/p>\n\n\n\n<p>To jednak nie wszystko. Oracle og\u0142osi\u0142 ch\u0119\u0107 wi\u0119kszego zaanga\u017cowania w prace Cloud Native Computing Foundation (CNCF). Zaanga\u017cowanie to obejmuje za\u015b 3 miliony dolar\u00f3w w kredytach na infrastruktur\u0119 w ramach mocy obliczeniowej Ampere Arm w Oracle Cloud Infrastructure. Wszystkie zapowiedzi <a href=\"https:\/\/www.oracle.com\/news\/announcement\/oracle-expands-support-for-open-source-community-2023-11-07\/\">znajdziecie tutaj<\/a>.<\/p>\n\n\n\n<p>A jak ju\u017c jeste\u015bmy przy bezpiecze\u0144stwie, to jeszcze w sierpniu swoj\u0105 premier\u0119 mia\u0142a biblioteka <a href=\"https:\/\/github.com\/mthiim\/dilithium-java\">Java Dilithium<\/a>, kt\u00f3ra jest &#8222;hobbystyczn\u0105&#8221; implementacj\u0105 biblioteki <a href=\"https:\/\/github.com\/pq-crystals\/dilithium\">Dilithium z C<\/a>. Dilithium, b\u0119d\u0105cy cz\u0119\u015bci\u0105 zestawu algorytm\u00f3w CRYSTALS, zosta\u0142 zalecony przez wspomniany ju\u017c NIST jako g\u0142\u00f3wny algorytm dla kryptografii postkwantowej. Opiera si\u0119 on na <strong>algebraicznych kratownicach (algebraic lattices)<\/strong>, oferuj\u0105c kilka rozwi\u0105za\u0144 z r\u00f3\u017cnymi poziomami bezpiecze\u0144stwa oraz obs\u0142uguj\u0105ca deterministyczne schematy sygnatur. Jak kto\u015b lubi kryptografie, to g\u0142\u00f3wne mi\u0119sko znajdziecie za\u015b <a href=\"https:\/\/github.com\/mthiim\/dilithium-java\/blob\/main\/src\/main\/java\/net\/thiim\/dilithium\/impl\/Dilithium.java\">w tej klasie<\/a>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-11-1024x683.png\" alt=\"\" class=\"wp-image-17013\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-11-1024x683.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-11-300x200.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-11-768x512.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-11-1536x1024.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-11-2048x1365.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Tak, moja c\u00f3rka pomagaj\u0105ca mi w researchu do tej edycji, a czemu pytasz?<\/figcaption><\/figure><\/div>\n\n\n<p>Chocia\u017c ta implementacja, zaprojektowana dla satysfakcji autora i nie przeznaczona do produkcji, przechodzi wszystkie dost\u0119pne testy i obejmuje funkcje takie jak serializacja i deserializacja. Jest to jednak projekt stworzony &#8222;dla zabawy&#8221;, warto jednak mu si\u0119 przyjrze\u0107, bo obrazuje trend w ewolucji standard\u00f3w kryptograficznych oraz trwaj\u0105ce poszukiwania algorytm\u00f3w w obliczu post\u0119p\u00f3w w dziedzinie komputer\u00f3w kwantowych.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"521\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-12-1024x521.png\" alt=\"\" class=\"wp-image-17016\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-12-1024x521.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-12-300x153.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-12-768x391.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-12-1536x781.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-12-2048x1042.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Pami\u0119tajmy wi\u0119c, aby <a href=\"https:\/\/www.quantamagazine.org\/post-quantum-cryptography-scheme-is-cracked-on-a-laptop-20220824\/\">nie wpa\u015b\u0107 w patrzenie tunelowe podczas pracy nad takowymi<\/a>.<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"2-projekt-amper-gradle-definiowany-za-pomoca-yaml\" data-num=2>2. Projekt Amper &#8211; Gradle definiowany za pomoc\u0105 YAML<\/h2>\n\n\n\n<p>Przyzwyczajenia programist\u00f3w si\u0119 zmieniaj\u0105 &#8211; w ostatnich latach (teraz to ju\u017c pewnie dekadzie) dostali\u015bmy wysyp rozwi\u0105za\u0144 CI\/CD, pozawalaj\u0105cych w \u0142atwy spos\u00f3b definiowa\u0107 kolejne kroki procesu, deklaratywnie konfigurowanych za pomoc\u0105 plik\u00f3w YAML &#8211; \u017ceby wymieni\u0107 tu tylko Github Actions czy TravisCI. Jak si\u0119 nad tym zastanowi\u0107, to mi\u0119dzy skryptami do budowania (zw\u0142aszcza prostszymi), a pipelanami Continouse Integration nie ma a\u017c tak wielkiej koncepcyjnej r\u00f3\u017cnicy. Trend &#8222;yamlizacji&#8221; nie przenikn\u0105\u0142 jako\u015b mocno do \u015bwiata build tooli, przynajmniej w szerokim ekosystemie Javy. Mamy co prawda deklaratywnego Mavena, ale ze swoim ma\u0142o czytelnym XML-em, filozofia skupienia na &#8222;zarz\u0105dzania projektami&#8221; (POM to w ko\u0144cu Project Object Model), ale te\u017c ma\u0142a elastyczno\u015b\u0107 sprawi\u0142y, \u017ce wielu programist\u00f3w zacz\u0119\u0142o patrze\u0107 na \u0142atwiej rozszerzalnego Gradle. Rozszerzalno\u015b\u0107 za\u015b prowadzi\u0107 zacz\u0119\u0142a do nadmiernie skomplikowanych skrypt\u00f3w, w kt\u00f3rych \u0142atwo si\u0119 pogubi\u0107.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"281\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/wt-steins-gate-an-epic-time-travel-thriller-v0-piw8zzkbmseb1.gif\" alt=\"\" class=\"wp-image-17018\"\/><figcaption class=\"wp-element-caption\">Nieko\u0144cz\u0105cy si\u0119 cykl, z kt\u00f3rego nie potrafimy si\u0119 uwolni\u0107.<\/figcaption><\/figure><\/div>\n\n\n<p>Boli to zw\u0142aszcza JetBrains, kt\u00f3rym wdro\u017cenie Kotlin Multiplatform szczeg\u00f3lnie uwidoczni\u0142o z\u0142o\u017cono\u015b\u0107 Gradle, z jego mocno imperatywnym podej\u015bciem. Utrzymuj\u0105c r\u00f3wnocze\u015bnie aplikacje na klika platform, programi\u015bci sp\u0119dza\u0107 musz\u0105 bowiem sporo czasu z powodu ci\u0105g\u0142ych zmian w modu\u0142ach, zale\u017cno\u015bciach oraz potrzebie kompatybilno\u015bci mi\u0119dzy platformami. Id\u0105c w sukurs tym wyzwaniom, JetBrains rozpocz\u0119\u0142o we wsp\u00f3\u0142pracy z Gradle eksperymentalny <a href=\"https:\/\/blog.jetbrains.com\/blog\/2023\/11\/09\/amper-improving-the-build-tooling-user-experience\/\">projekt o nazwie Amper<\/a>. Narz\u0119dzie to ma na celu uproszczenie konfiguracji projekt\u00f3w i popraw\u0119 do\u015bwiadcze\u0144 u\u017cytkownika w \u015brodowiskach IDE, szczeg\u00f3lnie dla os\u00f3b pracuj\u0105cych z Jav\u0105 i Kotlinem. Zaimplementowany jako wtyczka do Gradle, Amper u\u017cywa formatu YAML do konfiguracji projekt\u00f3w. Ca\u0142o\u015b\u0107 wygl\u0105da tak:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>product:\n  type: lib\n  platforms: &#091;jvm, android, iosArm64, iosSimulatorArm64, iosX64]\n\n# Shared Compose dependencies:\ndependencies:\n  - org.jetbrains.compose.foundation:foundation:1.5.0-rc01: exported\n  - org.jetbrains.compose.material3:material3:1.5.0-rc01: exported\n\n# Android-only dependencies  \ndependencies@android:\n  # integration compose with activities\n  - androidx.activity:activity-compose:1.7.2: exported\n  - androidx.appcompat:appcompat:1.6.1: exported\n\n# iOS-only dependencies with a dependency on a CocoaPod\ndependencies@ios:\n  - pod: &#039;FirebaseCore&#039;\n    version: &#039;~&gt; 6.6&#039;\n\nsettings:\n  # Enable Kotlin serialization\n  kotlin:\n    serialization: json\n  \n  # Enable Compose Multiplatform framework\n  compose: enabled<\/code><\/pre>\n\n\n\n<p>Nikt tu si\u0119 nawet nie pr\u00f3buje kry\u0107 ze \u017ar\u00f3d\u0142em inspiracji<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"579\" height=\"431\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-13.png\" alt=\"\" class=\"wp-image-17021\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-13.png 579w, https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-13-300x223.png 300w\" sizes=\"auto, (max-width: 579px) 100vw, 579px\" \/><\/figure><\/div>\n\n\n<p>Chocia\u017c obecnie obs\u0142uguje tylko Kotlin i Kotlin Multiplatform, Amper obiecuje tak\u017ce wsparcie dla Javy i Swifta.<\/p>\n\n\n\n<p>Dodaj\u0105c deklaratywn\u0105 warstw\u0119 konfiguracji opart\u0105 na YAML nad Gradle, Ampera oferuje prostsze i potencjalnie mniej podatne na b\u0142\u0119dy podej\u015bcie do konfiguracji projekt\u00f3w. Inicjatywa ta ma na celu uczynienie Gradle bardziej dost\u0119pnym i przyjaznym dla u\u017cytkownika, szczeg\u00f3lnie dla programist\u00f3w, kt\u00f3rzy mog\u0105 by\u0107 przyt\u0142oczeni jego z\u0142o\u017cono\u015bci\u0105.<\/p>\n\n\n\n<p>Przyznam szczerze, \u017ce jestem w temacie tego rozwi\u0105zania nieco rozdarty. Z jednej strony, widz\u0119 wyra\u017an\u0105 potrzeb\u0119 uproszczenia procesu definiowania build\u00f3w w Gradle, na kszta\u0142t Mavena ale z bardziej intuicyjnym zarz\u0105dzaniem zale\u017cno\u015bciami i wtyczkami. U\u017cycie deklaratywnego syntaxu podobnego do tego u\u017cywanego w popularnych narz\u0119dziach CI, takich jak GitHub Actions, te\u017c wydaje si\u0119 by\u0107 pozytywnym krokiem. Jednak moim zdaniem, powinni\u015bmy podchodzi\u0107 do tego z ostro\u017cno\u015bci\u0105. Istnieje ryzyko, \u017ce uproszczenie mo\u017ce ograniczy\u0107 zdolno\u015bci systemu do obs\u0142ugi mniej standardowych wymaga\u0144 &#8211; a to by\u0142 w\u0142a\u015bnie pow\u00f3d, dla kt\u00f3rego tak wiele os\u00f3b zacz\u0119\u0142o migrowa\u0107 si\u0119 z Mavena. Og\u00f3lnie rzecz bior\u0105c, jestem ostro\u017cnie optymistyczny co do potencjalnych korzy\u015bci p\u0142yn\u0105cych z Ampera, ale mam nadzieje, \u017ce wraz z jego adopcj\u0105 nie zginie gdzie\u015b po drodze elastyczno\u015b\u0107 cechuj\u0105ca Gradle.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"666\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-14.png\" alt=\"\" class=\"wp-image-17024\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-14.png 500w, https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-14-225x300.png 225w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><figcaption class=\"wp-element-caption\">Tylko czemu znowu to musi by\u0107 YAML.<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"3-czy-wiesz-czym-jest-i-jak-dziala-invoke-dynamic\" data-num=3>3. Czy wiesz czym jest i jak dzia\u0142a Invoke Dynamic?<\/h2>\n\n\n\n<p>Co za du\u017co news\u00f3w to nie zdrowo, prawda? Dlatego dzisiaj mam dla Was &#8222;powr\u00f3t do korzeni&#8221;, czyli \u015bwietny tekst dotycz\u0105cy jednej z ciekawszych fragment\u00f3w JVM, sprzedaj\u0105cy wiedz\u0119 w m\u00f3j ulubiony, przyst\u0119pny spos\u00f3b.<\/p>\n\n\n\n<p>Invoke dynamic, cz\u0119sto skracane jako <code>indy<\/code>, to instrukcja na poziomie bajtkodu wprowadzona w Java 7 jako cz\u0119\u015b\u0107 Java Virtual Machine. G\u0142\u00f3wnym jej celem jest u\u0142atwienie implementacji na JVM, obok statycznie typowanych j\u0119zyk\u00f3w (takich jak Java) r\u00f3wnie\u017c j\u0119zyk\u00f3w dynamicznie typowanych (takich jak Python czy Ruby). W skr\u00f3cie, instrukcja oferuje elastyczny i wydajny spos\u00f3b obs\u0142ugi wywo\u0142a\u0144 metod w scenariuszach, gdy typ metody nie jest znany do momentu uruchomienia.<\/p>\n\n\n\n<p>Ale oczywi\u015bcie wi\u0105\u017ce si\u0119 z ni\u0105 masa niuans\u00f3w, dlatego chcia\u0142em si\u0119 dzisiaj podzieli\u0107 z Wami tekstem <a href=\"https:\/\/medium.com\/@nataliiadziubenko\/the-hidden-dynamic-life-of-java-12ba9bf95a44\">The Hidden Dynamic Life of Java<\/a> autorstwa Natali Dziubenko. Tekst umo\u017cliwia bowiem jasne zrozumienie r\u00f3\u017cnic mi\u0119dzy j\u0119zykami statycznie i dynamicznie typowanymi oraz tego, jak te r\u00f3\u017cnice wp\u0142ywaj\u0105 na funkcjonalno\u015b\u0107 samego JVM. Nast\u0119pnie om\u00f3wione s\u0105 r\u00f3\u017cne instrukcje wywo\u0142ania metod w JVM, takie jak <code>invokevirtual<\/code> i <code>invokestatic<\/code>, oraz to jak <code>invokedynamic<\/code> r\u00f3\u017cni si\u0119 od nich. Ponadto artyku\u0142 dostarcza praktycznych, prostszych do zrozumienia przyk\u0142ad\u00f3w wykorzystania <code>invokedynamic<\/code> w Javie mp. do konkatenacji \u0142a\u0144cuch\u00f3w znak\u00f3w, Pattern Matchingu czy lambd. Ca\u0142o\u015b\u0107 dotyka tak\u017ce wyzwa\u0144 zwi\u0105zanych z dynamicznym zachowaniem w kompilacji Ahead-Of-Time (AOT) oraz tego, jak <code>invokedynamic<\/code> wpisuje si\u0119 w ten krajobraz, szczeg\u00f3lnie w technologiach takich jak GraalVM.<\/p>\n\n\n\n<p>Og\u00f3lnie <a href=\"https:\/\/medium.com\/@nataliiadziubenko\">Medium Natalii<\/a> to taki ma\u0142y &#8222;hidden gem&#8221;, kt\u00f3ry w tym tygodniu odkry\u0142em i nie wiem jak do tej pory si\u0119 przede mn\u0105 ukrywa\u0142, bo teksty jej autorstwa oferuj\u0105 bogate przegl\u0105d mniej znanych aspekt\u00f3w Javy. Jestem pewien, \u017ce <a href=\"https:\/\/medium.com\/@nataliiadziubenko\">jej Medium<\/a> b\u0119dzie \u015bwietnym miejscem dla ka\u017cdego, kto chce pog\u0142\u0119bi\u0107 swoj\u0105 wiedz\u0119 o JVM. U mnie to by\u0142 instafollow \ud83d\ude03<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"780\" height=\"349\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-15.png\" alt=\"\" class=\"wp-image-17026\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-15.png 780w, https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-15-300x134.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-15-768x344.png 768w\" sizes=\"auto, (max-width: 780px) 100vw, 780px\" \/><figcaption class=\"wp-element-caption\">No i uwielbiam ten uroczy styl ilustracji.<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"4-a-na-koniec-filozoficznie-o-wyjatkach-i-teorii-typow\" data-num=4>4. A na koniec, filozoficznie o wyj\u0105tkach i teorii typ\u00f3w.<\/h2>\n\n\n\n<p>Og\u00f3lne nastawienie spo\u0142eczno\u015bci programistycznej do <em>Checked Exceptions<\/em> w Javie jest (w najlepszym razie) mieszane &#8211; znacz\u0105ca cz\u0119\u015b\u0107 programist\u00f3w uwa\u017ca je za uci\u0105\u017cliwe i ograniczaj\u0105ce. Wymagaj\u0105 one, aby metody deklarowa\u0142y wyj\u0105tki, kt\u00f3re mog\u0105 w nich wyst\u0105pi\u0107, a wywo\u0142uj\u0105cy te metody musz\u0105 obs\u0142ugiwa\u0107 te wyj\u0105tki lub wymusza\u0107 to na swoich odbiorcach. Ten aspekt Javy ma sens na papierze (w ko\u0144cu dobrze wiedzie\u0107, co mo\u017ce p\u00f3j\u015b\u0107 nie tak) jednak jest cz\u0119sto postrzegany jako nadmiernie rozwlek\u0142y i mo\u017ce prowadzi\u0107 do skomplikowanego kodu, szczeg\u00f3lnie w przypadkach, gdy konieczne jest przechwytywanie lub propagowanie wielu r\u00f3\u017cnych wyj\u0105tk\u00f3w.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"618\" height=\"561\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-16.png\" alt=\"\" class=\"wp-image-17028\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-16.png 618w, https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-16-300x272.png 300w\" sizes=\"auto, (max-width: 618px) 100vw, 618px\" \/><figcaption class=\"wp-element-caption\">Mo\u017cna oczywi\u015bcie te\u017c poradzi\u0107 sobie pro\u015bciej.<\/figcaption><\/figure><\/div>\n\n\n<p>Tekst <a href=\"https:\/\/borretti.me\/article\/why-checked-exceptions-failed\">Why Checked Exceptions Failed<\/a> autorstwa Fernando Borrettiego dostarcza przemy\u015blanej krytyki Checked Exceptions w Javie, kwestionuj\u0105c ich praktyczno\u015b\u0107 i integracj\u0119 z reszt\u0105 funkcji j\u0119zyka. Wskazuje na to, \u017ce chocia\u017c Java doda\u0142a te dodatkowe informacje do sygnatur metod, nie zintegrowa\u0142a w pe\u0142ni tego koncepcji z innymi funkcjami j\u0119zyka, co prowadzi do braku czego\u015b, co autor nazywa &#8222;polimorfizmem rzucania wyj\u0105tk\u00f3w&#8221;.<\/p>\n\n\n\n<p>Tekst jest wart przeczytania, poniewa\u017c bada g\u0142\u0119bsze implikacje decyzji projektowych Javy dotycz\u0105cych wyj\u0105tk\u00f3w. Wyja\u015bnia przyczyny znanych z praktycznego u\u017cycia ogranicze\u0144 na\u0142o\u017conych przez wyj\u0105tki kontrolowane, takie jak trudno\u015bci w ich stosowaniu w parze z interfejsami i typami generycznymi, i kontrastuje to z podej\u015bciem j\u0119zyk\u00f3w programowania funkcyjnego, kt\u00f3re u\u017cywaj\u0105 typ\u00f3w takich jak Option i Result do obs\u0142ugi b\u0142\u0119d\u00f3w. Autor argumentuje te\u017c, dlaczego to podej\u015bcie bardziej naturalnie wpisuje si\u0119 w istniej\u0105ce systemy typ\u00f3w tych j\u0119zyk\u00f3w.<\/p>\n\n\n\n<p>Ponadto, artyku\u0142 mo\u017ce s\u0142u\u017cy\u0107 jako przypomnienie o tym, jak z\u0142o\u017conym problemem jest projektowanie j\u0119zyk\u00f3w programowania. Ilustruje, jak dodanie lub modyfikacja jednego fragmentu syntaxu mo\u017ce mie\u0107 szerokie implikacje, wymagaj\u0105ce starannego rozwa\u017cenia i integracji z ca\u0142o\u015bci\u0105 j\u0119zyka.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"808\" height=\"499\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-17.png\" alt=\"\" class=\"wp-image-17030\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-17.png 808w, https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-17-300x185.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-17-768x474.png 768w\" sizes=\"auto, (max-width: 808px) 100vw, 808px\" \/><figcaption class=\"wp-element-caption\">Kopanie le\u017c\u0105cego\u2122\ufe0f<\/figcaption><\/figure><\/div>","protected":false},"excerpt":{"rendered":"<p>Znowu mamy ca\u0142kiem wype\u0142nion\u0105 edycje &#8211; dzisiaj mniej news\u00f3w, a wi\u0119cej troch\u0119 g\u0142\u0119bszych tre\u015bci. Mam nadzieje, \u017ce si\u0119 spodoba.<\/p>\n","protected":false},"author":10,"featured_media":17034,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259,1],"tags":[],"class_list":["post-17007","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm-pl","category-no-category"],"acf":{"estimated_reading_time":"8","feature_image_blog":false,"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/JVM-Weekly-1200x628_V2-3.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>Amper od JetBrains: definiowanie build\u00f3w Gradle poprzez YAML - JVM Weekly vol. 153 - 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\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Amper od JetBrains: definiowanie build\u00f3w Gradle poprzez YAML - JVM Weekly vol. 153 - Vived\" \/>\n<meta property=\"og:description\" content=\"Znowu mamy ca\u0142kiem wype\u0142nion\u0105 edycje - dzisiaj mniej news\u00f3w, a wi\u0119cej troch\u0119 g\u0142\u0119bszych tre\u015bci. Mam nadzieje, \u017ce si\u0119 spodoba.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-15T11:54:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-16T08:33:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/JVM-Weekly-1200x628_V2-3.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\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Amper od JetBrains: definiowanie build\u00f3w Gradle poprzez YAML &#8211; JVM Weekly vol. 153\",\"datePublished\":\"2023-11-15T11:54:32+00:00\",\"dateModified\":\"2023-11-16T08:33:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/\"},\"wordCount\":1728,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/JVM-Weekly-1200x628_V2-3.png\",\"articleSection\":[\"JVM\",\"No category\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/\",\"url\":\"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/\",\"name\":\"Amper od JetBrains: definiowanie build\u00f3w Gradle poprzez YAML - JVM Weekly vol. 153 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/JVM-Weekly-1200x628_V2-3.png\",\"datePublished\":\"2023-11-15T11:54:32+00:00\",\"dateModified\":\"2023-11-16T08:33:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/JVM-Weekly-1200x628_V2-3.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/JVM-Weekly-1200x628_V2-3.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Amper od JetBrains: definiowanie build\u00f3w Gradle poprzez YAML &#8211; JVM Weekly vol. 153\"}]},{\"@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":"Amper od JetBrains: definiowanie build\u00f3w Gradle poprzez YAML - JVM Weekly vol. 153 - 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\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/","og_locale":"pl_PL","og_type":"article","og_title":"Amper od JetBrains: definiowanie build\u00f3w Gradle poprzez YAML - JVM Weekly vol. 153 - Vived","og_description":"Znowu mamy ca\u0142kiem wype\u0142nion\u0105 edycje - dzisiaj mniej news\u00f3w, a wi\u0119cej troch\u0119 g\u0142\u0119bszych tre\u015bci. Mam nadzieje, \u017ce si\u0119 spodoba.","og_url":"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/","og_site_name":"Vived","article_published_time":"2023-11-15T11:54:32+00:00","article_modified_time":"2023-11-16T08:33:38+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/JVM-Weekly-1200x628_V2-3.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\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Amper od JetBrains: definiowanie build\u00f3w Gradle poprzez YAML &#8211; JVM Weekly vol. 153","datePublished":"2023-11-15T11:54:32+00:00","dateModified":"2023-11-16T08:33:38+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/"},"wordCount":1728,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/JVM-Weekly-1200x628_V2-3.png","articleSection":["JVM","No category"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/","url":"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/","name":"Amper od JetBrains: definiowanie build\u00f3w Gradle poprzez YAML - JVM Weekly vol. 153 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/JVM-Weekly-1200x628_V2-3.png","datePublished":"2023-11-15T11:54:32+00:00","dateModified":"2023-11-16T08:33:38+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/JVM-Weekly-1200x628_V2-3.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/JVM-Weekly-1200x628_V2-3.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/amper-od-jetbrains-definiowanie-buildow-gradle-poprzez-yaml-jvm-weekly-vol-153\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Amper od JetBrains: definiowanie build\u00f3w Gradle poprzez YAML &#8211; JVM Weekly vol. 153"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3","name":"Artur Skowro\u0144ski","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","caption":"Artur Skowro\u0144ski"}}]}},"blocks_vived":[{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">1. Powa\u017cna sekcja o powa\u017cnych tematach - czyli nowo\u015bci w obs\u0142udze kryptografii<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">1. Powa\u017cna sekcja o powa\u017cnych tematach - czyli nowo\u015bci w obs\u0142udze kryptografii<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zaczniemy sobie od temat\u00f3w zwi\u0105zanych z bezpiecze\u0144stwem, bo w zesz\u0142ym tygodniu dostali\u015bmy ciekawe og\u0142oszenie od samego Oracle.<\/p>\n","innerContent":["\n<p>Zaczniemy sobie od temat\u00f3w zwi\u0105zanych z bezpiecze\u0144stwem, bo w zesz\u0142ym tygodniu dostali\u015bmy ciekawe og\u0142oszenie od samego Oracle.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":17008,"width":"448px","height":"auto","aspectRatio":"1.635036496350365","sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-9.png\" alt=\"\" class=\"wp-image-17008\" style=\"aspect-ratio:1.635036496350365;width:448px;height:auto\"\/><figcaption class=\"wp-element-caption\">Obowi\u0105zkowe XKCD na prze\u0142amanie zanim p\u00f3jdziemy dalej.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-9.png\" alt=\"\" class=\"wp-image-17008\" style=\"aspect-ratio:1.635036496350365;width:448px;height:auto\"\/><figcaption class=\"wp-element-caption\">Obowi\u0105zkowe XKCD na prze\u0142amanie zanim p\u00f3jdziemy dalej.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>JCA, czyli Java Cryptography Architecture, to zestaw interfejs\u00f3w (wprowadzony w JDK 1.1 w 1997), umo\u017cliwiaj\u0105cych integracj\u0119 i dost\u0119p do r\u00f3\u017cnorodnych operacji kryptograficznych, takich jak szyfrowanie, podpisywanie czy generowanie kluczy. Jipher JCE to rozwi\u0105zanie od Oracle, zaprojektowane jako implementacja JCA i integruje ono wst\u0119pnie skonfigurowan\u0105 i zgodn\u0105 z FIPS wersj\u0119 OpenSSL 3.0, specjalnie dostosowan\u0105 do obs\u0142ugi algorytm\u00f3w dozwolonych przez standardy FIPS. Podczas <a href=\"https:\/\/blogs.oracle.com\/developers\/post\/open-sourcing-jipher\">KubeCon North America 2023 Oracle og\u0142osi\u0142o<\/a>, \u017ce rozwi\u0105zanie (b\u0119d\u0105ce wcze\u015bniej komponentem ich chmury) zostanie oddane spo\u0142eczno\u015bci.<\/p>\n","innerContent":["\n<p>JCA, czyli Java Cryptography Architecture, to zestaw interfejs\u00f3w (wprowadzony w JDK 1.1 w 1997), umo\u017cliwiaj\u0105cych integracj\u0119 i dost\u0119p do r\u00f3\u017cnorodnych operacji kryptograficznych, takich jak szyfrowanie, podpisywanie czy generowanie kluczy. Jipher JCE to rozwi\u0105zanie od Oracle, zaprojektowane jako implementacja JCA i integruje ono wst\u0119pnie skonfigurowan\u0105 i zgodn\u0105 z FIPS wersj\u0119 OpenSSL 3.0, specjalnie dostosowan\u0105 do obs\u0142ugi algorytm\u00f3w dozwolonych przez standardy FIPS. Podczas <a href=\"https:\/\/blogs.oracle.com\/developers\/post\/open-sourcing-jipher\">KubeCon North America 2023 Oracle og\u0142osi\u0142o<\/a>, \u017ce rozwi\u0105zanie (b\u0119d\u0105ce wcze\u015bniej komponentem ich chmury) zostanie oddane spo\u0142eczno\u015bci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>No to teraz troch\u0119 o FIPS. Jest to skr\u00f3t od Federal Information Processing Standards, publicznie og\u0142aszanych standard\u00f3w, opracowanych przez National Institute of Standards and Technology (NIST) w Stanach Zjednoczonych. Te s\u0105 stosowane w rz\u0105dowych systemach komputerowych (z wyj\u0105tkiem system\u00f3w zwi\u0105zanych z obronno\u015bci\u0105), aby zapewni\u0107 ich bezpiecze\u0144stwo i interoperacyjno\u015b\u0107. Obejmuje to w\u0142a\u015bnie wspomniany modu\u0142 FIPS OpenSSL 3.0.<\/p>\n","innerContent":["\n<p>No to teraz troch\u0119 o FIPS. Jest to skr\u00f3t od Federal Information Processing Standards, publicznie og\u0142aszanych standard\u00f3w, opracowanych przez National Institute of Standards and Technology (NIST) w Stanach Zjednoczonych. Te s\u0105 stosowane w rz\u0105dowych systemach komputerowych (z wyj\u0105tkiem system\u00f3w zwi\u0105zanych z obronno\u015bci\u0105), aby zapewni\u0107 ich bezpiecze\u0144stwo i interoperacyjno\u015b\u0107. Obejmuje to w\u0142a\u015bnie wspomniany modu\u0142 FIPS OpenSSL 3.0.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>S\u0142owem klucz og\u0142oszenia jest wi\u0119c szeroko rozumiany \"compliance\", aczkolwiek to co wyr\u00f3\u017cnia Jipher JCE to r\u00f3wnie\u017c wydajno\u015b\u0107 - ca\u0142o\u015b\u0107 zbudowana zosta\u0142a bowiem w oparciu o Project Panama, co daje jej przewag\u0119 nad starsz\u0105 konkurencj\u0105 typu <a href=\"https:\/\/www.bouncycastle.org\">Bouncy Castle<\/a>... podobno, bo na razie dostali\u015bmy dopiero zapowied\u017a wprowadzenia rozwi\u0105zania do OpenJDK.<\/p>\n","innerContent":["\n<p>S\u0142owem klucz og\u0142oszenia jest wi\u0119c szeroko rozumiany \"compliance\", aczkolwiek to co wyr\u00f3\u017cnia Jipher JCE to r\u00f3wnie\u017c wydajno\u015b\u0107 - ca\u0142o\u015b\u0107 zbudowana zosta\u0142a bowiem w oparciu o Project Panama, co daje jej przewag\u0119 nad starsz\u0105 konkurencj\u0105 typu <a href=\"https:\/\/www.bouncycastle.org\">Bouncy Castle<\/a>... podobno, bo na razie dostali\u015bmy dopiero zapowied\u017a wprowadzenia rozwi\u0105zania do OpenJDK.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To jednak nie wszystko. Oracle og\u0142osi\u0142 ch\u0119\u0107 wi\u0119kszego zaanga\u017cowania w prace Cloud Native Computing Foundation (CNCF). Zaanga\u017cowanie to obejmuje za\u015b 3 miliony dolar\u00f3w w kredytach na infrastruktur\u0119 w ramach mocy obliczeniowej Ampere Arm w Oracle Cloud Infrastructure. Wszystkie zapowiedzi <a href=\"https:\/\/www.oracle.com\/news\/announcement\/oracle-expands-support-for-open-source-community-2023-11-07\/\">znajdziecie tutaj<\/a>.<\/p>\n","innerContent":["\n<p>To jednak nie wszystko. Oracle og\u0142osi\u0142 ch\u0119\u0107 wi\u0119kszego zaanga\u017cowania w prace Cloud Native Computing Foundation (CNCF). Zaanga\u017cowanie to obejmuje za\u015b 3 miliony dolar\u00f3w w kredytach na infrastruktur\u0119 w ramach mocy obliczeniowej Ampere Arm w Oracle Cloud Infrastructure. Wszystkie zapowiedzi <a href=\"https:\/\/www.oracle.com\/news\/announcement\/oracle-expands-support-for-open-source-community-2023-11-07\/\">znajdziecie tutaj<\/a>.<\/p>\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 bezpiecze\u0144stwie, to jeszcze w sierpniu swoj\u0105 premier\u0119 mia\u0142a biblioteka <a href=\"https:\/\/github.com\/mthiim\/dilithium-java\">Java Dilithium<\/a>, kt\u00f3ra jest \"hobbystyczn\u0105\" implementacj\u0105 biblioteki <a href=\"https:\/\/github.com\/pq-crystals\/dilithium\">Dilithium z C<\/a>. Dilithium, b\u0119d\u0105cy cz\u0119\u015bci\u0105 zestawu algorytm\u00f3w CRYSTALS, zosta\u0142 zalecony przez wspomniany ju\u017c NIST jako g\u0142\u00f3wny algorytm dla kryptografii postkwantowej. Opiera si\u0119 on na <strong>algebraicznych kratownicach (algebraic lattices)<\/strong>, oferuj\u0105c kilka rozwi\u0105za\u0144 z r\u00f3\u017cnymi poziomami bezpiecze\u0144stwa oraz obs\u0142uguj\u0105ca deterministyczne schematy sygnatur. Jak kto\u015b lubi kryptografie, to g\u0142\u00f3wne mi\u0119sko znajdziecie za\u015b <a href=\"https:\/\/github.com\/mthiim\/dilithium-java\/blob\/main\/src\/main\/java\/net\/thiim\/dilithium\/impl\/Dilithium.java\">w tej klasie<\/a>.<\/p>\n","innerContent":["\n<p>A jak ju\u017c jeste\u015bmy przy bezpiecze\u0144stwie, to jeszcze w sierpniu swoj\u0105 premier\u0119 mia\u0142a biblioteka <a href=\"https:\/\/github.com\/mthiim\/dilithium-java\">Java Dilithium<\/a>, kt\u00f3ra jest \"hobbystyczn\u0105\" implementacj\u0105 biblioteki <a href=\"https:\/\/github.com\/pq-crystals\/dilithium\">Dilithium z C<\/a>. Dilithium, b\u0119d\u0105cy cz\u0119\u015bci\u0105 zestawu algorytm\u00f3w CRYSTALS, zosta\u0142 zalecony przez wspomniany ju\u017c NIST jako g\u0142\u00f3wny algorytm dla kryptografii postkwantowej. Opiera si\u0119 on na <strong>algebraicznych kratownicach (algebraic lattices)<\/strong>, oferuj\u0105c kilka rozwi\u0105za\u0144 z r\u00f3\u017cnymi poziomami bezpiecze\u0144stwa oraz obs\u0142uguj\u0105ca deterministyczne schematy sygnatur. Jak kto\u015b lubi kryptografie, to g\u0142\u00f3wne mi\u0119sko znajdziecie za\u015b <a href=\"https:\/\/github.com\/mthiim\/dilithium-java\/blob\/main\/src\/main\/java\/net\/thiim\/dilithium\/impl\/Dilithium.java\">w tej klasie<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":17013,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-11-1024x683.png\" alt=\"\" class=\"wp-image-17013\"\/><figcaption class=\"wp-element-caption\">Tak, moja c\u00f3rka pomagaj\u0105ca mi w researchu do tej edycji, a czemu pytasz?<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-11-1024x683.png\" alt=\"\" class=\"wp-image-17013\"\/><figcaption class=\"wp-element-caption\">Tak, moja c\u00f3rka pomagaj\u0105ca mi w researchu do tej edycji, a czemu pytasz?<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Chocia\u017c ta implementacja, zaprojektowana dla satysfakcji autora i nie przeznaczona do produkcji, przechodzi wszystkie dost\u0119pne testy i obejmuje funkcje takie jak serializacja i deserializacja. Jest to jednak projekt stworzony \"dla zabawy\", warto jednak mu si\u0119 przyjrze\u0107, bo obrazuje trend w ewolucji standard\u00f3w kryptograficznych oraz trwaj\u0105ce poszukiwania algorytm\u00f3w w obliczu post\u0119p\u00f3w w dziedzinie komputer\u00f3w kwantowych.<\/p>\n","innerContent":["\n<p>Chocia\u017c ta implementacja, zaprojektowana dla satysfakcji autora i nie przeznaczona do produkcji, przechodzi wszystkie dost\u0119pne testy i obejmuje funkcje takie jak serializacja i deserializacja. Jest to jednak projekt stworzony \"dla zabawy\", warto jednak mu si\u0119 przyjrze\u0107, bo obrazuje trend w ewolucji standard\u00f3w kryptograficznych oraz trwaj\u0105ce poszukiwania algorytm\u00f3w w obliczu post\u0119p\u00f3w w dziedzinie komputer\u00f3w kwantowych.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":17016,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-12-1024x521.png\" alt=\"\" class=\"wp-image-17016\"\/><figcaption class=\"wp-element-caption\">Pami\u0119tajmy wi\u0119c, aby <a href=\"https:\/\/www.quantamagazine.org\/post-quantum-cryptography-scheme-is-cracked-on-a-laptop-20220824\/\">nie wpa\u015b\u0107 w patrzenie tunelowe podczas pracy nad takowymi<\/a>.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-12-1024x521.png\" alt=\"\" class=\"wp-image-17016\"\/><figcaption class=\"wp-element-caption\">Pami\u0119tajmy wi\u0119c, aby <a href=\"https:\/\/www.quantamagazine.org\/post-quantum-cryptography-scheme-is-cracked-on-a-laptop-20220824\/\">nie wpa\u015b\u0107 w patrzenie tunelowe podczas pracy nad takowymi<\/a>.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">2. Projekt Amper - Gradle definiowany za pomoc\u0105 YAML<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">2. Projekt Amper - Gradle definiowany za pomoc\u0105 YAML<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Przyzwyczajenia programist\u00f3w si\u0119 zmieniaj\u0105 - w ostatnich latach (teraz to ju\u017c pewnie dekadzie) dostali\u015bmy wysyp rozwi\u0105za\u0144 CI\/CD, pozawalaj\u0105cych w \u0142atwy spos\u00f3b definiowa\u0107 kolejne kroki procesu, deklaratywnie konfigurowanych za pomoc\u0105 plik\u00f3w YAML - \u017ceby wymieni\u0107 tu tylko Github Actions czy TravisCI. Jak si\u0119 nad tym zastanowi\u0107, to mi\u0119dzy skryptami do budowania (zw\u0142aszcza prostszymi), a pipelanami Continouse Integration nie ma a\u017c tak wielkiej koncepcyjnej r\u00f3\u017cnicy. Trend \"yamlizacji\" nie przenikn\u0105\u0142 jako\u015b mocno do \u015bwiata build tooli, przynajmniej w szerokim ekosystemie Javy. Mamy co prawda deklaratywnego Mavena, ale ze swoim ma\u0142o czytelnym XML-em, filozofia skupienia na \"zarz\u0105dzania projektami\" (POM to w ko\u0144cu Project Object Model), ale te\u017c ma\u0142a elastyczno\u015b\u0107 sprawi\u0142y, \u017ce wielu programist\u00f3w zacz\u0119\u0142o patrze\u0107 na \u0142atwiej rozszerzalnego Gradle. Rozszerzalno\u015b\u0107 za\u015b prowadzi\u0107 zacz\u0119\u0142a do nadmiernie skomplikowanych skrypt\u00f3w, w kt\u00f3rych \u0142atwo si\u0119 pogubi\u0107.<\/p>\n","innerContent":["\n<p>Przyzwyczajenia programist\u00f3w si\u0119 zmieniaj\u0105 - w ostatnich latach (teraz to ju\u017c pewnie dekadzie) dostali\u015bmy wysyp rozwi\u0105za\u0144 CI\/CD, pozawalaj\u0105cych w \u0142atwy spos\u00f3b definiowa\u0107 kolejne kroki procesu, deklaratywnie konfigurowanych za pomoc\u0105 plik\u00f3w YAML - \u017ceby wymieni\u0107 tu tylko Github Actions czy TravisCI. Jak si\u0119 nad tym zastanowi\u0107, to mi\u0119dzy skryptami do budowania (zw\u0142aszcza prostszymi), a pipelanami Continouse Integration nie ma a\u017c tak wielkiej koncepcyjnej r\u00f3\u017cnicy. Trend \"yamlizacji\" nie przenikn\u0105\u0142 jako\u015b mocno do \u015bwiata build tooli, przynajmniej w szerokim ekosystemie Javy. Mamy co prawda deklaratywnego Mavena, ale ze swoim ma\u0142o czytelnym XML-em, filozofia skupienia na \"zarz\u0105dzania projektami\" (POM to w ko\u0144cu Project Object Model), ale te\u017c ma\u0142a elastyczno\u015b\u0107 sprawi\u0142y, \u017ce wielu programist\u00f3w zacz\u0119\u0142o patrze\u0107 na \u0142atwiej rozszerzalnego Gradle. Rozszerzalno\u015b\u0107 za\u015b prowadzi\u0107 zacz\u0119\u0142a do nadmiernie skomplikowanych skrypt\u00f3w, w kt\u00f3rych \u0142atwo si\u0119 pogubi\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":17018,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/wt-steins-gate-an-epic-time-travel-thriller-v0-piw8zzkbmseb1.gif\" alt=\"\" class=\"wp-image-17018\"\/><figcaption class=\"wp-element-caption\">Nieko\u0144cz\u0105cy si\u0119 cykl, z kt\u00f3rego nie potrafimy si\u0119 uwolni\u0107.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/wt-steins-gate-an-epic-time-travel-thriller-v0-piw8zzkbmseb1.gif\" alt=\"\" class=\"wp-image-17018\"\/><figcaption class=\"wp-element-caption\">Nieko\u0144cz\u0105cy si\u0119 cykl, z kt\u00f3rego nie potrafimy si\u0119 uwolni\u0107.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Boli to zw\u0142aszcza JetBrains, kt\u00f3rym wdro\u017cenie Kotlin Multiplatform szczeg\u00f3lnie uwidoczni\u0142o z\u0142o\u017cono\u015b\u0107 Gradle, z jego mocno imperatywnym podej\u015bciem. Utrzymuj\u0105c r\u00f3wnocze\u015bnie aplikacje na klika platform, programi\u015bci sp\u0119dza\u0107 musz\u0105 bowiem sporo czasu z powodu ci\u0105g\u0142ych zmian w modu\u0142ach, zale\u017cno\u015bciach oraz potrzebie kompatybilno\u015bci mi\u0119dzy platformami. Id\u0105c w sukurs tym wyzwaniom, JetBrains rozpocz\u0119\u0142o we wsp\u00f3\u0142pracy z Gradle eksperymentalny <a href=\"https:\/\/blog.jetbrains.com\/blog\/2023\/11\/09\/amper-improving-the-build-tooling-user-experience\/\">projekt o nazwie Amper<\/a>. Narz\u0119dzie to ma na celu uproszczenie konfiguracji projekt\u00f3w i popraw\u0119 do\u015bwiadcze\u0144 u\u017cytkownika w \u015brodowiskach IDE, szczeg\u00f3lnie dla os\u00f3b pracuj\u0105cych z Jav\u0105 i Kotlinem. Zaimplementowany jako wtyczka do Gradle, Amper u\u017cywa formatu YAML do konfiguracji projekt\u00f3w. Ca\u0142o\u015b\u0107 wygl\u0105da tak:<\/p>\n","innerContent":["\n<p>Boli to zw\u0142aszcza JetBrains, kt\u00f3rym wdro\u017cenie Kotlin Multiplatform szczeg\u00f3lnie uwidoczni\u0142o z\u0142o\u017cono\u015b\u0107 Gradle, z jego mocno imperatywnym podej\u015bciem. Utrzymuj\u0105c r\u00f3wnocze\u015bnie aplikacje na klika platform, programi\u015bci sp\u0119dza\u0107 musz\u0105 bowiem sporo czasu z powodu ci\u0105g\u0142ych zmian w modu\u0142ach, zale\u017cno\u015bciach oraz potrzebie kompatybilno\u015bci mi\u0119dzy platformami. Id\u0105c w sukurs tym wyzwaniom, JetBrains rozpocz\u0119\u0142o we wsp\u00f3\u0142pracy z Gradle eksperymentalny <a href=\"https:\/\/blog.jetbrains.com\/blog\/2023\/11\/09\/amper-improving-the-build-tooling-user-experience\/\">projekt o nazwie Amper<\/a>. Narz\u0119dzie to ma na celu uproszczenie konfiguracji projekt\u00f3w i popraw\u0119 do\u015bwiadcze\u0144 u\u017cytkownika w \u015brodowiskach IDE, szczeg\u00f3lnie dla os\u00f3b pracuj\u0105cych z Jav\u0105 i Kotlinem. Zaimplementowany jako wtyczka do Gradle, Amper u\u017cywa formatu YAML do konfiguracji projekt\u00f3w. Ca\u0142o\u015b\u0107 wygl\u0105da tak:<\/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>product:\n  type: lib\n  platforms: &#91;jvm, android, iosArm64, iosSimulatorArm64, iosX64]\n\n# Shared Compose dependencies:\ndependencies:\n  - org.jetbrains.compose.foundation:foundation:1.5.0-rc01: exported\n  - org.jetbrains.compose.material3:material3:1.5.0-rc01: exported\n\n# Android-only dependencies  \ndependencies@android:\n  # integration compose with activities\n  - androidx.activity:activity-compose:1.7.2: exported\n  - androidx.appcompat:appcompat:1.6.1: exported\n\n# iOS-only dependencies with a dependency on a CocoaPod\ndependencies@ios:\n  - pod: 'FirebaseCore'\n    version: '~&gt; 6.6'\n\nsettings:\n  # Enable Kotlin serialization\n  kotlin:\n    serialization: json\n  \n  # Enable Compose Multiplatform framework\n  compose: enabled<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>product:\n  type: lib\n  platforms: &#91;jvm, android, iosArm64, iosSimulatorArm64, iosX64]\n\n# Shared Compose dependencies:\ndependencies:\n  - org.jetbrains.compose.foundation:foundation:1.5.0-rc01: exported\n  - org.jetbrains.compose.material3:material3:1.5.0-rc01: exported\n\n# Android-only dependencies  \ndependencies@android:\n  # integration compose with activities\n  - androidx.activity:activity-compose:1.7.2: exported\n  - androidx.appcompat:appcompat:1.6.1: exported\n\n# iOS-only dependencies with a dependency on a CocoaPod\ndependencies@ios:\n  - pod: 'FirebaseCore'\n    version: '~&gt; 6.6'\n\nsettings:\n  # Enable Kotlin serialization\n  kotlin:\n    serialization: json\n  \n  # Enable Compose Multiplatform framework\n  compose: enabled<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nikt tu si\u0119 nawet nie pr\u00f3buje kry\u0107 ze \u017ar\u00f3d\u0142em inspiracji<\/p>\n","innerContent":["\n<p>Nikt tu si\u0119 nawet nie pr\u00f3buje kry\u0107 ze \u017ar\u00f3d\u0142em inspiracji<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":17021,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-13.png\" alt=\"\" class=\"wp-image-17021\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-13.png\" alt=\"\" class=\"wp-image-17021\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Chocia\u017c obecnie obs\u0142uguje tylko Kotlin i Kotlin Multiplatform, Amper obiecuje tak\u017ce wsparcie dla Javy i Swifta.<\/p>\n","innerContent":["\n<p>Chocia\u017c obecnie obs\u0142uguje tylko Kotlin i Kotlin Multiplatform, Amper obiecuje tak\u017ce wsparcie dla Javy i Swifta.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dodaj\u0105c deklaratywn\u0105 warstw\u0119 konfiguracji opart\u0105 na YAML nad Gradle, Ampera oferuje prostsze i potencjalnie mniej podatne na b\u0142\u0119dy podej\u015bcie do konfiguracji projekt\u00f3w. Inicjatywa ta ma na celu uczynienie Gradle bardziej dost\u0119pnym i przyjaznym dla u\u017cytkownika, szczeg\u00f3lnie dla programist\u00f3w, kt\u00f3rzy mog\u0105 by\u0107 przyt\u0142oczeni jego z\u0142o\u017cono\u015bci\u0105.<\/p>\n","innerContent":["\n<p>Dodaj\u0105c deklaratywn\u0105 warstw\u0119 konfiguracji opart\u0105 na YAML nad Gradle, Ampera oferuje prostsze i potencjalnie mniej podatne na b\u0142\u0119dy podej\u015bcie do konfiguracji projekt\u00f3w. Inicjatywa ta ma na celu uczynienie Gradle bardziej dost\u0119pnym i przyjaznym dla u\u017cytkownika, szczeg\u00f3lnie dla programist\u00f3w, kt\u00f3rzy mog\u0105 by\u0107 przyt\u0142oczeni jego z\u0142o\u017cono\u015bci\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Przyznam szczerze, \u017ce jestem w temacie tego rozwi\u0105zania nieco rozdarty. Z jednej strony, widz\u0119 wyra\u017an\u0105 potrzeb\u0119 uproszczenia procesu definiowania build\u00f3w w Gradle, na kszta\u0142t Mavena ale z bardziej intuicyjnym zarz\u0105dzaniem zale\u017cno\u015bciami i wtyczkami. U\u017cycie deklaratywnego syntaxu podobnego do tego u\u017cywanego w popularnych narz\u0119dziach CI, takich jak GitHub Actions, te\u017c wydaje si\u0119 by\u0107 pozytywnym krokiem. Jednak moim zdaniem, powinni\u015bmy podchodzi\u0107 do tego z ostro\u017cno\u015bci\u0105. Istnieje ryzyko, \u017ce uproszczenie mo\u017ce ograniczy\u0107 zdolno\u015bci systemu do obs\u0142ugi mniej standardowych wymaga\u0144 - a to by\u0142 w\u0142a\u015bnie pow\u00f3d, dla kt\u00f3rego tak wiele os\u00f3b zacz\u0119\u0142o migrowa\u0107 si\u0119 z Mavena. Og\u00f3lnie rzecz bior\u0105c, jestem ostro\u017cnie optymistyczny co do potencjalnych korzy\u015bci p\u0142yn\u0105cych z Ampera, ale mam nadzieje, \u017ce wraz z jego adopcj\u0105 nie zginie gdzie\u015b po drodze elastyczno\u015b\u0107 cechuj\u0105ca Gradle.<\/p>\n","innerContent":["\n<p>Przyznam szczerze, \u017ce jestem w temacie tego rozwi\u0105zania nieco rozdarty. Z jednej strony, widz\u0119 wyra\u017an\u0105 potrzeb\u0119 uproszczenia procesu definiowania build\u00f3w w Gradle, na kszta\u0142t Mavena ale z bardziej intuicyjnym zarz\u0105dzaniem zale\u017cno\u015bciami i wtyczkami. U\u017cycie deklaratywnego syntaxu podobnego do tego u\u017cywanego w popularnych narz\u0119dziach CI, takich jak GitHub Actions, te\u017c wydaje si\u0119 by\u0107 pozytywnym krokiem. Jednak moim zdaniem, powinni\u015bmy podchodzi\u0107 do tego z ostro\u017cno\u015bci\u0105. Istnieje ryzyko, \u017ce uproszczenie mo\u017ce ograniczy\u0107 zdolno\u015bci systemu do obs\u0142ugi mniej standardowych wymaga\u0144 - a to by\u0142 w\u0142a\u015bnie pow\u00f3d, dla kt\u00f3rego tak wiele os\u00f3b zacz\u0119\u0142o migrowa\u0107 si\u0119 z Mavena. Og\u00f3lnie rzecz bior\u0105c, jestem ostro\u017cnie optymistyczny co do potencjalnych korzy\u015bci p\u0142yn\u0105cych z Ampera, ale mam nadzieje, \u017ce wraz z jego adopcj\u0105 nie zginie gdzie\u015b po drodze elastyczno\u015b\u0107 cechuj\u0105ca Gradle.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":17024,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-14.png\" alt=\"\" class=\"wp-image-17024\"\/><figcaption class=\"wp-element-caption\">Tylko czemu znowu to musi by\u0107 YAML.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-14.png\" alt=\"\" class=\"wp-image-17024\"\/><figcaption class=\"wp-element-caption\">Tylko czemu znowu to musi by\u0107 YAML.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">3. Czy wiesz czym jest i jak dzia\u0142a Invoke Dynamic?<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">3. Czy wiesz czym jest i jak dzia\u0142a Invoke Dynamic?<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Co za du\u017co news\u00f3w to nie zdrowo, prawda? Dlatego dzisiaj mam dla Was \"powr\u00f3t do korzeni\", czyli \u015bwietny tekst dotycz\u0105cy jednej z ciekawszych fragment\u00f3w JVM, sprzedaj\u0105cy wiedz\u0119 w m\u00f3j ulubiony, przyst\u0119pny spos\u00f3b.<\/p>\n","innerContent":["\n<p>Co za du\u017co news\u00f3w to nie zdrowo, prawda? Dlatego dzisiaj mam dla Was \"powr\u00f3t do korzeni\", czyli \u015bwietny tekst dotycz\u0105cy jednej z ciekawszych fragment\u00f3w JVM, sprzedaj\u0105cy wiedz\u0119 w m\u00f3j ulubiony, przyst\u0119pny spos\u00f3b.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Invoke dynamic, cz\u0119sto skracane jako <code>indy<\/code>, to instrukcja na poziomie bajtkodu wprowadzona w Java 7 jako cz\u0119\u015b\u0107 Java Virtual Machine. G\u0142\u00f3wnym jej celem jest u\u0142atwienie implementacji na JVM, obok statycznie typowanych j\u0119zyk\u00f3w (takich jak Java) r\u00f3wnie\u017c j\u0119zyk\u00f3w dynamicznie typowanych (takich jak Python czy Ruby). W skr\u00f3cie, instrukcja oferuje elastyczny i wydajny spos\u00f3b obs\u0142ugi wywo\u0142a\u0144 metod w scenariuszach, gdy typ metody nie jest znany do momentu uruchomienia.<\/p>\n","innerContent":["\n<p>Invoke dynamic, cz\u0119sto skracane jako <code>indy<\/code>, to instrukcja na poziomie bajtkodu wprowadzona w Java 7 jako cz\u0119\u015b\u0107 Java Virtual Machine. G\u0142\u00f3wnym jej celem jest u\u0142atwienie implementacji na JVM, obok statycznie typowanych j\u0119zyk\u00f3w (takich jak Java) r\u00f3wnie\u017c j\u0119zyk\u00f3w dynamicznie typowanych (takich jak Python czy Ruby). W skr\u00f3cie, instrukcja oferuje elastyczny i wydajny spos\u00f3b obs\u0142ugi wywo\u0142a\u0144 metod w scenariuszach, gdy typ metody nie jest znany do momentu uruchomienia.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ale oczywi\u015bcie wi\u0105\u017ce si\u0119 z ni\u0105 masa niuans\u00f3w, dlatego chcia\u0142em si\u0119 dzisiaj podzieli\u0107 z Wami tekstem <a href=\"https:\/\/medium.com\/@nataliiadziubenko\/the-hidden-dynamic-life-of-java-12ba9bf95a44\">The Hidden Dynamic Life of Java<\/a> autorstwa Natali Dziubenko. Tekst umo\u017cliwia bowiem jasne zrozumienie r\u00f3\u017cnic mi\u0119dzy j\u0119zykami statycznie i dynamicznie typowanymi oraz tego, jak te r\u00f3\u017cnice wp\u0142ywaj\u0105 na funkcjonalno\u015b\u0107 samego JVM. Nast\u0119pnie om\u00f3wione s\u0105 r\u00f3\u017cne instrukcje wywo\u0142ania metod w JVM, takie jak <code>invokevirtual<\/code> i <code>invokestatic<\/code>, oraz to jak <code>invokedynamic<\/code> r\u00f3\u017cni si\u0119 od nich. Ponadto artyku\u0142 dostarcza praktycznych, prostszych do zrozumienia przyk\u0142ad\u00f3w wykorzystania <code>invokedynamic<\/code> w Javie mp. do konkatenacji \u0142a\u0144cuch\u00f3w znak\u00f3w, Pattern Matchingu czy lambd. Ca\u0142o\u015b\u0107 dotyka tak\u017ce wyzwa\u0144 zwi\u0105zanych z dynamicznym zachowaniem w kompilacji Ahead-Of-Time (AOT) oraz tego, jak <code>invokedynamic<\/code> wpisuje si\u0119 w ten krajobraz, szczeg\u00f3lnie w technologiach takich jak GraalVM.<\/p>\n","innerContent":["\n<p>Ale oczywi\u015bcie wi\u0105\u017ce si\u0119 z ni\u0105 masa niuans\u00f3w, dlatego chcia\u0142em si\u0119 dzisiaj podzieli\u0107 z Wami tekstem <a href=\"https:\/\/medium.com\/@nataliiadziubenko\/the-hidden-dynamic-life-of-java-12ba9bf95a44\">The Hidden Dynamic Life of Java<\/a> autorstwa Natali Dziubenko. Tekst umo\u017cliwia bowiem jasne zrozumienie r\u00f3\u017cnic mi\u0119dzy j\u0119zykami statycznie i dynamicznie typowanymi oraz tego, jak te r\u00f3\u017cnice wp\u0142ywaj\u0105 na funkcjonalno\u015b\u0107 samego JVM. Nast\u0119pnie om\u00f3wione s\u0105 r\u00f3\u017cne instrukcje wywo\u0142ania metod w JVM, takie jak <code>invokevirtual<\/code> i <code>invokestatic<\/code>, oraz to jak <code>invokedynamic<\/code> r\u00f3\u017cni si\u0119 od nich. Ponadto artyku\u0142 dostarcza praktycznych, prostszych do zrozumienia przyk\u0142ad\u00f3w wykorzystania <code>invokedynamic<\/code> w Javie mp. do konkatenacji \u0142a\u0144cuch\u00f3w znak\u00f3w, Pattern Matchingu czy lambd. Ca\u0142o\u015b\u0107 dotyka tak\u017ce wyzwa\u0144 zwi\u0105zanych z dynamicznym zachowaniem w kompilacji Ahead-Of-Time (AOT) oraz tego, jak <code>invokedynamic<\/code> wpisuje si\u0119 w ten krajobraz, szczeg\u00f3lnie w technologiach takich jak GraalVM.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Og\u00f3lnie <a href=\"https:\/\/medium.com\/@nataliiadziubenko\">Medium Natalii<\/a> to taki ma\u0142y \"hidden gem\", kt\u00f3ry w tym tygodniu odkry\u0142em i nie wiem jak do tej pory si\u0119 przede mn\u0105 ukrywa\u0142, bo teksty jej autorstwa oferuj\u0105 bogate przegl\u0105d mniej znanych aspekt\u00f3w Javy. Jestem pewien, \u017ce <a href=\"https:\/\/medium.com\/@nataliiadziubenko\">jej Medium<\/a> b\u0119dzie \u015bwietnym miejscem dla ka\u017cdego, kto chce pog\u0142\u0119bi\u0107 swoj\u0105 wiedz\u0119 o JVM. U mnie to by\u0142 instafollow \ud83d\ude03<\/p>\n","innerContent":["\n<p>Og\u00f3lnie <a href=\"https:\/\/medium.com\/@nataliiadziubenko\">Medium Natalii<\/a> to taki ma\u0142y \"hidden gem\", kt\u00f3ry w tym tygodniu odkry\u0142em i nie wiem jak do tej pory si\u0119 przede mn\u0105 ukrywa\u0142, bo teksty jej autorstwa oferuj\u0105 bogate przegl\u0105d mniej znanych aspekt\u00f3w Javy. Jestem pewien, \u017ce <a href=\"https:\/\/medium.com\/@nataliiadziubenko\">jej Medium<\/a> b\u0119dzie \u015bwietnym miejscem dla ka\u017cdego, kto chce pog\u0142\u0119bi\u0107 swoj\u0105 wiedz\u0119 o JVM. U mnie to by\u0142 instafollow \ud83d\ude03<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":17026,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-15.png\" alt=\"\" class=\"wp-image-17026\"\/><figcaption class=\"wp-element-caption\">No i uwielbiam ten uroczy styl ilustracji.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-15.png\" alt=\"\" class=\"wp-image-17026\"\/><figcaption class=\"wp-element-caption\">No i uwielbiam ten uroczy styl ilustracji.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 class=\"wp-block-heading\">4. A na koniec, filozoficznie o wyj\u0105tkach i teorii typ\u00f3w.<\/h2>\n","innerContent":["\n<h2 class=\"wp-block-heading\">4. A na koniec, filozoficznie o wyj\u0105tkach i teorii typ\u00f3w.<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Og\u00f3lne nastawienie spo\u0142eczno\u015bci programistycznej do <em>Checked Exceptions<\/em> w Javie jest (w najlepszym razie) mieszane - znacz\u0105ca cz\u0119\u015b\u0107 programist\u00f3w uwa\u017ca je za uci\u0105\u017cliwe i ograniczaj\u0105ce. Wymagaj\u0105 one, aby metody deklarowa\u0142y wyj\u0105tki, kt\u00f3re mog\u0105 w nich wyst\u0105pi\u0107, a wywo\u0142uj\u0105cy te metody musz\u0105 obs\u0142ugiwa\u0107 te wyj\u0105tki lub wymusza\u0107 to na swoich odbiorcach. Ten aspekt Javy ma sens na papierze (w ko\u0144cu dobrze wiedzie\u0107, co mo\u017ce p\u00f3j\u015b\u0107 nie tak) jednak jest cz\u0119sto postrzegany jako nadmiernie rozwlek\u0142y i mo\u017ce prowadzi\u0107 do skomplikowanego kodu, szczeg\u00f3lnie w przypadkach, gdy konieczne jest przechwytywanie lub propagowanie wielu r\u00f3\u017cnych wyj\u0105tk\u00f3w.<\/p>\n","innerContent":["\n<p>Og\u00f3lne nastawienie spo\u0142eczno\u015bci programistycznej do <em>Checked Exceptions<\/em> w Javie jest (w najlepszym razie) mieszane - znacz\u0105ca cz\u0119\u015b\u0107 programist\u00f3w uwa\u017ca je za uci\u0105\u017cliwe i ograniczaj\u0105ce. Wymagaj\u0105 one, aby metody deklarowa\u0142y wyj\u0105tki, kt\u00f3re mog\u0105 w nich wyst\u0105pi\u0107, a wywo\u0142uj\u0105cy te metody musz\u0105 obs\u0142ugiwa\u0107 te wyj\u0105tki lub wymusza\u0107 to na swoich odbiorcach. Ten aspekt Javy ma sens na papierze (w ko\u0144cu dobrze wiedzie\u0107, co mo\u017ce p\u00f3j\u015b\u0107 nie tak) jednak jest cz\u0119sto postrzegany jako nadmiernie rozwlek\u0142y i mo\u017ce prowadzi\u0107 do skomplikowanego kodu, szczeg\u00f3lnie w przypadkach, gdy konieczne jest przechwytywanie lub propagowanie wielu r\u00f3\u017cnych wyj\u0105tk\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":17028,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-16.png\" alt=\"\" class=\"wp-image-17028\"\/><figcaption class=\"wp-element-caption\">Mo\u017cna oczywi\u015bcie te\u017c poradzi\u0107 sobie pro\u015bciej.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-16.png\" alt=\"\" class=\"wp-image-17028\"\/><figcaption class=\"wp-element-caption\">Mo\u017cna oczywi\u015bcie te\u017c poradzi\u0107 sobie pro\u015bciej.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tekst <a href=\"https:\/\/borretti.me\/article\/why-checked-exceptions-failed\">Why Checked Exceptions Failed<\/a> autorstwa Fernando Borrettiego dostarcza przemy\u015blanej krytyki Checked Exceptions w Javie, kwestionuj\u0105c ich praktyczno\u015b\u0107 i integracj\u0119 z reszt\u0105 funkcji j\u0119zyka. Wskazuje na to, \u017ce chocia\u017c Java doda\u0142a te dodatkowe informacje do sygnatur metod, nie zintegrowa\u0142a w pe\u0142ni tego koncepcji z innymi funkcjami j\u0119zyka, co prowadzi do braku czego\u015b, co autor nazywa \"polimorfizmem rzucania wyj\u0105tk\u00f3w\".<\/p>\n","innerContent":["\n<p>Tekst <a href=\"https:\/\/borretti.me\/article\/why-checked-exceptions-failed\">Why Checked Exceptions Failed<\/a> autorstwa Fernando Borrettiego dostarcza przemy\u015blanej krytyki Checked Exceptions w Javie, kwestionuj\u0105c ich praktyczno\u015b\u0107 i integracj\u0119 z reszt\u0105 funkcji j\u0119zyka. Wskazuje na to, \u017ce chocia\u017c Java doda\u0142a te dodatkowe informacje do sygnatur metod, nie zintegrowa\u0142a w pe\u0142ni tego koncepcji z innymi funkcjami j\u0119zyka, co prowadzi do braku czego\u015b, co autor nazywa \"polimorfizmem rzucania wyj\u0105tk\u00f3w\".<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tekst jest wart przeczytania, poniewa\u017c bada g\u0142\u0119bsze implikacje decyzji projektowych Javy dotycz\u0105cych wyj\u0105tk\u00f3w. Wyja\u015bnia przyczyny znanych z praktycznego u\u017cycia ogranicze\u0144 na\u0142o\u017conych przez wyj\u0105tki kontrolowane, takie jak trudno\u015bci w ich stosowaniu w parze z interfejsami i typami generycznymi, i kontrastuje to z podej\u015bciem j\u0119zyk\u00f3w programowania funkcyjnego, kt\u00f3re u\u017cywaj\u0105 typ\u00f3w takich jak Option i Result do obs\u0142ugi b\u0142\u0119d\u00f3w. Autor argumentuje te\u017c, dlaczego to podej\u015bcie bardziej naturalnie wpisuje si\u0119 w istniej\u0105ce systemy typ\u00f3w tych j\u0119zyk\u00f3w.<\/p>\n","innerContent":["\n<p>Tekst jest wart przeczytania, poniewa\u017c bada g\u0142\u0119bsze implikacje decyzji projektowych Javy dotycz\u0105cych wyj\u0105tk\u00f3w. Wyja\u015bnia przyczyny znanych z praktycznego u\u017cycia ogranicze\u0144 na\u0142o\u017conych przez wyj\u0105tki kontrolowane, takie jak trudno\u015bci w ich stosowaniu w parze z interfejsami i typami generycznymi, i kontrastuje to z podej\u015bciem j\u0119zyk\u00f3w programowania funkcyjnego, kt\u00f3re u\u017cywaj\u0105 typ\u00f3w takich jak Option i Result do obs\u0142ugi b\u0142\u0119d\u00f3w. Autor argumentuje te\u017c, dlaczego to podej\u015bcie bardziej naturalnie wpisuje si\u0119 w istniej\u0105ce systemy typ\u00f3w tych j\u0119zyk\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ponadto, artyku\u0142 mo\u017ce s\u0142u\u017cy\u0107 jako przypomnienie o tym, jak z\u0142o\u017conym problemem jest projektowanie j\u0119zyk\u00f3w programowania. Ilustruje, jak dodanie lub modyfikacja jednego fragmentu syntaxu mo\u017ce mie\u0107 szerokie implikacje, wymagaj\u0105ce starannego rozwa\u017cenia i integracji z ca\u0142o\u015bci\u0105 j\u0119zyka.<\/p>\n","innerContent":["\n<p>Ponadto, artyku\u0142 mo\u017ce s\u0142u\u017cy\u0107 jako przypomnienie o tym, jak z\u0142o\u017conym problemem jest projektowanie j\u0119zyk\u00f3w programowania. Ilustruje, jak dodanie lub modyfikacja jednego fragmentu syntaxu mo\u017ce mie\u0107 szerokie implikacje, wymagaj\u0105ce starannego rozwa\u017cenia i integracji z ca\u0142o\u015bci\u0105 j\u0119zyka.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":17030,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-17.png\" alt=\"\" class=\"wp-image-17030\"\/><figcaption class=\"wp-element-caption\">Kopanie le\u017c\u0105cego\u2122\ufe0f<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/11\/image-17.png\" alt=\"\" class=\"wp-image-17030\"\/><figcaption class=\"wp-element-caption\">Kopanie le\u017c\u0105cego\u2122\ufe0f<\/figcaption><\/figure>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/17007","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=17007"}],"version-history":[{"count":9,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/17007\/revisions"}],"predecessor-version":[{"id":17038,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/17007\/revisions\/17038"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/17034"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=17007"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=17007"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=17007"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}