{"id":10081,"date":"2021-09-16T13:43:35","date_gmt":"2021-09-16T11:43:35","guid":{"rendered":"https:\/\/vived.io\/frontend-thursday-vol-55\/"},"modified":"2022-09-19T13:16:38","modified_gmt":"2022-09-19T11:16:38","slug":"frontend-thursday-vol-55","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/","title":{"rendered":"Frontend Thursday vol. 55"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">1. TC39 obraduje na temat pipeline operator<\/h1>\n\n\n\n<p>Lubicie czasem pok\u0142\u00f3ci\u0107 si\u0119 o co\u015b, co mo\u017ce nigdy nie osi\u0105gn\u0105\u0107 statusu produkcyjnego? Je\u015bli tak, to trafili\u015bcie w dobre miejsce. W minionym tygodniu w sieci rozgorza\u0142a dyskusja na temat nowego pipeline operatora, kt\u00f3ry przebi\u0142 si\u0119 do drugiego etapu procesu TC39 (je\u015bli nie kojarzycie TC39 to polecam <a href=\"https:\/\/nitayneeman.com\/posts\/introducing-all-stages-of-the-tc39-process-in-ecmascript\/\">ten artyku\u0142<\/a>, natomiast w telegraficznym skr\u00f3cie proces sk\u0142ada si\u0119 z 4 etap\u00f3w i mo\u017ce ci\u0105gn\u0105\u0107 si\u0119 naprawd\u0119 d\u0142ugo). Nowa sk\u0142adnia ma oferowa\u0107 natywne \u0142a\u0144cuchowe \u0142\u0105czenie funkcji, z kt\u00f3rym do tej pory deweloperzy radzili sobie poprzez funkcj\u0119 pipe.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">\/\/ prosta implementacja funkcji pipe, jak\u0105 mo\u017cecie spotka\u0107 obecnie w niekt\u00f3rych bibliotekach\nfunction pipe(initialArg, ...fns) {\n  return fns.reduce((prevValue, fn) =&gt; fn(prevValue), initialArg);\n}\n \nconst result = pipe(\n  2,\n  (x) =&gt; x ** 2,\n  (x) =&gt; x - 1,\n);\n\n\/\/ Propozycja nowej sk\u0142adni\nconst result = 2 |&gt; ^ ** 2 |&gt; ^ - 1;\n\n\/\/ Propozycja nowej sk\u0142adni z wykorzystaniem funkcji\nconst result = 2\n  |&gt; squared(^)\n  |&gt; subtractOne(^);\n\n\/\/ A tak w nowej sk\u0142adni wygl\u0105da\u0142by RxJS\nsource$\n  |&gt; filter((x) =&gt; x % 2 === 0)(^)\n  |&gt; map((x) =&gt; x * x)(^)\n  |&gt; concatMap((x) =&gt; of(x + 1, x + 2, x + 2, x + 4))(^)\n  |&gt; ^.subscribe(console.log);<\/code><\/pre>\n\n\n\n<p>Sk\u0105d wzi\u0119\u0142y si\u0119 dyskusje wok\u00f3\u0142 tego tematu? Ot\u00f3\u017c pipeline operator mo\u017cna zaimplementowa\u0107 u\u017cywaj\u0105c jednej z dw\u00f3ch sk\u0142adni. Ta kt\u00f3ra trafi\u0142a do drugiego etapu to Hack Pipeline, natomiast wersja odrzucona przez TC3&nbsp; potocznie nazywana jest na cz\u0119\u015b\u0107 j\u0119zyka z kt\u00f3rego si\u0119 wywodzi \u200b\u200bF# Pipeline. Alternatywna sk\u0142adnia zamiast wykorzystywa\u0107 ^, niejawnie przekazuje wynik poprzedniej funkcji jako ostatni argument do kolejnej. Takie zachowanie umo\u017cliwia \u0142atwiejsz\u0105 migracj\u0119 dla bibliotek samodzielnie implementuj\u0105cych metod\u0119 pipe (jak wspomniany wcze\u015bniej RxJS) i pozwala na wykorzystanie powszechnie u\u017cywanych arrow functions.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">\/\/ Operator pipe w sk\u0142adni znanej z F#\nconst result = 2\n  |&gt; (n) =&gt; n ** 2\n  |&gt; (n) =&gt; n - 1;\n\nconst result = 2\n  |&gt; squared\n  |&gt; subtractOne\n\nsource$\n  |&gt; filter((x) =&gt; x % 2 === 0)\n  |&gt; map((x) =&gt; x * x)\n  |&gt; concatMap((x) =&gt; of(x + 1, x + 2, x + 2, x + 4))\n  |&gt; result$ =&gt; result$.subscribe(console.log);<\/code><\/pre>\n\n\n\n<p>Przegl\u0105daj\u0105c internetowe opinie mam wra\u017cenie, \u017ce szala opinii przechyla si\u0119 w stron\u0119 rozwi\u0105zania przyj\u0119tego przez TC39, ale zdecydowanie nie jest to trywialny temat. Je\u015bli jeste\u015bcie zainteresowani dog\u0142\u0119bn\u0105 analiz\u0105 wad i zalet poszczeg\u00f3lnych implementacji to odsy\u0142am Was do artyku\u0142u tw\u00f3rcy RxJS, kt\u00f3ry znajdziecie w \u017ar\u00f3d\u0142a (fragmenty kodu, kt\u00f3re widzicie powy\u017cej pochodz\u0105 w\u0142a\u015bnie stamt\u0105d).<\/p>\n\n\n\n<p>Szczerze m\u00f3wi\u0105c obie sk\u0142adnie s\u0105 dla mnie akceptowalne &#8211; jako wielbiciel programowanie funkcyjnego chcia\u0142bym wreszcie po prostu zobaczy\u0107 pipeline operator w oficjalnej specyfikacji. No i dobrze zobaczy\u0107, \u017ce TC39 obraduje te\u017c nad czym\u015b wi\u0119cej ni\u017c kolejne metody do formatowania dat.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"300\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/surpirse.gif\" alt=\"\" class=\"wp-image-2339\"\/><figcaption>Autor Frontendowego Czwartku, kiedy dowiedzia\u0142 si\u0119, \u017ce TC39 Meeting obradowa\u0142o na temat czego\u015b ciekawego. Przysi\u0119gam, tak by\u0142o \ud83d\ude00<\/figcaption><\/figure><\/div>\n\n\n\n<h2 id=\"zrodla\" data-num=1>\u0179r\u00f3d\u0142a:<\/h2>\n\n\n\n<p><a href=\"https:\/\/benlesh.com\/posts\/tc39-pipeline-proposal-hack-vs-f-sharp\/\">https:\/\/benlesh.com\/posts\/tc39-pipeline-proposal-hack-vs-f-sharp\/<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">2. Node 16.9.0 umo\u017cliwi korzystanie z pnpm i yarn bez instalacji<\/h1>\n\n\n\n<p>Kilka dni temu doczekali\u015bmy si\u0119 kolejnej wersji minor Node.js. Nie by\u0142oby w tym pewnie nic interesuj\u0105cego, gdyby nie pojawienie si\u0119 eksperymentalnego menad\u017cera menad\u017cer\u00f3w pakiet\u00f3w nazwanego Corepack. Jego zadaniem jest wykrywanie na podstawie pola \u201cpackageManager\u201d w package.json odpowiedniego mened\u017cera pakiet\u00f3w, zainstalowanie go i przekazywanie do niego komend u\u017cytkownika. Jak t\u0142umacz\u0105 tw\u00f3rcy zachowanie to ma usp\u00f3jni\u0107 menad\u017cery pakiet\u00f3w z jakich korzystaj\u0105 deweloperzy w jednym zespole i wyeliminowa\u0107 bugi wynikaj\u0105ce z drobnych r\u00f3\u017cnic mi\u0119dzy zachowaniem poszczeg\u00f3lnych narz\u0119dzi. Co ciekawe obecnie Corepack wspiera yarn i pnpm, ale nie wspiera samego npm.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"400\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/manager_1.gif\" alt=\"\" class=\"wp-image-2341\"\/><figcaption>Pakiety w npm to prawdziwa korporacja skoro menad\u017cery maj\u0105 swoich mened\u017cer\u00f3w. Pytanie tylko, czy nie posz\u0142o to o krok za daleko?<\/figcaption><\/figure><\/div>\n\n\n\n<p>W naszym zespole jawnie podzieleni jeste\u015bmy na u\u017cytkownik\u00f3w yarn i npm i do tej pory nie sprawi\u0142o nam to wi\u0119kszych trudno\u015bci. Ci\u0119\u017cko jednak zaprzeczy\u0107, \u017ce zamra\u017canie zale\u017cno\u015bci jest dobr\u0105 praktyk\u0105 i nikomu jeszcze nie zaszkodzi\u0142o. Szkoda tylko, \u017ce Node do tej pory nie oferuje natywnego rozwi\u0105zania do zarz\u0105dzania wersj\u0105 \u015brodowiska uruchomieniowego.&nbsp;<\/p>\n\n\n\n<h2 id=\"zrodla\" data-num=2>\u0179r\u00f3d\u0142a:<\/h2>\n\n\n\n<p><a href=\"https:\/\/nodejs.org\/en\/blog\/release\/v16.9.0\/?fbclid=IwAR3A_JmfNyP5P_vGsA-SIMM8tyNXK9I9FHcIVHZLy70mao1et8YX0HyKt4A\">https:\/\/nodejs.org\/en\/blog\/release\/v16.9.0\/?fbclid=IwAR3A_JmfNyP5P_vGsA-SIMM8tyNXK9I9FHcIVHZLy70mao1et8YX0HyKt4A<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">3. Nowy progresywny format obraz\u00f3w od Google: JPEG XL<\/h1>\n\n\n\n<p>Jak to m\u00f3wi\u0105, tydzie\u0144 bez Data Science to tydzie\u0144 stracony! Tym razem mamy dla Was nowy format obraz\u00f3w zaproponowany przez Google.a on wykorzystywa\u0107 sztuczn\u0105 inteligencj\u0119, aby przyspieszy\u0107 \u0142adowanie zdj\u0119\u0107. Dzi\u0119ki wykorzystaniu sieci neuronowej mo\u017cliwe jest wykrycie, na kt\u00f3re cz\u0119\u015bci zdj\u0119cia w pierwszej kolejno\u015bci b\u0119dzie patrzy\u0142 u\u017cytkownik. Znalezione miejsca \u0142adowane s\u0105 od razu z du\u017cym poziomem szczeg\u00f3\u0142owo\u015bci, a pozosta\u0142a cz\u0119\u015b\u0107 do\u0142adowywane jest p\u00f3\u017aniej. Demo zaprezentowane przez Google wygl\u0105da imponuj\u0105co, ale patrz\u0105c na tempo adaptacji progresywnych obraz\u00f3w w Firefox i Safari mo\u017cemy jednak przewidywa\u0107, \u017ce JPEG XL niepr\u0119dko stanie si\u0119 powszechnie obs\u0142ugiwany (o ile kiedykolwiek do tego dojdzie).<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"642\" height=\"389\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/5n5hjs.jpeg\" alt=\"\" class=\"wp-image-2342\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/5n5hjs.jpeg 642w, https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/5n5hjs-300x182.jpeg 300w\" sizes=\"auto, (max-width: 642px) 100vw, 642px\" \/><figcaption>Jak Wam si\u0119 podoba nowy zwiastun Matrixa? Czekacie czy kompletnie Was to nie obesz\u0142o?<\/figcaption><\/figure><\/div>\n\n\n\n<h2 id=\"zrodla\" data-num=3>\u0179r\u00f3d\u0142a:<\/h2>\n\n\n\n<p><a href=\"https:\/\/opensource.googleblog.com\/2021\/09\/using-saliency-in-progressive-jpeg-xl-images.html?fbclid=IwAR2cLZuH2BhXDIL2_uxwDvLtDOqMj8Myi7BrIBFpNbOK8F8Cs_-lm0-D41Y\">https:\/\/opensource.googleblog.com\/2021\/09\/using-saliency-in-progressive-jpeg-xl-images.html?fbclid=IwAR2cLZuH2BhXDIL2_uxwDvLtDOqMj8Myi7BrIBFpNbOK8F8Cs_-lm0-D41Y<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W dzisiejszej edycji mamy dla Was draft pipeline operator, kt\u00f3ry trafi\u0142 do drugiego etapu procesu TC39, Corepack czyli menad\u017cer menad\u017cer\u00f3w pakiet\u00f3w i nowy format zdj\u0119\u0107 od Google.<\/p>\n","protected":false},"author":12,"featured_media":7698,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[273],"tags":[],"class_list":["post-10081","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend-pl"],"acf":{"estimated_reading_time":"4","weekly_summary":true},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Frontend Thursday vol. 55 - Vived<\/title>\n<meta name=\"description\" content=\"W dzisiejszej edycji mamy dla Was draft pipeline operator, kt\u00f3ry trafi\u0142 do drugiego etapu procesu TC39, Corepack czyli menad\u017cer menad\u017cer\u00f3w pakiet\u00f3w i nowy format zdj\u0119\u0107 od Google.\" \/>\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\/frontend-thursday-vol-55\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Frontend Thursday vol. 55 - Vived\" \/>\n<meta property=\"og:description\" content=\"W dzisiejszej edycji mamy dla Was draft pipeline operator, kt\u00f3ry trafi\u0142 do drugiego etapu procesu TC39, Corepack czyli menad\u017cer menad\u017cer\u00f3w pakiet\u00f3w i nowy format zdj\u0119\u0107 od Google.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2021-09-16T11:43:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:16:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-16-at-13.40.02.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1004\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Tomasz Borowicz\" \/>\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\/frontend-thursday-vol-55\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/\"},\"author\":{\"name\":\"Tomasz Borowicz\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\"},\"headline\":\"Frontend Thursday vol. 55\",\"datePublished\":\"2021-09-16T11:43:35+00:00\",\"dateModified\":\"2022-09-19T11:16:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/\"},\"wordCount\":750,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-16-at-13.40.02.png\",\"articleSection\":[\"Frontend\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/\",\"url\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/\",\"name\":\"Frontend Thursday vol. 55 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-16-at-13.40.02.png\",\"datePublished\":\"2021-09-16T11:43:35+00:00\",\"dateModified\":\"2022-09-19T11:16:38+00:00\",\"description\":\"W dzisiejszej edycji mamy dla Was draft pipeline operator, kt\u00f3ry trafi\u0142 do drugiego etapu procesu TC39, Corepack czyli menad\u017cer menad\u017cer\u00f3w pakiet\u00f3w i nowy format zdj\u0119\u0107 od Google.\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-16-at-13.40.02.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-16-at-13.40.02.png\",\"width\":1920,\"height\":1004},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frontend Thursday vol. 55\"}]},{\"@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\/9d2a72fe7d0dfbb4092675afbab742bb\",\"name\":\"Tomasz Borowicz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g\",\"caption\":\"Tomasz Borowicz\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Frontend Thursday vol. 55 - Vived","description":"W dzisiejszej edycji mamy dla Was draft pipeline operator, kt\u00f3ry trafi\u0142 do drugiego etapu procesu TC39, Corepack czyli menad\u017cer menad\u017cer\u00f3w pakiet\u00f3w i nowy format zdj\u0119\u0107 od Google.","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\/frontend-thursday-vol-55\/","og_locale":"pl_PL","og_type":"article","og_title":"Frontend Thursday vol. 55 - Vived","og_description":"W dzisiejszej edycji mamy dla Was draft pipeline operator, kt\u00f3ry trafi\u0142 do drugiego etapu procesu TC39, Corepack czyli menad\u017cer menad\u017cer\u00f3w pakiet\u00f3w i nowy format zdj\u0119\u0107 od Google.","og_url":"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/","og_site_name":"Vived","article_published_time":"2021-09-16T11:43:35+00:00","article_modified_time":"2022-09-19T11:16:38+00:00","og_image":[{"width":1920,"height":1004,"url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-16-at-13.40.02.png","type":"image\/png"}],"author":"Tomasz Borowicz","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/"},"author":{"name":"Tomasz Borowicz","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb"},"headline":"Frontend Thursday vol. 55","datePublished":"2021-09-16T11:43:35+00:00","dateModified":"2022-09-19T11:16:38+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/"},"wordCount":750,"commentCount":0,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-16-at-13.40.02.png","articleSection":["Frontend"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/","url":"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/","name":"Frontend Thursday vol. 55 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-16-at-13.40.02.png","datePublished":"2021-09-16T11:43:35+00:00","dateModified":"2022-09-19T11:16:38+00:00","description":"W dzisiejszej edycji mamy dla Was draft pipeline operator, kt\u00f3ry trafi\u0142 do drugiego etapu procesu TC39, Corepack czyli menad\u017cer menad\u017cer\u00f3w pakiet\u00f3w i nowy format zdj\u0119\u0107 od Google.","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-16-at-13.40.02.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-16-at-13.40.02.png","width":1920,"height":1004},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-55\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Frontend Thursday vol. 55"}]},{"@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\/9d2a72fe7d0dfbb4092675afbab742bb","name":"Tomasz Borowicz","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g","caption":"Tomasz Borowicz"}}]}},"blocks_vived":[{"blockName":"core\/heading","attrs":{"level":1},"innerBlocks":[],"innerHTML":"\n<h1>1. TC39 obraduje na temat pipeline operator<\/h1>\n","innerContent":["\n<h1>1. TC39 obraduje na temat pipeline operator<\/h1>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Lubicie czasem pok\u0142\u00f3ci\u0107 si\u0119 o co\u015b, co mo\u017ce nigdy nie osi\u0105gn\u0105\u0107 statusu produkcyjnego? Je\u015bli tak, to trafili\u015bcie w dobre miejsce. W minionym tygodniu w sieci rozgorza\u0142a dyskusja na temat nowego pipeline operatora, kt\u00f3ry przebi\u0142 si\u0119 do drugiego etapu procesu TC39 (je\u015bli nie kojarzycie TC39 to polecam <a href=\"https:\/\/nitayneeman.com\/posts\/introducing-all-stages-of-the-tc39-process-in-ecmascript\/\">ten artyku\u0142<\/a>, natomiast w telegraficznym skr\u00f3cie proces sk\u0142ada si\u0119 z 4 etap\u00f3w i mo\u017ce ci\u0105gn\u0105\u0107 si\u0119 naprawd\u0119 d\u0142ugo). Nowa sk\u0142adnia ma oferowa\u0107 natywne \u0142a\u0144cuchowe \u0142\u0105czenie funkcji, z kt\u00f3rym do tej pory deweloperzy radzili sobie poprzez funkcj\u0119 pipe.<\/p>\n","innerContent":["\n<p>Lubicie czasem pok\u0142\u00f3ci\u0107 si\u0119 o co\u015b, co mo\u017ce nigdy nie osi\u0105gn\u0105\u0107 statusu produkcyjnego? Je\u015bli tak, to trafili\u015bcie w dobre miejsce. W minionym tygodniu w sieci rozgorza\u0142a dyskusja na temat nowego pipeline operatora, kt\u00f3ry przebi\u0142 si\u0119 do drugiego etapu procesu TC39 (je\u015bli nie kojarzycie TC39 to polecam <a href=\"https:\/\/nitayneeman.com\/posts\/introducing-all-stages-of-the-tc39-process-in-ecmascript\/\">ten artyku\u0142<\/a>, natomiast w telegraficznym skr\u00f3cie proces sk\u0142ada si\u0119 z 4 etap\u00f3w i mo\u017ce ci\u0105gn\u0105\u0107 si\u0119 naprawd\u0119 d\u0142ugo). Nowa sk\u0142adnia ma oferowa\u0107 natywne \u0142a\u0144cuchowe \u0142\u0105czenie funkcji, z kt\u00f3rym do tej pory deweloperzy radzili sobie poprzez funkcj\u0119 pipe.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"javascript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">\/\/ prosta implementacja funkcji pipe, jak\u0105 mo\u017cecie spotka\u0107 obecnie w niekt\u00f3rych bibliotekach\nfunction pipe(initialArg, ...fns) {\n  return fns.reduce((prevValue, fn) => fn(prevValue), initialArg);\n}\n \nconst result = pipe(\n  2,\n  (x) => x ** 2,\n  (x) => x - 1,\n);\n\n\/\/ Propozycja nowej sk\u0142adni\nconst result = 2 |> ^ ** 2 |> ^ - 1;\n\n\/\/ Propozycja nowej sk\u0142adni z wykorzystaniem funkcji\nconst result = 2\n  |> squared(^)\n  |> subtractOne(^);\n\n\/\/ A tak w nowej sk\u0142adni wygl\u0105da\u0142by RxJS\nsource$\n  |> filter((x) => x % 2 === 0)(^)\n  |> map((x) => x * x)(^)\n  |> concatMap((x) => of(x + 1, x + 2, x + 2, x + 4))(^)\n  |> ^.subscribe(console.log);<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">\/\/ prosta implementacja funkcji pipe, jak\u0105 mo\u017cecie spotka\u0107 obecnie w niekt\u00f3rych bibliotekach\nfunction pipe(initialArg, ...fns) {\n  return fns.reduce((prevValue, fn) => fn(prevValue), initialArg);\n}\n \nconst result = pipe(\n  2,\n  (x) => x ** 2,\n  (x) => x - 1,\n);\n\n\/\/ Propozycja nowej sk\u0142adni\nconst result = 2 |> ^ ** 2 |> ^ - 1;\n\n\/\/ Propozycja nowej sk\u0142adni z wykorzystaniem funkcji\nconst result = 2\n  |> squared(^)\n  |> subtractOne(^);\n\n\/\/ A tak w nowej sk\u0142adni wygl\u0105da\u0142by RxJS\nsource$\n  |> filter((x) => x % 2 === 0)(^)\n  |> map((x) => x * x)(^)\n  |> concatMap((x) => of(x + 1, x + 2, x + 2, x + 4))(^)\n  |> ^.subscribe(console.log);<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Sk\u0105d wzi\u0119\u0142y si\u0119 dyskusje wok\u00f3\u0142 tego tematu? Ot\u00f3\u017c pipeline operator mo\u017cna zaimplementowa\u0107 u\u017cywaj\u0105c jednej z dw\u00f3ch sk\u0142adni. Ta kt\u00f3ra trafi\u0142a do drugiego etapu to Hack Pipeline, natomiast wersja odrzucona przez TC3&nbsp; potocznie nazywana jest na cz\u0119\u015b\u0107 j\u0119zyka z kt\u00f3rego si\u0119 wywodzi \u200b\u200bF# Pipeline. Alternatywna sk\u0142adnia zamiast wykorzystywa\u0107 ^, niejawnie przekazuje wynik poprzedniej funkcji jako ostatni argument do kolejnej. Takie zachowanie umo\u017cliwia \u0142atwiejsz\u0105 migracj\u0119 dla bibliotek samodzielnie implementuj\u0105cych metod\u0119 pipe (jak wspomniany wcze\u015bniej RxJS) i pozwala na wykorzystanie powszechnie u\u017cywanych arrow functions.<\/p>\n","innerContent":["\n<p>Sk\u0105d wzi\u0119\u0142y si\u0119 dyskusje wok\u00f3\u0142 tego tematu? Ot\u00f3\u017c pipeline operator mo\u017cna zaimplementowa\u0107 u\u017cywaj\u0105c jednej z dw\u00f3ch sk\u0142adni. Ta kt\u00f3ra trafi\u0142a do drugiego etapu to Hack Pipeline, natomiast wersja odrzucona przez TC3&nbsp; potocznie nazywana jest na cz\u0119\u015b\u0107 j\u0119zyka z kt\u00f3rego si\u0119 wywodzi \u200b\u200bF# Pipeline. Alternatywna sk\u0142adnia zamiast wykorzystywa\u0107 ^, niejawnie przekazuje wynik poprzedniej funkcji jako ostatni argument do kolejnej. Takie zachowanie umo\u017cliwia \u0142atwiejsz\u0105 migracj\u0119 dla bibliotek samodzielnie implementuj\u0105cych metod\u0119 pipe (jak wspomniany wcze\u015bniej RxJS) i pozwala na wykorzystanie powszechnie u\u017cywanych arrow functions.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"javascript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">\/\/ Operator pipe w sk\u0142adni znanej z F#\nconst result = 2\n  |> (n) => n ** 2\n  |> (n) => n - 1;\n\nconst result = 2\n  |> squared\n  |> subtractOne\n\nsource$\n  |> filter((x) => x % 2 === 0)\n  |> map((x) => x * x)\n  |> concatMap((x) => of(x + 1, x + 2, x + 2, x + 4))\n  |> result$ => result$.subscribe(console.log);<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">\/\/ Operator pipe w sk\u0142adni znanej z F#\nconst result = 2\n  |> (n) => n ** 2\n  |> (n) => n - 1;\n\nconst result = 2\n  |> squared\n  |> subtractOne\n\nsource$\n  |> filter((x) => x % 2 === 0)\n  |> map((x) => x * x)\n  |> concatMap((x) => of(x + 1, x + 2, x + 2, x + 4))\n  |> result$ => result$.subscribe(console.log);<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Przegl\u0105daj\u0105c internetowe opinie mam wra\u017cenie, \u017ce szala opinii przechyla si\u0119 w stron\u0119 rozwi\u0105zania przyj\u0119tego przez TC39, ale zdecydowanie nie jest to trywialny temat. Je\u015bli jeste\u015bcie zainteresowani dog\u0142\u0119bn\u0105 analiz\u0105 wad i zalet poszczeg\u00f3lnych implementacji to odsy\u0142am Was do artyku\u0142u tw\u00f3rcy RxJS, kt\u00f3ry znajdziecie w \u017ar\u00f3d\u0142a (fragmenty kodu, kt\u00f3re widzicie powy\u017cej pochodz\u0105 w\u0142a\u015bnie stamt\u0105d).<\/p>\n","innerContent":["\n<p>Przegl\u0105daj\u0105c internetowe opinie mam wra\u017cenie, \u017ce szala opinii przechyla si\u0119 w stron\u0119 rozwi\u0105zania przyj\u0119tego przez TC39, ale zdecydowanie nie jest to trywialny temat. Je\u015bli jeste\u015bcie zainteresowani dog\u0142\u0119bn\u0105 analiz\u0105 wad i zalet poszczeg\u00f3lnych implementacji to odsy\u0142am Was do artyku\u0142u tw\u00f3rcy RxJS, kt\u00f3ry znajdziecie w \u017ar\u00f3d\u0142a (fragmenty kodu, kt\u00f3re widzicie powy\u017cej pochodz\u0105 w\u0142a\u015bnie stamt\u0105d).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Szczerze m\u00f3wi\u0105c obie sk\u0142adnie s\u0105 dla mnie akceptowalne - jako wielbiciel programowanie funkcyjnego chcia\u0142bym wreszcie po prostu zobaczy\u0107 pipeline operator w oficjalnej specyfikacji. No i dobrze zobaczy\u0107, \u017ce TC39 obraduje te\u017c nad czym\u015b wi\u0119cej ni\u017c kolejne metody do formatowania dat.<\/p>\n","innerContent":["\n<p>Szczerze m\u00f3wi\u0105c obie sk\u0142adnie s\u0105 dla mnie akceptowalne - jako wielbiciel programowanie funkcyjnego chcia\u0142bym wreszcie po prostu zobaczy\u0107 pipeline operator w oficjalnej specyfikacji. No i dobrze zobaczy\u0107, \u017ce TC39 obraduje te\u017c nad czym\u015b wi\u0119cej ni\u017c kolejne metody do formatowania dat.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":2339,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/surpirse.gif\" alt=\"\" class=\"wp-image-2339\"\/><figcaption>Autor Frontendowego Czwartku, kiedy dowiedzia\u0142 si\u0119, \u017ce TC39 Meeting obradowa\u0142o na temat czego\u015b ciekawego. Przysi\u0119gam, tak by\u0142o :D<\/figcaption><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/surpirse.gif\" alt=\"\" class=\"wp-image-2339\"\/><figcaption>Autor Frontendowego Czwartku, kiedy dowiedzia\u0142 si\u0119, \u017ce TC39 Meeting obradowa\u0142o na temat czego\u015b ciekawego. Przysi\u0119gam, tak by\u0142o :D<\/figcaption><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>\u0179r\u00f3d\u0142a:<\/h2>\n","innerContent":["\n<h2>\u0179r\u00f3d\u0142a:<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/benlesh.com\/posts\/tc39-pipeline-proposal-hack-vs-f-sharp\/\">https:\/\/benlesh.com\/posts\/tc39-pipeline-proposal-hack-vs-f-sharp\/<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/benlesh.com\/posts\/tc39-pipeline-proposal-hack-vs-f-sharp\/\">https:\/\/benlesh.com\/posts\/tc39-pipeline-proposal-hack-vs-f-sharp\/<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":1},"innerBlocks":[],"innerHTML":"\n<h1>2. Node 16.9.0 umo\u017cliwi korzystanie z pnpm i yarn bez instalacji<\/h1>\n","innerContent":["\n<h1>2. Node 16.9.0 umo\u017cliwi korzystanie z pnpm i yarn bez instalacji<\/h1>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kilka dni temu doczekali\u015bmy si\u0119 kolejnej wersji minor Node.js. Nie by\u0142oby w tym pewnie nic interesuj\u0105cego, gdyby nie pojawienie si\u0119 eksperymentalnego menad\u017cera menad\u017cer\u00f3w pakiet\u00f3w nazwanego Corepack. Jego zadaniem jest wykrywanie na podstawie pola \u201cpackageManager\u201d w package.json odpowiedniego mened\u017cera pakiet\u00f3w, zainstalowanie go i przekazywanie do niego komend u\u017cytkownika. Jak t\u0142umacz\u0105 tw\u00f3rcy zachowanie to ma usp\u00f3jni\u0107 menad\u017cery pakiet\u00f3w z jakich korzystaj\u0105 deweloperzy w jednym zespole i wyeliminowa\u0107 bugi wynikaj\u0105ce z drobnych r\u00f3\u017cnic mi\u0119dzy zachowaniem poszczeg\u00f3lnych narz\u0119dzi. Co ciekawe obecnie Corepack wspiera yarn i pnpm, ale nie wspiera samego npm.<\/p>\n","innerContent":["\n<p>Kilka dni temu doczekali\u015bmy si\u0119 kolejnej wersji minor Node.js. Nie by\u0142oby w tym pewnie nic interesuj\u0105cego, gdyby nie pojawienie si\u0119 eksperymentalnego menad\u017cera menad\u017cer\u00f3w pakiet\u00f3w nazwanego Corepack. Jego zadaniem jest wykrywanie na podstawie pola \u201cpackageManager\u201d w package.json odpowiedniego mened\u017cera pakiet\u00f3w, zainstalowanie go i przekazywanie do niego komend u\u017cytkownika. Jak t\u0142umacz\u0105 tw\u00f3rcy zachowanie to ma usp\u00f3jni\u0107 menad\u017cery pakiet\u00f3w z jakich korzystaj\u0105 deweloperzy w jednym zespole i wyeliminowa\u0107 bugi wynikaj\u0105ce z drobnych r\u00f3\u017cnic mi\u0119dzy zachowaniem poszczeg\u00f3lnych narz\u0119dzi. Co ciekawe obecnie Corepack wspiera yarn i pnpm, ale nie wspiera samego npm.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":2341,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/manager_1.gif\" alt=\"\" class=\"wp-image-2341\"\/><figcaption>Pakiety w npm to prawdziwa korporacja skoro menad\u017cery maj\u0105 swoich mened\u017cer\u00f3w. Pytanie tylko, czy nie posz\u0142o to o krok za daleko?<\/figcaption><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/manager_1.gif\" alt=\"\" class=\"wp-image-2341\"\/><figcaption>Pakiety w npm to prawdziwa korporacja skoro menad\u017cery maj\u0105 swoich mened\u017cer\u00f3w. Pytanie tylko, czy nie posz\u0142o to o krok za daleko?<\/figcaption><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W naszym zespole jawnie podzieleni jeste\u015bmy na u\u017cytkownik\u00f3w yarn i npm i do tej pory nie sprawi\u0142o nam to wi\u0119kszych trudno\u015bci. Ci\u0119\u017cko jednak zaprzeczy\u0107, \u017ce zamra\u017canie zale\u017cno\u015bci jest dobr\u0105 praktyk\u0105 i nikomu jeszcze nie zaszkodzi\u0142o. Szkoda tylko, \u017ce Node do tej pory nie oferuje natywnego rozwi\u0105zania do zarz\u0105dzania wersj\u0105 \u015brodowiska uruchomieniowego.&nbsp;<\/p>\n","innerContent":["\n<p>W naszym zespole jawnie podzieleni jeste\u015bmy na u\u017cytkownik\u00f3w yarn i npm i do tej pory nie sprawi\u0142o nam to wi\u0119kszych trudno\u015bci. Ci\u0119\u017cko jednak zaprzeczy\u0107, \u017ce zamra\u017canie zale\u017cno\u015bci jest dobr\u0105 praktyk\u0105 i nikomu jeszcze nie zaszkodzi\u0142o. Szkoda tylko, \u017ce Node do tej pory nie oferuje natywnego rozwi\u0105zania do zarz\u0105dzania wersj\u0105 \u015brodowiska uruchomieniowego.&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>\u0179r\u00f3d\u0142a:<\/h2>\n","innerContent":["\n<h2>\u0179r\u00f3d\u0142a:<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/nodejs.org\/en\/blog\/release\/v16.9.0\/?fbclid=IwAR3A_JmfNyP5P_vGsA-SIMM8tyNXK9I9FHcIVHZLy70mao1et8YX0HyKt4A\">https:\/\/nodejs.org\/en\/blog\/release\/v16.9.0\/?fbclid=IwAR3A_JmfNyP5P_vGsA-SIMM8tyNXK9I9FHcIVHZLy70mao1et8YX0HyKt4A<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/nodejs.org\/en\/blog\/release\/v16.9.0\/?fbclid=IwAR3A_JmfNyP5P_vGsA-SIMM8tyNXK9I9FHcIVHZLy70mao1et8YX0HyKt4A\">https:\/\/nodejs.org\/en\/blog\/release\/v16.9.0\/?fbclid=IwAR3A_JmfNyP5P_vGsA-SIMM8tyNXK9I9FHcIVHZLy70mao1et8YX0HyKt4A<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":1},"innerBlocks":[],"innerHTML":"\n<h1>3. Nowy progresywny format obraz\u00f3w od Google: JPEG XL<\/h1>\n","innerContent":["\n<h1>3. Nowy progresywny format obraz\u00f3w od Google: JPEG XL<\/h1>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jak to m\u00f3wi\u0105, tydzie\u0144 bez Data Science to tydzie\u0144 stracony! Tym razem mamy dla Was nowy format obraz\u00f3w zaproponowany przez Google.a on wykorzystywa\u0107 sztuczn\u0105 inteligencj\u0119, aby przyspieszy\u0107 \u0142adowanie zdj\u0119\u0107. Dzi\u0119ki wykorzystaniu sieci neuronowej mo\u017cliwe jest wykrycie, na kt\u00f3re cz\u0119\u015bci zdj\u0119cia w pierwszej kolejno\u015bci b\u0119dzie patrzy\u0142 u\u017cytkownik. Znalezione miejsca \u0142adowane s\u0105 od razu z du\u017cym poziomem szczeg\u00f3\u0142owo\u015bci, a pozosta\u0142a cz\u0119\u015b\u0107 do\u0142adowywane jest p\u00f3\u017aniej. Demo zaprezentowane przez Google wygl\u0105da imponuj\u0105co, ale patrz\u0105c na tempo adaptacji progresywnych obraz\u00f3w w Firefox i Safari mo\u017cemy jednak przewidywa\u0107, \u017ce JPEG XL niepr\u0119dko stanie si\u0119 powszechnie obs\u0142ugiwany (o ile kiedykolwiek do tego dojdzie).<\/p>\n","innerContent":["\n<p>Jak to m\u00f3wi\u0105, tydzie\u0144 bez Data Science to tydzie\u0144 stracony! Tym razem mamy dla Was nowy format obraz\u00f3w zaproponowany przez Google.a on wykorzystywa\u0107 sztuczn\u0105 inteligencj\u0119, aby przyspieszy\u0107 \u0142adowanie zdj\u0119\u0107. Dzi\u0119ki wykorzystaniu sieci neuronowej mo\u017cliwe jest wykrycie, na kt\u00f3re cz\u0119\u015bci zdj\u0119cia w pierwszej kolejno\u015bci b\u0119dzie patrzy\u0142 u\u017cytkownik. Znalezione miejsca \u0142adowane s\u0105 od razu z du\u017cym poziomem szczeg\u00f3\u0142owo\u015bci, a pozosta\u0142a cz\u0119\u015b\u0107 do\u0142adowywane jest p\u00f3\u017aniej. Demo zaprezentowane przez Google wygl\u0105da imponuj\u0105co, ale patrz\u0105c na tempo adaptacji progresywnych obraz\u00f3w w Firefox i Safari mo\u017cemy jednak przewidywa\u0107, \u017ce JPEG XL niepr\u0119dko stanie si\u0119 powszechnie obs\u0142ugiwany (o ile kiedykolwiek do tego dojdzie).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":2342,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/5n5hjs.jpeg\" alt=\"\" class=\"wp-image-2342\"\/><figcaption>Jak Wam si\u0119 podoba nowy zwiastun Matrixa? Czekacie czy kompletnie Was to nie obesz\u0142o?<\/figcaption><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/5n5hjs.jpeg\" alt=\"\" class=\"wp-image-2342\"\/><figcaption>Jak Wam si\u0119 podoba nowy zwiastun Matrixa? Czekacie czy kompletnie Was to nie obesz\u0142o?<\/figcaption><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>\u0179r\u00f3d\u0142a:<\/h2>\n","innerContent":["\n<h2>\u0179r\u00f3d\u0142a:<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/opensource.googleblog.com\/2021\/09\/using-saliency-in-progressive-jpeg-xl-images.html?fbclid=IwAR2cLZuH2BhXDIL2_uxwDvLtDOqMj8Myi7BrIBFpNbOK8F8Cs_-lm0-D41Y\">https:\/\/opensource.googleblog.com\/2021\/09\/using-saliency-in-progressive-jpeg-xl-images.html?fbclid=IwAR2cLZuH2BhXDIL2_uxwDvLtDOqMj8Myi7BrIBFpNbOK8F8Cs_-lm0-D41Y<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/opensource.googleblog.com\/2021\/09\/using-saliency-in-progressive-jpeg-xl-images.html?fbclid=IwAR2cLZuH2BhXDIL2_uxwDvLtDOqMj8Myi7BrIBFpNbOK8F8Cs_-lm0-D41Y\">https:\/\/opensource.googleblog.com\/2021\/09\/using-saliency-in-progressive-jpeg-xl-images.html?fbclid=IwAR2cLZuH2BhXDIL2_uxwDvLtDOqMj8Myi7BrIBFpNbOK8F8Cs_-lm0-D41Y<\/a><\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10081","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\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/comments?post=10081"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10081\/revisions"}],"predecessor-version":[{"id":10622,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10081\/revisions\/10622"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/7698"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=10081"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=10081"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=10081"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}