Обновить
256K+

Веб-разработка *

Делаем веб лучше

266,27
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Автопостинг в TenChat без API: Playwright, редактор Quill и вставка через ClipboardEvent

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели4.8K

У TenChat нет публичного API для публикации постов. Отложенная публикация в самом сервисе есть только на платном тарифе (на 28.09.2026 от 990 ₽ в месяц), а мне нужен был простой сценарий: раз в день берём следующую статью из блога, собираем из неё короткий пост с обложкой и выкладываем без участия человека. Я написал для этого скрипт на Python и Playwright, он работает на сервере по cron с конца сентября 2026 года. В статье разберу, как скрипт входит в аккаунт без пароля, как заставить редактор Quill принять готовую вёрстку, чем завершились первые недели и какие грабли попались при переезде с ноутбука на сервер.

Сразу оговорка. Автоматизация через браузер может не нравиться самой площадке, и правила сервиса стоит прочитать до запуска. Я публикую только собственные тексты, один пост в день, в своём аккаунте. Обходить защиту или маскироваться под человека скрипт не пытается, и дальше речь пойдёт только про инженерную сторону.

Читать далее

Новости

Зачем быстрая реактивность за пределами DOM: ответы на вопросы и знакомство с Raph

Уровень сложностиСредний
Время на прочтение28 мин
Охват и читатели7.7K

Зачем ускорять реактивность, если всё упирается в DOM? Рассказываю об устройстве Raph/Nova и показываю, как одно ядро используется для DOM и Canvas. Большие графы, таймлайны, карта и результаты замеров.

Читать далее

WASM vs JavaScript 2026 — проверка на Flutter Web

Уровень сложностиСредний
Время на прочтение76 мин
Охват и читатели10K

Когда мы апгрейдим процессор или видеокарту и начинаем играть в привычную нам игрушку с новым железом, то увеличение производительности на некоторое количество процентов становится сразу же заметным. Например, увеличение производительности заметно уже с 5 процентов, если дело касается FPS в какой-то игре. 10 процентов — более заметно, 15 процентов — ещё заметнее. А увеличение производительности на 50 процентов не заметить практически невозможно. Примерно так же я смотрел на отрисовку интерфейса при компиляции Flutter-приложений в WebAssembly-код вместо JavaScript. Примерно по таким же ощущениям для большого проекта я получил ускорение, ну, примерно от 5 до 10 процентов. Хотя должен был получить 50. Поэтому я решил очень подробно исследовать данную ситуацию.

Я решил досконально проверить, насколько можно улучшить веб приложения переходом на компиляцию в WASM вместо JS, в отличии от официальных цифр у меня получились другие цифры и результат работы приложения их подтверждает.

После перехода на Wasm приложение может стать лишь немного быстрее. Я собрал отдельный Flutter-стенд, чтобы разобраться, откуда берётся этот результат: какие операции ускоряются, где выигрывает JavaScript и как вычисления связаны с плавностью интерфейса.

Читать далее

CSS Anchor Positioning в картинках

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели9.7K

Большой визуальный гайд по CSS Anchor Positioning: от базовой привязки элементов до создания прочных соединителей и цепочек якорей.

Читать далее

Integrals: где я научился веб-разработке на практике

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели7.8K

Небольшая веб-студия в Тбилиси, множество встреч с клиентами и два года разработки сайтов — с 2016 по 2018 год.

Читать далее

Markdown, который вы не замечали: от двух пробелов до интерактивной статьи

Уровень сложностиПростой
Время на прочтение27 мин
Охват и читатели9K

Я собирался написать статью про Markdown. В процессе внутри документа оказался Doom.

Разбираемся, почему два пробела меняют перенос строки, обратные кавычки не всегда спасают таблицу, а один .md по-разному выглядит на Хабре и GitHub. Прямо в статье можно менять разметку в лаборатории, решать задания и проверять результат. Есть GIF, вложенные спойлеры, маленький квест и разбор того, как упаковать ресурсы Doom в Markdown — и что на самом деле запускает игру.

Читать и экспериментировать

WASM кроссбраузерность во Flutter Web на 2026

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели11K

В мае 2024 года команда Flutter выпустила версию Flutter 22, в которой они стабилизировали поддержку WebAssembly, объединив компилятор Dart с системой сборки мусора WebAssembly — WASM GC.

Примерно с этого же времени я много экспериментировал со сборками WASM и, в принципе, для широкого круга приложений они работают не хуже JavaScript, кроме двух интересных проблем. Это несовместимость данной технологии с браузерами Firefox и Safari.

Я решил покопаться в этом вопросе: то есть, при чём здесь вообще Flutter? И действительно ли команда Flutter не занимается этой ситуацией и почему не занимается.

