A Look at Upcoming Innovations in Electric and Autonomous Vehicles Интернет нестабилен. Разработчик взял ситуацию в свои руки

Интернет нестабилен. Разработчик взял ситуацию в свои руки

Интернет нестабилен. Разработчик взял ситуацию в свои руки

Когда зарубежные сервисы начали падать в самый неподходящий момент, один разработчик не стал ждать - и за несколько вечеров собрал собственный инструмент, который решает проблему автоматически. Без лишних телодвижений и ежедневной ручной работы.

Проблема, которую многие уже знают по себе

Нестабильность доступа к зарубежным ресурсам и API давно перестала быть разовым сбоем - она превратилась в фоновый раздражитель рабочего дня. Узлы падают без предупреждения, скорость проседает, конфигурации протухают за ночь. Полагаться на один зарубежный сервер в таких условиях - затея ненадёжная.

Ситуацию усугубляет простой факт: когда включаются ограничения, зайти на GitHub или Google для поиска свежих конфигураций становится невозможным. Искать их в публичных сообществах - лотерея с низкими шансами на выигрыш.

От скрипта к полноценному агрегатору

Идея начиналась скромно: написать скрипт на Go, который каждый час скачивал бы актуальные open-source конфигурации из репозиториев GitHub и складывал их в текстовый файл. Никакой магии - просто своя локальная база для быстрого копирования на телефон.

Затем пришло улучшение. HTTP-сервер с раздачей конфигов по локальной сети позволил сделать процесс полностью автоматическим: телефон в той же сети - клиент сам обновляет подписку. Руки не нужны.

По ходу разработки пришлось разобраться с несколькими неприятными моментами:

  • Утечка памяти из-за незакрытых Body при чтении данных
  • Data Race между горутинами записи и чтения файла - решилась через атомарное переименование временного файла
  • Перегрузка мобильного клиента тысячами конфигураций - закрыта пагинацией через параметры в URL
  • Дублирование конфигов из разных репозиториев - отсев через map убрал около 50% повторов

Фильтрация, геолокация и веб-интерфейс

Финальная версия инструмента работает многоуровнево. Сначала отсеиваются дубликаты. Потом - ping-проверка TCP-соединения, которая отбраковывает ещё около 30% нерабочих адресов. Оставшиеся конфигурации получают стандартизированные названия с флагом страны и порядковым номером - никакой рекламы и мусора в именах.

Определение страны реализовано через базу GeoLite. Кеширование в оперативной памяти снимает лишнюю нагрузку при частых запросах клиента. Веб-интерфейс с QR-кодом, управлением фильтрами, просмотром логов и принудительным обновлением делает работу с инструментом удобной даже без технической подготовки.

Честные ограничения

Решение не претендует на универсальность. Компьютер должен быть включён - иначе раздача встаёт. Для работы нужен ПК, у которого есть доступ к GitHub. При слишком частом принудительном обновлении GitHub может ответить Rate Limit-ом. Часть клиентов семейства V2Ray иногда выдаёт ошибки парсинга.

Но для своей задачи - иметь актуальные рабочие конфигурации каждый день без ручного труда - инструмент справляется полностью. Иногда достаточно просто сделать что-то самому.