Позволяет управлять всеми ресурсами (контейнеры, образы, тома, сети и многое другое) с помощью графического интерфейса и/или удобного API.
📝 Документация
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥2❤1
Яндекс это же сайт, что я там буду делать?
Разговор с тимлидом команды Serverless Yandex Cloud про продуктовые исследования, фичеборды, виртуальные команды и топ-качества разработчиков.
Смотрите выпуск на YouTube канале Yandex Cloud ➡️
00:00 Приветствие
01:19 Как держать темп разработки в распределенной команде?
03:29 Про то, как работают виртуальные команды
07:50 Как получается удержать экспертизу в команде?
10:04 Про продуктовые исследования
15:04 Про работу с сообществом и custdev
19:23 Про фичеборд и голосование
23:35 Продукт для разработчиков
24:24 Про вклад стажёров в развитие продукта
28:18 "Яндекс это же сайт, что я там буду делать?" путь Андрея в Яндексе
30:45 Топ-качества разработчиков команды Serverless
35:02 Про плов и то, что объединяет
Разговор с тимлидом команды Serverless Yandex Cloud про продуктовые исследования, фичеборды, виртуальные команды и топ-качества разработчиков.
Смотрите выпуск на YouTube канале Yandex Cloud ➡️
00:00 Приветствие
01:19 Как держать темп разработки в распределенной команде?
03:29 Про то, как работают виртуальные команды
07:50 Как получается удержать экспертизу в команде?
10:04 Про продуктовые исследования
15:04 Про работу с сообществом и custdev
19:23 Про фичеборд и голосование
23:35 Продукт для разработчиков
24:24 Про вклад стажёров в развитие продукта
28:18 "Яндекс это же сайт, что я там буду делать?" путь Андрея в Яндексе
30:45 Топ-качества разработчиков команды Serverless
35:02 Про плов и то, что объединяет
YouTube
Команда Serverless в Yandex Cloud, топ-качества разработчиков
Сегодня говорим про продуктовые исследования, фичеборды, виртуальные команды и топ-качества разработчиков команды бессерверных вычислений в Yandex Cloud.
Смотрите новый выпуск подкаста "Про людей".
00:00 Приветствие
01:19 Как держать темп разработки в…
Смотрите новый выпуск подкаста "Про людей".
00:00 Приветствие
01:19 Как держать темп разработки в…
👎9👍5
Задача разработать сервис, через который продавцы смогут передавать нам свои товары пачками в формате excel (xlsx). UI делать не нужно, достаточно только API.
Сервис принимает на вход ссылку на файл и id продавца, к чьему аккаунту будут привязаны загружаемые товары. Сервис читает файл и сохраняет, либо обновляет товары в БД. Обновление будет происходить, если пара (id продавца, offer_id) уже есть у нас в базе. В ответ на запрос выдаёт краткую статистику: количество созданных товаров, обновлённых, удалённых и количество строк с ошибками (например цена отрицательная, либо вообще не число).
Для проверки работоспособности сервиса нужно так же реализовать метод, с помощью которого можно будет достать список товаров из базы. Метод должен принимать на вход id продавца, offer_id, подстрока названия товара (по тексту "теле" находились и "телефоны", и "телевизоры"). Ни один параметр не является обязательным, все указанные параметры применяются через логический оператор "AND".
В каждой строке скачанного файла будет содержаться отдельный товар. Колонки в файле и соответствующие значения полей товара следующие:
- offer_id уникальный идентификатор товара в системе продавца
- name название товара
- price цена в рублях
- quantity количество товара на складе продавца
- available true/false, в случае false продавец хочет удалить товар из нашей базы
Наши ожидания
- язык программирования Go
- предоставлена инструкция по запуску приложения. В идеале (но не обязательно) – использовать контейнеризацию с возможностью запустить проект командой docker run/docker-compose up
- в качестве БД использована Postgres
- код выложен на github
Усложнения
- написаны тесты
- проведено нагрузочное тестирование с целью понять, с какой скоростью сервис может переваривать файлы
- реализована асинхронная схема работы, т.е. сервис принимает запрос, сразу возвращает id задания и в отдельной горутине начинает его выполнять. Клиент может узнать статус задания отдельным запросом.
ставьте ❤️, если подобный контент вам полезен
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
❤62👍8🔥4😁2👎1
Необходимо создать HTTP-сервис, способный ограничивать количество запросов (rate limit) из одной подсети IPv4. Если ограничения отсутствуют, то нужно выдавать одинаковый статический контент.
Требования:
язык: Go
код должен быть выложен на GitHub
ответ должен соответствовать спецификации RFC 6585
IP должен извлекаться из заголовка X-Forwarded-For
подсеть: /24 (маска 255.255.255.0)
лимит: 100 запросов в минуту
время ожидания после ограничения: 2 минуты
Пример: после 20 запросов с IP 123.45.67.89 и 80 запросов с IP 123.45.67.1 сервис возвращает 429 ошибку на любой запрос с подсети 123.45.67.0/24 в течение двух последующих минут.
Усложнения:
- покрытие тестами
- контейнеризация, возможность запустить с помощью docker-compose up
- размер префикса подсети, лимит и время ожидания можно задавать при старте сервиса
- отдельный handler для сброса лимита по префиксу
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33🔥6❤1😁1
Airflow должен быть легким в работе и развитии.
Новый инструмент astro-cli от астрономов предназначен для помощи пользователям в работе с облаком и не охватывает все рабочие процессы разработки.
Это не очень хорошо работает с докером, потому что для докера недостаточно подготовки в докер-коммуникациях.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Go Инструмент для исправления опечаток.
go install github.com/sheepla/og@latest
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6😁4❤1🥰1
Задача
Необходимо создать сервис для хранения и подачи объявлений. Объявления должны храниться в базе данных. Сервис должен предоставлять API, работающее поверх HTTP в формате JSON.
Требования
- Язык программирования Go
- Финальную версию нужно выложить на github.com (просьба не делать форк этого репозитория, дабы не плодить плагиат);
- Простая инструкция для запуска (в идеале — с возможностью запустить через docker-compose up, но это необязательно);
- 3 метода: получение списка объявлений, получение одного объявления, создание объявления;
- Валидация полей: не больше 3 ссылок на фото, описание не больше 1000 символов, название не больше 200 символов;
Если есть сомнения по деталям — решение принять самостоятельно, но в своём README.md рекомендуем выписать вопросы и принятые решения по ним.
Детали
Метод получения списка объявлений
- Пагинация: на одной странице должно присутствовать 10 объявлений;
- Cортировки: по цене (возрастание/убывание) и по дате создания (возрастание/убывание);
- Поля в ответе: название объявления, ссылка на главное фото (первое в списке), цена.
Метод получения конкретного объявления
- Обязательные поля в ответе: название объявления, цена, ссылка на главное фото;
- Опциональные поля (можно запросить, передав параметр fields): описание, ссылки на все фото.
Метод создания объявления:
- Принимает все вышеперечисленные поля: название, описание, несколько ссылок на фотографии (сами фото загружать никуда не требуется), цена;
- Возвращает ID созданного объявления и код результата (ошибка или успех).
Усложнения
Не обязательно, но задание может быть выполнено с любым числом усложнений:
- Юнит тесты: постарайтесь достичь покрытия в 70% и больше;
- Контейнеризация: есть возможность поднять проект с помощью команды docker-compose up;
- Архитектура сервиса описана в виде текста и/или диаграмм
- Документация: есть структурированное описание методов сервиса.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥4❤3👎1
Qrcp – инструмент для передачи файлов по Wi-Fi с компьютера на мобильное устройство, по QR-коду, не выходя из терминала
При вызове команды qrcp поднимается автоматически на случайном порте.
go get github.com/claudiodangelis/qrcp
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17❤8🔥3
Эта статья содержит бесплатные онлайн-курсы по изучению Golang на таких сайтах, как freeCodecamp, YouTube, Udemy и Coursera, так же мы порекомендуем вам полезные телеграм каналы для изучения Go.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2🥰2
Пакет с Набором тривиальных функций, которые могут упростить жизнь при написание кода.
go get github.com/samber/lo@v1
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤2🔥2🥰1
Начнем с простой задачи
Where my anagrams at?
Что такое анаграмма?
Aнаграмма – перестановка букв в слове или словосочетании, вследствие чего возникает другое слово или словосочетание. Два слова являются анаграммами друг друга, если они оба содержат одни и те же буквы.
Нппример:
'abba' & 'baab' == true
'abba' & 'bbaa' == true
'abba' & 'abbba' == false
'abba' & 'abca' == false
Напишите функцию, которая найдет все анаграммы слова из списка. Вам будет дано слово и массив со словами. Вы должны вернуть массив всех анаграмм для этого слова или пустой массив, если их нет. Например:
anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada']) => ['aabb', 'bbaa']
anagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer']) => ['carer', 'racer']
anagrams('laser', ['lazing', 'lazy', 'lacer']) => []
Решение:
package kata
import (
"sort"
)
type Word string
type Words []string
func Anagrams(word string, words []string) []string {
sorted := Word(word).Sorted()
areAnagrams := func(b Word) bool {
return sorted == b.Sorted()
}
return Words(words).Filter(areAnagrams)
}
func (ctx Word) Sorted() Word {
sorted := []rune(ctx)
sort.SliceStable(sorted, func(i, j int) bool {
a := sorted[i]
b := sorted[j]
return a < b
})
return Word(sorted)
}
func (ctx Words) Filter(predicate func(x Word) bool) Words {
var filtered Words
for _, x := range ctx {
if predicate(Word(x)) {
filtered = append(filtered, x)
}
}
return filtered
}
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥4❤3
Последняя цифра огромного числа
Для данного списка
{x1, x2, x3, ..., xn}
вычислить последнюю (десятичную) цифруx1 ^ (x2 ^ (x3 ^ (... ^ xn)))
.Примеры
Пример 1
LastDigit([]int{3, 4, 2})
// должно вернуть 1потому что
3 ^ (4 ^ 2) = 3 ^ 16 = 43046721
Примечания
Прогрессия растет невероятно быстро. Например,
9 ^ (9 ^ 9)
имеет более 369 миллионов цифр. LastDigit должен эффективно обрабатывать такие числа.0 ^ 0 = 1
0 ^ (0 ^ 0) = 0 ^ 1 = 0
Пустой список следует рассматривать как равный 1
Решение
package src
func LastDigit(as []int) int {
if len(as) == 0 {
return 1
}
for key := len(as) - 1; key > 0; key-- {
if as[key] == 0 {
as[key-1] = 1
as = as[:key]
continue
} else if as[key] == 1 {
as = as[:key]
continue
}
if as[key-1]%10 == 2 || as[key-1]%10 == 3 || as[key-1]%10 == 7 || as[key-1]%10 == 8 {
switch as[key] % 4 {
case 0:
as[key-1] = pow(as[key-1], 4)
case 1:
as[key-1] = pow(as[key-1], 5)
case 2:
as[key-1] = pow(as[key-1], 6)
case 3:
as[key-1] = pow(as[key-1], 7)
}
} else if as[key-1]%10 == 4 || as[key-1]%10 == 9 || as[key-1]%10 == 1 {
switch as[key] % 2 {
case 0:
as[key-1] = pow(as[key-1], 2)
case 1:
as[key-1] = pow(as[key-1], 3)
}
} else if as[key-1]%10 == 5 {
as[key-1] = 25
} else if as[key-1]%10 == 6 {
as[key-1] = 36
} else if as[key-1]%10 == 0 {
as[key-1] *= as[key-1]
}
as = as[:key]
}
return as[0] % 10
}
func pow(a, b int) int {
result := getDigs(a)
for i := 1; i < b; i++ {
result = getDigs(result * a)
}
return result
}
func getDigs(a int) int {
if a > 1000 {
return a % 1000
}
return a
}
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍3❤2
DiscordGo — это пакет Go, который обеспечивает низкоуровневую привязку к API-интерфейсу клиента чата Discord. DiscordGo почти полностью поддерживает все методы API Discord, интерфейс веб-сокеты и голосовой интерфейс.
go get github.com/bwmarrin/discordgo
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍3❤1👏1
📚 Лучшие бесплатные книги Golang 2023.
Есть много доступных книг по GO, некоторые полезные, некоторые не очень. Я думаю, что если вы изучаете Go, вы должны стремиться читать как можно больше книг.
✔️ Смотреть список
@Golang_google
Есть много доступных книг по GO, некоторые полезные, некоторые не очень. Я думаю, что если вы изучаете Go, вы должны стремиться читать как можно больше книг.
✔️ Смотреть список
@Golang_google
🔥15👍6❤3👎1
— встроенной базы данных SQLite + realtime subscriptions,
— удобной панели администратора,
— встроенного управления файлами и пользователями,
— и удобного REST-API.
✔️ Документация
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍5❤4🤔1
Нужно реализовать HTTP сервис для голосования. Например, для выбора самого популярного покемона. UI не нужен, достаточно сделать JSON API сервис. Должна быть возможность:
Задача
Нужно реализовать HTTP сервис для голосования. Например, для выбора самого популярного покемона. UI не нужен, достаточно сделать JSON API сервис. Должна быть возможность:
▪ Создать новое голосование с разными вариантами ответов
▪ Отдать свой голос за какой-либо вариант
▪ Получить текущий результат голосования
Реализовать методы:
- POST /api/createPoll/ создать голосование c вариантами ответов
- POST /api/poll/ проголосовать за конкретный вариант: <poll_id, choice_id>
- POST /api/getResult/ получить результат по конкретному голосованию: <poll_id>
Структура и формат входных и выходных данных на ваше усмотрение.
Описание идеального решения
▪ Задание декомпозировано, составлен иерархический список работ. Каждый пункт из этого списка может быть реализован за небольшое время.
▪ Составлена схема архитектуры со всеми сущностями и их связями в Miro
▪ Код слабо связан, функции не имеют побочных эффектов
▪ История коммитов осмысленная. По ней видно, в каком порядке решалась задача.
▪ Покрытие тестами >70%
Требования
▪Язык: Go
▪Результаты голосования должны храниться в базе данных. Мы обычно используем PostgreSQL и MongoDB, но можно выбрать любую другую.
▪Код нужно выложить на github (просьба не делать форк этого репозитория, чтобы не плодить плагиат)
▪Предоставить инструкцию по запуску приложения. В идеале (но не обязательно) – использовать контейнеризацию с возможностью запустить проект командой docker-compose up
▪Сервис должен отвечать на 8000 порту
Усложнения
▪ Написаны тесты (постарайтесь достичь покрытия в 70% и больше)
▪ Опишите, как изменится архитектура, если мы ожидаем большую нагрузку (Реализация не требуется)
▪ Опишите, как можно защититься от накруток (Реализация не требуется)
▪ Попробуйте оценить, какую нагрузку в RPS сможет выдержать ваш сервис
Что будет оцениваться
▪ Декомпозиция задачи (например, в виде вложенного списка подзадач)
▪ Архитектура решения
▪ Корректность реализации
▪ Подход к тестированию
▪ Понятность инструкций и документации
▪ Codestyle
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥8❤2
conc — это ваш набор инструментов для структурирования конкуренции в Go, который делает обычные задачи проще и безопаснее.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥2❤1👎1
git clone git@github.com:mikestefanello/pagoda.git
cd pagoda
make up
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍6❤2
Forwarded from DevOps
Я помню свой третий demo-проект. После сборки и тестирования проекта всё работало. В тот момент я отправил его человеку, который должен был демонстрировать его вместо меня. И вот, не задача, во время запуска возникла ошибка...
Чтобы сохранить собственную репутацию, я начал производить отладку. Проект не запускался потому, что тому человеку нужно было обновить программное обеспечение, чтобы у него работали новые функции. Я помог ему в этом, и, о чудо, всё заработало!
А теперь представьте, если бы мне нужно было разослать данный проект не одному человеку, а десятерым. Тогда мне пришлось бы помогать каждому, перенастраивать их компьютеры, чтобы новые функции успешно работали. Думаю, я бы испытал огромный стресс…
Было бы отлично, если бы существовало такое ПО, с помощью которого можно было бы упаковать всё необходимое для работы приложения в одном месте, а потом поделиться этим файлов с коллегами. Они бы скачивали файл и запускали его, при этом не получая ошибку. Но ведь такая программа существует! И называется она Docker.
Docker помогает решать эти проблемы. В этой статье объясняются основные концепции Docker, а также показано то, как создавать контейнеры для ваших приложений.
➡️ Читать дальше
@DevOPSitsec
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3❤1👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Инструмент Go, который позволяет безопасно передавайть и отправлять что угодно между компьютерами с помощью TUI.
brew install abdfnx/tap/tran
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍2❤1
Какое чудесное платье! Стоит только поискать платья в веб-пространстве, как потом практически невозможно избежать интернет-рекламы с новыми моделями. Что же происходит при нажатии на такие коммерческие предложения? Мы попадаем на сайт магазина, где представлена подробная информация о товаре. Но вот вопрос: эти данные поступают из одного и того же сервиса или собираются из разных сервисов и отправляются пользователям? В статье мы рассмотрим второй вариант, а именно шлюз API.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍4❤1