Фреймворки дают клиентский роутинг из коробки. У HTML и Web Components его нет. Если сайт уже отдаёт полные страницы, а клиентская навигация нужна только для части разделов, переписывать всё на фреймворк незачем. Такая задача возникает в нескольких случаях. На существующем сайте два-три раздела должны переключаться без полной перезагрузки, а остальное по-прежнему жить как обычные HTML-страницы. В отдельном микрофронтенде или встраиваемом разделе не хочется добавлять фреймворк только ради навиг…
Иногда сложные инженерные проблемы возникают не из‑за ошибок в библиотеке или коде. Причина может быть в том, что библиотека используется не оптимально для текущих архитектурных условий. Всё началось с задачи в секции дашбордов и виджетов. Секция ранее была переведена на библиотеку GridStack. Нужно было использовать функцию GridStack nested grids — размещение одной сетки внутри другой. Для пользователя это возможность создать новый виджет‑группу, внутри которого можно размещать другие виджеты. …
«...Давайте я сделаю, на моих токенах потестите...»Привет, Хабр! Я разработчик из Минска (работаю официально, в статусе НПД). Занимаюсь автоматизацией на связке Self‑Hosted n8n + Redis. Внедряю автономных ИИ‑агентов для мессенджеров и связываю их с amoCRM. Дисклеймер: в статье упоминается Meta: организация признана террористической и запрещена в РФ)Поделюсь, как говорится, «мясом» из своей практики. В статье я максимально постараюсь отразить и технический абсурд, плавно переходящий в явное кида…
ТезисноgetUserMedia({audio:true}) включает подавление шума, настроенное на речь; работающий двигатель для него тот шум, который надо вычесть(sic!). Выключил три флага — доля тишины в записях упала с 36% до 2%.На iOS та же правка сработала наоборот: выключение обработки роняет весь тракт на 18 дБ — сигнал, пик и уровень шума одинаково.Дело не в цене телефона и не в версии Android, а в модели устройства: разброс между 170 моделями от 0% до 100% тишины на одном и том же коде.Я делаю пет-проект авт…
ЗудЯ ковырял pet-проект — ротатор SOCKS5-прокси — и в очередной раз редактировал конфиг апстримов руками. Открыл файл, посмотрел на JSON:Кавычки вокруг каждого ключа. Кавычки вокруг каждой строки. Невозможно просто вставить список кредов от провайдера. Запятые после каждой строчки. Забыл запятую — ошибка парсинга указывает не на ту строку. Я тратил больше времени на пунктуацию, чем на сами значения.Переписал на YAML — через двадцать минут вырезал случайно сдвинутый на пробел блок. Ощущения — ка…
В прошлой статье я рассказывал о случайно попавшем ко мне образце ChainVeil - вредоносном ПО из источника, который на тот момент не был зафиксирован в публичных исследованиях. На этот раз первым сигналом стал мой собственный supply chain‑мониторинг. Он сообщил о новом npm‑пакете plugin-react-vite. На первый взгляд это выглядело как очередной тайпсквоттинг - ничего особенно необычного.Но я решил пойти дальше: сначала проверить метаданные пакета, затем код, затем инфраструктуру, а уже после этого…
Раз вы открыли эту статью, вы наверняка со мной согласны: иногда TypeScript компилируется мучительно долго.С тем же самым столкнулся @_chenglou — крутой разработчик, на которого я равняюсь (он работал над React, Messenger, ReasonML и ReScript, а сейчас — над Midjourney и Pretext).А ещё он пользуется Sury — самой быстрой библиотекой валидации схем, которую я поддерживаю, — и завёл вот этот issue: “Large TS types cause type inference slowdown”.Ну… неприятно. Но я знал, что есть ArkType и что в си…
ВведениеВсем привет! Меня зовут Илья, я frontend‑разработчик.Но сегодня хочу поговорить не о JavaScript, а о терминале.Несмотря на то, что я уже много лет работаю разработчиком, активно пользоваться терминалом я начал всего около года назад. До этого терминал для меня был просто местом, где запускается сборка проекта, немного Git и иногда еще пара команд. Думаю, у многих так же.Обычно мысли о терминале вызывают ступор. Кажется, что это что‑то непонятное, черно‑зеленое и предназначенное только д…
ВведениеВ первой части мы заставили кнопку на веб-странице запустить локальный exe-файл. Обычная страница не может запускать программы на компьютере напрямую. Поэтому между ними появилось расширение Chrome, а локальная программа была зарегистрирована как Native Messaging Host.Native Messaging представляет собой механизм обмена сообщениями между расширением и локальной программой. Chrome запускает эту программу как отдельный процесс и связывает её с расширением через стандартные потоки ввода и в…