Category : javascript

javascript
Морские карты S-57 в браузере: открытый парсер на TypeScript и что в нём сломали и починили первые …

Это вторая версия статьи (первую модератор удалил, причину мне не сообщили. Что ж, пишу заново: без ссылок на свои каналы, зато с тем, что за эту неделю изменилось в проекте). Буду рад, если на этот раз текст останется на сайте.s57-parser: морская карта S-57 в браузереКоротко о чём речь. Электронные навигационные карты (ENC) формата S-57 стоят на каждом коммерческом судне. Стандарт живёт с 1996 года, но живого JavaScript-парсера для него я не нашёл: либо серверный GDAL, либо коммерческие SDK за…

  • вторник, 29 сентября 2026 г. в 00:00:15
javascript
О том, как я написал свой стейт‑менеджер

Хочу посвятить эту статью погружению в разные возможности обновления данных в JS и React, раскрыв это на примере своей библиотеки «nexus‑state». Поделюсь подробными примерами, мотивацией и расскажу, для чего вообще нужны стейт‑менеджеры и как они работают. При написании примеров я постараюсь максимально просто объяснить суть и не буду затрагивать тему типизации.ВступлениеИдея названия пришла внезапно. Пройдя все серии одной из моих любимых игр,«Dark Souls», я наткнулся на ранний проект «Demon&#…

  • вторник, 29 сентября 2026 г. в 00:00:13
javascript
Мой бесплатный сервис чуть не стал сканером портов для всего интернета

Я сделал бесплатную проверку сайтов на нарушения 152-ФЗ: вводишь адрес, получаешь список проблем. Первая версия умела ещё кое-что, чего я в неё не закладывал. Подставляешь чужой хост и порт, и по тексту ошибки видно, открыт порт или закрыт. Бесплатный сканер портов для всего интернета, причём запросы идут с адресов Cloudflare.Это одна из трёх дыр, которые автоматическое ревью нашло в первой версии до выкладки. Ниже про все три, про то, почему такой сервис вообще нельзя ставить рядом со своими с…

  • вторник, 29 сентября 2026 г. в 00:00:12
javascript
Книга из переписки без сервера: canvas, jsPDF и брошюра для печати прямо в браузере

Мы делаем пет‑проект «Чатограмма», который считает статистику переписки: кто пишет первым, кто быстрее отвечает, в какие часы вы на связи. С первого дня у него одно жёсткое правило: файл с перепиской не уходит на сервер. Всё считается в браузере пользователя, а сервер не видит ни одного сообщения — не потому, что обещает не смотреть, а потому, что сообщения до него физически не доходят.Потом понадобилась подарочная книга: PDF формата A5, где самые яркие моменты переписки собраны по главам — с ч…

  • вторник, 29 сентября 2026 г. в 00:00:10
javascript
10 браузерных API, заменяющих библиотеки, которые я раньше все время устанавливал

10 браузерных API, заменяющих пакеты NPM и плагины jQuery: dialog, popover, переходы отображения (view transitions), structuredClone, groupBy и Temporal с заметками о поддержке.❯ 1. IntersectionObserverНа протяжении многих лет “ленивая” (lazy) загрузка изображений означала установку lazysizes или lozad. lazysizes “слушает” события прокрутки, измеряет элементы с помощью getBoundingClientRect() при каждом таком событии и меняет атрибут data-src на src, когда изображение приближается к области про…

  • вторник, 29 сентября 2026 г. в 00:00:09
javascript
«По будням в 9:30» → 30 9 * * 1–5: парсер расписаний на русском, который отказывается угадывать

Выражение */15 9-17 * * 1-5 компьютер понимает однозначно, а человек читает с трудом. Особенно это мешает, когда расписание задаёт пользователь: в боте‑напоминалке, в админке, в настройках отчётов. Человек хочет написать «каждые 15 минут с 9 до 18 по будням» и увидеть, что его поняли правильно. Писать для этого форму с пятью выпадающими списками не хочется никому.Готовых решений для русского языка я не нашёл, поэтому написал своё.Библиотека называется cronsense. Она переводит расписание, записа…

  • вторник, 29 сентября 2026 г. в 00:00:07
javascript
Почему я пишу Bun‑native альтернативу napi‑rs

Я работаю над bffi‑rs, экспериментальным фреймворком для нативных биндингов Bun, написанным на Rust.Проект появился из довольно практичной задачи. Я хотел сделать небольшое desktop‑приложение с нативным WebView, но при этом оставить Bun основным рантаймом.В экосистеме уже есть решения для подобных приложений. Например, некоторые интеграции WebView для Bun используют Rust и napi-rs. В варианте Electrobun, который я рассматривал, для WebView используется Wry, а связка между Rust и JavaScript стро…

  • вторник, 29 сентября 2026 г. в 00:00:06
javascript
Переводчик в браузере, который учит слова: встроенный Translator API Chrome, свой ИИ-ключ и интерва…

Было популярное китайское расширение Dadda Translate (达达划词翻译): выделяешь слово, получаешь перевод, сохраняешь в словарик, и слово потом всплывает уведомлением, пока не запомнится. Оно перестало работать: API Sogou и Shanbay, на которых держался перевод, изменились или исчезли. К тому же оно было только для Chrome и только для пары английский → китайский.Я переписал его с нуля. Получился WordToast для Firefox, Chrome и Edge (GitHub). Он переводит на язык браузера, умеет работать полностью на уст…

  • понедельник, 28 сентября 2026 г. в 00:00:11
javascript
Наводишь на слово в субтитрах — видишь перевод: расширение на встроенном ИИ Chrome

Я учу английский по сериалам. Смотрю с английскими субтитрами, и каждое незнакомое слово — это пауза, alt‑tab, переводчик, обратно. К десятой паузе за серию хочется просто включить русские сабы и сдаться.Есть Language Reactor и похожие сервисы, но у них жёсткий список площадок: Netflix, YouTube — и всё. Каждый стриминг рисует субтитры своим способом, и под каждый нужен отдельный парсер. А я смотрю где придётся.Так что я сделал своё. Получилось расширение, которое работает почти на любом сайте с…

  • понедельник, 28 сентября 2026 г. в 00:00:09