web mess – Telegram
web mess
130 subscribers
85 photos
1 video
2 files
163 links
go, vim and some other random stuff
appreciate your feedback :)
Download Telegram
Всем привет!

Наверняка многие из вас натыкались на ютубе на бесконечные стримы с музыкой для чила или учебы, например https://www.youtube.com/watch?v=mCti0Ln_qQ8 или https://www.youtube.com/watch?v=DWcJFNfaw9c (кстати отлично помогает сосредоточиться или расслабиться)

Я подумал, а чеб не нарулить такой для себя, как обычно just for fun. А еще я подумал, что наверняка это все можно делать через какие-то консольные утилиты. Я порыскал по github и действительно - нашел репозиторий https://github.com/torch2424/live-stream-radio

Устанавливаешь глобально, генеришь проект, указываешь настройки ютуб и погнали. Все бы хорошо, но! Очень хочется добавить какого-нибудь интерактива на этот стрим. Например на событие подписки на канал или на новый донат. Такой интерактив есть почти на всех стримах, а в данном приложении увы нет. И тут взбушевался мой внутренний перфекционист.

Все дело в том, что стримы, на которые я указал выше, работают на основе приложения streamLabs (https://streamlabs.com/), где все работает из коробки, есть даже специальный сборщик донатов (https://streamlabs.com/lunaradio/tip). Но streamLabs работает через десктопный ui, да и только на винде. Увы, такого позволить я себе не могу. И я полез в дебри.

В течение нескольких месяцев я время от времени погружался в исходники live-stream-radio и в итоге понял как собирается команда для ffmpeg, которая выдает стрим.

Что сделал я:
▫️прикрутил работу с google-api, чтобы проверять подписчиков канала
▫️прикрутил работу с yandex-money-api, чтобы проверять донаты с простой формы на сайте
▫️перед каждым новым треком проверяю 2 первых пункта и в зависимости от этого добавляю новый входной параметр для ffmpeg (анимацию с текстом, которая исчезает через некоторое время)

Теперь наруливаем музыку и тестим. К сожалению событие подписки работает не всегда (потому что не все пользователи ютуб позволяют просматривать информацию о себе в подписках). Донаты через простую форму вроде работают нормально)

О результатах напишу отдельно. Кому интересно - мой форк тут https://github.com/jemsgit/live-stream-radio

Всем чил ✌️
Немного о логировании.

Вообще заниматься сбором и процессингом логов должен отдельный сервис.
Как сказано здесь. https://12factor.net/logs
Но на данный момент стоит задача сделать временное решение, которое будет сортировать логи по дням.

Искал и нашел две прикольные либы для го.

https://github.com/lestrrat-go/file-rotatelogs - умеет делать rotation по размеру, промежутку времени и задавать кастомный timestamp.
Имплементирует io.Writer, может использоваться как со стандартной библиотекой log, так и с logrus. Умеет удалять логфайлы через определённый промежуток времени.

https://github.com/natefinch/lumberjack - умеет делать rotation по размеру, удалять старые логфайлы и т.д. Тоже имплементирует io.Writer.

Выбрал первую либу для ротации логфайлов, т.к мне нужно делать ротацию по дням.
А логирование буду делать с помощью https://github.com/sirupsen/logrus. Удобный и понятный логер для го.
Для логирования есть много других альтернатив, но logrus используется и в других сервисах, поэтому менять не стали.
Кстати, интересно, c каким языками вы работаете.
Конечно все существующие не перечислить, поэтому выберу самые популярные.
Потрясающая статья о том, почему ООП - это плохо.

Самое забавное, что 70% компаний в требованиях к вакансии, даже для джуниоров, указывают знание ООП и дизайн паттернов.
Статья с доводами и примерами, не смотря на то, что она внушительно длинная, советую почитать.

https://link.medium.com/u7dX48d7b9
У medium вышла бета обновы. Выглядит красиво. Непонятно только теперь что и где здесь находится ;)
Ребят, я там писал о своей истории, как я стал программистом https://news.1rj.ru/str/webmess/163.
Так вот, из-за этой истории попал в подкаст “запуск завтра”!
И сегодня он наконец-то вышел !

Я присоединяюсь где-то на 16-17 минуте.
Обсуждаем с Федей в подкасте, как стать программистом. Я делюсь своим путем, Федя — своим, звоним вместе нашему слушателю и вспоминаем истории из жизни.

Книги или онлайн курсы? Какие языки учить? Стоит ли пытаться стать программистом гуманитарию или если тебе за 40? Куда податься новичку без связей в индустрии?

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

