Logo
    Search

    Potluck - Next vs Gatsby × Headless CMS × Vue.js × Is Ruby on Rails still good? × More!

    enFebruary 26, 2020

    Podcast Summary

    • Building a monthly subscription systemUse Stripe or Braintree for payments, add a database component, and set up webhooks for real-time updates.

      To build a system for monthly subscription content using either Next.js or Gatsby, you need a payment processor that handles recurring payments or a full service like Curly. Stripe or Braintree can be used for payments, and a database component is necessary to keep user records and access roles up to date. The payment processor sends webhooks with messages about successful, failed, or canceled payments, allowing your server and database to stay updated without the need for timers or manual checks. As for the favorite new tab page question, one of the hosts prefers an empty "about:blank" page.

    • Personalizing web browsing for productivityCustomize your browser and coding tools to minimize distractions and optimize efficiency. Use consistent methodologies for writing efficient CSS code.

      Personalizing your web browsing experience to minimize distractions and optimize efficiency is essential for productivity. The speaker prefers a blank new tab in Firefox, with all unnecessary features hidden or disabled. Similarly, when developing React or Next JS applications, the choice between CSS, SCSS, or styled components is subjective and depends on personal preference and established systems. The key is to follow a consistent methodology for writing efficient, updatable, and extendable CSS code. The speaker personally uses styled components due to its ease of use but emphasizes that any method can yield high-quality CSS.

    • Balancing custom components and descendant selectorsCreate components for specific styles, use descendant selectors for child elements. Refactor components for reusability. Use CSS prop for inline CSS in styled components. Consider Lit HTML for efficient HTML templating without a virtual DOM.

      When it comes to styling components, it's important to find a balance between creating new components and using descendant selectors. The speaker suggests creating a component for a specific styled element, and then using descendant selectors to style its child elements. However, if the need arises to reuse a component, such as an unordered list, it can be refactored out into its own component. The speaker also mentions using the CSS prop in styled components for inline CSS, finding it particularly useful for prototyping. Regarding Lit HTML, it's a library that offers a template-like solution for creating HTML strings with embedded expressions, similar to JSX. It provides a way to dynamically update HTML strings with variables, making it more efficient than traditional vanilla JavaScript templating methods. Unlike React, Lit HTML does not use a virtual DOM, but it's still expressive and efficient. It's a worthwhile consideration for those who prefer a more lightweight approach than a full-fledged framework like React.

    • Template literals for efficient HTML generationTemplate literals offer a lightweight and extendable way to put data into HTML without the need for Virtual DOM or React, allowing for efficient updates when data changes. Use Lit HTML for JSX in Vue or as a templating alternative to Handlebars.

      The template literals discussed in the conversation offer a lightweight and extendable way to put data into HTML, without the need for Virtual DOM (VDOM) or the React library. This method keeps the actual DOM and a similar tree structure in memory, allowing for efficient updates when data changes. The speakers also mentioned Lit HTML, a library that allows the use of JSX in Vue and can be used as a replacement for templating languages like Handlebars. Regarding the Create React App (CRA) approach, it's generally recommended to customize the config only when necessary, such as for server-side rendering, static generation, or advanced Babel configurations. Most projects can be built using CRA without the need to eject, as it offers a good balance of convenience and flexibility. Reasons to eject might include the need for SaaS support or the use of new features not yet widely adopted by browsers. Overall, the conversation emphasized the importance of understanding the trade-offs and choosing the right tool for the specific project requirements.

    • Using Next.js or Gatsby for React web developmentConsider using Next.js or Gatsby for React web development instead of ejecting from Create React App for easier extension and customization.

      When it comes to using React for web development, consider using frameworks like Next.js or Gatsby that offer more "batteries included" features instead of ejecting from Create React App. The speaker emphasizes that the process of ejecting and managing the configuration files can be overwhelming and time-consuming. Instead, these frameworks allow for easier extension and customization. Another topic discussed was the length of the intro segments on the podcast. A listener, John, suggested that they should all be uniform in length due to the introduction of intro skipping on Overcast. The speakers entertained the idea but also considered incorporating their life stories into the intros as a unique selling point. Lastly, Daniel Bro brought up the topic of using Gatsby for web applications, with Kyle Matthews being a proponent of its use. Despite discussing Gatsby on several occasions, the speakers expressed that they personally prefer Next.js. They acknowledged that both frameworks have their merits and that the choice between them ultimately depends on the specific needs of the project.

    • Static vs Server-side Rendering with Gatsby and Next.jsGatsby is statically generated by default, best for minimal user interaction or static content, while Next.js is server-side rendered by default, ideal for dynamic content, user accounts, or server-side logic, but both can handle dynamic content with proper configuration.

      Gatsby and Next.js are two popular frameworks for building websites, each with its strengths. By default, Gatsby is statically generated, meaning all content is generated before deployment and then rehydrated as a React application on the client. This approach works best for websites with minimal user interaction or dynamic content. In contrast, Next.js is server-side rendered by default, generating web pages on the fly when a user requests them. This approach is ideal for websites with user accounts, dynamic content, or server-side logic. However, both frameworks offer flexibility to handle dynamic content, and the choice between them depends on the specific requirements of the project.

    • Comparing Gatsby, Nuxt.js, and Gridsome for Vue.js projectsFor Vue.js projects, Gridsome offers similar benefits to Gatsby but may be a more attractive option due to faster build times and ease of use. Nuxt.js is another viable alternative.

      While Gatsby is a powerful static site generator with impressive features, it may not be worth the learning curve for small to medium projects that use a headless CMS and are built with Vue.js, especially when alternatives like Nuxt.js and Gridsome offer similar benefits. The speakers discussed the potential of Gatsby implementing a server-side solution to improve build times, but for now, the image optimization and ease of use offered by Gridsome make it a more attractive option for Vue.js developers. Additionally, many Gatsby plugins are just wrappered webpack plugins, making it relatively easy to port them over to other stacks. The speakers also touched on the debate over CSS preprocessors like Sass or Less, acknowledging that they are not shipped with the final product, but rather used for development efficiency. They agreed that the advanced features of modern CSS may make preprocessors less necessary, but ultimately, the decision depends on individual developer preferences and project requirements.

    • Experience of using Next.js and Meteor side by sideDespite the benefits of Next.js, some developers may prefer Meteor's routing structure and standard server setup, while the future of Meteor remains uncertain

      While modern web technologies like Next.js and CSS-in-JS frameworks offer many benefits, they may not always be the best fit for every project or developer preference. The speaker, who had previously used Meteor but switched to Next.js, shared his experience of using both platforms side by side. He appreciated Next.js for its features like API routes and the ease of transpiling CSS, but he missed the nesting routing structure and the standard server setup he was used to in Meteor. He also mentioned that the investment in Meteor seemed to be decreasing, which led him to consider a switch. However, the recent acquisition of Meteor by a new company has given him hope that it might regain its momentum. The speaker also mentioned his preference for CSS variables and the use of plugins like postcss-preset-env to transpile CSS for older browsers. Overall, he sees these technologies not as completely different ways of writing CSS or building applications, but as tools that can make the future CSS and web development more efficient and easier.

    • Comparing Next.js and React Router for routingSpeaker found Next.js for routing in larger apps less organized and more complex than React Router due to full page re-renders. Ultimately, stayed with Meteor due to project context and advancements.

      The speaker found working with Next.js for routing in larger applications to be less organized and more complex compared to using React Router for deeply nested routes. This was due to the need for wrapping components in Next.js, resulting in a full page re-render every time a new page was visited. While there were no major benefits seen between the two, the speaker ultimately decided to stay with Meteor due to its advancements and the sunk cost of the existing application. It's important to consider the specific needs and context of your project when choosing a routing solution.

    • Focus on learning and growth, not specific toolsStay adaptable and open to new tools and technologies for continued growth and success in the tech industry

      While tech stacks may change and some may seem less popular than others, it's important for developers to not place too much weight on the specific tools they're using and instead focus on the learning and growth opportunities they provide. The Freelancing and Beyond bundle, with its resources and tools, can help those looking to go freelance and expand their skillset. As for Ruby and Ruby on Rails, they remain relevant and modern platforms used by many popular websites, and learning them can provide valuable experience and opportunities for developers. The tech industry is constantly evolving, and staying adaptable and open to new tools and technologies is crucial for continued growth and success.

    • Managing Financial Data and Content with TechnologyPersonal Capital's user-friendly solution impresses speaker, Angular and Java Spring power its technology, CMS and Headless CMSs simplify form creation, data management, and API building, saving time and resources.

      Having a clear understanding of your financial situation and being able to track your investments over time is important. The speaker shared his experience of developing a scraper to download CSV data from his bank, but wished for a more user-friendly solution like Personal Capital. He was impressed by the technology behind Personal Capital, which uses Angular and Java Spring, and noted its responsiveness and ease of use. He also discussed the benefits of Content Management Systems (CMS) and Headless CMSs, which can simplify the process of creating forms, managing data, and building APIs, allowing developers to focus on other aspects of their projects. The speaker emphasized the time-saving benefits of using these tools, and provided the example of Tim Hortons and Burger King using a headless CMS to manage their data. Overall, the discussion highlighted the importance of having the right tools to effectively manage financial data and content.

    • Decoupling CMS for efficient data managementDecoupling CMS allows businesses to manage and distribute data across multiple platforms, with Svelte and React being strong options for frontend development.

      Decoupling content management systems (CMS) is important for businesses to efficiently manage and distribute data across various platforms, including websites, mobile apps, and in-store kiosks. Regarding the use of Svelte versus React, while React has industry momentum and abundant resources, Svelte is also a fantastic platform with its own strengths, such as smaller code bases and ease of use. Freelancing with a colleague from your day job can be valid, but it depends on the agency's size, culture, and expectations. If it's acceptable within the organization, it can be a beneficial arrangement. However, it's crucial to ensure that all parties involved are aware of the arrangement and that there are no conflicts of interest or legal issues.

    • Comparing Happy and Express for large-scale Node projectsBoth Happy and Express are suitable for large-scale Node projects, with Happy offering easier REST API building and a strong community, while Express may require more middleware development for certain features. Effective time management, clear communication, and understanding team roles are crucial in agency life.

      When it comes to choosing a Node framework for a large-scale project, both Happy and Express are viable options. Happy, which emerged around the same time as Koa, offers easier REST API building and a strong development community, as indicated by its active GitHub presence. While Express has been around longer and is more established, it may require more middleware development for certain features. In the agency life, developers should prioritize managing their time effectively, setting clear boundaries with project managers and clients, and understanding their role within the team. Agencies with smaller teams may require developers to take on additional responsibilities, such as project management and client communication, while larger agencies may have dedicated project managers and limit developer interaction with clients.

    • Effective communication in the agency worldImprove communication skills through various channels, focus on email, calendars, and to-do lists, and check out Matt Stauffer's blog post for video/audio quality tips and Michael Pollan's audiobook 'Caffeine' for historical insights.

      Effective communication is crucial in the agency world. This was emphasized during a discussion about the importance of understanding client needs and being able to articulate technical choices. The speaker shared his experience of improving his communication skills, which in turn helped him better serve clients and create more effective back-end CMS solutions. He recommended investing time in becoming a better communicator overall, suggesting focusing on email, calendars, to-do lists, and other channels. Additionally, the speaker shared some "sick picks," including a blog post by Matt Stauffer about improving video and audio quality for remote work or live streaming. The post covers various budgets and equipment options, and the speaker shared his personal experience of using an old camera for high-quality video. Lastly, he recommended the audiobook "Caffeine: How Caffeine Created the Modern World" by Michael Pollan, praising its engaging storytelling and historical insights. The book explores the history of caffeine and its impact on human civilization without judgment, making it a worthwhile listen for history buffs or those curious about the substance.

    • Learn Practical JavaScript Animations for React Applications with Framer MotionIntermediate JavaScript developers can enhance their skills by creating practical animations for React applications using Framer Motion in the upcoming LevelUpTutorials.com course, releasing February 29, 2024. Save 25% by becoming a LevelUp Pro.

      The speaker is offering an intermediate-level JavaScript course on Framer Motion through LevelUpTutorials.com, focusing on practical animations for React applications. The course covers various topics and then demonstrates their implementation through projects, such as modal accordions and slide-in menus. The speaker emphasizes the importance of not just learning skills, but building practical animations for real applications. For those interested, they can sign up to become a LevelUp Pro and save 25% if they sign up for the year. The course is set to release on February 29, 2024. If you're an intermediate JavaScript developer looking to improve your skills and create practical animations for your React applications, consider checking out the course at leveluptutorials.com/forward/pro. The speaker also mentioned a coupon code for a discount on beginner JavaScript courses, but the details were not provided in the discussion. Overall, the speaker's message highlights the importance of learning practical skills and applying them to real-world projects.

    Recent Episodes from Syntax - Tasty Web Development Treats

    790: State of JS 2023 Reactions

    790: State of JS 2023 Reactions

    Scott and Wes dive into the 2023 State of JavaScript survey, breaking down the latest trends and pain points in front-end frameworks, build tools, and JavaScript runtimes. Tune in for their hot takes and insights on what’s shaping the JavaScript landscape this year!

    Show Notes

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    789: Do More With AI - LLMs With Big Token Counts

    789: Do More With AI - LLMs With Big Token Counts

    Join Scott and CJ as they dive into the fascinating world of AI, exploring topics from LLM token sizes and context windows to understanding input length. They discuss practical use cases and share insights on how web developers can leverage larger token counts to maximize the potential of AI and LLMs.

    Show Notes

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    CJ: X Instagram YouTube TwitchTV

    Randy: X Instagram YouTube Threads

    788: Supabase: Open Source Firebase for Fullstack JS Apps

    788: Supabase: Open Source Firebase for Fullstack JS Apps

    Scott and CJ chat with Paul Copplestone, CEO and co-founder of Supabase, about the journey of building an open source alternative to Firebase. Learn about the tech stack, the story behind their excellent documentation, and how Supabase balances business goals with open-source values.

    Show Notes

    • 00:00 Welcome to Syntax!
    • 00:30 Who is Paul Copplestone?
    • 01:17 Why ‘Supa’ and not ‘Super’?
    • 02:26 How did Supabase start?
    • 08:42 Simplicity in design.
    • 10:32 How do you take Supabase one step beyond the competition?
    • 12:35 How do you decide which libraries are officially supported vs community maintained?
      • 15:17 You don’t need a client library!
    • 16:48 Edge functions for server-side functionality.
    • 18:51 The genesis of pgvector.
    • 20:59 The product strategy.
    • 22:25 What’s the story behind Supabase’s awesome docs?
    • 25:26 The tech behind Supabase.
    • 35:46 How do you balance business goals with open source?
    • 42:01 What’s next for Supabase?
    • 44:15 Supabase’s GA + new features.
    • 48:24 Who runs the X account?
    • 50:39 Sick Picks + Shameless Plugs.

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    CJ: X Instagram YouTube TwitchTV

    Randy: X Instagram YouTube Threads

    787: You Should Try Vue.js

    787: You Should Try Vue.js

    Scott and CJ dive deep into the world of Vue.js, exploring what makes this frontend framework unique and why it stands out from React and Svelte. CJ gives a comprehensive tour, covering everything from getting started to advanced features like state management and Vue’s built-in styles.

    Show Notes

    Vue.js: The Documentary.

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    786: What Open Source license should you use?

    786: What Open Source license should you use?

    Scott and CJ dive into the world of open source, breaking down its meaning, benefits, and the various types of licenses you’ll encounter. From permissive licenses like MIT and Apache 2.0 to copy-left licenses such as GNU GPLv3, they’ll help you choose and apply the right license for your project.

    Show Notes

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    785: What’s Next for NextJS with Tim Neutkens

    785: What’s Next for NextJS with Tim Neutkens

    Scott and Wes dive into the world of Next.js with special guest Tim Neutkens from Vercel. They explore the latest updates, including the React Compiler and React Server Components, discussing their impact on developer workflows and the future of Next.js development.

    Show Notes

    • 00:00 Welcome to Syntax!
    • 00:30 What does the React Compiler do?
    • 05:04 Will React Compiler help with managing Context?
    • 06:39 What happens if you’re not using a React Compiler?
    • 09:30 Will this work on any NextJS version?
    • 12:18 What are React Server Components?
    • 16:28 Shipping all the data inside an encapsulated component.
    • 20:17 Clearing up the frustrations around retrofitting server components.
    • 23:13 Handing migration.
    • 28:30 Is this just a fetch request with props?
    • 36:41 How closely are the NextJS and React teams working?
    • 41:53 Will we ever get Async Client Components?
    • 43:52 Async Local Storage API.
    • 45:31 Turbopack.
    • 57:51 Sick Picks & Shameless Plugs.

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    784: Logging × Blogging × Testing × Freelancing

    784: Logging × Blogging × Testing × Freelancing

    In this Potluck episode, Scott and Wes tackle listener questions on modern blogging, website environmental impact, and using LangChain with LLMs. They also cover CSS hyphens, unit vs. integration testing, and balancing web development with new parenthood.

    Show Notes

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott: X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    783: How We Built a Netflix Style “Save for Offline” Feature Into Syntax

    783: How We Built a Netflix Style “Save for Offline” Feature Into Syntax

    Scott and Wes dive into the world of browser caching for audio files, exploring the File System API and the Cache API. They discuss size restrictions across different browsers, how tools like Riverside.fm leverage IndexedDB, and walk through code examples for creating, retrieving, and managing cached audio data.

    Show Notes

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott:X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    782: The Developer’s Guide To Fonts with Stephen Nixon

    782: The Developer’s Guide To Fonts with Stephen Nixon

    Scott and CJ are joined by Stephen Nixon of ArrowType to delve into the world of fonts and type for developers. They explore the intricacies of font creation, the utility of variable fonts, and offer tips for making visually appealing typography on the web.

    Show Notes

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott:X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    781: Potluck - The Value of TypeScript × Vue vs Svelte × Leetcode

    781: Potluck - The Value of TypeScript × Vue vs Svelte × Leetcode

    In this potluck episode of Syntax, Scott and CJ serve up a variety of community questions, from the nuances of beginner vs. advanced TypeScript to the pros and cons of SvelteKit. They also discuss falling out of love with React, shipping private packages via NPM, and the eternal struggle of always starting but never finishing projects.

    Show Notes

    Sick Picks

    Shameless Plugs

    Hit us up on Socials!

    Syntax: X Instagram Tiktok LinkedIn Threads

    Wes: X Instagram Tiktok LinkedIn Threads

    Scott:X Instagram Tiktok LinkedIn Threads

    Randy: X Instagram YouTube Threads

    Related Episodes

    Выпуск №43: Чем хуже код, тем лучше программисты (в Aviasales)

    Выпуск №43: Чем хуже код, тем лучше программисты (в Aviasales)
    В гостях Игорь Камышев Favor Progress Over Pride in Open Source https://twitter.com/kentcdodds/status/1298251813188063233 https://kentcdodds.com/blog/favor-progress-over-pride-in-open-source Maybe we could tone down the JavaScript https://eev.ee/blog/2016/03/06/maybe-we-could-tone-down-the-javascript/ A new npm is coming https://dev.to/cloudx/a-new-npm-is-coming-5heh Вышел Yarn 2.2 https://dev.to/arcanis/yarn-2-2-dedupe-faster-lighter-ha5 Understanding Load Events on the Web https://whistlr.info/2020/understanding-load/ How to Use AVIF: The New Next-Gen Image Compression Format https://reachlightspeed.com/blog/using-the-new-high-performance-avif-image-format-on-the-web-today/ Подкаст гостя https://anchor.fm/igorkamyshev

    Выпуск №9 - Как писать хороший код и CSS selectors level 4

    Выпуск №9 - Как писать хороший код и CSS selectors level 4
    5 Tips to Write Better Conditionals in JavaScript: https://scotch.io/bar-talk/5-tips-to-write-better-conditionals-in-javascript CSS selectors level 4 https://blog.logrocket.com/css-selectors-level-4-b5da36bcd54c Математические функции в CSS https://t.me/defront/37 Измерение использованного CSS и JS https://itnext.io/hunting-for-unused-css-and-javascript-57e8d9bc2a67 Effective Mental Models for Code and Systems: https://medium.com/@copyconstruct/effective-mental-models-for-code-and-systems-7c55918f1b3e

    Выпуск №39: Привет, Svelte! Пока, moment.js!

    Выпуск №39: Привет, Svelte! Пока, moment.js!
    написал виджет на Свелт и доволен https://habr.com/ru/company/citymobil/blog/504270/ TS in Svelte https://svelte.dev/blog/svelte-and-typescript Новый пропозал про правильную дату https://tc39.es/proposal-temporal/docs/cookbook.html Добавляем https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat как и что подсвечивать https://buttondown.email/hillelwayne/archive/syntax-highlighting-is-a-waste-of-an-information/ Apple declined to implement 16 Web APIs in Safari due to privacy concerns https://css-tricks.com/apple-declined-to-implement-16-web-apis-in-safari-due-to-privacy-concerns/ Displaying the Current Step with CSS Counters https://css-tricks.com/displaying-the-current-step-with-css-counters/ Пики: Порядок отрисовки https://abandonedwig.info/blog/2020/07/03/css-painting-order.html Introduction to Node.js https://nodejs.dev/learn ШРИ 2019-2020 https://www.youtube.com/playlist?list=PLKaafC45L_SRoYnuEW5cgqHN-kpSTVfMs Хак чтобы сделать любой HTML в MD (например в ридми гитахаба) https://medium.com/@omrilotan/rich-html-in-github-readme-bfb3de791441

    Выпуск №20 в гостях Андрей Ситник - Рождение суперзлодея, цензура и почему митапы лучше конференций

    Выпуск №20 в гостях Андрей Ситник - Рождение суперзлодея, цензура и почему митапы лучше конференций
    В гостях Андрей Ситник https://sitnik.ru/en/ Поговорили про смерть фронтенда (как без этого), цензуру, цифровой шабат, митапы, конференции и будущее.

    Выпуск №4 - тест на знание CSS, ES2018 и сборка мусора

    Выпуск №4 - тест на знание CSS, ES2018 и сборка мусора
    В гостях Александр @GamePad64 https://twitter.com/gamepad64 Как хорошо вы знаете css layout? https://css-tricks.com/how-well-do-you-know-css-layout/ Новое в ES2018 https://css-tricks.com/new-es2018-features-every-javascript-developer-should-know/ Сборка мусора: статья https://habr.com/ru/company/oleg-bunin/blog/433318/ и доклад https://www.youtube.com/watch?v=33n1RTq_o64