VyacheArt – программирование, технологии, GoLang @vyacheart Channel on Telegram

VyacheArt – программирование, технологии, GoLang

@vyacheart


Привет! Я GoLang разработчик, тимлид и автор канала про айтишечку https://www.youtube.com/@VyacheArt

Буду радовать вас роликами про хайлоад, рекламу и про всё то, что я знаю, а вам интересно послушать.

@VyacheslavG

VyacheArt (Russian)

Добро пожаловать в канал VyacheArt! Если ты увлечен программированием, технологиями и GoLang, то ты попал по адресу. Я - GoLang разработчик, тимлид и автор этого канала. Здесь тебя ждут увлекательные ролики про хайлоад, рекламу и многое другое. Я буду радовать вас контентом, который поможет развивать ваши знания в области информационных технологий. Присоединяйтесь к нам и узнавайте новое, интересное и полезное! Подписывайтесь на мой канал на YouTube https://www.youtube.com/@VyacheArt и следите за всеми обновлениями. До встречи в мире IT! 🚀🖥️ @VyacheslavG

VyacheArt – программирование, технологии, GoLang

31 Dec, 16:59


До 2025 года остаются считанные часы, друзья

Поэтому я записал для вас небольшое видео, в котором поделился итогами года, рассказал чем занимался и что вас ждёт в 2025 (гораздо больше, чем в 2024).

Впереди у нас с вами новые свершения, проекты, открытия, и я желаю каждому найти в новом году то, что он так давно ищет! С Новым Годом! 🫰

https://youtu.be/LptSFfY9hBE

PS в комменте прикрепил видеофайл, чтобы вам было удобнее:)

VyacheArt – программирование, технологии, GoLang

29 Dec, 21:08


Разберём один из самых частых источников ошибок при работе с интерфейсами в Go

Почему иногда тип не реализует интерфейс, хотя все методы вроде бы на месте?

Смотрите:

type Storage interface {
Save(data []byte) error
}

type FileStorage struct {
path string
}

func (fs *FileStorage) Save(data []byte) error {
return os.WriteFile(fs.path, data, 0644)
}

func main() {
// Работает
var s1 Storage = &FileStorage{path: "data.txt"}

// Не компилируется
// "Cannot use FileStorage{path: "data. txt"} (type FileStorage) as the type Storage"
// "Type does not implement Storage as the Save method has a pointer receiver"
var s2 Storage = FileStorage{path: "data.txt"}
}


Почему так? Ведь метод Save у нас есть. В чём подвох?

Дело в том, что метод Save объявлен на указателе ( *FileStorage ), а не на значении. И тут начинается самое интересное.

Когда вы объявляете метод на указателе, Go позволяет вам вызывать его и для указателя, и для значения:

storage := FileStorage{path: "data.txt"}
storage.Save([]byte("hello")) // Работает

ptr := &storage
ptr.Save([]byte("world")) // Тоже работает


В первом случае Go неявно берет адрес значения storage, чтобы вызвать метод. Но с интерфейсами такое поведение не работает. Если метод объявлен на указателе, то только указатель может реализовывать интерфейс.

Это сделано намеренно. Представьте, что у вас временное значение:

func getStorage() FileStorage {
return FileStorage{path: "temp.txt"}
}

var storage Storage = getStorage() // Не скомпилируется


Если бы Go автоматически брал адрес значения при присваивании интерфейсу, то вы бы получили указатель на временное значение, которое исчезнет после возврата из функции.

А вот обратная ситуация работает без проблем:

type Reader interface {
Read() string
}

type MemoryReader struct {
data string
}

// Метод на значении
func (mr MemoryReader) Read() string {
return mr.data
}

func main() {
// Оба варианта работают
var r1 Reader = MemoryReader{data: "hello"}
var r2 Reader = &MemoryReader{data: "world"}
}


Когда метод объявлен на значении, его можно вызвать и для указателя – Go просто разыменует указатель автоматически.

Так какой же receiver выбрать?

Используйте pointer receiver, если:
- Метод должен изменять состояние структуры
- Структура большая и копировать её накладно
- У других методов этого типа уже есть pointer receiver (для консистентности!)
- Когда тип содержит sync.Mutex или другие поля, которые нельзя копировать

В остальных случаях используйте value receiver.

