Мой первый KitRover: попытка сделать машинку с управлением по сети (часть 1)Мой первый KitRover: попытка сделать машинку с управлением по сети (часть 2)ВступлениеВ предыдущей статье рассказал, как сделал управление с телефона. Теперь можно управлять машинкой в пределах комнаты, но для выезда за её пределы, хотелось видеть, куда движется устройство на экране. Чем я и начал заниматься дальше.LiveKitНастраивая звонки для одного из сервисов, я познакомился с проектом LiveKit. Несложно поднять в Doc…
telEgo - шустрый Telegram прокси на Go, в последней версии которого появилась поддержка всех четырёх WEB протоколов.Telegram Desktop теперь умеет подключаться через WEB proxy. Снаружи такое соединение выглядит как работа обычного сайта: клиент открывает HTTPS-страницу в браузере, а она становится транспортом между Telegram Desktop и прокси.У тех, кто уже держит свой MTProxy, сразу возникает практический вопрос: что делать с портом 443? Его нельзя одновременно отдать MTProxy и Nginx. Переносить …
Продолжение первой и второй частей. В первой мы развернули двухуровневую инфраструктуру: Root CA и три промежуточных центра — Person, Server и Code. Во второй научились отзывать сертификаты, раздавать CRL и подняли OCSP-responder. В самом начале первой части я обещал «беспарольный вход в админку». Пришло время его получить.Как и предыдущие части, статья задумана как подробное пособие: по каждой директиве и каждой переменной приведён расширенный справочник — синтаксис, допустимые значения, умолч…
Сейчас неконтролируемые вызовы go func() встречаются уже не так часто, как на заре Go.Наверняка многие знают о принципе: «Никогда не запускайте горутину, если не знаете, как она завершится». И всё же мне до сих пор время от времени попадаются несинхронизированные вызовы go func(), которые запускают задачи без ожидания результата.Я не говорю о заданиях, переданных в специализированную очередь задач вроде Asynq. В таком случае система управления задачами сама отвечает за жизненный цикл запущенных…
Меня зовут Вера Касьяненко, я разработчик из команды DevRails AI в MTS Web Services. Сейчас мы создаем агента-разработчика — сервис, в котором языковая модель сама пишет код, запускает тесты, делает ревью и создает коммиты.Когда прикручиваешь модель к сервису и выдаешь ей инструменты, довольно быстро обнаруживается неудобный факт: команды, которые она генерирует, где-то выполняются. И от ответа на вопрос, где именно — и кто этим местом управляет, — зависит вся остальная архитектура.В статье рас…
Мой первый KitRover: попытка сделать машинку с управлением по сети (часть 1)ВступлениеРаботать с большой машинкой, о которой рассказал в предыдущей статье, куда интереснее, но писать под неё баги было волнительно. При резкой подаче команды вращать колёса на 100%, ровер едва не срывался с подставки, намереваясь влететь в стену, поэтому нужно было собрать что‑то поменьше.Сборка настольной версии ровера (Rover Mini)У меня уже была пара наборов для сборки, но удобно разместить блок аккумулятора (на…
У меня в управлении и разработке сервис, который обрабатывает большой поток PDF файлов, собранных различными генераторами. В начале июня произошел инцидент, в котором поды поднялись в пик количества по HPA и наглухо зависли на 30 минут. 100% CPU, обработка стоит, очередь копится, алерты летят пачками спустя 30 минут зависания.Тогда было принято решение чинить не проблему, а симптом. Как по мне, лучшее решение в ситуации с инцидентом. Но недавно руки дошли выявить корень проблемы, и крылся он в …
И почему самым неожиданным bottleneck оказался не поиск, не индексы и даже не база данных, а JSONЕсть проекты, которые начинаются с требования бизнеса. А есть проекты, которые начинаются с совершенно другого вопроса:А насколько далеко можно зайти, если убрать из системы всё лишнее?У меня получился второй вариант.Есть интернет-магазин примерно с четырьмя миллионами товаров и сотнями тысяч посадочных страниц. На сайте есть фильтры, сортировки, пагинация и довольно большой набор URL, которые посто…
Это вторая статья серии, посвященной проектированию системы сокращения ссылок. В предыдущей мы спроектировали архитектуру сервиса, разделил систему на микросервисы, определили зоны ответственности и описали взаимодействие. Сегодня перейдем от теории к практике и займемся основой сокращателя ссылок — микросервисом генерации уникальных идентификаторов. Почему генерацию идентификаторов стоит рассматривать в отдельной статье? На первый взгляд задача кажется тривиальной: взять строку из случайных си…