The Art of Development. Channel
398 subscribers
133 photos
32 videos
1 file
167 links
YouTube канал с роликами по разработке: https://www.youtube.com/c/TheArtofDevelopment

Группа для общения: https://t.me/theartofdevel
Download Telegram
Новая, седьмая, часть создания production сервиса на Go.

Создаем продукты и просто решаю проблемки программной архитектуры по пути с кучей DTO на каждом слое.

https://youtu.be/InFf_n7VM1o
👍6
мечта…
Forwarded from Эксплойт
This media is not supported in your browser
VIEW IN TELEGRAM
Наконец-то можно комфортно работать лёжа — компания Altwork Station выпустила «кресло», позволяющее работать почти в любом положении.

Девайс имеет гибкую спинку, которую можно откидывать до состояния «лёжа», при этом монитор и остальные эллементы системы каждый раз будут автоматически подстраиваться под ваше положение. Стоимость стартует от 4950 долларов.

И всё-равно в конце дня будет болеть спина.

@exploitex
Я все еще ищу людей желающих помочь/подработать.

Что надо делать: придумывать задачи в тематике языка Go.

Задачи как по теории, так и практические. Темы разные.

Деньги: от 100 до 1000 рублей за задачу (зависит от сложности задачи).

Задачи для платформы https://testhub.cloud

Задачи могут быть следующие:
1. текстовые вопросы
2. вопросы с картинкой
3. компиляция простого кода (1 файл, без go.mod) с проверкой выходной строки

Писать в ЛС.
@dikkini
🔥5
Вот эта команда создаст текстовый файл размером в 1GB, а повторный запуск увеличит размер файла до 2GB ну и так далее..

gtr -dc "A-Za-z 0-9" < /dev/urandom | fold -w100|head -n 10000000 >> bigfile.txt

Работает под macOS.
Для линукса надо использовать обычный tr, но у кого линукс те и сами об этом знают :)
👍4
Так как я все еще ищу авторов для платформы https://testhub.cloud, запилил видео инструкцию как работать с платформой.

Рассказываю как и где создать список вопросов для подготовки к собеседованию. Платформа TestHUB
https://youtu.be/IqNeWxxkuJg
👍2
У нас слоеная архитектура приложения:
1. транспорт
2. бизнес логика (policy, usecase etc)
3. сервисы, которые управляют сущностью (CRUD)

При запросе конкретной сущности, например Note, нам нужно проверить, а имеет ли права пользователь с этой ролью, чтобы получить эту сущность.
Вопрос: на каком слое это надо делать?
Ответ: в бизнес логике

Вы можете сразу сказать: а почему не в сервисном слое? Он же оперирует сущностью (CRUD).

А вот вам реальный кейс.

Вы обновляете сущность, чтобы ее обновить, ее надо получить из БД и перед тем как получить, надо проверить можно ли пользователю с этой ролью получить эту сущность, допустим можно и дальше вы обновляете ее. Обновили и все хорошо. Но теперь вы запускаете фоновый процесс, который что-то считает, например цену или рейтинг. Что-то фоновое и не очень важное. И вот этот фоновый процесс пытается запросить сущность из БД и получаете ответ: низзя, у тебя нужной роли нет! Поэтому переносим проверки роли в БЛ (бизнес логику), а сервисный слой оставляем сервисным и универсальным. Потому что если эта проверка будет в сервисном вы без костылей не сможете заставить работать подобные фоновые процессы, у них же нет роли.
👍10🔥2
Время пол 3 утра, самое время подвести мозг спать.

Итоги 3 часов страданий:
1. Раскурил почему у меня не работал SetCaller в logrus в production сервисе.
2. Переехал с logrus на zap в 6 проектах
3. Написал обертку над zap с Sugar логгером и без.
4. Хвала zap.AddCallerSkip(1) но с оберткой все еще есть косяк, надо исправить
5. Я не нашел документацию на zap :DDDDDDD то что они называют документация, ну это, у меня у пет проектов лучше документация так-то...
6. Почему в zap нет Plain Text формата логов? Или я не нашел?

