Category : javascript

javascript
Парсер расписаний после хабратестирования: полвторого, RRULE, systemd и производственный календарь

В прошлой статье я показал cronsense, библиотеку, которая переводит расписание на русском или английском в cron: «по будням в 9:30» → 30 9 * * 1-5. Комментаторы устроили ей проверку, которую один из них метко назвал хабратестированием. Выяснилось, что библиотека не понимает «полвторого», «без пяти шестнадцать», «в три утра» и «каждые полчаса», а cron для части задач вообще не подходит.За несколько дней вышло семь версий. Ниже разбор того, что изменилось, как это устроено и какие ошибки нашлись …

  • суббота, 3 октября 2026 г. в 00:00:04
javascript
Кедр: SACD ISO в FLAC, написанный в Cursor

Мне нужна была утилита под macOS, которая берёт образ Super Audio CD и делает из него FLAC. Обычный путь «открыть ISO в ffmpeg» здесь не работает: внутри не PCM, а однобитный DSD, часто ещё сжатый в DST. В итоге получился Кедр. Окно на Electron, само преобразование делает локальный Python, альбом с машины никуда не уходит.И сразу честно, как это писалось. Я не набирал проект руками файл за файлом. Это вайбкодинг в Cursor: я говорил, что должно получиться, смотрел результат и возвращал в чат то,…

  • суббота, 3 октября 2026 г. в 00:00:02
javascript
Каждый LLM-фреймворк описывает инструмент по-своему

Чтобы дать LLM доступ к своему коду, пишут инструменты (tools). Инструмент — это функция и всё, что модели нужно знать, чтобы её вызвать: имя, описание и схема аргументов.Потом те же инструменты приходится писать ещё раз. Первая версия сделана на tool() из AI SDK. В проекте появляется MCP-сервер, и инструменты переписывают под registerTool. Соседняя команда использует Genkit, и те же инструменты пишут в третий раз, через defineTool. Функции остаются прежними, меняется только обёртка.К тому же к…

  • пятница, 2 октября 2026 г. в 00:00:13
javascript
Трон для самого звёздного: я сделал игру, которая живёт внутри GitHub‑репозитория

Помните Million Dollar Homepage? В 2005 году студент продал миллион пикселей по доллару за штуку и заработал миллион. Никакой пользы в этих пикселях не было, но люди платили за участие в мемчике и за место, которое видят другие.Мне захотелось сделать что‑то похожее для разработчиков, только вместо денег — валюта, которую у нас и так все копят: звёзды на GitHub.Так появился Star Throne — репозиторий‑игра. Ставишь звезду на репо, и через минуту‑две GitHub Actions считает, сколько звёзд у тебя сам…

  • пятница, 2 октября 2026 г. в 00:00:12
javascript
Продвинутый статический анализ в TypeScript-проектах: выходим за рамки tsc и ESLint

👋 Привет! Меня зовут Александр, я работаю фронтенд-разработчиком в компании «МегаФон». Сегодня хочу поговорить о статическом анализе TypeScript-проектов за пределами привычной связки tsc и ESLint.tsc прежде всего отвечает за корректность типов, а ESLint находит широкий круг ошибок и нарушений принятых в проекте правил. Вместе они закрывают большинство повседневных задач, но не все проблемы удобно выражать через типы и правила линтера. Например, в проекте может потребоваться запретить зависимост…

  • пятница, 2 октября 2026 г. в 00:00:11
javascript
Capacitor: от веба к мобильным приложениям. Часть 5. Микрофронтенды в Capacitor

Давно не виделись хабровчане. Сегодня мы поговорим на избитую и всем уже изрядно надоевшую тему, но слегка под другим углом. Если вы уже работали с микрофронтендами в вебе, сама загрузка отдельной сборки внутри Capacitor вряд ли удивит. WebView исполняет JavaScript, а уже он загружает сборку через Module Federation и монтирует её как компонент.Сложности начинаются, когда этому микрофронту нужен, например, доступ к камере или геолокация. Сразу возникает несколько вопросов:Кто регистрирует плагин…

  • пятница, 2 октября 2026 г. в 00:00:09
javascript
Как писать стили в 2026: CSS Modules, CSS-in-JS, Tailwind и zero-runtime

Всем привет! Меня зовут Даниил Николаев и я frontend-разработчик в компании "Исходный Код"На kickoff снова всплывает один и тот же спор. Один тянет Tailwind. Второй - CSS Modules. Третий тащит привычный CSS-in-JS. Кто-то молча открывает .scss и выходит из разговора. Разбор ниже - в контексте React, для middle и middle+.Способов писать стили слишком много. У каждого есть громкие адепты и не менее громкие хейтеры. Обычно команда выбирает то, что уже умеет, а не то, что дешевле живет в бра…

  • пятница, 2 октября 2026 г. в 00:00:08
javascript
Почему архитектура важнее выбора стейт-менеджера в React

TL;DR. Собрал одно и то же CRUD-приложение на восьми стейт-менеджерах (effector, zustand, mobx, react-query, rxjs, reatom, xstate, jotai) и увидел: дело не в выборе библиотеки, а в архитектуре. Три правила, которые реально решают:не тяните одну независимую фичу напрямую в другую — связывайте их через компоненты и хуки, а не импортом модели в модель;один стор — одна сущность, без общего “божественного” стора на всё приложение;создавайте и удаляйте модели вместе с компонентом — не превращайте их …

  • пятница, 2 октября 2026 г. в 00:00:07
javascript
EventBus и CommandBus во frontend: когда прямых вызовов становится слишком много

Практический разбор архитектуры, где CommandBus передаёт намерения пользователя, а EventBus распространяет изменения состояния между независимыми частями интерфейса. В небольшом frontend‑приложении обычно нет необходимости придумывать дополнительные слои абстракции. Пользователь нажал кнопку — компонент вызвал сервис. Сервис изменил данные — интерфейс обновился. Проблема появляется позже, когда одно и то же действие можно выполнить из нескольких мест, а на одно изменение состояния должны реагир…

  • четверг, 1 октября 2026 г. в 00:00:02