{"id":14613,"date":"2023-02-15T12:12:33","date_gmt":"2023-02-15T11:12:33","guid":{"rendered":"https:\/\/vived.io\/?p=14613"},"modified":"2023-02-15T17:04:38","modified_gmt":"2023-02-15T16:04:38","slug":"ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/","title":{"rendered":"Ciekawi jaki \u015alad W\u0119glowy ma Wasza aplikacja? Jest narz\u0119dzie, aby to zmierzy\u0107 &#8211; JVM Weekly vol. 125"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">1. Jaki \u015alad W\u0119glowy ma Wasza aplikacja? Jest narz\u0119dzie, aby to zmierzy\u0107.<\/h3>\n\n\n\n<p>Lubi\u0119 s\u0142ucha\u0107 podcastu <a class=\"autolink\" href=\"https:\/\/airhacks.fm\">airhacks.fm<\/a> Adama Biena, sta\u0142 si\u0119 cz\u0119\u015bci\u0105 mojego porannego rytua\u0142u podczas porannego odwo\u017cenia c\u00f3rki do \u017c\u0142obka. Styl lu\u017anej dyskusji ma to do siebie, \u017ce pozwala go\u015bciom na podzielenie si\u0119 spor\u0105 ilo\u015bci\u0105 lu\u017anych przemy\u015ble\u0144, na kt\u00f3re pewnie nie by\u0142oby miejsca w innym formacie ni\u017c podcastowe &#8222;gadaj\u0105ce g\u0142owy&#8221;. Jako przyk\u0142ad rzuci\u0107 mog\u0119 odcinek z <a href=\"https:\/\/pca.st\/xwehbw6r#t=3297.0\">pa\u017adziernika zesz\u0142ego roku<\/a>, w kt\u00f3rym przy okazji dyskusji o CRaC i Serverless Adam zasugerowa\u0142, \u017ce komunikat &#8222;redukcja \u015bladu w\u0119glowego&#8221; bywa lepszym komunikatem dla biznesu ni\u017c nieco oklepane &#8222;zwi\u0119kszenie efektywno\u015bci&#8221;. W pierwszej chwili by\u0142o nieco zaskakuj\u0105ce, ale gdy przypomn\u0119 sobie wysyp korporacyjnych komunikat\u00f3w o planowanej &#8222;zeroemisyjno\u015bci&#8221;, ma to g\u0142\u0119boki sens i dla takiego serverlessa mo\u017ce rzeczywi\u015bcie by\u0107 przekonuj\u0105c\u0105 strategi\u0105 sprzeda\u017cow\u0105.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"540\" height=\"469\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-29.png\" alt=\"\" class=\"wp-image-14626\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-29.png 540w, https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-29-300x261.png 300w\" sizes=\"auto, (max-width: 540px) 100vw, 540px\" \/><figcaption class=\"wp-element-caption\">Chyba, \u017ce bior\u0105c pod uwag\u0119 sytuacje w bran\u017cy powy\u017csza narracja si\u0119 wywr\u00f3ci z rowerka.<\/figcaption><\/figure><\/div>\n\n\n<p>Sk\u0105d w og\u00f3le przypomnia\u0142 mi si\u0119 cytat z podcastu z 2022? Poniewa\u017c w zesz\u0142ym tygodniu premier\u0119 mia\u0142 JoularJX 2.0. Czym jest <a href=\"https:\/\/github.com\/joular\/joularjx\">JoularJX<\/a>? To agent JVM s\u0142u\u017c\u0105cy do monitorowania zu\u017cycia energii na poziomie kodu \u017ar\u00f3d\u0142owego, kt\u00f3re pozwala programistom monitorowa\u0107 i analizowa\u0107 zu\u017cycie energii przez aplikacje na r\u00f3\u017cnych urz\u0105dzeniach komputerowych i systemach operacyjnych. Jego modele umo\u017cliwiaj\u0105 oszacowanie zu\u017cycia energii przez komponenty sprz\u0119towe, takie jak procesor i pami\u0119\u0107, a tak\u017ce zapewnia szczeg\u00f3\u0142owe raporty i wizualizacje. A to wszystko, aby pom\u00f3c programistom zidentyfikowa\u0107 miejsca w ich oprogramowaniu i zoptymalizowa\u0107 jego efektywno\u015b\u0107 energetyczn\u0105.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"468\" height=\"424\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-28.png\" alt=\"\" class=\"wp-image-14623\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-28.png 468w, https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-28-300x272.png 300w\" sizes=\"auto, (max-width: 468px) 100vw, 468px\" \/><figcaption class=\"wp-element-caption\">I w tym momencie programi\u015bci do\u0142\u0105czaj\u0105 do powy\u017cszego k\u00f3\u0142eczka. Ju\u017c mam w g\u0142owie now\u0105 fitness function dla architektury.<\/figcaption><\/figure><\/div>\n\n\n<p><a href=\"https:\/\/www.noureddine.org\/articles\/joularjx-2-a-leap-forward-in-green-software-analysis\">JoularJX 2.0 wprowadza now\u0105 funkcj\u0119<\/a>, kt\u00f3ra pozwala \u015bledzi\u0107 moc i zu\u017cycie energii w na poziomie <strong>poszczeg\u00f3lnych metod<\/strong>, zapewniaj\u0105c dok\u0142adniejszy wgl\u0105d w efektywno\u015b\u0107 energetyczn\u0105 oprogramowania. Wydanie zmniejsza te\u017c narzut powodowany przez samego JoularJX (troch\u0119 przykro by by\u0142o, jakby z powodu tego ca\u0142ego raportowania dosz\u0142oby do znacznego zu\u017cycia energii, prawda?).<\/p>\n\n\n\n<p>Troch\u0119 czego to ludzie nie wymy\u015bl\u0105, a troch\u0119 jednak:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/300px-Modern_Problems_Require_Modern_Solutions.jpg\" alt=\"\"\/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/pca.st\/xwehbw6r#t=3297.0\">Java, CraC and Reducing Cold Start Duration with AWS Lambda SnapStart<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/joular\/joularjx\">joular\/joularjx<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.noureddine.org\/articles\/joularjx-2-a-leap-forward-in-green-software-analysis\">JoularJX 2.0: a Leap Forward in Green Software Analysis<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"2-wydano-gradle-8-0\" data-num=1>2. Wydano Gradle 8.0<\/h2>\n\n\n\n<p>Pocz\u0105tkiem tygodnia pojawi\u0142a si\u0119 nowe wydanie Gradle &#8211; ju\u017c 8.0.<\/p>\n\n\n\n<p>Sporo usprawnie\u0144 doczeka\u0142 si\u0119 Kotlin DSL, alternatywn\u0105 sk\u0142adni\u0105 do tradycyjnego (i popularniejszego, o czym za chwil\u0119) Groovy DSL, zapewniaj\u0105c lepsze podpowiadania sk\u0142adni przy edycji. Wraz z Gradle 8.0 poprawiona zostala kompilacji skrypt\u00f3w poprzez wprowadzenie interpretera dla deklaratywnych blok\u00f3w plugin\u00f3w {} w skryptach .gradle.kts, co daje zysk rz\u0119du 20%, zbli\u017caj\u0105c czas procesowania Kotlin DSL do Gradle DSL. Gradle 8.0 aktualizuje r\u00f3wnie\u017c wersje Kotlin API do najnowszego 1.8 oraz umo\u017cliwia korzystanie z bibliotek Java 11 i funkcji j\u0119zykowych w skryptach kompilacji. Niestety, nie dotyczy to prekompilowane wtyczek, tylko samych <em>gradle.kts<\/em>.<\/p>\n\n\n\n<p>Super, \u017ce tw\u00f3rcy dbaj\u0105 o to, \u017ceby wsparcie dla Kotlina by\u0142o jak najlepsze, ale przyznam, \u017ce mimo i\u017c usilnie staram si\u0119 u\u017cywa\u0107 w\u0142a\u015bnie wariantu w tym j\u0119zyku, to jednak mimo lat jest to strasznie niewygodne. Nie jest to win\u0105 samego Gradle &#8211; oni robi\u0105 co mog\u0105, ale dla spo\u0142eczno\u015bci jest bardzo niewygodnie tworzy\u0107 ka\u017cdy przyk\u0142ad w dw\u00f3ch wariantach, dlatego zwykle wszelkiej ma\u015bci blog posty zawieraj\u0105 tylko wariant w Groovym. I o ile <a href=\"https:\/\/mvnrepository.com\/artifact\/org.eclipse.jdt\/org.eclipse.jdt.annotation\/2.2.700\">takie Maven Repository<\/a> ju\u017c si\u0119 nauczy\u0142o prezentowa\u0107 r\u00f3wnie\u017c wariant Kotlinowy, to <a href=\"https:\/\/projectlombok.org\/setup\/gradle\">sam dzisiaj trafi\u0142em cho\u0107by na stron\u0119 Lomboka<\/a>, gdzie przy opisie konfiguracji dla Gradle takowego ju\u017c nie u\u015bwiadczymy. A im bardziej nietrywialny przypadek (a w Gradle da si\u0119 tworzy\u0107 naprawd\u0119 skomplikowane twory), tym mentalna z jednego formatu na drugi jest trudniejsza.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"504\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-31.png\" alt=\"\" class=\"wp-image-14632\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-31.png 500w, https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-31-298x300.png 298w, https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-31-150x150.png 150w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><figcaption class=\"wp-element-caption\">Przy czym tak jak pisze, sam gradle.kts nie jest wiele winien.<\/figcaption><\/figure><\/div>\n\n\n<p>Najnowsze wydanie Gradle wprowadza te\u017c usprawnienia dla dodatkowych lokacji kodu, przekazywanych przez parametr <code>buildSrc<\/code>, kt\u00f3re teraz maj\u0105 lepiej wspiera\u0107 inkrementaln\u0105 kompilacj\u0119 i buforowania zada\u0144, a tak\u017ce \u0142atwiejsze ich wsparcie z poziomu linii komend. Gradle nie uruchamia te\u017c ju\u017c automatycznie test\u00f3w dla buildSrc i jego podprojekt\u00f3w gdy nie s\u0105 one potrzebne.<\/p>\n\n\n\n<p>Po wi\u0119cej szczeg\u00f3\u0142\u00f3w, a tak\u017ce dodatkowe zmiany w wersji <a href=\"https:\/\/docs.gradle.org\/8.0\/release-notes.html\">8.0 odsy\u0142am do Release Notes<\/a>.<\/p>\n\n\n\n<p>Ostatnim (chyba ciekawszym ni\u017c same zmiany z nim przychodz\u0105ce) aspektem nowego wydania jest podbicie du\u017cej numeracji, co jak \u0142atwo si\u0119 domy\u015ble\u0107 wynika ze z\u0142amania kompatybilno\u015bci wstecznej z niekt\u00f3rymi aspektami ga\u0142\u0119zi\u0105 7.x. W zwi\u0105zku z tym pojawi\u0142o si\u0119 troch\u0119 krytyki, \u017ce od czego jak czego, ale od build toola wi\u0119kszo\u015b\u0107 u\u017cytkownik\u00f3w wymaga stabilno\u015bci i kompatybilno\u015bci. Rozumiem takowe zarzuty, aczkolwiek akurat pod tym wzgl\u0119dem Gradle wykona\u0142 tytaniczn\u0105 prac\u0119 w stosunku do tego, jak bardzo problematycznymi by\u0142y upgrade jeszcze par\u0119 lat temu. Kiedy programowa\u0142em na Androidzie, ka\u017cdorazowa aktualizacja build\u00f3w Gradle (dodatkowo wymuszana przez niekompatybilno\u015b\u0107 starych wyda\u0144 z nowymi wersjami pluginu Android SDK) by\u0142a traumatycznym procesem. Dzi\u015b (przynajmniej w wypadku aplikacji serwerowych) jest pod tym wzgl\u0119dem znacznie lepiej.<\/p>\n\n\n\n<p>A jak ju\u017c przy build toolach jeste\u015bmy, to podziel\u0119 si\u0119 z Wami na koniec moim chyba ulubionym rozdzia\u0142em z ksi\u0105\u017cki <strong><a href=\"https:\/\/abseil.io\/resources\/swe-book\">Software Engineering at Google<\/a><\/strong> &#8211; <a href=\"https:\/\/abseil.io\/resources\/swe-book\/html\/ch18.html\">Build Systems and Build Philosophy<\/a>. Na przyk\u0142adzie Bazela pokazuje on zupe\u0142nie drug\u0105 stron\u0119 medalu w stosunku do niezwykle elastycznego Gradle. Uzmys\u0142awia, jakie zalety i wady maj\u0105 te dwie r\u00f3\u017cne filozofie procesu budowania aplikacji.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/docs.gradle.org\/8.0\/release-notes.html\">Gradle 8.0 Release Notes<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/abseil.io\/resources\/swe-book\/html\/ch18.html\">Build Systems and Build Philosophy<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"bonus-null-safety-java-vs-kotlin\" data-num=2>Bonus: Null Safety &#8211; Java vs Kotlin<\/h2>\n\n\n\n<p>Na koniec, troch\u0119 w formie bonusu, mam dla Was publikacj\u0119 dobrze koresponduj\u0105c\u0105 z g\u0142\u00f3wnym tematem poprzedniej edycji &#8211; pr\u00f3bom usprawnienia konceptu nullowalno\u015bci przez projekt Valhalla.<\/p>\n\n\n\n<p>Zasugerowa\u0142em tam, \u017ce by\u0107 mo\u017ce wariantem, na kt\u00f3ry zdecyduj\u0105 si\u0119 tw\u00f3rcy JDK b\u0119dzie wprowadzenie jakiej\u015b nowej adnotacji. Pomys\u0142 ten okaza\u0142 si\u0119 by\u0107 nieco niefortunny, bo dos\u0142ownie dzie\u0144 wcze\u015bniej Brian Goetz, Architekt Javy, wys\u0142a\u0142 maila, w kt\u00f3rym do\u015b\u0107 jasno daje zna\u0107, \u017ce sam j\u0119zyk powinien by\u0107 wolny od adnotacji, <a href=\"https:\/\/mail.openjdk.org\/pipermail\/amber-dev\/2023-February\/007821.html\">a @Override w formie, w kt\u00f3rej by\u0142 wprowadzony, nie by\u0142 najlepszym pomys\u0142em<\/a>. Koncepcja ta wi\u0119c raczej nie b\u0119dzie mia\u0142a miejsca, mimo, \u017ce wydaje si\u0119 by\u0107 bardzo naturalna. W ko\u0144cu nie bez powodu mamy przez lata do czynienia z wysypem r\u00f3\u017cnorakich wariant\u00f3w <code>@NonNull<\/code> &#8211; wida\u0107 jest potrzeba.<\/p>\n\n\n\n<p><a href=\"https:\/\/twitter.com\/nicolas_frankel\">Nicolas Fr\u00e4nkel<\/a> w zesz\u0142ym tygodniu opublikowa\u0142 tekst <a href=\"https:\/\/blog.frankel.ch\/null-safety-java-vs-kotlin\/\">Null safety: Kotlin vs. Java<\/a>, w kt\u00f3rym pokusi\u0142 si\u0119 na por\u00f3wnanie czym r\u00f3\u017cni\u0105 si\u0119 podej\u015bcia do konceptu Nulla w obu j\u0119zykach. Jako jeden z element\u00f3w analizy podsumowuje on istniej\u0105ce na rynku adnotacje i wymienia osiem r\u00f3\u017cnych wariant\u00f3w, posiadaj\u0105cych r\u00f3\u017cne pakiety oraz (co nawet gorsze) nieco odmienne zachowanie.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"364\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/Untitled-1024x364.jpg\" alt=\"\" class=\"wp-image-14618\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/Untitled-1024x364.jpg 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/Untitled-300x107.jpg 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/Untitled-768x273.jpg 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/Untitled-1536x547.jpg 1536w, https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/Untitled.jpg 1714w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Ju\u017c wiecie po co mi by\u0142 wspomniany wy\u017cej Lombok. Z tym sobie porad\u017a, Google Copilot!<\/figcaption><\/figure>\n\n\n\n<p>Patrz\u0105c na powy\u017csze, warto przytoczy\u0107 (wspominan\u0105 te\u017c w artykule Nicolasa) inicjatyw\u0119 <a href=\"https:\/\/jspecify.dev\/\">jSpecify<\/a>. Bior\u0105ce w niej udzia\u0142 podmioty pracuj\u0105 nad zdefiniowaniem ustandaryzowanego zestawu adnotacji s\u0142u\u017c\u0105cych do analizy statycznej, a za pierwszy cel obrali sobie w\u0142a\u015bni <code>@NonNulla<\/code> (patrz\u0105c na powy\u017csze &#8211; bardzo s\u0142usznie). Przewodzi jej Google, a bior\u0105 w niej udzia\u0142 tacy gracze jak cho\u0107by VMWare, Microsoft czy JetBrains, a wi\u0119c tw\u00f3rcy wielu z powy\u017cszych adnotacji, maj\u0105 wi\u0119c oni moc sprawcz\u0105, aby posprz\u0105ta\u0107 ten ca\u0142y ba\u0142agan. Trzymajmy za nich kciuki.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/blog.frankel.ch\/null-safety-java-vs-kotlin\/\">Null safety: Kotlin vs. Java<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/mail.openjdk.org\/pipermail\/amber-dev\/2023-February\/007821.html\">a @Override w formie, w kt\u00f3rej by\u0142 wprowadzony, nie by\u0142 najlepszym pomys\u0142em<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/jspecify.dev\/\">jSpecify &#8211; Standard Annotations for Java Static Analysis<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>PS: W tym tygodniu wydanie posz\u0142o w \u015brod\u0119, zamiast tradycyjnego ostatnio czwartku, bo mam 15.02.2023 i 16.02.2022 dwa wyst\u0105pienia na lokalnych JUG-ach z moim talkiem <a href=\"https:\/\/www.slideshare.net\/ArturSkowroski\/jvm-iceberg-we-need-to-go-deeper\">JVM Iceberg&#8230; we need to go deeper<\/a>.<\/p>\n\n\n\n<p>\ud83d\udc49 W \u015arod\u0119 (15.02) na <a href=\"https:\/\/www.meetup.com\/lublin-java-user-group\/events\/291188990\/\">Lublin Java User Group (LJUG)<\/a>.<\/p>\n\n\n\n<p>\ud83d\udc49 W Czwartek (16.02) na <a href=\"https:\/\/www.meetup.com\/pl-PL\/polish-java-user-group\/events\/291447356\/\">Polish Java User Group (PJUG) w Krakowie<\/a>.<\/p>\n\n\n\n<p>Jakby kto\u015b chcia\u0142 wpa\u015b\u0107 zbi\u0107 sobie pi\u0105tk\u0119 &#8211; zapraszam \ud83d\ude04<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/EllipticalThisCopepod-size_restricted.gif\" alt=\"\"\/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>A czy Wy ju\u017c zoptymalizowali\u015bcie Wasze aplikacje, aby zredukowa\u0107 wp\u0142yw na globalne ocieplenie? Opr\u00f3cz tego nowa wersja Gradle, follow-up do zesz\u0142otygodniowej edycji, a na ko\u0144cu ma\u0142e zaproszenia \ud83d\ude04<\/p>\n","protected":false},"author":10,"featured_media":14637,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[23],"tags":[],"class_list":["post-14613","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm"],"acf":{"estimated_reading_time":"6","feature_image_blog":{"ID":14653,"id":14653,"title":"ArturSkowronski_carbon_footprint_funny_2bc9a9af-e86f-4ba5-9a9d-00c98baa854f","filename":"ArturSkowronski_carbon_footprint_funny_2bc9a9af-e86f-4ba5-9a9d-00c98baa854f.png","filesize":1916800,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/ArturSkowronski_carbon_footprint_funny_2bc9a9af-e86f-4ba5-9a9d-00c98baa854f.png","link":"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/arturskowronski_carbon_footprint_funny_2bc9a9af-e86f-4ba5-9a9d-00c98baa854f-2\/","alt":"","author":"10","description":"","caption":"","name":"arturskowronski_carbon_footprint_funny_2bc9a9af-e86f-4ba5-9a9d-00c98baa854f-2","status":"inherit","uploaded_to":14613,"date":"2023-02-15 16:02:15","modified":"2023-02-15 16:02:15","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":1536,"height":1024,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/ArturSkowronski_carbon_footprint_funny_2bc9a9af-e86f-4ba5-9a9d-00c98baa854f-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/ArturSkowronski_carbon_footprint_funny_2bc9a9af-e86f-4ba5-9a9d-00c98baa854f-300x200.png","medium-width":300,"medium-height":200,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/ArturSkowronski_carbon_footprint_funny_2bc9a9af-e86f-4ba5-9a9d-00c98baa854f-768x512.png","medium_large-width":768,"medium_large-height":512,"large":"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/ArturSkowronski_carbon_footprint_funny_2bc9a9af-e86f-4ba5-9a9d-00c98baa854f-1024x683.png","large-width":1024,"large-height":683,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/ArturSkowronski_carbon_footprint_funny_2bc9a9af-e86f-4ba5-9a9d-00c98baa854f.png","1536x1536-width":1536,"1536x1536-height":1024,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/ArturSkowronski_carbon_footprint_funny_2bc9a9af-e86f-4ba5-9a9d-00c98baa854f.png","2048x2048-width":1536,"2048x2048-height":1024,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/ArturSkowronski_carbon_footprint_funny_2bc9a9af-e86f-4ba5-9a9d-00c98baa854f.png","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":200,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/ArturSkowronski_carbon_footprint_funny_2bc9a9af-e86f-4ba5-9a9d-00c98baa854f.png","gform-image-choice-md-width":400,"gform-image-choice-md-height":267,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/ArturSkowronski_carbon_footprint_funny_2bc9a9af-e86f-4ba5-9a9d-00c98baa854f.png","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":400}},"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/JVM-Weekly-1200x628_V2-6.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>Ciekawi jaki \u015alad W\u0119glowy ma Wasza aplikacja? Jest narz\u0119dzie, aby to zmierzy\u0107 - JVM Weekly vol. 125 - 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\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ciekawi jaki \u015alad W\u0119glowy ma Wasza aplikacja? Jest narz\u0119dzie, aby to zmierzy\u0107 - JVM Weekly vol. 125 - Vived\" \/>\n<meta property=\"og:description\" content=\"A czy Wy ju\u017c zoptymalizowali\u015bcie Wasze aplikacje, aby zredukowa\u0107 wp\u0142yw na globalne ocieplenie? Opr\u00f3cz tego nowa wersja Gradle, follow-up do zesz\u0142otygodniowej edycji, a na ko\u0144cu ma\u0142e zaproszenia \ud83d\ude04\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2023-02-15T11:12:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-02-15T16:04:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/JVM-Weekly-1200x628_V2-6.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\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Ciekawi jaki \u015alad W\u0119glowy ma Wasza aplikacja? Jest narz\u0119dzie, aby to zmierzy\u0107 &#8211; JVM Weekly vol. 125\",\"datePublished\":\"2023-02-15T11:12:33+00:00\",\"dateModified\":\"2023-02-15T16:04:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/\"},\"wordCount\":1368,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/JVM-Weekly-1200x628_V2-6.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/\",\"url\":\"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/\",\"name\":\"Ciekawi jaki \u015alad W\u0119glowy ma Wasza aplikacja? Jest narz\u0119dzie, aby to zmierzy\u0107 - JVM Weekly vol. 125 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/JVM-Weekly-1200x628_V2-6.png\",\"datePublished\":\"2023-02-15T11:12:33+00:00\",\"dateModified\":\"2023-02-15T16:04:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/JVM-Weekly-1200x628_V2-6.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/JVM-Weekly-1200x628_V2-6.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ciekawi jaki \u015alad W\u0119glowy ma Wasza aplikacja? Jest narz\u0119dzie, aby to zmierzy\u0107 &#8211; JVM Weekly vol. 125\"}]},{\"@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":"Ciekawi jaki \u015alad W\u0119glowy ma Wasza aplikacja? Jest narz\u0119dzie, aby to zmierzy\u0107 - JVM Weekly vol. 125 - 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\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/","og_locale":"pl_PL","og_type":"article","og_title":"Ciekawi jaki \u015alad W\u0119glowy ma Wasza aplikacja? Jest narz\u0119dzie, aby to zmierzy\u0107 - JVM Weekly vol. 125 - Vived","og_description":"A czy Wy ju\u017c zoptymalizowali\u015bcie Wasze aplikacje, aby zredukowa\u0107 wp\u0142yw na globalne ocieplenie? Opr\u00f3cz tego nowa wersja Gradle, follow-up do zesz\u0142otygodniowej edycji, a na ko\u0144cu ma\u0142e zaproszenia \ud83d\ude04","og_url":"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/","og_site_name":"Vived","article_published_time":"2023-02-15T11:12:33+00:00","article_modified_time":"2023-02-15T16:04:38+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/JVM-Weekly-1200x628_V2-6.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\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Ciekawi jaki \u015alad W\u0119glowy ma Wasza aplikacja? Jest narz\u0119dzie, aby to zmierzy\u0107 &#8211; JVM Weekly vol. 125","datePublished":"2023-02-15T11:12:33+00:00","dateModified":"2023-02-15T16:04:38+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/"},"wordCount":1368,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/JVM-Weekly-1200x628_V2-6.png","articleSection":["JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/","url":"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/","name":"Ciekawi jaki \u015alad W\u0119glowy ma Wasza aplikacja? Jest narz\u0119dzie, aby to zmierzy\u0107 - JVM Weekly vol. 125 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/JVM-Weekly-1200x628_V2-6.png","datePublished":"2023-02-15T11:12:33+00:00","dateModified":"2023-02-15T16:04:38+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/JVM-Weekly-1200x628_V2-6.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/JVM-Weekly-1200x628_V2-6.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/ciekawi-jaki-slad-weglowy-ma-wasza-aplikacja-jest-narzedzie-aby-to-zmierzyc-jvm-weekly-vol-125\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Ciekawi jaki \u015alad W\u0119glowy ma Wasza aplikacja? Jest narz\u0119dzie, aby to zmierzy\u0107 &#8211; JVM Weekly vol. 125"}]},{"@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":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>1. Jaki \u015alad W\u0119glowy ma Wasza aplikacja? Jest narz\u0119dzie, aby to zmierzy\u0107.<\/h3>\n","innerContent":["\n<h3>1. Jaki \u015alad W\u0119glowy ma Wasza aplikacja? Jest narz\u0119dzie, aby to zmierzy\u0107.<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Lubi\u0119 s\u0142ucha\u0107 podcastu <a class=\"autolink\" href=\"https:\/\/airhacks.fm\">airhacks.fm<\/a> Adama Biena, sta\u0142 si\u0119 cz\u0119\u015bci\u0105 mojego porannego rytua\u0142u podczas porannego odwo\u017cenia c\u00f3rki do \u017c\u0142obka. Styl lu\u017anej dyskusji ma to do siebie, \u017ce pozwala go\u015bciom na podzielenie si\u0119 spor\u0105 ilo\u015bci\u0105 lu\u017anych przemy\u015ble\u0144, na kt\u00f3re pewnie nie by\u0142oby miejsca w innym formacie ni\u017c podcastowe \"gadaj\u0105ce g\u0142owy\". Jako przyk\u0142ad rzuci\u0107 mog\u0119 odcinek z <a href=\"https:\/\/pca.st\/xwehbw6r#t=3297.0\">pa\u017adziernika zesz\u0142ego roku<\/a>, w kt\u00f3rym przy okazji dyskusji o CRaC i Serverless Adam zasugerowa\u0142, \u017ce komunikat \"redukcja \u015bladu w\u0119glowego\" bywa lepszym komunikatem dla biznesu ni\u017c nieco oklepane \"zwi\u0119kszenie efektywno\u015bci\". W pierwszej chwili by\u0142o nieco zaskakuj\u0105ce, ale gdy przypomn\u0119 sobie wysyp korporacyjnych komunikat\u00f3w o planowanej \"zeroemisyjno\u015bci\", ma to g\u0142\u0119boki sens i dla takiego serverlessa mo\u017ce rzeczywi\u015bcie by\u0107 przekonuj\u0105c\u0105 strategi\u0105 sprzeda\u017cow\u0105.<\/p>\n","innerContent":["\n<p>Lubi\u0119 s\u0142ucha\u0107 podcastu <a class=\"autolink\" href=\"https:\/\/airhacks.fm\">airhacks.fm<\/a> Adama Biena, sta\u0142 si\u0119 cz\u0119\u015bci\u0105 mojego porannego rytua\u0142u podczas porannego odwo\u017cenia c\u00f3rki do \u017c\u0142obka. Styl lu\u017anej dyskusji ma to do siebie, \u017ce pozwala go\u015bciom na podzielenie si\u0119 spor\u0105 ilo\u015bci\u0105 lu\u017anych przemy\u015ble\u0144, na kt\u00f3re pewnie nie by\u0142oby miejsca w innym formacie ni\u017c podcastowe \"gadaj\u0105ce g\u0142owy\". Jako przyk\u0142ad rzuci\u0107 mog\u0119 odcinek z <a href=\"https:\/\/pca.st\/xwehbw6r#t=3297.0\">pa\u017adziernika zesz\u0142ego roku<\/a>, w kt\u00f3rym przy okazji dyskusji o CRaC i Serverless Adam zasugerowa\u0142, \u017ce komunikat \"redukcja \u015bladu w\u0119glowego\" bywa lepszym komunikatem dla biznesu ni\u017c nieco oklepane \"zwi\u0119kszenie efektywno\u015bci\". W pierwszej chwili by\u0142o nieco zaskakuj\u0105ce, ale gdy przypomn\u0119 sobie wysyp korporacyjnych komunikat\u00f3w o planowanej \"zeroemisyjno\u015bci\", ma to g\u0142\u0119boki sens i dla takiego serverlessa mo\u017ce rzeczywi\u015bcie by\u0107 przekonuj\u0105c\u0105 strategi\u0105 sprzeda\u017cow\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":14626,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-29.png\" alt=\"\" class=\"wp-image-14626\"\/><figcaption class=\"wp-element-caption\">Chyba, \u017ce bior\u0105c pod uwag\u0119 sytuacje w bran\u017cy powy\u017csza narracja si\u0119 wywr\u00f3ci z rowerka.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-29.png\" alt=\"\" class=\"wp-image-14626\"\/><figcaption class=\"wp-element-caption\">Chyba, \u017ce bior\u0105c pod uwag\u0119 sytuacje w bran\u017cy powy\u017csza narracja si\u0119 wywr\u00f3ci z rowerka.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Sk\u0105d w og\u00f3le przypomnia\u0142 mi si\u0119 cytat z podcastu z 2022? Poniewa\u017c w zesz\u0142ym tygodniu premier\u0119 mia\u0142 JoularJX 2.0. Czym jest <a href=\"https:\/\/github.com\/joular\/joularjx\">JoularJX<\/a>? To agent JVM s\u0142u\u017c\u0105cy do monitorowania zu\u017cycia energii na poziomie kodu \u017ar\u00f3d\u0142owego, kt\u00f3re pozwala programistom monitorowa\u0107 i analizowa\u0107 zu\u017cycie energii przez aplikacje na r\u00f3\u017cnych urz\u0105dzeniach komputerowych i systemach operacyjnych. Jego modele umo\u017cliwiaj\u0105 oszacowanie zu\u017cycia energii przez komponenty sprz\u0119towe, takie jak procesor i pami\u0119\u0107, a tak\u017ce zapewnia szczeg\u00f3\u0142owe raporty i wizualizacje. A to wszystko, aby pom\u00f3c programistom zidentyfikowa\u0107 miejsca w ich oprogramowaniu i zoptymalizowa\u0107 jego efektywno\u015b\u0107 energetyczn\u0105.<\/p>\n","innerContent":["\n<p>Sk\u0105d w og\u00f3le przypomnia\u0142 mi si\u0119 cytat z podcastu z 2022? Poniewa\u017c w zesz\u0142ym tygodniu premier\u0119 mia\u0142 JoularJX 2.0. Czym jest <a href=\"https:\/\/github.com\/joular\/joularjx\">JoularJX<\/a>? To agent JVM s\u0142u\u017c\u0105cy do monitorowania zu\u017cycia energii na poziomie kodu \u017ar\u00f3d\u0142owego, kt\u00f3re pozwala programistom monitorowa\u0107 i analizowa\u0107 zu\u017cycie energii przez aplikacje na r\u00f3\u017cnych urz\u0105dzeniach komputerowych i systemach operacyjnych. Jego modele umo\u017cliwiaj\u0105 oszacowanie zu\u017cycia energii przez komponenty sprz\u0119towe, takie jak procesor i pami\u0119\u0107, a tak\u017ce zapewnia szczeg\u00f3\u0142owe raporty i wizualizacje. A to wszystko, aby pom\u00f3c programistom zidentyfikowa\u0107 miejsca w ich oprogramowaniu i zoptymalizowa\u0107 jego efektywno\u015b\u0107 energetyczn\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":14623,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-28.png\" alt=\"\" class=\"wp-image-14623\"\/><figcaption class=\"wp-element-caption\">I w tym momencie programi\u015bci do\u0142\u0105czaj\u0105 do powy\u017cszego k\u00f3\u0142eczka. Ju\u017c mam w g\u0142owie now\u0105 fitness function dla architektury.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-28.png\" alt=\"\" class=\"wp-image-14623\"\/><figcaption class=\"wp-element-caption\">I w tym momencie programi\u015bci do\u0142\u0105czaj\u0105 do powy\u017cszego k\u00f3\u0142eczka. Ju\u017c mam w g\u0142owie now\u0105 fitness function dla architektury.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/www.noureddine.org\/articles\/joularjx-2-a-leap-forward-in-green-software-analysis\">JoularJX 2.0 wprowadza now\u0105 funkcj\u0119<\/a>, kt\u00f3ra pozwala \u015bledzi\u0107 moc i zu\u017cycie energii w na poziomie <strong>poszczeg\u00f3lnych metod<\/strong>, zapewniaj\u0105c dok\u0142adniejszy wgl\u0105d w efektywno\u015b\u0107 energetyczn\u0105 oprogramowania. Wydanie zmniejsza te\u017c narzut powodowany przez samego JoularJX (troch\u0119 przykro by by\u0142o, jakby z powodu tego ca\u0142ego raportowania dosz\u0142oby do znacznego zu\u017cycia energii, prawda?).<\/p>\n","innerContent":["\n<p><a href=\"https:\/\/www.noureddine.org\/articles\/joularjx-2-a-leap-forward-in-green-software-analysis\">JoularJX 2.0 wprowadza now\u0105 funkcj\u0119<\/a>, kt\u00f3ra pozwala \u015bledzi\u0107 moc i zu\u017cycie energii w na poziomie <strong>poszczeg\u00f3lnych metod<\/strong>, zapewniaj\u0105c dok\u0142adniejszy wgl\u0105d w efektywno\u015b\u0107 energetyczn\u0105 oprogramowania. Wydanie zmniejsza te\u017c narzut powodowany przez samego JoularJX (troch\u0119 przykro by by\u0142o, jakby z powodu tego ca\u0142ego raportowania dosz\u0142oby do znacznego zu\u017cycia energii, prawda?).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Troch\u0119 czego to ludzie nie wymy\u015bl\u0105, a troch\u0119 jednak:<\/p>\n","innerContent":["\n<p>Troch\u0119 czego to ludzie nie wymy\u015bl\u0105, a troch\u0119 jednak:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/300px-Modern_Problems_Require_Modern_Solutions.jpg\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/300px-Modern_Problems_Require_Modern_Solutions.jpg\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/pca.st\/xwehbw6r#t=3297.0\">Java, CraC and Reducing Cold Start Duration with AWS Lambda SnapStart<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/pca.st\/xwehbw6r#t=3297.0\">Java, CraC and Reducing Cold Start Duration with AWS Lambda SnapStart<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/github.com\/joular\/joularjx\">joular\/joularjx<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/github.com\/joular\/joularjx\">joular\/joularjx<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/www.noureddine.org\/articles\/joularjx-2-a-leap-forward-in-green-software-analysis\">JoularJX 2.0: a Leap Forward in Green Software Analysis<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/www.noureddine.org\/articles\/joularjx-2-a-leap-forward-in-green-software-analysis\">JoularJX 2.0: a Leap Forward in Green Software Analysis<\/a><\/li>\n"]}],"innerHTML":"\n<ul>\n\n\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. Wydano Gradle 8.0<\/h2>\n","innerContent":["\n<h2>2. Wydano Gradle 8.0<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pocz\u0105tkiem tygodnia pojawi\u0142a si\u0119 nowe wydanie Gradle - ju\u017c 8.0.<\/p>\n","innerContent":["\n<p>Pocz\u0105tkiem tygodnia pojawi\u0142a si\u0119 nowe wydanie Gradle - ju\u017c 8.0.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Sporo usprawnie\u0144 doczeka\u0142 si\u0119 Kotlin DSL, alternatywn\u0105 sk\u0142adni\u0105 do tradycyjnego (i popularniejszego, o czym za chwil\u0119) Groovy DSL, zapewniaj\u0105c lepsze podpowiadania sk\u0142adni przy edycji. Wraz z Gradle 8.0 poprawiona zostala kompilacji skrypt\u00f3w poprzez wprowadzenie interpretera dla deklaratywnych blok\u00f3w plugin\u00f3w {} w skryptach .gradle.kts, co daje zysk rz\u0119du 20%, zbli\u017caj\u0105c czas procesowania Kotlin DSL do Gradle DSL. Gradle 8.0 aktualizuje r\u00f3wnie\u017c wersje Kotlin API do najnowszego 1.8 oraz umo\u017cliwia korzystanie z bibliotek Java 11 i funkcji j\u0119zykowych w skryptach kompilacji. Niestety, nie dotyczy to prekompilowane wtyczek, tylko samych <em>gradle.kts<\/em>.<\/p>\n","innerContent":["\n<p>Sporo usprawnie\u0144 doczeka\u0142 si\u0119 Kotlin DSL, alternatywn\u0105 sk\u0142adni\u0105 do tradycyjnego (i popularniejszego, o czym za chwil\u0119) Groovy DSL, zapewniaj\u0105c lepsze podpowiadania sk\u0142adni przy edycji. Wraz z Gradle 8.0 poprawiona zostala kompilacji skrypt\u00f3w poprzez wprowadzenie interpretera dla deklaratywnych blok\u00f3w plugin\u00f3w {} w skryptach .gradle.kts, co daje zysk rz\u0119du 20%, zbli\u017caj\u0105c czas procesowania Kotlin DSL do Gradle DSL. Gradle 8.0 aktualizuje r\u00f3wnie\u017c wersje Kotlin API do najnowszego 1.8 oraz umo\u017cliwia korzystanie z bibliotek Java 11 i funkcji j\u0119zykowych w skryptach kompilacji. Niestety, nie dotyczy to prekompilowane wtyczek, tylko samych <em>gradle.kts<\/em>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Super, \u017ce tw\u00f3rcy dbaj\u0105 o to, \u017ceby wsparcie dla Kotlina by\u0142o jak najlepsze, ale przyznam, \u017ce mimo i\u017c usilnie staram si\u0119 u\u017cywa\u0107 w\u0142a\u015bnie wariantu w tym j\u0119zyku, to jednak mimo lat jest to strasznie niewygodne. Nie jest to win\u0105 samego Gradle - oni robi\u0105 co mog\u0105, ale dla spo\u0142eczno\u015bci jest bardzo niewygodnie tworzy\u0107 ka\u017cdy przyk\u0142ad w dw\u00f3ch wariantach, dlatego zwykle wszelkiej ma\u015bci blog posty zawieraj\u0105 tylko wariant w Groovym. I o ile <a href=\"https:\/\/mvnrepository.com\/artifact\/org.eclipse.jdt\/org.eclipse.jdt.annotation\/2.2.700\">takie Maven Repository<\/a> ju\u017c si\u0119 nauczy\u0142o prezentowa\u0107 r\u00f3wnie\u017c wariant Kotlinowy, to <a href=\"https:\/\/projectlombok.org\/setup\/gradle\">sam dzisiaj trafi\u0142em cho\u0107by na stron\u0119 Lomboka<\/a>, gdzie przy opisie konfiguracji dla Gradle takowego ju\u017c nie u\u015bwiadczymy. A im bardziej nietrywialny przypadek (a w Gradle da si\u0119 tworzy\u0107 naprawd\u0119 skomplikowane twory), tym mentalna z jednego formatu na drugi jest trudniejsza.<\/p>\n","innerContent":["\n<p>Super, \u017ce tw\u00f3rcy dbaj\u0105 o to, \u017ceby wsparcie dla Kotlina by\u0142o jak najlepsze, ale przyznam, \u017ce mimo i\u017c usilnie staram si\u0119 u\u017cywa\u0107 w\u0142a\u015bnie wariantu w tym j\u0119zyku, to jednak mimo lat jest to strasznie niewygodne. Nie jest to win\u0105 samego Gradle - oni robi\u0105 co mog\u0105, ale dla spo\u0142eczno\u015bci jest bardzo niewygodnie tworzy\u0107 ka\u017cdy przyk\u0142ad w dw\u00f3ch wariantach, dlatego zwykle wszelkiej ma\u015bci blog posty zawieraj\u0105 tylko wariant w Groovym. I o ile <a href=\"https:\/\/mvnrepository.com\/artifact\/org.eclipse.jdt\/org.eclipse.jdt.annotation\/2.2.700\">takie Maven Repository<\/a> ju\u017c si\u0119 nauczy\u0142o prezentowa\u0107 r\u00f3wnie\u017c wariant Kotlinowy, to <a href=\"https:\/\/projectlombok.org\/setup\/gradle\">sam dzisiaj trafi\u0142em cho\u0107by na stron\u0119 Lomboka<\/a>, gdzie przy opisie konfiguracji dla Gradle takowego ju\u017c nie u\u015bwiadczymy. A im bardziej nietrywialny przypadek (a w Gradle da si\u0119 tworzy\u0107 naprawd\u0119 skomplikowane twory), tym mentalna z jednego formatu na drugi jest trudniejsza.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":14632,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-31.png\" alt=\"\" class=\"wp-image-14632\"\/><figcaption class=\"wp-element-caption\">Przy czym tak jak pisze, sam gradle.kts nie jest wiele winien.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/image-31.png\" alt=\"\" class=\"wp-image-14632\"\/><figcaption class=\"wp-element-caption\">Przy czym tak jak pisze, sam gradle.kts nie jest wiele winien.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Najnowsze wydanie Gradle wprowadza te\u017c usprawnienia dla dodatkowych lokacji kodu, przekazywanych przez parametr <code>buildSrc<\/code>, kt\u00f3re teraz maj\u0105 lepiej wspiera\u0107 inkrementaln\u0105 kompilacj\u0119 i buforowania zada\u0144, a tak\u017ce \u0142atwiejsze ich wsparcie z poziomu linii komend. Gradle nie uruchamia te\u017c ju\u017c automatycznie test\u00f3w dla buildSrc i jego podprojekt\u00f3w gdy nie s\u0105 one potrzebne.<\/p>\n","innerContent":["\n<p>Najnowsze wydanie Gradle wprowadza te\u017c usprawnienia dla dodatkowych lokacji kodu, przekazywanych przez parametr <code>buildSrc<\/code>, kt\u00f3re teraz maj\u0105 lepiej wspiera\u0107 inkrementaln\u0105 kompilacj\u0119 i buforowania zada\u0144, a tak\u017ce \u0142atwiejsze ich wsparcie z poziomu linii komend. Gradle nie uruchamia te\u017c ju\u017c automatycznie test\u00f3w dla buildSrc i jego podprojekt\u00f3w gdy nie s\u0105 one potrzebne.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Po wi\u0119cej szczeg\u00f3\u0142\u00f3w, a tak\u017ce dodatkowe zmiany w wersji <a href=\"https:\/\/docs.gradle.org\/8.0\/release-notes.html\">8.0 odsy\u0142am do Release Notes<\/a>.<\/p>\n","innerContent":["\n<p>Po wi\u0119cej szczeg\u00f3\u0142\u00f3w, a tak\u017ce dodatkowe zmiany w wersji <a href=\"https:\/\/docs.gradle.org\/8.0\/release-notes.html\">8.0 odsy\u0142am do Release Notes<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ostatnim (chyba ciekawszym ni\u017c same zmiany z nim przychodz\u0105ce) aspektem nowego wydania jest podbicie du\u017cej numeracji, co jak \u0142atwo si\u0119 domy\u015ble\u0107 wynika ze z\u0142amania kompatybilno\u015bci wstecznej z niekt\u00f3rymi aspektami ga\u0142\u0119zi\u0105 7.x. W zwi\u0105zku z tym pojawi\u0142o si\u0119 troch\u0119 krytyki, \u017ce od czego jak czego, ale od build toola wi\u0119kszo\u015b\u0107 u\u017cytkownik\u00f3w wymaga stabilno\u015bci i kompatybilno\u015bci. Rozumiem takowe zarzuty, aczkolwiek akurat pod tym wzgl\u0119dem Gradle wykona\u0142 tytaniczn\u0105 prac\u0119 w stosunku do tego, jak bardzo problematycznymi by\u0142y upgrade jeszcze par\u0119 lat temu. Kiedy programowa\u0142em na Androidzie, ka\u017cdorazowa aktualizacja build\u00f3w Gradle (dodatkowo wymuszana przez niekompatybilno\u015b\u0107 starych wyda\u0144 z nowymi wersjami pluginu Android SDK) by\u0142a traumatycznym procesem. Dzi\u015b (przynajmniej w wypadku aplikacji serwerowych) jest pod tym wzgl\u0119dem znacznie lepiej.<\/p>\n","innerContent":["\n<p>Ostatnim (chyba ciekawszym ni\u017c same zmiany z nim przychodz\u0105ce) aspektem nowego wydania jest podbicie du\u017cej numeracji, co jak \u0142atwo si\u0119 domy\u015ble\u0107 wynika ze z\u0142amania kompatybilno\u015bci wstecznej z niekt\u00f3rymi aspektami ga\u0142\u0119zi\u0105 7.x. W zwi\u0105zku z tym pojawi\u0142o si\u0119 troch\u0119 krytyki, \u017ce od czego jak czego, ale od build toola wi\u0119kszo\u015b\u0107 u\u017cytkownik\u00f3w wymaga stabilno\u015bci i kompatybilno\u015bci. Rozumiem takowe zarzuty, aczkolwiek akurat pod tym wzgl\u0119dem Gradle wykona\u0142 tytaniczn\u0105 prac\u0119 w stosunku do tego, jak bardzo problematycznymi by\u0142y upgrade jeszcze par\u0119 lat temu. Kiedy programowa\u0142em na Androidzie, ka\u017cdorazowa aktualizacja build\u00f3w Gradle (dodatkowo wymuszana przez niekompatybilno\u015b\u0107 starych wyda\u0144 z nowymi wersjami pluginu Android SDK) by\u0142a traumatycznym procesem. Dzi\u015b (przynajmniej w wypadku aplikacji serwerowych) jest pod tym wzgl\u0119dem znacznie lepiej.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A jak ju\u017c przy build toolach jeste\u015bmy, to podziel\u0119 si\u0119 z Wami na koniec moim chyba ulubionym rozdzia\u0142em z ksi\u0105\u017cki <strong><a href=\"https:\/\/abseil.io\/resources\/swe-book\">Software Engineering at Google<\/a><\/strong> - <a href=\"https:\/\/abseil.io\/resources\/swe-book\/html\/ch18.html\">Build Systems and Build Philosophy<\/a>. Na przyk\u0142adzie Bazela pokazuje on zupe\u0142nie drug\u0105 stron\u0119 medalu w stosunku do niezwykle elastycznego Gradle. Uzmys\u0142awia, jakie zalety i wady maj\u0105 te dwie r\u00f3\u017cne filozofie procesu budowania aplikacji.<\/p>\n","innerContent":["\n<p>A jak ju\u017c przy build toolach jeste\u015bmy, to podziel\u0119 si\u0119 z Wami na koniec moim chyba ulubionym rozdzia\u0142em z ksi\u0105\u017cki <strong><a href=\"https:\/\/abseil.io\/resources\/swe-book\">Software Engineering at Google<\/a><\/strong> - <a href=\"https:\/\/abseil.io\/resources\/swe-book\/html\/ch18.html\">Build Systems and Build Philosophy<\/a>. Na przyk\u0142adzie Bazela pokazuje on zupe\u0142nie drug\u0105 stron\u0119 medalu w stosunku do niezwykle elastycznego Gradle. Uzmys\u0142awia, jakie zalety i wady maj\u0105 te dwie r\u00f3\u017cne filozofie procesu budowania aplikacji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/docs.gradle.org\/8.0\/release-notes.html\">Gradle 8.0 Release Notes<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/docs.gradle.org\/8.0\/release-notes.html\">Gradle 8.0 Release Notes<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/abseil.io\/resources\/swe-book\/html\/ch18.html\">Build Systems and Build Philosophy<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/abseil.io\/resources\/swe-book\/html\/ch18.html\">Build Systems and Build Philosophy<\/a><\/li>\n"]}],"innerHTML":"\n<ul>\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Bonus: Null Safety - Java vs Kotlin<\/h2>\n","innerContent":["\n<h2>Bonus: Null Safety - Java vs Kotlin<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na koniec, troch\u0119 w formie bonusu, mam dla Was publikacj\u0119 dobrze koresponduj\u0105c\u0105 z g\u0142\u00f3wnym tematem poprzedniej edycji - pr\u00f3bom usprawnienia konceptu nullowalno\u015bci przez projekt Valhalla.<\/p>\n","innerContent":["\n<p>Na koniec, troch\u0119 w formie bonusu, mam dla Was publikacj\u0119 dobrze koresponduj\u0105c\u0105 z g\u0142\u00f3wnym tematem poprzedniej edycji - pr\u00f3bom usprawnienia konceptu nullowalno\u015bci przez projekt Valhalla.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zasugerowa\u0142em tam, \u017ce by\u0107 mo\u017ce wariantem, na kt\u00f3ry zdecyduj\u0105 si\u0119 tw\u00f3rcy JDK b\u0119dzie wprowadzenie jakiej\u015b nowej adnotacji. Pomys\u0142 ten okaza\u0142 si\u0119 by\u0107 nieco niefortunny, bo dos\u0142ownie dzie\u0144 wcze\u015bniej Brian Goetz, Architekt Javy, wys\u0142a\u0142 maila, w kt\u00f3rym do\u015b\u0107 jasno daje zna\u0107, \u017ce sam j\u0119zyk powinien by\u0107 wolny od adnotacji, <a href=\"https:\/\/mail.openjdk.org\/pipermail\/amber-dev\/2023-February\/007821.html\">a @Override w formie, w kt\u00f3rej by\u0142 wprowadzony, nie by\u0142 najlepszym pomys\u0142em<\/a>. Koncepcja ta wi\u0119c raczej nie b\u0119dzie mia\u0142a miejsca, mimo, \u017ce wydaje si\u0119 by\u0107 bardzo naturalna. W ko\u0144cu nie bez powodu mamy przez lata do czynienia z wysypem r\u00f3\u017cnorakich wariant\u00f3w <code>@NonNull<\/code> - wida\u0107 jest potrzeba.<\/p>\n","innerContent":["\n<p>Zasugerowa\u0142em tam, \u017ce by\u0107 mo\u017ce wariantem, na kt\u00f3ry zdecyduj\u0105 si\u0119 tw\u00f3rcy JDK b\u0119dzie wprowadzenie jakiej\u015b nowej adnotacji. Pomys\u0142 ten okaza\u0142 si\u0119 by\u0107 nieco niefortunny, bo dos\u0142ownie dzie\u0144 wcze\u015bniej Brian Goetz, Architekt Javy, wys\u0142a\u0142 maila, w kt\u00f3rym do\u015b\u0107 jasno daje zna\u0107, \u017ce sam j\u0119zyk powinien by\u0107 wolny od adnotacji, <a href=\"https:\/\/mail.openjdk.org\/pipermail\/amber-dev\/2023-February\/007821.html\">a @Override w formie, w kt\u00f3rej by\u0142 wprowadzony, nie by\u0142 najlepszym pomys\u0142em<\/a>. Koncepcja ta wi\u0119c raczej nie b\u0119dzie mia\u0142a miejsca, mimo, \u017ce wydaje si\u0119 by\u0107 bardzo naturalna. W ko\u0144cu nie bez powodu mamy przez lata do czynienia z wysypem r\u00f3\u017cnorakich wariant\u00f3w <code>@NonNull<\/code> - wida\u0107 jest potrzeba.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/twitter.com\/nicolas_frankel\">Nicolas Fr\u00e4nkel<\/a> w zesz\u0142ym tygodniu opublikowa\u0142 tekst <a href=\"https:\/\/blog.frankel.ch\/null-safety-java-vs-kotlin\/\">Null safety: Kotlin vs. Java<\/a>, w kt\u00f3rym pokusi\u0142 si\u0119 na por\u00f3wnanie czym r\u00f3\u017cni\u0105 si\u0119 podej\u015bcia do konceptu Nulla w obu j\u0119zykach. Jako jeden z element\u00f3w analizy podsumowuje on istniej\u0105ce na rynku adnotacje i wymienia osiem r\u00f3\u017cnych wariant\u00f3w, posiadaj\u0105cych r\u00f3\u017cne pakiety oraz (co nawet gorsze) nieco odmienne zachowanie.<\/p>\n","innerContent":["\n<p><a href=\"https:\/\/twitter.com\/nicolas_frankel\">Nicolas Fr\u00e4nkel<\/a> w zesz\u0142ym tygodniu opublikowa\u0142 tekst <a href=\"https:\/\/blog.frankel.ch\/null-safety-java-vs-kotlin\/\">Null safety: Kotlin vs. Java<\/a>, w kt\u00f3rym pokusi\u0142 si\u0119 na por\u00f3wnanie czym r\u00f3\u017cni\u0105 si\u0119 podej\u015bcia do konceptu Nulla w obu j\u0119zykach. Jako jeden z element\u00f3w analizy podsumowuje on istniej\u0105ce na rynku adnotacje i wymienia osiem r\u00f3\u017cnych wariant\u00f3w, posiadaj\u0105cych r\u00f3\u017cne pakiety oraz (co nawet gorsze) nieco odmienne zachowanie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"id":14618,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/Untitled-1024x364.jpg\" alt=\"\" class=\"wp-image-14618\"\/><figcaption class=\"wp-element-caption\">Ju\u017c wiecie po co mi by\u0142 wspomniany wy\u017cej Lombok. Z tym sobie porad\u017a, Google Copilot!<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image size-large\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/Untitled-1024x364.jpg\" alt=\"\" class=\"wp-image-14618\"\/><figcaption class=\"wp-element-caption\">Ju\u017c wiecie po co mi by\u0142 wspomniany wy\u017cej Lombok. Z tym sobie porad\u017a, Google Copilot!<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Patrz\u0105c na powy\u017csze, warto przytoczy\u0107 (wspominan\u0105 te\u017c w artykule Nicolasa) inicjatyw\u0119 <a href=\"https:\/\/jspecify.dev\/\">jSpecify<\/a>. Bior\u0105ce w niej udzia\u0142 podmioty pracuj\u0105 nad zdefiniowaniem ustandaryzowanego zestawu adnotacji s\u0142u\u017c\u0105cych do analizy statycznej, a za pierwszy cel obrali sobie w\u0142a\u015bni <code>@NonNulla<\/code> (patrz\u0105c na powy\u017csze - bardzo s\u0142usznie). Przewodzi jej Google, a bior\u0105 w niej udzia\u0142 tacy gracze jak cho\u0107by VMWare, Microsoft czy JetBrains, a wi\u0119c tw\u00f3rcy wielu z powy\u017cszych adnotacji, maj\u0105 wi\u0119c oni moc sprawcz\u0105, aby posprz\u0105ta\u0107 ten ca\u0142y ba\u0142agan. Trzymajmy za nich kciuki.<\/p>\n","innerContent":["\n<p>Patrz\u0105c na powy\u017csze, warto przytoczy\u0107 (wspominan\u0105 te\u017c w artykule Nicolasa) inicjatyw\u0119 <a href=\"https:\/\/jspecify.dev\/\">jSpecify<\/a>. Bior\u0105ce w niej udzia\u0142 podmioty pracuj\u0105 nad zdefiniowaniem ustandaryzowanego zestawu adnotacji s\u0142u\u017c\u0105cych do analizy statycznej, a za pierwszy cel obrali sobie w\u0142a\u015bni <code>@NonNulla<\/code> (patrz\u0105c na powy\u017csze - bardzo s\u0142usznie). Przewodzi jej Google, a bior\u0105 w niej udzia\u0142 tacy gracze jak cho\u0107by VMWare, Microsoft czy JetBrains, a wi\u0119c tw\u00f3rcy wielu z powy\u017cszych adnotacji, maj\u0105 wi\u0119c oni moc sprawcz\u0105, aby posprz\u0105ta\u0107 ten ca\u0142y ba\u0142agan. Trzymajmy za nich kciuki.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/blog.frankel.ch\/null-safety-java-vs-kotlin\/\">Null safety: Kotlin vs. Java<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/blog.frankel.ch\/null-safety-java-vs-kotlin\/\">Null safety: Kotlin vs. Java<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/mail.openjdk.org\/pipermail\/amber-dev\/2023-February\/007821.html\">a @Override w formie, w kt\u00f3rej by\u0142 wprowadzony, nie by\u0142 najlepszym pomys\u0142em<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/mail.openjdk.org\/pipermail\/amber-dev\/2023-February\/007821.html\">a @Override w formie, w kt\u00f3rej by\u0142 wprowadzony, nie by\u0142 najlepszym pomys\u0142em<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/jspecify.dev\/\">jSpecify - Standard Annotations for Java Static Analysis<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/jspecify.dev\/\">jSpecify - Standard Annotations for Java Static Analysis<\/a><\/li>\n"]}],"innerHTML":"\n<ul>\n\n\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>PS: W tym tygodniu wydanie posz\u0142o w \u015brod\u0119, zamiast tradycyjnego ostatnio czwartku, bo mam 15.02.2023 i 16.02.2022 dwa wyst\u0105pienia na lokalnych JUG-ach z moim talkiem <a href=\"https:\/\/www.slideshare.net\/ArturSkowroski\/jvm-iceberg-we-need-to-go-deeper\">JVM Iceberg... we need to go deeper<\/a>.<\/p>\n","innerContent":["\n<p>PS: W tym tygodniu wydanie posz\u0142o w \u015brod\u0119, zamiast tradycyjnego ostatnio czwartku, bo mam 15.02.2023 i 16.02.2022 dwa wyst\u0105pienia na lokalnych JUG-ach z moim talkiem <a href=\"https:\/\/www.slideshare.net\/ArturSkowroski\/jvm-iceberg-we-need-to-go-deeper\">JVM Iceberg... we need to go deeper<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>\ud83d\udc49 W \u015arod\u0119 (15.02) na <a href=\"https:\/\/www.meetup.com\/lublin-java-user-group\/events\/291188990\/\">Lublin Java User Group (LJUG)<\/a>.<\/p>\n","innerContent":["\n<p>\ud83d\udc49 W \u015arod\u0119 (15.02) na <a href=\"https:\/\/www.meetup.com\/lublin-java-user-group\/events\/291188990\/\">Lublin Java User Group (LJUG)<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>\ud83d\udc49 W Czwartek (16.02) na <a href=\"https:\/\/www.meetup.com\/pl-PL\/polish-java-user-group\/events\/291447356\/\">Polish Java User Group (PJUG) w Krakowie<\/a>.<\/p>\n","innerContent":["\n<p>\ud83d\udc49 W Czwartek (16.02) na <a href=\"https:\/\/www.meetup.com\/pl-PL\/polish-java-user-group\/events\/291447356\/\">Polish Java User Group (PJUG) w Krakowie<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jakby kto\u015b chcia\u0142 wpa\u015b\u0107 zbi\u0107 sobie pi\u0105tk\u0119 - zapraszam \ud83d\ude04<\/p>\n","innerContent":["\n<p>Jakby kto\u015b chcia\u0142 wpa\u015b\u0107 zbi\u0107 sobie pi\u0105tk\u0119 - zapraszam \ud83d\ude04<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/EllipticalThisCopepod-size_restricted.gif\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/02\/EllipticalThisCopepod-size_restricted.gif\" alt=\"\"\/><\/figure>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/14613","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=14613"}],"version-history":[{"count":17,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/14613\/revisions"}],"predecessor-version":[{"id":14661,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/14613\/revisions\/14661"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/14637"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=14613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=14613"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=14613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}