Читать далее

Почему O(1) не гарантирует высокую скорость: четыре структуры данных для графа signal – effect

Уровень сложностиСредний
Время на прочтение21 мин
Охват и читатели13K

Сигнал изменился - как найти связанные эффекты и удалить известную связь? Сравниваю четыре структуры графа signal - effect по стоимости операций и памяти, а затем - в локальных замерах на V8. Почему одинаковая O(1) не означает одинаковое время?

Читать далее

FalangFlow: открытый конструктор автоматизаций на блок-схемах с TypeScript и Temporal

Время на прочтение5 мин
Охват и читатели9.6K

Я здесь уже рассказывал про Falang (friendly algorithmic language) - универсальное решение для построения блок схем. Тогда у меня было несколько MVP под разные направления, сейчас же я выхожу в свет с реальным продуктом.

Встречайте: FalangFlow - конструктор автоматизаций: интеграции между сервисами, боты, обработка данных и ИИ-сценарии в виде блок-схем. Код открыт под лицензией APGL-3, вы можете его самостоятельно установить локально или на своем хосте.

Читать далее

Cloudflare изменил доступ ИИ-ботов к сайтам: как проверить настройки и не закрыть поиск

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели7.3K

15 сентября Cloudflare обновил правила доступа ИИ-ботов к сайтам. Блокируя сбор данных для обучения, можно заодно закрыть поиск: некоторые боты выполняют обе задачи. Я разобрал исследование Seensure по 1 046 сайтам. После обновления запросы от имени обучающих ботов стали блокировать чаще, а поисковых — реже. Это тест с подставленными именами, поэтому он не доказывает доступ настоящих краулеров. Настройки стоит проверить по категориям, а реальный доступ — по логам запросов.

Читать далее

Блог на автопилоте: markdown в статику, выход статьи по дате и пинг в IndexNow только для новых страниц

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели5.4K

У меня блог на 78 markdown-файлах, и руками я его не публикую уже больше недели. Статья выходит, когда наступает дата в её шапке: сборщик в тот день включает её в сайт, сервер замечает новую страницу, пишет о ней поисковику и обновляет sitemap с RSS. Ниже разбираю, как это собрано, и три места, где всё ломалось. Фреймворка тут нет, только один Python-файл примерно на 800 строк, bash-скрипт на 30 строк и cron.

Весь код упрощён, домен заменён на example.com, пути на /srv/blog и /srv/www.

Читать далее

«Вдруг как в сказке навайбкодил Saas!» или что осталось за кадром успешного успеха Cal AI, Rork и Base44

Время на прочтение20 мин
Охват и читатели9.1K

Cal AI, Rork и Base44 выглядят как тот самый успешный успех вайбкодинга. Школьник разгоняет приложение до десятков миллионов долларов, два фаундера с долгами получают $2.8 млн инвестиций, а соло-разработчик за полгода продает продукт Wix за $80 млн.

Звучит так, будто достаточно открыть Claude Code, нагенерить SaaS и ждать, когда понесут деньги.

Я полез смотреть, что было за кадром. А за красивой историей: опыт, прошлые провалы, деньги, маркетинг, команда. Вайбкодинг тут только часть успешного успеха.

Читать далее

Вышел Next.js 16.4

Уровень сложностиПростой
Время на прочтение15 мин
Охват и читатели8.1K

В релизах ветки 16.x мы постепенно внедряли новую модель разработки, которая решает многие проблемы, с которыми вы сталкивались с самого появления App Router:

Обеспечивает быструю первоначальную загрузку даже персонализированных страниц.

Делает клиентские переходы в приложениях с серверным рендерингом мгновенными.

Делает кеширование декларативным и компонуемым, при этом включать его нужно явно.

Эта модель называется Cache Components, и в Next.js 17 она будет использоваться по умолчанию.

До этого релиза мы не рекомендовали её для всех без исключения приложений: в некоторых сценариях она не могла обеспечить те же гарантии по затратам и производительности, что и прежняя модель.

В этом релизе появились ключевые возможности, которые устраняют эти ограничения.

Начиная с Next.js 16.4, мы с уверенностью рекомендуем Cache Components как лучший выбор для любого приложения на Next.js.

Читать далее

Ближайшие события

Как я два месяца отдавал Яндексу пустую страницу: SSR на Laravel + Inertia на shared-хостинге

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели5.9K

Сделал калькулятор налога для самозанятых на Laravel + Inertia + Vue с SSR и выложил на обычный shared-хостинг. Сам калькулятор написал за пару вечеров. Всё остальное время ушло на то, чтобы поисковики увидели сайт так же, как браузер.