И чуть не забыл. В серьезных проектах делайте жесткую типизацию дополнительных полей логгера - эластик вам потом спасибо скажет.
Время 3:17 и самое время сделать чутка миграцию данных TestHUB. Короче сейчас у 1 пользователя может быть 1 роль. И мне супер лень внедрять привелегии для ролей и разруливать ими все. Поэтому я решил разруливать все ролями и сделать так чтобы у пользователя может быть больше 1 роли.

CREATE TABLE users_backup AS
SELECT * FROM public."user" u;


Вот так я забекапил юзеров и их роли, потому что из поля role_id я делаю массив role_ids :DDDDD и соотвественно теряю информацию о ролях, а чтобы не потерять ее, я делаю бекап.

Поехали!
Давайте поговорим про пет проекты.
Зачем они нужны и в целом про старт обучения.

А также, про онлайн курсы, менторство, опыт и насмотренность ситуаций.

https://youtu.be/T1isK-vPxtg
🔥10👍1
Уникальное, только для тех кто сидит в Телеграм группе. Как вы знаете, я собираюсь запустить авторские курсы с менторской поддержкой в чате и так далее.

Первый курс будет по языку Go и сейчас я хочу "обкатать" его, то есть провести лекции и получить полноценную обратную связь по всем аспектам, прежде чем выпускать "в свет" за деньги.

Тема курса: Начальная подGOтовка
О чем будет курс: Немного про потоки, процессы, ОС и прочее. Далее основы программирования и уже по языку Go.

Что мне нужно от вас:
- полноценный фидбек по всем аспектам курса голосом или текстом

Что получите вы:
- прослушаете курс для новичков за фидбек

Сайт тут: https://artofedu.org
Про курс тут: https://artofedu.org/courses/golang/nachalnaya-podgotovka.html

Если ты хочешь поучаствовать в обкатке и прослушать мой курс - велкам в ЛС.

Количество слотов: 10 человек
Минимальное количество человек, с которым стартуем: 5 человек

Каждая лекция начинается в 19:00, по разным дням.

Осталось 8 слотов.
А вы знали, что если обновлять страницу, то там могут быть разные списки.

https://testhub.cloud/try

Доступно даже не зарегистрированным пользователям.
Рассказываю:

В тестхабе, в визарде, я получаю задачи чтобы показать (ну как бе очевидно). Получаю я и порционно через limit и offset.
И лимит в дефолте = 10. Предположим что мы открыли список, где 14 задач. Проходим 11 задач и рефершим страницу или закрываем браузера (промежуточный результат сохранен, так как я реализовал возможность допройти список позже (ну типа потом)). Теперь открываем еще раз список (через личный кабинет) и жмем "Продолжить". Опять запрашиваем задачи, limit=10, а offset = current_index - 1, типа получить 10 задач с 12 индекса и получаем в итоге 4 задачи (и это правильно). А понимание, что список закончился у меня было вот таким:
if (current_index == tasks.length) {}

А теперь напишите в комментарии почему все ломалось, а я потом напишу правильный ответ 🙂
👍3
Немного вам статистики по TestHUB.

Статистику начал собирать 24 ноября.
👍3
Список миграций в TestHUB менее чем за 5 месяцев. А кто-то спрашивал зачем 5 нулей.
5
ну вы понимаете…
🤣3
Восстановление пароля работает, проверяй.

https://testhub.cloud

#testhub #tasks #задачи #password
Встречаем и долго-долго аплодируем. Я внедрил markdown редактор для описания задач.

А еще, если зайти на https://testhub.cloud и вы залогинены - будет редирект в приложение, а если вы из приложения перейдете на лендинг - ну значит вы хотите посмотреть лендинг.

#testhub #markdown #landing #задачи
👍6🔥2