Пишите в комментариях, с какими ещё сюрпризами интерфейсов вы сталкивались 🫰

VyacheArt – программирование, технологии, GoLang

18 Nov, 13:59


С днём рождения меня! 😇

VyacheArt – программирование, технологии, GoLang

27 Oct, 21:29


Пока не успеваю с полноформатными роликами, но снял для вас Shorts про рекурсивную блокировку RWMutexа в Go 🧑‍💻

https://www.youtube.com/shorts/utvOh4vPltY

А вот конкретный "живой" пример, как делать не нужно:

func (s *Service) foo() {
s.mu.RLock()

for _, item := range s.items {
s.mu.RLock() // вот так
//...
}
}

VyacheArt – программирование, технологии, GoLang

25 Oct, 10:37


Go разработчики, а вы посещаете тематические конференции?

Я в большей степени отношусь к интровертам, поэтому иногда приходится пушить себя (как Мюнхгаузен, когда вошёл в IT, да). Но почти всегда остаюсь в итоге рад, потому что даже с пет-проектами, курсами и ютубом ты не получишь живых ответов на свои вопросы, либо можешь упустить какие-нибудь тенденции, за которыми просто не успеваешь следить (я так узнал про KSQL от Kafka, хотя использую её уже лет 6).

И если вы тоже хотите себя запушить в какой-нибудь ивент, то у меня для вас кое-что есть: Podlodka Go Crew вновь организовывает онлайн-конференцию для Go разработчиков! А в этом сезоне ещё и упор на архитектуру приложений на Go.

Вас ждут такие доклады:
- «От 1000 скриптов на Bash к (микро)сервисам на Go» — Максим Набоких поделится опытом миграции на Go в рамках крупнейшей kubernetes-платформы.
- «System design: Saga from zero to Temporal» — Антон Цитульский рассмотрит принципы оркестрации и хореографии, используя Temporal, и объяснит, как управлять бизнес-процессами в сложных системах.
- «Спецификации и код: Как выбрать правильный путь между генерацией и интеграцией?» — Леонид Ченский покажет плюсы и минусы разных подходов к работе с API-спецификациями и представит обзор инструментов, которые помогут с автоматизацией.

Билеты можете приобрести на сайте https://podlodka.io/gocrew, и для вас есть промокод на скидку в 500 рублей: go_crew_4_nY5ux6.

Посещайте конфы, ребят, это классный буст к вашей славной работе:)

#интеграция

VyacheArt – программирование, технологии, GoLang

21 Oct, 11:09


Go разработчики, давайте поучаствуем в исследовании!

Ребята из DevCrowd проводят опрос среди Go разработчиков: что входит в наши обязанности, какими интрументами пользуемся, как развиваемся, и, конечно, сколько зарабатываем 🙂

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

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

VyacheArt – программирование, технологии, GoLang

14 Oct, 10:14


Софтина на заметку маководам

Недавно разбирал большой лог на 12 ГБ, и оказалось, что даже при достаточном объёме (свободной) ОЗУ это нетривиальная задача. Nano, Sublime Text и Visual Studio Code (ладно, в последний я даже не верил) работали с файлом мучительно долго: каждый поиск растягивался на несколько минут, внятной подсветки найденного не было, и даже скроллинг был не очень комфортным.

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

Сохраняйте, авось пригодится 🙂

VyacheArt – программирование, технологии, GoLang

12 Oct, 21:29


Про качество архитектуры

Но не просто размышления, а хочу попробовать дойти до ответа на вопрос: "к чему стремиться?".

Сама архитектура – понятие широкое, но в общем можно сказать, что это область про решения и их последствия.
Архитектор – тот, кто эти решения принимает на основе полученной задачи.

А вот задача уже таит определённые условия (решения других архитекторов или свои же), ограничения и требования. Всегда попытка смешать всё это приводит к противоречиям: нужно обрабатывать большой объём данных, но поддерживать реалтайм транзакции с ними; над продуктом работает несколько команд, но разработка фичи должна оставаться быстрой (и дешёвой); код должен быть простым, последовательным, понятным, но производительным и масштабируемым.

