Новиков > путь в Big Tech – Telegram
Новиков > путь в Big Tech
184 subscribers
94 photos
192 links
От зеро-кодинга на стройке до написания высоконагруженных сервисов в Big Tech. 

Пишет SWE в Avito.ru (backend), в прошлом: .NET developer и сертифицированный специалист по использованию BIM.

Написать автору: @nvkv_ai

Книги: https://boosty.to/time2code
Download Telegram
День 19

Задание
:
1. Добавить REST-запрос, который по заданному диапазону дат-времени (считаем, что они в таймзоне предприятия) выдаст список всех поездок машинки (без треков), где будет вся общая информация по поездке, начальная и конечная точки.
2. Также добавить текстовое "представление" этих точек, физический адрес. (Получить его можно через разные maps API)

Ход проекта:
1. Добавил начальную, конечную точки поездки + их физический адрес.
2. Использовал API MapQuest: https://developer.mapquest.com/
- искал доступ к API с простой регистрацией + очень хотел информацию о точках получать батчевым запросом, так как их много, а на каждую делать свой запрос - дорого. MapQuest позволяет за 1 запрос обрабатывать до 100 точек, что хорошо подошло, как мне кажется.

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

#проект
Возвращаюсь в регулярный ритм журналирования своего прогресса по проекту.

Очень плотный выдался июль в плане разнообразных дел: работа, проект и личное.
День 20

Задание
:
В веб-интерфейсе сделать минимальную логику drill-down (удобство не нужно):
- Менеджер логинится, видит список своих предприятий,
- выбирает предприятие - видит список машинок в нём,
- выбирает машинку - видит по ней всю детальную инфу и список поездок (лучше, из заданного диапазона дат).
- Выбрав любую поездку (или все из диапазона), он увидит её трек (все треки) на карте -- подберите подходящий Map API для отображения трека.

Ход проекта:
Добавил следующую механику:
1) менеджер логинится
2) видит список всех предприятий
3) выбирает предприятие - получает список всех машин
4) выбрав машину - получает список всех поездок
5) выбрав поездку, он видит трек на карте (начальное положение - конечное)

Возникли проблемы с треком: пока не заставил библиотеку отрисовывать нормальный маршрут по точкам - хочу с этим разобраться.