За два месяца: SSR-демон падал с EPERM, порт оказывался занят «через раз», главная месяц уходила в кэш пустой страницей, а проверка SSR в CI была зелёной, потому что не могла упасть в принципе. Плюс месяц блокировки хостером, о которой я не знал, и фильтр «малоценных страниц» от Яндекса.

Разбираю грабли по порядку — может, кому-то это сэкономит месяц.

Читать далее

Переезд с Webflow на Next.js по одной странице: Payload CMS, next-intl и проверки в CI

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели5.2K

Корпоративный сайт на пяти языках: около сотни страниц, блог, новости и 100–150 тысяч пользователей в месяц. Два года он жил на Webflow. Переезд на Next.js 15 и Payload CMS сейчас на финишной прямой, и шёл он без дня Х: страница за страницей, на одном домене со старым сайтом.

Разбираю, как это устроено. Счёт Webflow по строкам, Next.js под /app на Webflow Cloud и 301-редиректы с пятью локалями, перенос CMS-коллекций в Lexical, next-intl и проверки в CI, которые ловят то, что раньше находил только дизайнер через месяц.

Как это устроено

Что отвалится у вашего сайта, если завтра отключат иностранные сервисы. Проверил 50 сайтов

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели7.2K

Мне стало интересно, насколько российские сайты в 2026 году ещё зависят от зарубежных сервисов. Не в смысле «пользуется ли компания Zoom», а буквально: что сломается у сайта, если завтра иностранный провайдер отключит российских клиентов.

Я написал открытую утилиту и прогнал через неё 50 сайтов: банки, магазины, операторов связи, авиакомпании, госорганы. Спойлер: серверы почти все уже перевезли, а вот сертификаты, аналитика и шрифты остались. Рассказываю, что нашлось, как устроена проверка и как одна регулярка повесила всю программу.

Читать далее

История HTML и CSS. Какие элементы и свойства ушли навсегда

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели14K

Хабр, привет.

Многие люди с интересом относятся к истории. Читают книги, рассматривают архитектуру городов, смотрят фильмы времени наших родителей. Мне кажется, веб достиг периода, когда мы можем с интересом поговорить о прошлом HTML и CSS.

Сегодня я пришел к вам, чтобы оглянуться немного назад и вспомнить фичи, которые когда-то были частью веба. Возможно, некоторые из них вы когда-то даже использовали.

Давайте посмотрим, что я вам подготовил.

Читать далее

Распределённые блокировки в Multi-DC: как перестать дублировать CronJobs

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели7.4K

Представьте: вы настроили CronJob, протестировали локально и выкатили в продакшн. Всё работает как часы. А потом решили добавить отказоустойчивости и развернули приложение во втором дата‑центре. И внезапно ваша задача начала выполняться дважды. Это не баг Kubernetes, а фундаментальная проблема синхронизации.

Меня зовут Тимофей Салтымаков, я бэкенд‑разработчик в Точка Банк. В статье расскажу, как мы решили проблему дублирующихся CronJob'ов в распределённой системе. Прошли путь от advisory locks до собственной библиотеки, и в итоге поняли, что нужно перестать синхронизировать процессы и начать синхронизировать... время. Поехали!

Читать далее

Находки в опенсорсе: мир питона за сентябрь 2026

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели12K

Вот и наступила золотая осень!

В сентябре я каждый день почему-то вспоминал поговорку “от работы дохнут кони, ну а я бесмертный пони”. Сделано было просто куча всего! Новые релизы, библиотеки, крутые фичи, доклад на конференции. А еще наше сообщество сделало кучу интересных проектов в опенсорсе.

С меня как всегда статья без нейрослопа и ИИ, с вас как всегда интересные комментарии и лайки! А вот тут ссылка на прошлый дайджест за август.

Погнали смотреть, что у нас в питоне происходило!

Читать далее

От RTSP-камеры до истории событий: настраиваем видеоаналитику через JavaScript Viewer

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели5.9K

Привет, Хабр! В первой статье я разбирал внутреннее устройство real-time-конвейера на C++20: почему медленный YOLO не должен останавливать RTSP и зачем между этапами нужны ограниченные слоты последнего значения. Теперь посмотрим на ту же систему с другой стороны — глазами пользователя, который подключает камеру и должен получить не просто видео с рамками, а управляемый и проверяемый результат.

Я покажу практический порядок настройки своей платформы видеоаналитики через браузерный JavaScript Viewer: от стабильного потока и детектора движения до постоянных ID, двух контуров YOLO и истории событий в PostgreSQL. Главный вопрос статьи — не «где находится кнопка», а «какой участок конвейера меняет этот параметр и как проверить эффект».

Читать далее
1
23 ...