И вы уже знаете, что серебряную пулю не изобрели, но и драмы нет:
1. Мы умеем договариваться о том, какие в итоге свойства наиболее приоритетные (или без которых нельзя);
2. Умные люди давно разработали много готовых практик и архитектурных паттернов (micro-kernel, microservices, layered, event-driven, etc), и благодаря этому мы уже на старте можем примерить каждый, сравнить полученные свойства с ожидаемыми, и выбрать лучшее решение под текущую задачу.


Так к чему стремиться мне, как архитектору? Думаю, вот к чему:

1. Укрепить теорию, изучить существующие технические решения, особенно в той области, в которой я работаю. Здесь особенно пригодится "тот самый кабанчик" ("Высоконагруженные приложения" Мартина Клеппмана), потому что как минимум вы прочитаете про разные форматы данных и какие проблемы они решают.

2. Научиться понимать заказчика (подразумеваю управляющую сторону в любом виде: менеджеры, овнер фирмы, конкретный человек на бирже). Нередко сложности возникают с тем, как задавать вопросы ("вот же херню спрашиваю!"), или с тем, что мы не умеем слушать, и улетаем в свои техногиковые фантазии, или с тем, что сам заказчик пока не видит, что важно для вас, как для архитектора. Можно почитать про природу конфликтов, проработать с психологом свои страхи в общении (у меня, например, есть проблемы с оценкой себя, и это мешает переговорам), или постараться углубиться в сам бизнес (например, напроситься на такого рода встречи, если есть возможность).

3. И после того, как в голове будут некие "шаблоны" для решения задач; будет понимание того, что важно здесь и сейчас, и чем можно пожертвовать, нужно... действовать? Нет, нужно уметь внятно записать свои размышления так, чтобы завтра вы проснулись, и не только сами вспомнили, но и могли дообсудить вопрос с коллегами. Мы мыслим не всегда последовательно, часто невнимательно, и я столько раз обнаруживал, что что-то важное упустил и не заметил, что за это время уже можно было бы самому стать заказчиком. Блокнот/доска/планшет/заметки – ваш верный друг.


Насколько вы согласны с тем, к чему я пришёл? Получилось ли у меня более-менее внятно ответить на вопрос в начале?

VyacheArt – программирование, технологии, GoLang

15 Sep, 17:16


На этой неделе я начал ходить на курс по Concurrency в Go от Владимира Балуна (не реклама, делюсь впечатлениями), чтобы затем задействовать знания в сфере адтеха.

И как же это интересно: вот вы знали, что в Go для многозадачности используется GMP модель. G как горутины, M как Machine или поток операционной системы, и P как Processor для того, чтобы обрабатывать очередь из ваших горутин. Почитайте вот тут, например, это очень полезный материал.

Допустим, про GMP модель вы уже знали, но вот вопрос на засыпку: в Go есть глобальная очередь горутин и локальная у каждого P (кстати, а вы знаете зачем? пишите в комментах).

Что случится, когда у P закончатся задачи (горутины)?
Тогда первым делом P попытается украсть половину горутин у другого случайного P. Этот принцип называется "work stealing", и он нужен, чтобы поток операционной системы не простаивал, и нагрузка равномерно распределялась по всем.

А ещё я наконец-то получил ответ на вопрос что такое Hyper-Threading.
Как оказалось, это не больше, чем второй набор регистров, или другими словами – это физическое ядро с двумя контекстами исполнения. Когда один контекст что-то ждёт (например, данные из ОЗУ, результат предыдущий инструкции и т.д.), происходит переключение на второй контекст исполнения, чтобы физическое ядро не простаивало, и продолжало приносить пользу. Это как если бы у вас за спиной был портфель с конфетами, и пока вы кладёте одной рукой конфету в рот, другая рука берёт следующую.

Я это всё к чему: учиться – очень важно, и кажется я нашёл отличный курс, на котором подробно, с самых основ, с примерами Go рантайма на C и понятными иллюстрациями (это вообще редкость) объясняется как оно работает. Да, на самом деле всё это можно найти в открытом доступе (те же лекции ФПМИ про многопоточность), но если у вас будет возможность, то пока что жирный рекомендасьон от меня. В ноябре напишу финальное впечатление от всего курса, может даже видеоотзыв сниму 🤓

VyacheArt – программирование, технологии, GoLang

09 Sep, 12:30


Последние дни думаю про замедления ютуба.

