Привет! Меня зовут Дмитрий, я руководитель фронтенд-разработки в компании Интелси.Сегодня хочу рассказать о принципе открытости/закрытости (Open-Closed Principle) — втором из пяти принципов SOLID, сформулированных Робертом Мартином в книге Agile Software Development: Principles, Patterns, and Practices. Его суть звучит так:«Программные сущности (классы, модули, функции и т. п.) должны быть открыты для расширения, но закрыты для изменения» (Software entities (classes, modules, functions, etc.) s…
Привет, Хабр!Не раз ловил себя на том, как в код‑ревью всплывает одна и та же проблема: часть наших функций синхронные, часть асинхронные, а часть ведут себя как шрёдингеровские коты и делают вид, что синхронны, пока не дотронешься. В итоге в одном месте у нас try/catch, в другом.catch, где‑то внезапно падает исключение, а в соседнем модуле молча утекает Promise. С появлением нативного Promise.try стало проще навести порядок и избавиться от разнобоя. Фича прошла процесс стандартизации в TC39 и …
Когда маркетолог говорит «давайте отслеживать всё», разработчик обычно слышит «давайте усложним жизнь прямо сегодня». И, как ни странно, оба правы. Потому что базовых целей в Яндекс.Метрике вроде «клик по кнопке» или «отправка формы» хватает ровно до того момента, пока бюджет на рекламу не становится больше бюджета на кофе в офисе. В прошлой статье я рассмотрел самый простой вариант кастомизации целей, когда мы начинаем собирать не просто факт отправки, например, формы, но и смысл, с какими до…
Привет, я Сергей Маркизов, разработчик диджитал-продакшна Далее. В наших проектах часто использую Drizzle — современную, типобезопасную ORM для TypeScript, которая не усложняет базовую задачу: читать и писать данные. В этой статье расскажу, чем библиотека отличается от других и как с ней работать.Базы данных являются основным средством обеспечения персистентности современных приложений. Для работы с ними зачастую используются различные ORM-решения, ведь они позволяют избавиться от необходимости…
Сгенерировано в DALL-E 3Несмотря на то, что название статьи, скорее, кликбейтное, речь в статье всё же пойдет про способы обхода существующих механизмов защиты от парсинга, которые используют современные сайты.Написать эту статью, примерно с тем же содержанием (за исключением некоторых особенностей, которые я привнес к теме вопроса относительно недавно), я мог еще несколько лет назад — всё же это довольно давняя история, но лишь в последнее время разработчики всё чаще стали прибегать к некоторо…
GreenSock Animation PlatformGSAP – одна из самых популярных JavaScript-библиотек для создания анимаций. Её используют как новички, так и опытные front-end-разработчики. В этой статье я хочу рассмотреть несколько примеров ее применения – от самых простых до менее очевидных.Работая над сервисом для анимации логотипов, я выбрал GSAP (GreenSock Animation Platform), потому что эта библиотека позволяет создавать анимации практически любой сложности. Причём речь идёт не только об изменении CSS-свойств…
В двух словах: интернационализация — это не только перевод текста. Она включает в себя форматирование дат, правильное образование множественного числа, сортировку имен и многое другое с учетом конкретных локалей. Вместо тяжелых сторонних библиотек современный JavaScript предлагает Intl API — мощный встроенный инструмент для работы с i18n. Еще одно напоминание о том, что веб действительно глобален.Существует распространенное заблуждение, что интернационализация (i18n) сводится лишь к переводу ин…
Просто хочу строить свой DOM из своих кирпичей.С преферансом и поэтессами...И, если уж на то пошло, может быть что‑то типа: «раз пошла такая пъянка...»Думаю некторые понимают, что так можно, но — повторение мать учения, и, то есть, никто не мешает и не мешал делать не так, как все привыкли, не брать чей‑то готовый код, и не оставаться в рамках ограничений, наложенных кем‑то на что‑то «просто потому что».Что мне это даст:мне больше не нужны подписки, могу просто знать, что какое‑то свойство изме…
В этой серии статей мы отправимся в путешествие по миру пользовательских хуков React, открывая для себя их огромный потенциал для улучшения ваших проектов разработки. Сегодня мы сосредоточимся на хуке "useStorage", одном из многих тщательно разработанных хуков, доступных в коллекции пользовательских хуков React.Github: https://github.com/sergeyleschev/react-custom-hooks import { useCallback, useState, useEffect } from "react" export function useLocalStorage(key, defaultValue)…