Использую OpenStreetMap (https://www.openstreetmap.org/), так как предоставляет бесплатное API.

#проект
День 21

Задание
:
1. Добавить утилиту: для заданной id машинки, которая генерит её трек в реальном времени (дописывает точки в базу например раз в 10 секунд), похожий на настоящий. Можно какие-нибудь сплайны задействовать. Задаются также длина трека в километрах, максимальные скорость и ускорение и шаг точек с разбросом.
2. Треки желательно к улицам привязывать, в карточных API есть роутинг. Есть например GraphHopper Directions API - строит случайный маршрут по автодороге.
3. Попробуйте добавить генерацию с роутингом.

Ход проекта:
1. Сделал утилиту, которая на вход принимает флагами нужные параметры и каждые 10 секунд записывает точки трека в БД. Использую роутинг GraphHopper'а, который генерирует трек, получая 2 или более точек. Если есть флаг step (шаг точек), то генерируется несколько точек в зависимости от заданной длины трека, по которым затем строится роутинг с привязкой к улицам.
2. Сохраняю непосредственно поездку.

#проект
День 22

Задание
:
1. Добавьте модель Отчёт, которая содержит поля - название, период и пр.
2. От него наследуйте конкретный отчёт "Пробег автомобиля за период" (тип отчёта). Период и даты задаются, а в результате показываются пробеги в км. Если период - сутки, то раскладка пробега по дням, если месяц - по месяцам, и т. д.
3. Добавьте в интерфейсе для менеджера раздел "Отчёты", где доступен список отчётов и календарь с возможностью выбора дат.
4. Для получения отчёта сделайте API, где запрашивается отчёт с id автомобиля, нужным типом, датами и периодом.

Ход проекта:
1. Добавил модель "Отчет". В Go нет наследования, но есть композиция - завел структуру "Пробег автомобиля за период", в которую вложил кроме Id и Пробега непосредственно сам "Отчет".
2. Для менеджера сделал дополнительную кнопку на экране всех предприятий.
3. По кнопке он получает доступ к конфигуратору отчета с календарем. Выбирает нужный автомобиль из доступных. Когда все значения выбраны, можно сформировать отчет.

#проект
Июль 2023:

Продолжаю разрабатывать "дипломный проект" писал о нем выше. Текущий прогресс: 23/25

Завершил второй курс по парадигмам программирования (на подходе курс по ФП!)

Реализовал MVP для стартапа, который организует отправку данных на сервер, как просто json, так и multipart/form-data.

В ходе реализации "дипломного проекта" и общением с ChatGPT сильно продвинулся в понимании JavaScript'а, а также в упаковке и развертывании приложения с помощью Docker'а

// так как не нашел времени на достижение данных целей даже повторно, то они не так важны для меня, а значит - убираются из списка:
Закончить курс по JS (повторно)
Закончить освоение веб-фреймворка Gin (повторно)



Планы на август:
🔖 Приступить к изучению одной из N купленных в июне книг (повторно)
🔖 Приступить к третьему курсу по парадигмам программирования (функциональное программирование)
🔖 Завершить дипломный проект (осталось 2 задания) и выложить все на гитхаб (повторно)
🔖 Выстроить регулярное взаимодействие с ментором и выполнить первое задание про балансировщик нагрузки (повторно)
🔖 Заполнить матрицу компетенций (внутренний авитовский инструмент), чтобы понимать чего мне не хватает, чтобы развиваться карьерно: E3->E4 (и дальше в сторону senior)

#результаты
День 23

Задание
:
Сгенерируйте побольше данных, несколько тысяч треков на десяток машин в течение пары лет например,
и упакуйте всю вашу систему с демо-данными в докер, чтобы её можно было быстро стартануть и показать, как она работает вживую.
Можно Docker compose с несколькими контейнерами, чтобы не в одном всё поднимать.

Ход проекта:
1. Создал файл - Dockerfile, который упаковывает в контейнер мое приложение.
2. Создал файл - docker-compose, который позволяет управлять запуском сразу нескольких контейнеров: с приложением и с БД.
3. Создал файл - Makefile, который описывает необходимые для разворачивания команды.
4. 3 файла в совокупности позволяют упаковать разработанное приложение и развернуть, используя docker-compose. При этом контейнер с БД идет первым и пока не будет развернут, не запускается второй с приложением (делаю healthcheck в docker-compose файле).
5. При первом запуске приложение запускает внутренний скрипт на генерацию треков.

#проект
День 24

Задание
:
Сделать для наглядности, например, отчёт или что-то подобное, чтобы показывать на карте все треки по предприятию за сутки.

Ход проекта:
Попытался реализовать отчет по поездкам, чтобы они все на карте отображались, но знания JavaScript'а пока только на это хватило:
- добавил кнопку Daily Report, по которой менеджер видит одновременно все поездки за период (к сожалению, маркеры поисчезали, так и не получилось их красиво рисовать)

На будущее:
Изучить JS на уровне, на котором будет несложно красиво дооформить данную работу. И, конечно же, дооформить, чтобы проект выглядел красиво и его было не стыдно показать.

#проект
День 25

Задание
:
1. Зарегистрируйте телеграм-бота и отладьте его, чтобы он просто работал: отвечал эхом на введённую строку например.
2. Затем добавьте команду, например, /login, где задаётся логин-пароль (для менеджеров), после чего бот авторизует его и помнит, что такой-то юзер есть в системе.
3. Сделайте команды выдачи сводок (пробег) по конкретной машинке/предприятию за сутки и за месяц (как-то даты надо задавать, можно обычным текстовым форматом).

Ход проекта:
1. Зарегистрировал бота через BotFather
2. С помощью ChatGPT быстро накидал каркас отправки сообщения и его обработки
3. Добавил примитивную авторизацию, которая хранит логин-пароль в памяти во время работы бота
4. Добавил метод получения отчета - пришлось в приложение car-park добавить соответствующий ендпоинт (API) для взаимодействия с ботом

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

#проект
Новиков > путь в Big Tech
Начал делать "дипломный" проект в ВШПСБ. Он идет бонусом к основному курсу, который прохожу по декларативной модели, и состоит из 25 заданий (основные боли в бэкенд разработке). Тема: автопарк, регистрация и учет автомобилей. Проект нужно успеть выполнить…
Завершил проект автопарка!

Разработка заняла ровно 3 месяца. Следует оговориться, что я не занимался этим каждый день, а совершал набеги каждые 2-3 дня продолжительностью несколько часов.

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

Какой положительный эффект от реализации данного проекта я получил:
1. Осознал, насколько важно продумывать и документировать архитектуру до начала реализации проекта
2. В проекте нужно было работать с множеством ендпоинтов (их организации и роутинг) - сейчас у меня гораздо больше понимания как при работе с ними организовывать более чистый и поддерживаемый код
3. Значительно улучшил свои знания в JavaScript (+bootstrap), так как пришлось работать с OpenStreetMap и другими API
4. Наконец, решился пощупать chatGPT, который стал отличным консультантом в ходе реализации проекта
5. Научился работать с веб-фреймворком Gin
6. Улучшил навыки по работе с PostgreSQL и проектированию БД
7. Улучшил свою экспертизу в разработке веб-приложений: поддержка CSRF, запрос с авторизацией через CURL
8. Получил знания в области геотрекинга: увидел как это работает изнутри, какие вызовы обычно возникают и как с ними справляться
9. Попрактиковался в решении проблемы хранения и презентации данных в разных временных зонах (важная тема, нужно постоянно про это помнить)
10. Освоил контейнеризацию до уровня "Готов запаковать свой проект в Docker и написать Makefile вместе с docker-compose для удобного разворачивания своего приложения"

Проект планирую улучшать в свободное время, так как очень интересно создавать продукт с полного нуля. Часто, работая в IT-компании, программист занимается разработкой новых фичей и поддержкой старых, а создание чего-то нового - это прерогатива стартапов или избранных разработчиков в крупных компаниях. Поэтому, если вы раньше не разрабатывали ничего с нуля, то очень важно улучшать свою экспертизу в этом направлении, чтобы быть сильным специалистом, способным поставлять как новые фичи в существующий проект, так и писать проект с нуля.
1
Август 2023:

Закончил "дипломный проект" (см. пред. пост)

Приступил к третьему курсу по парадигмам программирования (императивное программирование, а не ФП - как я раньше думал)

Прочитал несколько глав из книги по Компьютерным сетям (по заданию от ментора)

С ментором +- наладили регулярное взаимодействие: встречаемся 1 раз в 1-2 недели (сдал ему задание про балансировщик нагрузки и получил хороший фидбек)

Заполнил матрицу компетенций, которая необходима для движения по карьерной лестнице, обсудил с тим-лидом, начинаю работать над слабыми местами (к счастью, их не очень много)

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



Планы на сентябрь:
🔖 Принять участие во внутреннем хакатоне с командой и показать достойный результат
🔖 Начать проводить технические собеседования в компании (необходимо для карьерного роста + улучшение собственных софт скиллов)
🔖 Выработать систему, по которой буду читать техническую литературу, делая упор, как на рабочий инструмент - Go, так и на более широкие области компьютерных наук

#результаты
Шахматы [1/2]

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

Когда я пришел в Авито, то удивился, что в компании не было активного шахматного коммьюнити. Был чатик на 40 человек, в который изредка кто-то публиковал смешные картинки и на этом все.

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

Сейчас чатик из 40 человек увеличился до 240. В компании появились регулярные онлайн-занятия по шахматам с тренерами уровня КМС и это еще не все...
Шахматы [2/2]

Все это время я старался +- регулярно публиковать шахматные задачки, которые Личесс обновляет каждый день. Это занимало 2-3 минуты времени, но я понимал, что и это время можно сократить до нуля. И я написал небольшую программку, которой делегировал эту работу.

Теперь публикация очередного пазла у меня занимает менее 5 секунд, а в будущем я планирую сделать удобное расписание, по которому программа будет работать вообще без моего участия.

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

Разработка открытая, планирую по мере сил его развивать и сделать украшением моего портфеля проектов.

https://github.com/novikov-ai/chess-daily-puzzle
1
Сентябрь 2023:

Принял с командой участие во внутреннем хакатоне. Главный приз не взяли, но по голосованию зрителей вошли в топ 3

Поучаствовал в роли наблюдателя на 2-х технических собеседованиях (еще несколько и начну сам проводить)

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

Пробую читать тех. литературу по новой системе: +10мин. в день и заметка о том, что нового узнал (или о чем читал, если все уже известно)

Написал пазл-бота, который публикует очередную задачку в канал Mattermost (в планах добавить к нему расписание и перевести на VPS-сервер)



Планы на октябрь:
🔖 Приступить к самостоятельному проведению собеседований
🔖 Прочитать более половины выбранной книги по специфике Go
🔖 Расширить сеть на линкедине на 15-20% (дойти до 450+ коннектов)
🔖 Нарисовать архитектуру для пазл-бота и подумать про деплой на VPS-сервер

#результаты