Мы делаем русскоязычный сервис с несколькими языковыми моделями в одном чате. Однажды партнёр прислал скриншот: модель начала отвечать списком из ста пунктов и оборвалась на середине слова. В админке лежал тот же обрывок. Ни ошибки, ни предупреждения.Почему ответ обрывается. У каждого запроса есть потолок max_tokens. У нас он был 1200 токенов. На английском это около 900 слов, а на русском кириллица съедает больше токенов, и 1200 токенов оказались примерно полутора тысячами знаков. Длинный спис…
Всем привет! Меня зовут Павел Барсуков, я frontend-разработчик в компании «Программный Продукт».Основной мой стек – Vue, Nuxt и все рядом лежащее. Angular до недавнего времени я видел в основном в курсах на Youtube, пару раз на фрилансе, где особо с ним не взаимодействовал, и в мемах про исключительность Angular разработчиков и очень частые обновления версий. Поэтому, когда мне прилетела задача миграции большого Angular-проекта, ощущения были примерно такие же, как если бы профессионального гит…
Бывает, что блокировщик рекламы не справляется: всплывающее окно подписки, баннер «мы используем cookies», чат‑виджет в углу, липкая шапка на пол‑экрана. Для этого было маленькое расширение ekill: жмёшь кнопку, наводишь на элемент, кликаешь — элемент исчез. Оно не обновлялось с 2019 года и перестало работать в Chrome, когда Google отключил Manifest V2.Я переписал его под Manifest V3 для Firefox, Chrome и Edge. Получился SkullClick (GitHub). Задача кажется тривиальной, но у неё неожиданно много …
Телефон лежит на столе. Сбоку от него в воздухе ладонь. Поднимаешь её — корабль на экране поднимается, опускаешь — опускается. Экрана не касаешься. Камера не нужна: телефон пищит ультразвуком и слушает эхо своим микрофоном.Играть: sonaroids.app (лучше на iPhone). Код: github.com/neokrasav4ik/sonaroids, MIT.С чего всё началосьМне попался проект sonar.cool: Мак листает страницы жестами руки, а «видит» их через собственные динамики и микрофон. Мака у меня нет, зато есть iPhone. Отсюда вопрос: полу…
Всем привет, это третья часть, в которой пилю калькулятор плитки - tilely.ru. Получился довольно крупный патч, в основном вокруг 3D-режима, и там оказалось прилично багов. Многое пришлось переделывать из того, что сначала казалось логичным, а на практике оказалось вообще неудобным.Перед самим 3D - то, что допилил ещё раньше в очереди. Теперь можно загружать фото плитки, чтобы не смотреть на однотипные прямоугольники одного цвета. Есть кнопка «применить ко всем комнатам». Если у вас, скажем, са…
Привет, я – фронтенд-разработчик и сегодня хотел бы поднять данную тему. Сразу скажу: так как работаю в основном с React, то в конце будет разбор структуры именно в разрезе React + стейт-менеджер MobX. Итак, поехали. В большинстве SPA-приложений после успешного входа сервер возвращает JWT, фронтенд сохраняет его в localStorage, а затем при каждом запросе добавляет в заголовок Authorization.Получается примерно такая последовательность:POST /login -> JWT -> localStorage -> Authorization:…
Мне давно нравится идея хранить заметки обычными Markdown‑файлами в своём репозитории на GitHub. Файлы остаются твоими, их можно открыть на github.com или в любом редакторе, а история изменений достаётся даром, это просто коммиты.Был проект, который делал ровно это: BatNoter, 2,4 тысячи звёзд на GitHub. Веб‑приложение на React, заметки в вашем репозитории. Но у него был свой сервер на Go: через него шёл вход по OAuth и все запросы к GitHub. В конце 2022 года сервер batnoter.com перестал отвечат…
Аналоги умеют мигать рамкой вокруг обновившегося компонента. Этого хватает, чтобы заметить проблему, но не чтобы её починить: остаётся вопрос «а что вообще изменилось?».Оказалось, Vue знает ответ и отдаёт его сам — просто этим почти никто не пользуется. Под катом: как устроен хук renderTriggered, почему сырое событие из него нечитаемо, и три способа уронить прод‑сборку чужого приложения дев‑инструментом, который в проде вообще не должен работать.Чего не хваталоЕсть Vue DevTools с галкой «Highli…
Электронные навигационные карты (ENC) формата S-57 стоят на каждом коммерческом судне в мире. Стандарт живёт с 1996 года, но живого JavaScript-парсера для него я так и не нашёл: либо серверный GDAL, либо проприетарные SDK за шестизначные суммы в год. Я написал полный стек с нуля: бинарный парсер ISO 8211, доменную модель S-57 и S-101, рендер символики S-52 на Canvas2D. Всё бесплатно работает в браузере, без сервера, MIT-лицензия. s57-parser: морская карта S-57 в браузере. В коде слева оставил п…