С одной стороны кажется, что вы наверняка нагуглили про VPN, GoodbyeDPI, SpoofDPI, ShadowSocks и другие решения. А с другой стороны вдруг нет: вам совсем неудобно, провайдеры научились ломать GoodbyeDPI, и всё же надо что-то предпринять.

На VK видео, дзен и рутуб я публиковаться не планирую, но есть вариант загружать видеофайл прямо в телеграм или даже на сайт.

Поделитесь, пожалуйста, насколько актуальна для вас проблема замедления ютуба? Нужно ли что-то делать? В следующем посте сделаю опрос для удобства 🧑‍💻

VyacheArt – программирование, технологии, GoLang

07 Sep, 13:45


🔥 Новое видео: 10 КРУТЫХ идей Go проектов для новичков

Если вы только перешли на Go с другого языка, то для вас собрал десять крутых подробных идей для пет-проектов, и обозначил технологии, которые вам важно будет изучить 🧑‍💻

Строго говоря это подборка именно для новичков в Go, и я ожидаю, что программировать на другом языке вы уже умеете 🙂

В видео рассказываю про gRPC, классику жанра GORM, WebSocketы и LSM деревья 🤓

https://youtu.be/-4RQDdiWZ5w

PS Текстовое описание приложу в комментариях к этому посту, или заглядывайте на сайт.

VyacheArt – программирование, технологии, GoLang

23 Aug, 14:04


И ни при каких обстоятельствах не вздумайте называть Claude именем Claudia! Это неуважительно по отношении к самоидентификации чат-бота, кожаные мешки.

VyacheArt – программирование, технологии, GoLang

23 Aug, 13:28


ChatGPT настолько очеловечился, что стал ленивым

Я пользуюсь ChatGPT уже очень давно для решения какой-нибудь рутинной работы: написать мини-утилиту для теста отдельной функции, составить SQL запрос с десятком колонок, и порой даже целые пет-проекты пишу с ним. Уверен, что и вы максимально используете GPT, это прям "будущее".

Но уже как несколько месяцев вместо того, чтобы написать решение простой задачи, ChatGPT мне просто говорит: "блин, ну там думать надо, сделай сам, ок?". Пишешь ему "нет, не ок, сделай сам", пишешь вот эти "хаки", что у тебя нет пальцев, сам сделать не можешь, но весь процесс упорно превращается в то, что ты борешься с чат-ботом, которому итак платишь 20 баксов.

А если и не борешься, то результат каких-то условно "средних" задач оставляет желать лучшего: тут он тебе придумает несуществующую библиотеку, тут он напишет код с якобы твоей библиотекой, но API будет от другой, и вновь получается цикл уговоров ChatGPT, что надо стараться лучше (справедливости ради, при должном "прогреве" результат значительно лучше).

На фоне этого решил попробовать Claude AI, и удивительно, но он реально в вопросе кода выдавал стабильно отличный результат! Не путал библиотеки, API, очень редко использовал функции из каких-нибудь старых версий, и в целом манера "общения" более комплиментарная. Ещё есть функция "Projects", когда можно целый проект сгрузить в их интерфейс, и он будет использоваться в качестве контекста. Claude будет знать где какие модули у вас реализованы, и начнёт их переиспользовать. Такой GitHub Copilot очень продвинутого уровня, я правда очень советую его вам.

И здесь я мог бы уже закончить, однако последние пару недель лениться начал и Claude. Пока не на таком уровне, как ChatGPT (в моём случае), но хуже, чем было раньше. Даже на реддите люди вовсю обсуждают.

Что вы обо всём этом думаете? Насколько активно используете GPT в своей работе? Есть ли среди вас энтузиасты, которые засетапили локально какую-нибудь модель, и как вам результат в сравнении с SaaS решениями?

VyacheArt – программирование, технологии, GoLang

04 Aug, 21:25


Спасибо за огоньки под предыдущим постом, ребят 🔥

Только что закончил писать инструкцию по настройке PIV для SSH с YubiKey. PIV – это стандарт аутентификации с использованием смарт-карт. В нашем обывательском смысле способ использовать YubiKey и SSH там, где не поддерживаются sk ключи (уж простите за такое упрощение, но мне кажется так понятнее).

Приятной настройки!

https://slavniy.com/how-to-setup-ssh-with-piv-and-yubikey-on-macos/

VyacheArt – программирование, технологии, GoLang

