По поводу pydantic и pika, они нужны для логирования в кликхаус через rabbitmq. Возможно кому то это также пригодится, но об этой возможности я не стал писать, чтобы не перегружать статью. Примеры есть в документации на github.
Данное решение не является противопоставлением стандартному логгеру, а скорее дополняет его в некоторых ситуациях. Особенно при отладках сложных расчетов (в моем случае).
Все написанное подтверждаю.
Человеческих собеседований тут нет.
У меня были задачи на палиндром, что то там про матрицы и т.п.
Я дошел в Яндексе до третьего этапа и решил что это скучный и унылый квест, который никакого отношения к реальности не имеет.
Все же хороший разработчик, это не тот кто умеет складывать в уме матрицы,
а обладает более глубокими прикладными знаниями (к примеру как работает сеть, как устроен unix и т.п.) и имеет большой практический опыт в «нестандартных» задачах в том числе и по масштабированию.
Замечания по коду.
1) По поводу _remove, _validate_name, _clean_expired вы абсолютно правы. Спасибо. Сделаю фикс c ближайшим обновлением.
2) Задача на перевод «голого глобального словаря» в менеджер каналов также добавлена в TODO.
Starlette vs Django.
Самая большая проблема Starlette на мой взгляд это отсутствие ORM и привычных миграций. Положение спасает Tortoise ORM, но в нем также нет миграций (обещают к версии 1.0)
Как из Starlette можно «сделать привычную Django», я показал в предыдущей статье.
По поводу того стоит ли начинать использовать Starlette в своих проектах — ответ да, определенно стоит. Особенно если у вас разделены фронтенд (Vue, React) и бекенд (DRF). Запускаете +1 контейнер, выбираете нагруженную задачу и переписываете.
По поводу того что Starlette медленнее Sanic и BlackSheep, это все довольно условно (разница в десятые доли процента).
Для меня основной плюс Starlette это его продуманность. Писать на нем легко и приятно.
Проходил несколько этапов собеседования в Яндексе. Дают необычные задачи, но без практического смысла (что то из области примитивных задач для олимпиадного программирования).
Подтверждаю, что Яндекс абсолютно не интересуется опытом человека и при прочих равных в компанию пройдет вчерашний (сегодняшний) студент у которого живы в памяти матрицы и графы.
А еще там спрашивают сортировку пузырьком :)
Лично я после третьего этапа (из пяти) «отписался» от этой истории, о чем абсолютно не жалею.
1) А докер тут прямо необходим? Докер удобен. Вы просто копируете приведенный код в Dockerfile и все работает. В противном случае вам долго придется гуглить «какие же пакеты мне надо поставить на мой CentOs6, чтобы наконец то у меня сбилдился OpenCv». Это долго.
2) И связь с Django слабовата. Вы можете использовать данную функцию в чистом питоне.
К примеру:
with open('photo.jpg', 'r') as in_memory_uploaded_file:
in_memory_photo = in_memory_uploaded_file.read()
detect_face(in_memory_photo)
3) Импорт из main.utils? Я специально старался не усложнять статью. Вы можете поместить функцию detect_face в любой удобный вам файл разумеется.
channel-box
дорос до версии 0.4, оброс более очевидным api и теперь дружит с последними версиями Starlette.https://github.com/Sobolev5/channel-box
Вот здесь можно посмотреть пример работы
https://channel-box.andrey-sobolev.ru/
from simple_print import sprint
my_var = 42
sprint(myvar)
Так просто короче и быстрее.
Повторюсь. Я не делал это в противовес чему либо и чужие решения не критикую. Кому то возможно пригодится мое.
К сожалению иногда вам подобные классы достаются в "наследство" от кого-то еще, а задача на рефакторинг задвигается в беклог.
Cделал рефакторинг, пофиксил по вашим замечаниям. Спасибо за критику.
Теперь "минимальный" пакет ставится
pip install simple-print
"Максимальный"
pip install simple-print[broker]
И да вы правы, это изначально внутренний велосипед для текущих задач, но все же я думаю кому то он будет весьма полезен.
Спасибо за интересное решение. Посмотрю.
По поводу pydantic и pika, они нужны для логирования в кликхаус через rabbitmq. Возможно кому то это также пригодится, но об этой возможности я не стал писать, чтобы не перегружать статью. Примеры есть в документации на github.
Есть, но к примеру для отладки web view (если вы работаете с фреймворком аля Django) он вам вряд ли будет полезен. Впрочем вы можете поделится опытом.
Данное решение не является противопоставлением стандартному логгеру, а скорее дополняет его в некоторых ситуациях. Особенно при отладках сложных расчетов (в моем случае).
Человеческих собеседований тут нет.
У меня были задачи на палиндром, что то там про матрицы и т.п.
Я дошел в Яндексе до третьего этапа и решил что это скучный и унылый квест, который никакого отношения к реальности не имеет.
Все же хороший разработчик, это не тот кто умеет складывать в уме матрицы,
а обладает более глубокими прикладными знаниями (к примеру как работает сеть, как устроен unix и т.п.) и имеет большой практический опыт в «нестандартных» задачах в том числе и по масштабированию.
детально по шагам разобрать цепочку:
Запросов к БД у вас может и вовсе не быть, либо они могут быть раскиданы по данной цепочке (к примеру вo views, context proccessors или middleware).
Данное руководство также поправлено и дополнено.
Спасибо за фидбек.
1) По поводу _remove, _validate_name, _clean_expired вы абсолютно правы. Спасибо. Сделаю фикс c ближайшим обновлением.
2) Задача на перевод «голого глобального словаря» в менеджер каналов также добавлена в TODO.
Starlette vs Django.
Самая большая проблема Starlette на мой взгляд это отсутствие ORM и привычных миграций. Положение спасает Tortoise ORM, но в нем также нет миграций (обещают к версии 1.0)
Как из Starlette можно «сделать привычную Django», я показал в предыдущей статье.
По поводу того стоит ли начинать использовать Starlette в своих проектах — ответ да, определенно стоит. Особенно если у вас разделены фронтенд (Vue, React) и бекенд (DRF). Запускаете +1 контейнер, выбираете нагруженную задачу и переписываете.
По поводу того что Starlette медленнее Sanic и BlackSheep, это все довольно условно (разница в десятые доли процента).
Для меня основной плюс Starlette это его продуманность. Писать на нем легко и приятно.
Подтверждаю, что Яндекс абсолютно не интересуется опытом человека и при прочих равных в компанию пройдет вчерашний (сегодняшний) студент у которого живы в памяти матрицы и графы.
А еще там спрашивают сортировку пузырьком :)
Лично я после третьего этапа (из пяти) «отписался» от этой истории, о чем абсолютно не жалею.
habr.com/ru/post/208092
github.com/opencv/opencv/tree/master/data/haarcascades
1) А докер тут прямо необходим? Докер удобен. Вы просто копируете приведенный код в Dockerfile и все работает. В противном случае вам долго придется гуглить «какие же пакеты мне надо поставить на мой CentOs6, чтобы наконец то у меня сбилдился OpenCv». Это долго.
2) И связь с Django слабовата. Вы можете использовать данную функцию в чистом питоне.
К примеру:
3) Импорт из main.utils? Я специально старался не усложнять статью. Вы можете поместить функцию detect_face в любой удобный вам файл разумеется.
4) И что такое messages? docs.djangoproject.com/en/3.0/ref/contrib/messages