Нужен лёгкий и быстрый инструмент для анализа логов в формате Common/Combined Log Format? Попробуй Xilt — CLI-утилиту на Go с поддержкой многопоточности.
Что умеет:
• 📥 Парсит .log-файлы и сохраняет в SQLite
• ⚙️ Управление потоками - avgLogSize, batchSize, maxMemUsage
• 🧠 Автоиндексы по IP, методу, пути, времени, referer
• 💻 Verbose-режим для дебага
• 🟨 Go-install без проблем
📦 Установка:
go install go.vxn.dev/xilt/cmd/xilt@latest
▶️ Запуск:
xilt access.log logs.db
🔗 GitHub — thevxn/xilt
#Golang #Logs #SQLite #CLItools #DevOps
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Он построен на базе Istio и Envoy и предназначен для интеграции в инфраструктуру микросервисов, обеспечивая управление трафиком, безопасность и поддержку AI-сервисов.
🔧 Основные возможности Higress
Интеграция с AI-сервисами: Higress поддерживает AI-ориентированные функции, включая интеллектуальное управление трафиком и безопасность контента.
- Поддержка WebAssembly (Wasm): Позволяет расширять функциональность шлюза с помощью плагинов, написанных на различных языках программирования.
- Соответствие стандартам: Поддерживает стандарты Ingress, Gateway API и Istio API, обеспечивая совместимость с другими решениями.
- Управление API: Предоставляет функции для управления API, включая аутентификацию, авторизацию и мониторинг.
🌐GitHub: github.com/alibaba/higress
🔗 Официальный сайт: higress.cn
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
В базе данных Dolt (аналог Git, но для SQL-таблиц) после рефакторинга один из бенчмарков (types_scan) внезапно стал работать на 30% медленнее. Причина? Казалось бы, невинная строчка кода.
📉 Что произошло
Метод GetBytes() начал вызывать ReadBytes() у интерфейса ValueStore. Всё выглядело логично, пока не включили профилировщик Go и не обнаружили странную активность:
🔍 runtime.newobject вызывался слишком часто → программа делала много лишних аллокаций в куче.
📦 Где зарыта собака
func (vs nodeStore) ReadBytes(...) ...
Этот метод использовал приёмник по значению (vs nodeStore). Это значит, что вся структура копировалась при каждом вызове метода, даже если она большая.
🚑 Как пофиксили
Просто поменяли на приёмник по указателю:
func (vs *nodeStore) ReadBytes(...) ...
Вуаля — аллокейшны исчезли, производительность восстановилась.
🧠 Вывод
❗ Методы с приёмником по значению = риск лишнего копирования и аллокаций
🛠 Даже один маленький метод может резко замедлить ваш код
🔍 Профилировка в Go — мощный инструмент. Используй pprof!
Полный разбор в блоге DoltHub
Подробнее про Dolt
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🌟Cozystack – бесплатный PaaS-фреймворк для создания интеллектуальной системы серверов.
⚡️С его помощью вы можете превратить ваши сервера в управляемое облако с примитивами Kubernetes, базами данных, виртуальными машинами, балансировщиками и кэшем через простой REST API.
🔥Сервис идеально подходит для частных облаков и экономичных dev-сред, имеет открытую архитектуру, гибкую интеграцию и встроенный мониторинг данных.
🤖GitHub
@golang_google
⚡️С его помощью вы можете превратить ваши сервера в управляемое облако с примитивами Kubernetes, базами данных, виртуальными машинами, балансировщиками и кэшем через простой REST API.
🔥Сервис идеально подходит для частных облаков и экономичных dev-сред, имеет открытую архитектуру, гибкую интеграцию и встроенный мониторинг данных.
🤖GitHub
@golang_google
Возможности
- Прослушивание изменений в PostgreSQL в режиме реального времени.
- Поддержка нескольких слотов репликации.
- Удобный вывод в формате JSON.
- Готов к использованию в качестве сервиса.
Пример использования
1. Создаём слот репликации:
SELECT * FROM pg_create_logical_replication_slot('test_slot', 'wal2json');
2. Запускаем wal-listener:
wal-listener --dsn "host=localhost port=5432 user=postgres dbname=test" --slot test_slot
3. Получаем JSON-объекты при изменениях в базе данных.
https://github.com/ihippik/wal-listener
#devops #девопс #PostgreSQL #sql
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🏛️ Athens — библиотека, предоставляющая корпоративный прокси для модулей Go.
Проект уже используют в продакшене несколько компаний — он поддерживает разные бэкенды для хранения и легко интегрируется в существующую инфраструктуру. Athens не просто кэширует зависимости, но и позволяет контролировать их распространение в организации.
🤖 GitHub
@golang_google
Проект уже используют в продакшене несколько компаний — он поддерживает разные бэкенды для хранения и легко интегрируется в существующую инфраструктуру. Athens не просто кэширует зависимости, но и позволяет контролировать их распространение в организации.
🤖 GitHub
@golang_google
📌 Kaitai Struct — декларативный язык для разбора бинарных форматов. Этот инструмент предлагает элегантное решение — вы описываете структуру данных в YAML-подобном синтаксисе, а компилятор генерирует готовые парсеры на 8+ языках.
Проект включает коллекцию готовых описаний популярных форматов, от ZIP-архивов до PNG-изображений. Сгенерированный код можно использовать даже в проприетарных продуктах благодаря либеральной лицензии рантайма.
🤖 GitHub
@golang_google
Проект включает коллекцию готовых описаний популярных форматов, от ZIP-архивов до PNG-изображений. Сгенерированный код можно использовать даже в проприетарных продуктах благодаря либеральной лицензии рантайма.
🤖 GitHub
@golang_google
📊 ClickVisual: лёгкий веб-интерфейс для анализа логов в ClickHouse. Этот инструмент от команды @OfficeSDK превращает сырые данные из ClickHouse в наглядные гистограммы и таблицы, сохраняя при этом возможность детального поиска через SQL-запросы.
Проект выделяется минималистичным подходом: готовые Docker-образы, встроенная аутентификация через GitHub/GitLab и открытая архитектура.
🤖 GitHub
@golang_google
Проект выделяется минималистичным подходом: готовые Docker-образы, встроенная аутентификация через GitHub/GitLab и открытая архитектура.
🤖 GitHub
@golang_google
Это открытый прокси-сервер и кэш для Go Modules, который поможет вам:
⚡ Ускорить сборку в CI/CD за счёт локального кэша зависимостей.
🔒 Гарантировать доступность модулей, даже если исходный репозиторий пропал или временно недоступен.
🔐 Организовать безопасное хранилище приватных модулей для вашей компании.
☁️ Интегрироваться с любыми хранилищами: S3, GCS, Azure Blob, MongoDB, локальный диск и т.д.
Кратко о том, как запустить:
1. Скачайте и запустите Docker-образ:
docker run -p 3000:3000 gomods/athens:latest
2. Установите прокси в окружении:
export GOPROXY=https://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
🧑💻 Godo — библиотека, предоставляющая простой и эффективный способ взаимодействия с DigitalOcean API v2 на языке Go. Она покрывает основные методы управления дроплетами, реестрами и другими сервисами DO, поддерживает пагинацию, автоматические повторы запросов и экспоненциальный бекофф.
Использование инструмента интуитивно понятно: создаёте клиент с токеном и работаете с API через готовые методы. Например, создание дроплета или получение списка репозиториев реализовано буквально в несколько строк.
🤖 GitHub
@golang_google
Использование инструмента интуитивно понятно: создаёте клиент с токеном и работаете с API через готовые методы. Например, создание дроплета или получение списка репозиториев реализовано буквально в несколько строк.
🤖 GitHub
@golang_google
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
Cache-Control
. Простота настройки делает Reload удобным инструментом для ускорения разработки и тестирования. Она идеально подходит для разработчиков, которые хотят минимизировать рутинные задачи и сосредоточиться на создании функционального и качественного кода.@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
May the 4th be with you: 4 мая — неофициальный день «Звёздных войн».
ASCII Movie - это проект с открытым исходным кодом, который будет «транслировать» оригинальный фильм «Звёздные войны» (эпизод IV) в виде ASCII-графики прямо в ваш терминал, используя протоколы SSH или Telnet.
Сервис реализован на языке Go и снабжён простым текстовым интерфейсом с поддержкой клавиатуры и мыши, а также доступен в виде Docker-контейнера.
sudo docker run --rm -it ghcr.io/gabe565/ascii-movie play
#MayThe4th
https://github.com/gabe565/ascii-movie
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🚥 Вредоносные Go‑модули распространяют DiskRanger
1) Обнаружены несколько вредоносных Go‑модулей, которые загружали malware DiskRanger.
2) Модули маскировались под HTTP и logging библиотеки.
3) Malware активировался через init‑функции и хуки компиляции.
4) Цель — supply chain атака на разработчиков и CI/CD.
⚠️ Рекомендации:
● аудит зависимостей
● избегать auto update неизвестных пакетов
● следить за CVE и делетом модулей
📍 Судя по всему, supply chain‑атаки становятся всё чаще, даже опытные Go‑разработчики попадаются на них.
✅ Статья полностью
@golang_google
1) Обнаружены несколько вредоносных Go‑модулей, которые загружали malware DiskRanger.
2) Модули маскировались под HTTP и logging библиотеки.
3) Malware активировался через init‑функции и хуки компиляции.
4) Цель — supply chain атака на разработчиков и CI/CD.
⚠️ Рекомендации:
● аудит зависимостей
● избегать auto update неизвестных пакетов
● следить за CVE и делетом модулей
📍 Судя по всему, supply chain‑атаки становятся всё чаще, даже опытные Go‑разработчики попадаются на них.
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
📝 Как составить резюме, чтобы попасть в Magnificent 7: анализ кейса
Недавно инженер поделился своим резюме, которое помогло ему получить предложение работы от одной из rjvgfybb Magnificent 7 (Apple, Microsoft, Google, Amazon, Meta, Nvidia, Tesla).
Magnificent 7 (в переводе — «Великолепная семёрка») — это современное неофициальное название семи крупнейших и самых влиятельных технологических компаний США, которые лидируют на фондовом рынке, в инновациях и в масштабе бизнеса.
Разберём, что сделало его резюме успешным и чему можно научиться.
📌 Главные выводы из резюме:
1. Фокус на достижениях, а не обязанностях.
Многие кандидаты в резюме просто перечисляют, *что они делали*, например:
- “Разрабатывал API”
- “Поддерживал базу данных”
- “Писал скрипты для автоматизации”
⚠️ Это описывает обязанности, но не показывает ценность или результат работы.
В успешном резюме инженер вместо этого написал, чего он достиг благодаря своей работе:
✅ “Разработал API, который сократил время обработки данных на 30%”
✅ “Оптимизировал запросы к базе данных, уменьшив среднее время ответа с 2 секунд до 0.5 секунд”
✅ “Автоматизировал процесс деплоя, снизив количество ошибок на 15%”
Такой подход показывает, как конкретно ваша работа помогла команде или бизнесу.
Работодатель видит результаты, которые вы приносите, а не просто описание того, что вы делали.
💡 Почему это важно?
Big Tech-компании ищут инженеров, которые:
- Умеют оценивать влияние своей работы
- Думают о метриках успеха
- Приносят измеримый результат
Если в резюме нет цифр, улучшений или влияния на процесс — работодатель сам должен это додумывать.
А успешное резюме снимает вопросы и сразу показывает: “Вот что я сделал, вот как я улучшил продукт/процесс/результат.”
2. Лаконичность и компактность.
✅ 1 страница
✅ Чёткая структура: “Опыт”, “Навыки”, “Образование”
✅ Без фото, графиков, цветных рамок — чистый текст
3. Цифры везде, где это возможно.
Любое достижение сопровождается конкретной метрикой: улучшение производительности, сокращение времени, рост количества пользователей.
Даже небольшие улучшения указаны численно.
4. Поддержка через проекты с открытым кодом.
Инженер приложил ссылку на GitHub с реальными проектами — это усилило доверие к нему Как с специалисту.
5. Навыки — только релевантные вакансии.
В разделе Skills нет «MS Word» или «PowerPoint».
Только языки, технологии, инструменты, которые нужны для позиции (Python, Kubernetes, CI/CD, etc.).
6. Интерншипы и стажировки — это опыт.
Каждый опыт, даже в рамках стажировки, описан с результатами.
Вакансии в топ-компаниях ценят любую практику в реальной команде.
---
🎯 Что важно для Big Tech:
✅ Результаты > Задачи.
✅ Цифры.
✅ 1 страница.
✅ GitHub/портфолио.
✅ Релевантные навыки.
---
🔥 Совет:
Ваше резюме — это реклама вас как продукта.
Покажите пользу, которую вы можете принести, а не просто список обязанностей.
➡️ Статья
@golang_google
Недавно инженер поделился своим резюме, которое помогло ему получить предложение работы от одной из rjvgfybb Magnificent 7 (Apple, Microsoft, Google, Amazon, Meta, Nvidia, Tesla).
Magnificent 7 (в переводе — «Великолепная семёрка») — это современное неофициальное название семи крупнейших и самых влиятельных технологических компаний США, которые лидируют на фондовом рынке, в инновациях и в масштабе бизнеса.
Разберём, что сделало его резюме успешным и чему можно научиться.
📌 Главные выводы из резюме:
1. Фокус на достижениях, а не обязанностях.
Многие кандидаты в резюме просто перечисляют, *что они делали*, например:
- “Разрабатывал API”
- “Поддерживал базу данных”
- “Писал скрипты для автоматизации”
⚠️ Это описывает обязанности, но не показывает ценность или результат работы.
В успешном резюме инженер вместо этого написал, чего он достиг благодаря своей работе:
✅ “Разработал API, который сократил время обработки данных на 30%”
✅ “Оптимизировал запросы к базе данных, уменьшив среднее время ответа с 2 секунд до 0.5 секунд”
✅ “Автоматизировал процесс деплоя, снизив количество ошибок на 15%”
Такой подход показывает, как конкретно ваша работа помогла команде или бизнесу.
Работодатель видит результаты, которые вы приносите, а не просто описание того, что вы делали.
💡 Почему это важно?
Big Tech-компании ищут инженеров, которые:
- Умеют оценивать влияние своей работы
- Думают о метриках успеха
- Приносят измеримый результат
Если в резюме нет цифр, улучшений или влияния на процесс — работодатель сам должен это додумывать.
А успешное резюме снимает вопросы и сразу показывает: “Вот что я сделал, вот как я улучшил продукт/процесс/результат.”
2. Лаконичность и компактность.
✅ 1 страница
✅ Чёткая структура: “Опыт”, “Навыки”, “Образование”
✅ Без фото, графиков, цветных рамок — чистый текст
3. Цифры везде, где это возможно.
Любое достижение сопровождается конкретной метрикой: улучшение производительности, сокращение времени, рост количества пользователей.
Даже небольшие улучшения указаны численно.
4. Поддержка через проекты с открытым кодом.
Инженер приложил ссылку на GitHub с реальными проектами — это усилило доверие к нему Как с специалисту.
5. Навыки — только релевантные вакансии.
В разделе Skills нет «MS Word» или «PowerPoint».
Только языки, технологии, инструменты, которые нужны для позиции (Python, Kubernetes, CI/CD, etc.).
6. Интерншипы и стажировки — это опыт.
Каждый опыт, даже в рамках стажировки, описан с результатами.
Вакансии в топ-компаниях ценят любую практику в реальной команде.
---
🎯 Что важно для Big Tech:
✅ Результаты > Задачи.
✅ Цифры.
✅ 1 страница.
✅ GitHub/портфолио.
✅ Релевантные навыки.
---
🔥 Совет:
Ваше резюме — это реклама вас как продукта.
Покажите пользу, которую вы можете принести, а не просто список обязанностей.
@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM