В 2ГИС мы пишем на Go и помогаем инженерам перейти на него с других языков. Знакомство с Go открывает возможность контрибьютить в одну из самых востребованных технологий современности. На Go написаны проекты, без которых сложно представить мир распределённых систем: K8s, CockroachDB, Badger, Prometheus, VictoriaMetrics, Jaeger, NATS, Temporal.
Переход на Go — реальность! В карточках рассказываем, как это получилось у Саши. Хочешь так же? Ищи подходящую вакансию на лендинге.
Переход на Go — реальность! В карточках рассказываем, как это получилось у Саши. Хочешь так же? Ищи подходящую вакансию на лендинге.
Это открытый прокси-сервер и кэш для Go Modules, который поможет вам:
⚡ Ускорить сборку в CI/CD за счёт локального кэша зависимостей.
🔒 Гарантировать доступность модулей, даже если исходный репозиторий пропал или временно недоступен.
🔐 Организовать безопасное хранилище приватных модулей для вашей компании.
☁️ Интегрироваться с любыми хранилищами: S3, GCS, Azure Blob, MongoDB, локальный диск и т.д.
Кратко о том, как запустить:
1. Скачайте и запустите Docker-образ:
docker run -p 3000:3000 gomods/athens:latest
2. Установите прокси в окружении:
export GOPROXY=http://localhost:3000
3. Работаем как обычно:
go get github.com/your/[email protected]
Athens полностью совместим с официальным протоколом загрузки модулей Go (v1.12+). Под капотом — адаптеры для Git, CDN и множество опций по хранению и авторизации.
Проект активно развивается:
- Более 200 участников на GitHub
- 4.5 тыс. звёзд ⭐
- Регулярные релизы (последний — v0.16.0)
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Какой должна быть система управления доступами в современной облачной платформе?
Рассказывают разработчики нового облака MWS.
🔗Читайте статью, чтобы узнать:
➡️ Почему нельзя не поддержать протокол авторизации, созданный еще в AWS
➡️ Какой должна быть архитектура сервиса, чтобы ограничить радиус потенциальной хакерской атаки
➡️ Зачем заводить учетные записи для роботов
🔗 Подпишись на облачный хаб MWS
⏩️ Там регулярно рассказываем, как строим новое облако с нуля.
Рассказывают разработчики нового облака MWS.
🔗Читайте статью, чтобы узнать:
Please open Telegram to view this post
VIEW IN TELEGRAM
🧑💻 Godo — библиотека, предоставляющая простой и эффективный способ взаимодействия с DigitalOcean API v2 на языке Go. Она покрывает основные методы управления дроплетами, реестрами и другими сервисами DO, поддерживает пагинацию, автоматические повторы запросов и экспоненциальный бекофф.
Использование инструмента интуитивно понятно: создаёте клиент с токеном и работаете с API через готовые методы. Например, создание дроплета или получение списка репозиториев реализовано буквально в несколько строк.
🤖 GitHub
@golang_google
Использование инструмента интуитивно понятно: создаёте клиент с токеном и работаете с API через готовые методы. Например, создание дроплета или получение списка репозиториев реализовано буквально в несколько строк.
🤖 GitHub
@golang_google
Вы будете частью большой команды, которая занимается разработкой PaaS платформы: механикой сборки, тестированием и доставкой сервисов в разные окружения, а также runtime механикой по управлению сервисами в k8s кластерах.
Каждый из 4000+ сервисов Авито журналирует свою работу, а команда мониторинга сохраняет и обрабатывает этот огромный поток логов, метрик, находя за секунды из гигабайтов данных сломанный сервис/сценарий и сообщая релевантной команде.
С одной стороны команда помогает Авито полностью соответствовать требованиям регулятора, а с другой — предоставляет пользователям инновационные возможности применять предлагаемые государством сервисы для улучшения своего пользовательского опыта и повышения безопасности на площадке.
Команда Performance отвечает за скорость работы сервиса на всех платформах. Вам предстоит создавать инструменты тестирования, анализа и контроля за производительностью, помогать продуктовым командам делать Авито быстрым и надёжным, развивая культуру производительности в компании.
Вам предстоит поддерживать и развивать высоконагруженный сервис, выполнять задачи по улучшению пользовательского опыта, проектировать и реализовывать комплексные механики, а также развивать и поддерживать существующие системы, компоненты и библиотеки.
А ещё вас ждёт:
- прозрачная система премий и достойная зарплата, размер которой обсуждается на собеседовании
- возможность реализовать свои идеи в проекте с многомиллионной аудиторией
- талантливая команда, готовая поддержать ваши инициативы
- мощное железо, дополнительные мониторы и всё, что нужно для продуктивной работы
- личный бюджет на обучение, который можно тратить на книги, курсы и конференции
- забота о здоровье: с первого дня у вас будет ДМС со стоматологией, в офисе принимают терапевт и массажист
- удалённая работа и комфортный офис в двух минутах от метро «Белорусская»: панорамный вид на центр города, места для уединённой работы и зоны отдыха.
Откликайтесь по ссылкам и присоединяйтесь к одной из команд!
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Machinelearning
This media is not supported in your browser
VIEW IN TELEGRAM
Представьте, что учите язык не по учебникам, а через ситуации, в которых оказываетесь каждый день. Именно эту идею воплотила команда Google в проекте Little Language Lessons— трех экспериментах на базе Gemini API, которые делают обучение живым и контекстным.
Первый эксперимент, Tiny Lesson, решает проблему «как сказать это сейчас?». Вы описываете ситуацию — например, «потерял паспорт» — и получаете словарь и фразы в формате JSON. Всё благодаря промптам, где Gemini генерирует структурированные данные: массив терминов с транскрипцией и переводом, а также советы по грамматике.
Например, если целевой язык — японский, модель сама определит, нужна ли транскрипция ромадзи, и подготовит материал за 2 API-запроса. Это не просто список слов, а готовый микрокурс под конкретный сценарий.
Второй, Slang Hang, убирает «учебникоговорение». Тут Gemini выступает как сценарист: создаёт диалоги на целевом языке с культурными нюансами и сленгом. Все генерируется одним запросом — от контекста сцены до реплик с пояснениями. Пример: диалог продавца и туриста может включать неформальные выражения, которые не найдешь в стандартных учебниках.
Правда, иногда модель ошибается или придумывает выражения, так что без проверки носителем не обойтись. Но сам подход — дать пользователю «уши» в реальных разговорах выглядит перспективно, особенно с интеграцией Cloud Translation для мгновенного перевода.
Третий, визуальный эксперимент — Word Cam. Наводите камеру на объект, и Gemini не только определяет его (bounding box), но и предлагает слова вроде «подоконник» или «жалюзи». Детекция работает через Gemini Vision, а дополнительные дескрипторы (цвет, материал, примеры употребления) подтягиваются отдельным запросом. Для изучения бытовой лексики почти идеально, хотя точность сильно зависит от качества снимка.
Во всех экспериментах задействован Text-to-Speech — озвучка слов и фраз. Но есть нюанс: для редких языков голоса зачастую звучат неестественно или не совпадают с диалектом. Например, выберете мексиканский испанский, а синтезатор выдаст акцент из Мадрида. Разработчики честно признают: это ограничение текущих API, и над ним еще работать.
Little Language Lessons — начало переосмысления процесса обучения языкам. Проекту пока не хватает тонкой настройки под лингвистическую специфику (идиомы или региональные диалекты), но основа уже заложена.
@ai_machinelearning_big_data
#AI #ML #LLM #Gemini
Please open Telegram to view this post
VIEW IN TELEGRAM
GoPilot — это библиотека для Go, которая позволяет вызывать ваши функции с помощью естественного языка.
⚡️ С её помощью можно:
- Анализировать запросы на естественном языке
- Автоматически выбирать нужную функцию
- Преобразовывать динамические параметры в строго типизированные структуры
- Проверять обязательные поля и валидировать входные данные
- Управлять порядком выполнения и ответами
## Ключевые особенности
- Natural Language Processing
Обработка запросов пользователя без ручного парсинга текста.
- Automatic Function Routing
GoPilot сам сопоставляет запрос с зарегистрированной функцией.
- Type-Safe Parameter Mapping
Динамические вводимые данные конвертируются в структуры Go.
- Built-in Validation
Генерируемая схема параметров учитывает теги
required
, description
и др. - Easy Integration
Простое API: регистрируете функции и задаёте системный промпт.
- Flexible Response Handling
Поддержка разных форматов ответа и «режимов» выполнения.
## Быстрый старт
import (
"context"
"github.com/SadikSunbul/gopilot"
"github.com/SadikSunbul/gopilot/clients"
"github.com/SadikSunbul/gopilot/pkg/generator"
)
type WeatherParams struct {
City string `json:"city" description:"City name" required:"true"`
}
type WeatherResponse struct {
City string `json:"city"`
Temp int `json:"temp"`
Condition string `json:"condition"`
}
func GetWeather(p WeatherParams) (WeatherResponse, error) {
return WeatherResponse{City: p.City, Temp: 25, Condition: "sunny"}, nil
}
func main() {
client, _ := clients.NewGeminiClient(context.Background(), "API_KEY", "gemini-2.0-flash")
gp, _ := gopilot.NewGopilot(client)
weatherFn := &gopilot.Function[WeatherParams, WeatherResponse]{
Name: "weather-agent",
Description: "Get weather by city",
Parameters: generator.GenerateParameterSchema(WeatherParams{}),
Execute: GetWeather,
}
gp.FunctionRegister(weatherFn)
gp.SetSystemPrompt(nil)
// Генерация + выполнение за один вызов
result, _ := gp.GenerateAndExecute("Какая погода в Москве?")
fmt.Printf("%+v\n", result)
}
▪ Github
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
«Дифференциальное покрытие» — это приём, который помогает быстро находить проблемные участки в коде, сравнивая покрытие не‐упавших и упавших тестов.
📌 Зачем это нужно
- В больших кодовых базах вручную отслеживать, где именно тест упал — долго и сложно.
- Сравнивая два профиля покрытия (успешного и провального), можно автоматически выделить только те участки, которые запустились при падении теста и не запускались ранее.
🚀 Как применить на Go-проекте
1. Собираем профиль «успешного» запуска (пропускаем проблемный тест):
go test -coverprofile=c1.prof -skip='TestAddSub$'
Выделяем строки, уникальные для упавшего теста:
(head -1 c1.prof; diff c[12].prof | sed -n 's/^> //p') > c3.prof
head -1 сохраняет шапку профиля
diff… | sed отбирает только новые строки
Открываем результат в браузере:
```bash
go tool cover -html=c3.prof
🔍 Интерпретация отчёта
Зелёным подсвечены участки, которые запустились только в упавшем тесте.
Красным — код, который обычно выполняется, но не был затронут падением теста (может натолкнуть на дополнительные вопросы).
Именно зелёные строки стоят изучить в первую очередь — там, скорее всего, спрятана ошибка.
Пример из math/big
В примере теста TestAddSub падение происходило из-за пропущенного za.neg = false в ветке else.
Из более чем 15 000 строк кода дифференциальное покрытие сузило поиск до 10 строк — двух из них было достаточно, чтобы диагностировать баг.
⚠️ Ограничения
Если баг зависит от специфичных данных или тест не чувствителен к ошибке, покрытие может не указать на проблемный код.
Тем не менее, в большинстве случаев «дифф-покрытие» даёт мгновенный фокус на действительно важных местах.
Используйте дифференциальное покрытие при отладке любых модулей Go (и не только!) — это дешёвый и высокоэффективный способ быстро найти виновника падения теста.
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM