fosstodon.org is one of the many independent Mastodon servers you can use to participate in the fediverse.
Fosstodon is an invite only Mastodon instance that is open to those who are interested in technology; particularly free & open source software. If you wish to join, contact us for an invite.

Administered by:

Server stats:

8.6K
active users

#webразработка

1 post1 participant0 posts today
Habr<p>Единый код валидаторов на фронте и бэке (PHP + FFI + Go + JS)</p><p>Бывает полезно проводить валидацию данных из формы ввода и на фронте и на бэке, например чтобы не гонять лишний запрос с заведомо "плохими" данными. Отсюда появляется задача написания двух одинаковых валидаторов для фронта и бэка. Если фронт и бэк написан на одном языке (привет js+node), то мы можем напрямую использовать один код валидатора и там и там. В остальных случаях (js+php, java, python, go, dotnet) есть проблема. Во-первых придётся два раза писать примерно одно и то же на двух языках, во-вторых нужно убедиться, что написанное работает одинаково. Особенно печальны случаи, когда фронт ошибочно зарезает данные, валидные с точки зрения бэка и логики приложения.</p><p><a href="https://habr.com/ru/articles/941028/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/941028/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/php" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>php</span></a> <a href="https://zhub.link/tags/javascript" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>javascript</span></a> <a href="https://zhub.link/tags/golang" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>golang</span></a> <a href="https://zhub.link/tags/%D0%B2%D0%B0%D0%BB%D0%B8%D0%B4%D0%B0%D1%86%D0%B8%D1%8F" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>валидация</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a> <a href="https://zhub.link/tags/ffi" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ffi</span></a></p>
Habr<p>ZERO-APPS: Платформа No-Code на Яндекс Облаке. Обзор технологий</p><p>С начала 2020-х начался бурный рост low-code/no-code платформ — технологий, не требующих при разработке написания программного кода. Она опирается на визуальные интерфейсы, конструкторы и готовые модули, которые собираются как конструктор из блоков. Цель платформы zero-apps — доступ к созданию цифровых решений, позволив бизнес-аналитикам, менеджерам проектов, маркетологам и специалистам по продукту воплощать идеи в работающие прототипы и полноценные web-приложения без глубокой технической подготовки на базе Яндекс Облака.</p><p><a href="https://habr.com/ru/articles/937032/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/937032/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/nocode_platform" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>nocode_platform</span></a> <a href="https://zhub.link/tags/%D1%8F%D0%BD%D0%B4%D0%B5%D0%BA%D1%81_%D0%BE%D0%B1%D0%BB%D0%B0%D0%BA%D0%BE" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>яндекс_облако</span></a> <a href="https://zhub.link/tags/zerocode" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>zerocode</span></a> <a href="https://zhub.link/tags/%D0%B1%D0%B5%D1%81%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>бессерверная_архитектура</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a> <a href="https://zhub.link/tags/web%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webпрограммирование</span></a> <a href="https://zhub.link/tags/ydb" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ydb</span></a> <a href="https://zhub.link/tags/serverless" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>serverless</span></a> <a href="https://zhub.link/tags/yandexcloud" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>yandexcloud</span></a></p>
Habr<p>Структуры данных для frontend-разработчиков с реальными примерами</p><p>В мире frontend есть проблема: многие разработчики плохо ориентируются в структурах данных и не умеют их грамотно применять, чтобы получать эффективные и производительные решения своих задач. Мы, Тимофей Соломенников и Руслан Мирзоев, разработчики онлайн-кинотеатра PREMIER, хотим поделиться своим опытом и на реальных примерах показать, что даёт правильное использование структур данных. В этой статье вы найдете разбор нескольких структур данных, которые мы считаем наиболее важными и которые чаще всего пригождаются. Описание их преимуществ, особенностей и демонстрацию применения. Для всех рассматриваемых в статье структур данных мы подготовили реальные примеры и выложили их исходный код — так, нам кажется, польза и особенности будут гораздо более наглядными. Таким образом этот материал носит не только справочный характер, он поможет «пощупать» структуры на практике и, надеемся, увидеть потенциал применения в вашей ежедневной работе.</p><p><a href="https://habr.com/ru/companies/habr_rutube/articles/934130/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/habr_rut</span><span class="invisible">ube/articles/934130/</span></a></p><p><a href="https://zhub.link/tags/%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>структуры_данных</span></a> <a href="https://zhub.link/tags/frontend" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>frontend</span></a> <a href="https://zhub.link/tags/%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>алгоритмы</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a> <a href="https://zhub.link/tags/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C_javascript" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>производительность_javascript</span></a> <a href="https://zhub.link/tags/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_javascript" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>оптимизация_javascript</span></a> <a href="https://zhub.link/tags/%D0%B2%D0%B5%D0%B1%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>вебразработка</span></a></p>
Habr<p>Как я полюбил LESS, избавился от копипасты в CSS-коде, сделал его безопаснее, а разметку семантической (часть 2)</p><p>В первой части я рассказывал об основах LESS: переменных, миксинах, и некоторых приёмах. А сегодня мы поговорим о вещах, оставшихся в прошлый раз нераскрытыми...</p><p><a href="https://habr.com/ru/companies/timeweb/articles/930900/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/timeweb/</span><span class="invisible">articles/930900/</span></a></p><p><a href="https://zhub.link/tags/css" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>css</span></a> <a href="https://zhub.link/tags/less" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>less</span></a> <a href="https://zhub.link/tags/%D0%B2%D0%B5%D1%80%D1%81%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>верстка</span></a> <a href="https://zhub.link/tags/ui" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ui</span></a> <a href="https://zhub.link/tags/ux" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ux</span></a> <a href="https://zhub.link/tags/%D0%BF%D1%80%D0%B5%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D1%8B" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>препроцессоры</span></a> <a href="https://zhub.link/tags/javascript" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>javascript</span></a> <a href="https://zhub.link/tags/%D0%B2%D0%B5%D0%B1%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>вебдизайн</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a> <a href="https://zhub.link/tags/timeweb_%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>timeweb_статьи</span></a></p>
Habr<p>[Перевод] React Custom Hook: useMediaQuery</p><p>Одним из ключевых преимуществ этого пользовательского хука является его простота и возможность повторного использования. Всего с помощью нескольких строк кода вы можете без особых усилий реализовать адаптивное поведение во всем вашем приложении. Независимо от того, требуется ли вам условный рендеринг компонентов, применение определенных стилей или запуск различных функций в зависимости от размера экрана, useMediaQuery поможет вам в этом.</p><p><a href="https://habr.com/ru/articles/934402/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/934402/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/website_development" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>website_development</span></a> <a href="https://zhub.link/tags/webdev" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webdev</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a> <a href="https://zhub.link/tags/javascript" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>javascript</span></a> <a href="https://zhub.link/tags/react" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>react</span></a> <a href="https://zhub.link/tags/reactjs" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>reactjs</span></a> <a href="https://zhub.link/tags/reactjs" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>reactjs</span></a> <a href="https://zhub.link/tags/react_hooks" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>react_hooks</span></a> <a href="https://zhub.link/tags/frontend" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>frontend</span></a> <a href="https://zhub.link/tags/frontend" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>frontend</span></a></p>
Habr<p>Обратный звонок с сайта: соединяем пользователя с компанией автоматически через Callback API</p><p>Привет, Хабр. Это Екатерина Саяпина, менеджер продукта в МТС Exolve. Сегодня покажу, как реализовать анонимный обратный звонок с сайта через Callback API — ни клиент, ни менеджер не видят номера друг друга, соединение идёт через виртуальный номер. Всё на Django, просто и надёжно.</p><p><a href="https://habr.com/ru/companies/exolve/articles/931446/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/exolve/a</span><span class="invisible">rticles/931446/</span></a></p><p><a href="https://zhub.link/tags/callback_api" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>callback_api</span></a> <a href="https://zhub.link/tags/telecom_api" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>telecom_api</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a> <a href="https://zhub.link/tags/%D0%B2%D0%B5%D0%B1%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>вебразработка</span></a> <a href="https://zhub.link/tags/%D0%B2%D0%B5%D0%B1%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%B8_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>вебразработка_и_программирование</span></a> <a href="https://zhub.link/tags/mts_exolve" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>mts_exolve</span></a> <a href="https://zhub.link/tags/exolve" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>exolve</span></a> <a href="https://zhub.link/tags/api" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>api</span></a> <a href="https://zhub.link/tags/%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D0%B9_%D0%B7%D0%B2%D0%BE%D0%BD%D0%BE%D0%BA" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>обратный_звонок</span></a> <a href="https://zhub.link/tags/%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D0%B9_%D0%B7%D0%B2%D0%BE%D0%BD%D0%BE%D0%BA_%D1%81_%D1%81%D0%B0%D0%B9%D1%82%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>обратный_звонок_с_сайта</span></a></p>
Habr<p>Как мы сделали «ssyoutube для ChatGPT» и что из этого вышло</p><p>Потребность поделиться диалогом из ChatGPT рано или поздно возникает. Однако нативного экспорта в удобный формат вроде PDF или Markdown платформа не предлагает. Копипаст — плохое решение: таблицы разваливаются, форматирование кода съезжает, а изображения просто пропадают. Мы решили эту задачу для себя, написав собственный конвертер. Оказалось, что он полезен не только нам. Так появился pdfchatgpt.com . Принцип простой: копируешь share-ссылку и диалога с ChatGPT, добавляешь pdf в начало ссылки и получаешь готовый файл. Также можно перейти на pdfchatgpt.com и просто вставить ссылку на диалог. В этой статье — технический разбор нашего решения: от простого скрипта с puppeteer до асинхронной системы с очередями. Делимся опытом для тех, кто решает схожие задачи.</p><p><a href="https://habr.com/ru/articles/927510/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/927510/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/chatgpt" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>chatgpt</span></a> <a href="https://zhub.link/tags/pdf" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>pdf</span></a> <a href="https://zhub.link/tags/markdown" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>markdown</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a> <a href="https://zhub.link/tags/export" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>export</span></a> <a href="https://zhub.link/tags/converter" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>converter</span></a></p>
Habr<p>Интерактивная карта Республики Коми с отображением социально-экономических показателей</p><p>Делюсь опытом как я сделал интерактивную карту Республики Коми: от QGIS и D3.js до графиков и API Wikidata. Карта визуализирует социально‑экономические показатели районов и населённых пунктов, поддерживает масштабирование, позволяет переключать слои, выбирать тёмную и светлую темы, а также получать справочную информацию об объектах.</p><p><a href="https://habr.com/ru/articles/926466/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/926466/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/d3js" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>d3js</span></a> <a href="https://zhub.link/tags/frontend%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>frontendразработка</span></a> <a href="https://zhub.link/tags/%D0%B3%D0%B8%D1%81" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>гис</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a> <a href="https://zhub.link/tags/%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%B0%D1%8F_%D0%BA%D0%B0%D1%80%D1%82%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>интерактивная_карта</span></a> <a href="https://zhub.link/tags/%D0%B2%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>визуализация_данных</span></a> <a href="https://zhub.link/tags/chartsjs" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>chartsjs</span></a> <a href="https://zhub.link/tags/wikidata" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>wikidata</span></a> <a href="https://zhub.link/tags/%D1%80%D0%B5%D1%81%D0%BF%D1%83%D0%B1%D0%BB%D0%B8%D0%BA%D0%B0_%D0%BA%D0%BE%D0%BC%D0%B8" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>республика_коми</span></a></p>
Habr<p>Сравнение форматов PNG: от первой до третьей редакции</p><p>Недавно опубликованная третья редакция спецификации Portable Network Graphics (PNG) 2025 года, разработанная World Wide Web Consortium (W3C), привлекла внимание к эволюции этого формата ( W3C PNG Specification (Third Edition, 2025) ). Ранее я, как и многие, использовал PNG, не задумываясь о его развитии и различных редакциях. Углубившись в изучение спецификаций PNG (1996, 2003, 2025), я решил подготовить данную статью, чтобы обобщить ключевые изменения и их значение для веб-дизайна, разработки игр и мультимедиа. Статья не претендует на исчерпывающий охват, но стремится предоставить полезный обзор для всех заинтересованных, включая начинающих. Приветствуются любые замечания и предложения по улучшению материала в комментариях к публикации. Весь код, приведённый ниже, выложил в репозиторий . Надеюсь, чтение будет полезным и увлекательным.</p><p><a href="https://habr.com/ru/companies/ntechlab/articles/924638/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/ntechlab</span><span class="invisible">/articles/924638/</span></a></p><p><a href="https://zhub.link/tags/png" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>png</span></a> <a href="https://zhub.link/tags/python" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>python</span></a> <a href="https://zhub.link/tags/%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>изображения</span></a> <a href="https://zhub.link/tags/%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>обработка_изображений</span></a> <a href="https://zhub.link/tags/%D1%81%D0%BF%D0%B5%D1%86%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>спецификация</span></a> <a href="https://zhub.link/tags/%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>программирование</span></a> <a href="https://zhub.link/tags/%D0%B2%D0%B5%D0%B1%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>вебдизайн</span></a> <a href="https://zhub.link/tags/web%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webпрограммирование</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a> <a href="https://zhub.link/tags/%D0%BE%D0%B1%D0%B7%D0%BE%D1%80" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>обзор</span></a></p>
Habr<p>Переоценка API-стратегий: почему компании мигрируют с GraphQL на REST</p><p>В быстро меняющемся мире веб-разработки постоянно появляются новые технологии и подходы к созданию системы обмена данными между приложением или сервисом. Одной из таких технологий, позволяющей запрашивать только необходимые данные, является GraphQL. Меня зовут Дмитрий и я python-разработчик. В этом материале я дам сравнительный обзор на REST и GraphQL. Один из наиболее популярных примеров использования GraphQL — это применение в социальных сетях, где множество пользователей связаны между собой определёнными отношениями. К GraphQL мы прибегаем, когда нам требуется избирательно получить много данных о них. Такая организация пользователей имеет сетевую модель и представляется в виде графа, отсюда и связь с названием GraphQL (Graph — граф, QL — язык запросов). Итак, почему компании, однажды выбравшие GraphQL, решают изменить свой курс и вернуться к стандартному способу реализации систем? Ответ на этот вопрос лежит на пересечении технических возможностей, бизнес-потребностей и экономических соображений. Давайте разберёмся в этом подробнее.</p><p><a href="https://habr.com/ru/companies/simbirsoft/articles/923276/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/simbirso</span><span class="invisible">ft/articles/923276/</span></a></p><p><a href="https://zhub.link/tags/api" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>api</span></a> <a href="https://zhub.link/tags/graphql" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>graphql</span></a> <a href="https://zhub.link/tags/rest" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>rest</span></a> <a href="https://zhub.link/tags/%D0%B2%D0%B5%D0%B1%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>вебразработка</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a></p>
Habr<p>Комплексная защита веб-приложений: обзор взаимодействия разных типов ИБ-решений</p><p>Привет, Хабр! Я Андрей Дугин, руководитель центра сервисов кибербезопасности RED Security. Про тему кибербезопасности веб-приложений уже, казалось бы, рассказали все, что можно: термины XSS, SQL-инъекции, DDoS знакомы каждому в мире ИБ. Проблема в том, что знание отдельных уязвимостей и методов защиты не гарантирует комплексной безопасности. Качественный результат дает не борьба с каждой угрозой, а создание системной защиты, где разные решения дополняют и усиливают остальные. В этом материале я разберу, как ИБ-инструменты взаимодействуют между собой и на какие нюансы важно обратить внимание при их настройке.</p><p><a href="https://habr.com/ru/companies/ru_mts/articles/923202/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/ru_mts/a</span><span class="invisible">rticles/923202/</span></a></p><p><a href="https://zhub.link/tags/AntiDDos" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>AntiDDos</span></a> <a href="https://zhub.link/tags/AntiBot" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>AntiBot</span></a> <a href="https://zhub.link/tags/WAF" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>WAF</span></a> <a href="https://zhub.link/tags/Load_Balancer" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Load_Balancer</span></a> <a href="https://zhub.link/tags/NGFW" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>NGFW</span></a> <a href="https://zhub.link/tags/%D0%AD%D1%88%D0%B5%D0%BB%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>Эшелонированная_защита</span></a> <a href="https://zhub.link/tags/XFF" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>XFF</span></a> <a href="https://zhub.link/tags/%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>информационная_безопасность</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a> <a href="https://zhub.link/tags/%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D0%BE%D0%B5_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>системное_администрирование</span></a></p>
Habr<p>От хаоса к порядку: Как Peakline превратился в профессиональный инструмент за неделю</p><p>Неделя назад мой проект был "швейцарским ножом в картонной коробке". Сегодня это настоящая платформа с PWA, AI-анализом по зонам, системой защиты от ботов, отслеживанием износа снаряжения, прогнозом погоды для маршрутов и детальной аналитикой клубов. Рассказываю, что изменилось под капотом и почему это важно.</p><p><a href="https://habr.com/ru/articles/921192/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/921192/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/strava" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>strava</span></a> <a href="https://zhub.link/tags/python" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>python</span></a> <a href="https://zhub.link/tags/fastapi" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>fastapi</span></a> <a href="https://zhub.link/tags/garmin" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>garmin</span></a> <a href="https://zhub.link/tags/fit" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>fit</span></a> <a href="https://zhub.link/tags/gpx" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>gpx</span></a> <a href="https://zhub.link/tags/gps" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>gps</span></a> <a href="https://zhub.link/tags/api" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>api</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a> <a href="https://zhub.link/tags/web%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webпрограммирование</span></a></p>
Habr<p>Сайт с роутингом за вечер без единой строки кода на Next.js с помощью AI и текстовых промптов</p><p>В этой статье я расскажу, как всего за один вечер создал полноценный адаптивный SPA-сайт на Next.js без единой строчки кода — используя только AI и текстовые промпты. Поделюсь своим опытом, расскажу о возможностях современного инструмента, который позволяет быстро и легко собрать рабочий фронтенд и сразу захостить его на собственном домене. Если вы думаете, что для создания SPA обязательно нужна кастомная разработка — эта история покажет, как современные AI-инструменты могут значительно упростить и ускорить процесс. Конечно, я не утверждаю, что это полностью заменит работу разработчиков, но для многих задач такой подход действительно эффективен и позволяет быстро получить рабочий результат без глубокого погружения в код.</p><p><a href="https://habr.com/ru/articles/919370/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/919370/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/%D0%B8%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D1%82%D0%B5%D0%BB%D0%BB%D0%B5%D0%BA%D1%82" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>искусственный_интеллект</span></a> <a href="https://zhub.link/tags/%D0%B8%D0%B8" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ии</span></a> <a href="https://zhub.link/tags/vercel" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>vercel</span></a> <a href="https://zhub.link/tags/nextjs" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>nextjs</span></a> <a href="https://zhub.link/tags/react" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>react</span></a> <a href="https://zhub.link/tags/%D0%B2%D0%B5%D0%B1%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>вебразработа</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a> <a href="https://zhub.link/tags/zerocode" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>zerocode</span></a> <a href="https://zhub.link/tags/single_page_application" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>single_page_application</span></a> <a href="https://zhub.link/tags/%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>разработка_сайтов</span></a></p>
Habr<p>Как я наваял «конкурента» для клиента Nextcloud Talk Desktop из-за собственной лени</p><p>Бывало ли у вас так, что вы придумали у себя в голове идеальное приложение, в котором есть все вам необходимое (ну или хотя бы какой-то обязательный минимум)? Вот вы нашли приложение, которое должно решать те задачи, что вы себе придумали, но как только принялись его проверять в действии, пришли к выводу, что все совсем не так радостно. Вот вы сказали себе: "Ну ладно, это же опенсорс! Значит можно попробовать что-то с этим сделать своими силами. Заодно и внести посильный вклад в развитие этого продукта. Что может быть лучше?" Но реальность оказалась иной. Код для непрограммиста оказался довольно сложный, принятая разработчиками архитектура приложения также вызывает вопросы (конечно, скорее всего только у меня) и т.д. К чему это я? Начну с небольшой предыстории.</p><p><a href="https://habr.com/ru/articles/914964/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/914964/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/electron_js" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>electron_js</span></a> <a href="https://zhub.link/tags/nodejs" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>nodejs</span></a> <a href="https://zhub.link/tags/meetings" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>meetings</span></a> <a href="https://zhub.link/tags/messager" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>messager</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a> <a href="https://zhub.link/tags/%D1%87%D0%B0%D1%82" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>чат</span></a> <a href="https://zhub.link/tags/%D0%B2%D0%BA%D1%81" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>вкс</span></a></p>
Habr<p>Настройка Workbox Background Sync для совместимости с iOS и Android WebView</p><p>Важность надежной обработки запросов в оффлайн-режиме невозможно переоценить, особенно для приложений, которые должны функционировать и в отсутствии интернет-соединения. Workbox - это мощный инструмент для управления Service Worker в браузерах, он как раз призван решать подобную задачу при помощи соответствующего плагина, но поддержка Background Sync API не универсальна. В этой статье я покажу, как расширить Workbox, чтобы Background Sync корректно работал даже на платформе iOS/Safari.</p><p><a href="https://habr.com/ru/articles/915896/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/915896/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/%D1%84%D1%80%D0%BE%D0%BD%D1%82%D0%B5%D0%BD%D0%B4%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>фронтендразработка</span></a> <a href="https://zhub.link/tags/%D0%BE%D1%84%D1%84%D0%BB%D0%B0%D0%B9%D0%BD%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>оффлайнприложения</span></a> <a href="https://zhub.link/tags/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>оптимизация</span></a> <a href="https://zhub.link/tags/javascript" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>javascript</span></a> <a href="https://zhub.link/tags/web" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>web</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a> <a href="https://zhub.link/tags/web%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webпрограммирование</span></a> <a href="https://zhub.link/tags/pwa" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>pwa</span></a> <a href="https://zhub.link/tags/progressive_web_applications" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>progressive_web_applications</span></a> <a href="https://zhub.link/tags/progressive_web_apps" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>progressive_web_apps</span></a></p>
Habr<p>Как я нашёл квартиру за четверть стоимости из-за бага на сайте застройщика ПИК:</p><p>Представьте: вы заходите на сайт застройщика (ГК ПИК), выбираете квартиру, а вместо стандартных 9 миллионов видите ценник в 2 миллиона. Сначала кажется, что это опечатка, взлом, шутка или какой-то маркетинговый трюк. Но когда система позволяет добавить лот в корзину, заполнить анкету и даже получить подтверждение брони — начинаешь верить в чудо. Именно так я наткнулся на квартиру, цена которой оказалась в четрые раза ниже рыночной возможно из-за технической ошибки. В этом кейсе разберём, как возникают такие баги, можно ли требовать исполнения договора и что делать, если вы оказались на месте застройщика или покупателя.</p><p><a href="https://habr.com/ru/articles/911978/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/911978/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/%D0%B2%D0%B5%D0%B1%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D1%8B" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>вебсервисы</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a></p>
Habr<p>Почему не дружат фронтендер и дизайнер: работающие техники общения между отделами</p><p>Привет! Меня зовут Алексей Песоцкий, я фронтенд-тимлид в AGIMA. Противостояние дизайнеров и разработчиков носит уже почти легендарный характер. Этой теме посвящены десятки статей, видосов и докладов. А отношения отделов ставят в один ряд с другими фундаментальными конфликтами: кошки и собаки, кому дует и кому душно, Хельга и Арнольд. Но мы в компании уверены: чтобы лучше понимать друг друга, нужно просто следовать элементарным правилам. Я провел небольшой аудит статей по теме, понаблюдал, как эта коммуникация устроена у нас — и решил напомнить всем, почему для дружбы фронтендера и дизайнера нет никаких препятствий.</p><p><a href="https://habr.com/ru/companies/agima/articles/909032/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/agima/ar</span><span class="invisible">ticles/909032/</span></a></p><p><a href="https://zhub.link/tags/frontend%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>frontendразработка</span></a> <a href="https://zhub.link/tags/%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>дизайн</span></a> <a href="https://zhub.link/tags/%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%BE%D0%B9" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>управление_разработкой</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a> <a href="https://zhub.link/tags/web%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webдизайн</span></a> <a href="https://zhub.link/tags/ui_kit" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ui_kit</span></a> <a href="https://zhub.link/tags/figma" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>figma</span></a></p>
Habr<p>[Перевод] Меню для отзывчивого интерфейса без скриптов</p><p>В этой статье мы расскажем как создать отзывчивое меню по принципу mobile-first, используя только HTML и CSS — без JavaScript. Полный код, используемый в этой статье, доступен в репозитории на GitHub.</p><p><a href="https://habr.com/ru/companies/beget/articles/905408/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">habr.com/ru/companies/beget/ar</span><span class="invisible">ticles/905408/</span></a></p><p><a href="https://zhub.link/tags/responsive_design" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>responsive_design</span></a> <a href="https://zhub.link/tags/hamburger" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>hamburger</span></a> <a href="https://zhub.link/tags/css" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>css</span></a> <a href="https://zhub.link/tags/%D1%82%D1%83%D1%82%D0%BE%D1%80%D0%B8%D0%B0%D0%BB" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>туториал</span></a> <a href="https://zhub.link/tags/%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>пример</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a> <a href="https://zhub.link/tags/web%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webпрограммирование</span></a> <a href="https://zhub.link/tags/nojavascript" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>nojavascript</span></a></p>
Habr<p>Динозаврик по имени Джун</p><p>Еще совсем недавно джуны очень ценились. Можно было вырастить преданного сотрудника, гораздо медленнее поднимать ему зарплату, и в итоге получался отличный боец, который знает все правила взаимодействия в компании и плавно перерастает в мидла. Вакансий на рынке было много. Если говорить о веб-разработке, то залететь верстальщиком было вообще плевое дело — пару недель почитать книжки по HTML/CSS, попрактиковаться с табличной версткой (да, бывалые динозавры еще помнят, когда такой подход был мейнстримом), потом перейти к блочной — и можно отправляться на собеседования. Неделя — и вы уже в руках какой-нибудь веб-студии, а там, при желании, через полгода станете полноценным фронтендером или переквалифицируетесь в бэкенд-разработчика. Хорошие времена: можно не особо напрягаясь было заработать на хлеб, клацая по клавиатуре.</p><p><a href="https://habr.com/ru/articles/901506/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/901506/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/ai" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ai</span></a> <a href="https://zhub.link/tags/%D0%B2%D0%B5%D0%B1%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>вебразработа</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a> <a href="https://zhub.link/tags/%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D1%81%D0%B5%D1%82%D0%B8" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>нейросети</span></a> <a href="https://zhub.link/tags/%D0%B8%D0%B8" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ии</span></a> <a href="https://zhub.link/tags/%D0%B4%D0%B6%D1%83%D0%BD%D1%8B" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>джуны</span></a></p>
Habr<p>Наши 象: что я узнал про китайцев и китайский веб-дизайн, пока создавал сайт для мясокомбината</p><p>Самое мясо китайского веб-дизайна, или Как не стать лосем в Поднебесной. Путеводитель по провинциям визуального хаоса</p><p><a href="https://habr.com/ru/articles/900842/" rel="nofollow noopener" translate="no" target="_blank"><span class="invisible">https://</span><span class="">habr.com/ru/articles/900842/</span><span class="invisible"></span></a></p><p><a href="https://zhub.link/tags/%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>разработка_сайтов</span></a> <a href="https://zhub.link/tags/%D0%BA%D0%B8%D1%82%D0%B0%D0%B9%D1%81%D0%BA%D0%B8%D0%B9_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>китайский_интернет</span></a> <a href="https://zhub.link/tags/%D0%BA%D0%B8%D1%82%D0%B0%D0%B9%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD%D1%8B" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>китайские_магазины</span></a> <a href="https://zhub.link/tags/%D0%B2%D0%B5%D0%B1%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>вебдизайн</span></a> <a href="https://zhub.link/tags/web%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>webразработка</span></a> <a href="https://zhub.link/tags/%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>интернетмагазин</span></a> <a href="https://zhub.link/tags/%D0%BA%D1%83%D0%BB%D1%8C%D1%82%D1%83%D1%80%D0%BD%D1%8B%D0%B5_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%B8%D1%8F" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>культурные_различия</span></a> <a href="https://zhub.link/tags/%D0%B8%D1%81%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%80%D1%8B%D0%BD%D0%BA%D0%B0" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>исследование_рынка</span></a> <a href="https://zhub.link/tags/%D0%B8%D1%81%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>исследование_пользователей</span></a></p>