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://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. Нужно либо создавать другой, резервный канал для записи из этой горутины, либо запускать внутри этой горутины еще одну, которая будет записывать.