37.3K subscribers
1.47K photos
34 videos
5 files
1.62K links
加入频道
В 2ГИС мы пишем на Go и помогаем инженерам перейти на него с других языков. Знакомство с Go открывает возможность контрибьютить в одну из самых востребованных технологий современности. На Go написаны проекты, без которых сложно представить мир распределённых систем: K8s, CockroachDB, Badger, Prometheus, VictoriaMetrics, Jaeger, NATS, Temporal.

Переход на Go — реальность! В карточках рассказываем, как это получилось у Саши. Хочешь так же? Ищи подходящую вакансию на лендинге.
👣 Athens

Это открытый прокси-сервер и кэш для 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
⏩️Там регулярно рассказываем, как строим новое облако с нуля.
Please open Telegram to view this post
VIEW IN TELEGRAM
🧑‍💻 Godo — библиотека, предоставляющая простой и эффективный способ взаимодействия с DigitalOcean API v2 на языке Go. Она покрывает основные методы управления дроплетами, реестрами и другими сервисами DO, поддерживает пагинацию, автоматические повторы запросов и экспоненциальный бекофф.

Использование инструмента интуитивно понятно: создаёте клиент с токеном и работаете с API через готовые методы. Например, создание дроплета или получение списка репозиториев реализовано буквально в несколько строк.

🤖 GitHub

@golang_google
😎Сразу пять команд Авито в поиске разработчиков:

1️⃣ Backend-разработчик в команду PaaS

Вы будете частью большой команды, которая занимается разработкой PaaS платформы: механикой сборки, тестированием и доставкой сервисов в разные окружения, а также runtime механикой по управлению сервисами в k8s кластерах.

2️⃣ Backend-разработчик в команду Monitoring/Observability

Каждый из 4000+ сервисов Авито журналирует свою работу, а команда мониторинга сохраняет и обрабатывает этот огромный поток логов, метрик, находя за секунды из гигабайтов данных сломанный сервис/сценарий и сообщая релевантной команде.

3️⃣ Go-разработчик в команду GR-инструментов

С одной стороны команда помогает Авито полностью соответствовать требованиям регулятора, а с другой — предоставляет пользователям инновационные возможности применять предлагаемые государством сервисы для улучшения своего пользовательского опыта и повышения безопасности на площадке.

4️⃣ Go-разработчик в команду Performance

Команда Performance отвечает за скорость работы сервиса на всех платформах. Вам предстоит создавать инструменты тестирования, анализа и контроля за производительностью, помогать продуктовым командам делать Авито быстрым и надёжным, развивая культуру производительности в компании.

5️⃣ Go-разработчик в команду IDP

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

А ещё вас ждёт:

- прозрачная система премий и достойная зарплата, размер которой обсуждается на собеседовании
- возможность реализовать свои идеи в проекте с многомиллионной аудиторией
- талантливая команда, готовая поддержать ваши инициативы
- мощное железо, дополнительные мониторы и всё, что нужно для продуктивной работы
- личный бюджет на обучение, который можно тратить на книги, курсы и конференции
- забота о здоровье: с первого дня у вас будет ДМС со стоматологией, в офисе принимают терапевт и массажист
- удалённая работа и комфортный офис в двух минутах от метро «Белорусская»: панорамный вид на центр города, места для уединённой работы и зоны отдыха.

Откликайтесь по ссылкам и присоединяйтесь к одной из команд!
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Machinelearning
This media is not supported in your browser
VIEW IN TELEGRAM
📌Как Gemini превращает изучение языков в персонализированный опыт: обзор 3 экспериментов.

Представьте, что учите язык не по учебникам, а через ситуации, в которых оказываетесь каждый день. Именно эту идею воплотила команда 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

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