03 Aug, 17:10


Привет! Как ваши выходные?

Я обещал опубликовать для вас инструкцию по настройке FIDO2 для SSH с YubiKey. Выполняю обещание, ловите ссылку и приятной настройки! Внутри ещё рассказал про резидентские и не-резидентские FIDO2 ключи, и про особенность с версией протокола CTAP.

https://slavniy.com/how-to-setup-ssh-with-fido2-and-yubikey-on-macos/

VyacheArt – программирование, технологии, GoLang

30 Jul, 21:16


Ребят, тут уже как почти месяц прошёл, а я вам так и не сказал... спасибо ❤️

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

У меня в табличке ещё столько нерассказанных уроков, столько историй из практики, которыми я ещё не поделился, и искренне хочу, чтобы столько же было времени, чтобы всё это вам показать.

Желаю огромных успехов всем вашим начинаниям, пусть они привносят в вашу жизнь радость и энергию, и пусть как можно скорее наступит день, когда вы взглянете на прошлого и настоящего себя с гордостью. А если он уже наступил, то вы делаете всё правильно! 🙂

VyacheArt – программирование, технологии, GoLang

27 Jul, 21:49


Ну что, пора просыпаться! 👋
(в смысле мне от затишья, не вам, сладких снов вам, если уже спите, ссори за нотифи)

Кажется, каждый из нас использует SSH. Я это делаю уже больше десяти лет, и.. только сейчас пришёл к тому, что пора бы поменять свой ключ. А на самом деле как часто его нужно менять? Как передавать между своими устройствами? Может быть вообще стоит обложиться аппаратными ключами, вроде YubiKey, чтоб прям БЕЗОПАСНО? Что ж, я попробовал, и о своём опыте расскажу в новом видео!

Залетайте на канал, приятного просмотра! 🥳

PS обязательно послушайте бонус в конце!
PPS в течение недельки опубликую подробные инструкции, по которым сможете легко повторить мой "успех" 🧑‍💻

https://youtu.be/JeGVH0v68_I

VyacheArt – программирование, технологии, GoLang

25 Apr, 21:49


Такое наслаждение порой ловлю, когда заглядываю в сабреддит battlestations, и там вот такая красота.

Последние несколько месяцев прям мини-ритуал перед сном.

(ссылки: 1, 2, 3)

PS вообще это не байт на то, чтоб вы хвастались своими (спартанскими) сетапами, просто хотел поделиться, но так-то почему и бы и нет...))

VyacheArt – программирование, технологии, GoLang

20 Apr, 10:48


Вы наверное удивитесь, но вот эта последняя превьюшка оказалась для меня особенной и совершенно новой с точки зрения процесса:)

Среди всех, которые были до этого, в ней меньше всего графики и фотошопа. Только эффект дымки, подсветка, и буквы позади меня (ссорян, 3D буквы с подсветкой дорогие нынче). И я сделал её даже сам, хотя поэтому я и сказал, что вы не удивитесь, потому что тут видно, что дизайнер не прикладывал руку.

И вот после того, как я сделал нужный кадр, в моей голове пронеслось "ВАУ" от того что меня окружало. Всякие LED светильнички, контровый свет, основной софтбокс с нормальным CRI, штативчики, аудиоинтерфейс... Я за вот эти три с копейками года настолько привык что-то докупать для съёмки, что совершенно не заметил, как из айфона и настольной лампы дорос до такого крепкого любительского продакшена 🥹

Можно конечно пытаться оценивать целесообразность всех этих вложений, их влияние на канал, частоту выхода роликов, и скорее всего в процессе можно даже выйти на ребят, кто с айфоном справляется в пятьсот тысяч раз лучше, но я в первую очередь техногик и люблю все эти микрофончики, петлички и панельки:)

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

И спасибо, что смотрите:)

VyacheArt – программирование, технологии, GoLang

18 Apr, 10:19


НОВОЕ ВИДЕО!

Вот возможно (надеюсь) никто не заметил, но на скромном стриме в начале января... shit happened, или я спалил свой мастер-пароль от большинства аккаунтов. Нет, конечно на самом важном у меня 2FA, рандомные пароли, да и вообще.. ай, ладно, смотрите об этой ситуации и моей работе над ошибками в новом ролике! ☺️

https://youtu.be/kymgmu7kfiE