Душевный выпуск.

Слушайте везде: Apple, Google, Castbox, Яндекс, Spotify, Overcast, ютуб и веб-версия.
Для всех, кто хочет выучить Go.
Упорядоченный список того, что стоит выучить с ссылками на ресурс.
Часть - это материал, написанный самим автором, другая часть - ссылки на сторонние, в том числе официальные, ресурсы.
Велкам!

https://github.com/hoanhan101/ultimate-go
Встречайте tinyhttp, крошечная и быстрая альтернатива Express без легаси

Авторская статья (написанная мною, @talentless_guy), о том, зачем я начал писать свой фреймворк, какие проблемы он решает, и как начать им пользоваться. Будет интересно тем, кто пишет бекенд на Express, и хотел бы попробовать что-то новое, но с тем же API.

p.s. готовится статья про процессную многозадачность (на русском) в Node.js, в будущем будет опубликована

#jsarticle #javanoscript #backend #nodejs #tinyhttp #express #typenoscript
Судя по опросу в прошлом, здесь есть те, кто пишет на js.
Мой товарищ написал свой фрэймворк, похожий на Express,но без легаси кода.

Проект активно развивается и уже набрал больше 7к скачиваний и больше 200 звезд на гх.
Кому интересен бэкенд на js - советую попробовать, будет интересно ваше мнение 🙂
Разных сервисов с free tier планом для разработчиков куча, это круто.
Но их настолько много, что сложно даже разобраться.

Нашел офигенный список с детальным описанием бесплатных фич всех крупных и не очень платформ.
Список не ограничивается только клауд провайдерами, там много разного, так что, зацените!

https://github.com/ripienaar/free-for-dev
Скорее всего, это не очень объективная метрика для оценки продуктивности.
Но мне всегда нравится в конце рабочего дня смотреть, сколько времени я кодил/на каких языках/в каких репо.
Поэтому, пользуюсь Wakatime, который можно прикрутить к любому редактору.
В моём случае это - NeoVim.
Работает идеально, главвное чтобы на компе был правильно установлен Python.

Оставляю ссылку, если кто-то тоже захочет себе поставить.
https://wakatime.com/
Кстати, интересно, замеряете ли какие-то метрики продуктивности?
Если да, то напишите, пожалуйста, какие и чем.

Можно в комменты, можно в личку мне(@mlvni)
Если наберется пара-тройка интересных инструментов - сделаю подборку и расскажу о них тут.
На канал я не забил. У меня был переезд, сейчас я в Украине. Скоро снова возьмусь за канал с новыми силами. Ожидайте ;)
Всех причастных с Днём программиста! Ни утечки, ни сегфолта! Остальным соболезную, что приходится иметь дело с программистами.
programmin is no magic
my project:
Шедевральный абзац о плохих логах и тех, кто их создаёт.
Сегодня со мной случилось забавное и неожиданное открытие.
Приняли мой pr в дев ветку, я предварительно проверил всё, в докере билд проходил.
Из дева автоматически билдится новый образ в dockerhub.
В итоге захожу на докерхаб и статус моего билда - Failed.
Немного порылся и выяснилось, что если ты кладешь в репо файл с окончанием test.yaml - запускаются автотесты на этот контейнер.
Так я и узнал, что докерхаб умеет в автотесты.

Вот дока: https://docs.docker.com/docker-hub/builds/automated-testing/
Интересная статья об обработке нескольких ошибок в го. И, кстати, да, я решил вернуться. Сейчас работаю на удаленке, поэтому времени на написание постов будет побольше.

https://medium.com/a-journey-with-go/go-multiple-errors-management-a67477628cf1
Во многих источниках по concurrency в go видел рекомендацию о том, что одна горутина не должна принимать из канала и одновременно писать в него.

Раньше не понимал почему, вплоть до момента, пока не столкнулся с последствиями такого решения в проде (автором того куска кода был не я).
В моём примере был локальный буфер для кликхауса, который собирал определенное количество строчек и потом делал bulk в сам кх.

Так вот, эти строки он получал из канала, складывал в массив. Потом по сигналу от тикера делал запись. В случае, если запись была неудачной - засовывал всё из массива обратно в канал. Размер канала 2000, одновременно с тем, как записи возвращались обратно в канал, они так же поступали в него из других горутин.
При этом, горутина, которая должна была читать что-то из канала была заблокирована и канал переполнялся и получался deadlock.

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