Диджитализируй!
27.6K subscribers
418 photos
43 videos
7 files
497 links
Авторский канал Алексея Голобурдина о разработке ИТ систем и прочем важном

ПРАВИЛА — https://t.me/t0digital/200

ЛАЙВ-КАНАЛ — @smthisgoingon

Дать много деняк — sterx@rl6.ru

Роскомнадзор: https://vk.cc/cJmDDB
Download Telegram
Искал мессенджер для open source проекта системы донатов, натыкался помимо прочих вариантов на Zulip. Оказывается, он на Python. И даже Гвидо в резолюции о PEP 526 касательно type hinting отзывался о Zulip в формате, что если хотите посмотреть проект с большой кодовой базой, активно использующий подсказки типов, то посмотрите на код Zulip. Найти бы время сделать чтение его исходников в продолжение этой YouTube-рубрики:)

#it #python #backend
Статья для тех, кто боится использовать родной модуль logging в Python, не понимает его или не понимает, как настроить всё в своём проекте: https://khashtamov.com/ru/python-logging/

Накидал также небольшую демку настройки логирования в проекте — в сообщении выше.

#IT #Python #backend #codebetter
3 позиции, по которым Python превосходит С++?

Вопрос из комментов, решил скопировать ответ и сюда, возможно новичкам будет полезно.

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

2. Гораздо проще разработка и поддержка кода. Не на порядок, а на несколько порядков проще. Если надо просто решить задачу, то большинство людей выберет пайтон, о чем говорит его популярность и то, что именно под пайтон делают модули на низкоуровневых языках, когда надо получить интерфейс для доступа к логике, то есть API для доступа к логике, то есть простой способ вызова, использования этой логики.

Например, программы анализа данных, data science и подобные. Логика по факту написана на низком уровне, например, С, но среднестатистический аналитик её не сможет вызывать из кода на С, нужна какая-то более дружелюбная простая среда, С это слишком тяжело. Поэтому упаковывают логику в модуль для пайтона, подключают его к пайтону и используют уже из дружелюбного простого пайтона, который легко может изучить аналитик, не становясь при этом адовым программистом.

3. Изучить пайтон на порядки проще С++. Кривая обучения плавная. Концепции просты. Можно быстро начать получать результат от языка, и эти результаты будут безопасны по памяти (см п.1). Поэтому его часто и выбирает бизнес. Можно взять джуна и быстро вырастить его. Вырастить С++ спеца это многие и многие годы.

Если говорить о низком уровне, то сейчас в большинстве случаев имеет смысл изучать Rust. Не С и не С++. Более современный язык, безопасный по памяти, как пайтон, но быстрый, как С/С++, в каких-то сценариях даже быстрее. Но он, конечно, по-прежнему сложнее, чем Python, с более крутой кривой обучения и более долгим обучением как таковым. Языки для разных задач. Go даёт некоторый баланс между простотой разработки и эффективностью работы кода, скоростью его работы.

#it #python #backend #rust
Попиваю свой ночной тегуаньинь и читаю по TypeScript. Понавыдумывали майкрософтовцы, конечно. Но в целом получилось мощно. Костыли, ну или ладно-ладно, особенности JS лезут, разумеется, но от них уже не избавиться, просто надо их иметь в виду. Null, undefined, NaN и прочее.

Что по своему опыту рекомендую прочесть по TS тем, кто хочет начать писать на нём.

Сначала это. Затем это. Затем это. И только потом это.

Прочел ещё треть этой книги. Шутеечки понравились, а по теме не очень. Автор русскоязычный, Борис «бритва» Чёрный:), но писал явно на английском, редактор и переводчик постарались: непереводимое переведено, щедро рассыпаны опечатки, несколько раз перечитываешь, смысл не проясняется. А может и исходник такой. Или, возможно, надо читать, уже поработав с TS, тогда будет понятнее и опечатки бросаться в глаза не будут.

TS хорош. Типизация рулит. Читая, ловил себя на мысли, что вот такое объяснение можно перенести и в мой материал по типизированному Python. Надо обновить:)

#it #backend #frontend #typescript #javascript #books
Диджитализируй!
Типизированный_Python_для_профессиональной_разработки.pdf
Вдогоночку. Если надо указать тип для переменной, принимающей класс Animal или классы его наследники (а не экземпляр класса Animal) — можно указать так:

animal: type[Animal]

Удобно, когда функция принимает класс. Например, функция-фабрика какая-то, которая принимает на вход класс и создаёт его экземпляр.

class Animal: pass
class Cat(Animal): pass
class Dog(Animal): pass

def create_animal(animal_cls: type[Animal]) -> Animal:
print("create another animal...")
return animal_cls()

create_animal(Cat)
create_animal(Dog)


#IT #backend #python #codebetter
Уууууу что я нашёл!

https://github.com/gothinkster/realworld

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

Например, интересно вам, как выглядит бэкенд такого проекта на Rust'овском Actix с Diesel ORM? Пожалуйста. Или на Rust'овском Rocket? Лови. Или на чистом Go? Есть и такое. FastAPI? Получай. На C++ (стрелять-колотить, почему нет) — на-ка!

Аналогично и по фронтенду. На Solidjs вот, например.

#it #backend #frontend #python #rust #javascript
Как я писал где-то в комментариях, мы сейчас разрабатываем платформу для образовательных программ. На ней буду перезапускать мой курс. Я буквально сейчас занимаюсь фронтендом платформы.

Там готовы 5 первых экранов, которые я сделал на React, но затем решил переписать их на Solidjs. Просто попробовать, посмотреть, как пойдёт. Фреймворк понравился на первом знакомстве и решил оценить на практике.

Переписал.

В Google Chrome Developer Tools встроен Lighthouse — инструмент тестирования производительности фронтенда. Обобщённый показатель Performance для React версии приложения — 79 из 100, для Solid версии 97 из 100.

Трафик для загрузки всего приложения (html, css, js, images) для React-версии 884 kB, для Solid-версии 255 kB.

Функционал обеих версий полностью идентичен. Причём для React версии ещё не подключен внешний state менеджер, который будет нужен и с которым трафик и performance точно лучше не станут, а для Solid внешний state менеджер не является необходимостью благодаря иной модели реактивности.

С точки зрения удобства процесса разработки Solid это тот же React с почти тем же JSX, но более простой в работе из-за иной заложенной модели реактивности. И, как видим, с гораздо более высокой производительностью в частности за счёт отсутствия виртуального DOM.

Я доволен. Буду продолжать на Solid.

Рассказывать вам о ходе проекта:)? На бэкенде у нас FastAPI с SQLAlchemy и Postgres, планируем активно использовать Яндекс облако для всех задач, насколько сейчас видим, его возможностей будет достаточно.

#IT #backend #frontend #course #javascript #typescript #python #LMS
Вижу, что вам интересно, значит, буду рассказывать о ходе проекта разработки нашей LMS-платформы для образовательных программ (Learning Management System).

Собрали вчера систему разворачивания инфраструктуры. Terraform + Ansible + Яндекс облако. Просто крутейшая штука!

Terraform отвечает за железную составляющую инфраструктуры — сколько серверов, какие у них ресурсы, какие сети их соединяют.

Ansible занимается автоматической настройкой ПО на этих серверах. Полная тотальная автоматизация.

Infrastructure as a code. Пишешь конфиги, которые описывают hardware и software инфраструктуру, запускаешь terraform и ansible — и из голого пустого проекта в Яндекс облаке получаешь уже настроенные сервера, сети, со всем настроенным и запущенным софтом.

Наружу в Интернет смотрит только один сервер с настроенным VPN, остальные доступны только во внутренней сети Яндекса или через VPN. Например, только через VPN можно подключиться к Gitlab-серверу. И вся инфраструктура поднимается из конфигов без ручной настройки.

Песня:)

#IT #backend #linux #course #LMS
Интересно, много ли среди нас людей, использующих HTTP-статусы, отличные от обычных 200, 400, 500:)?

М? Скажем, вот 422-ой статус применяли? 409-ый? Может быть, ещё и 418-ый:)?

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

А у нас вот в LMS на бэке набор используемых HTTP-статусов большой. Скоро и 418й будет, уверен:) Запряжём девайс в дело!

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

FastAPI помогает готовить прекрасную документацию бэкенд сервисов в Swagger/ReDoc. FastAPI её готовит автоматически, а мы её пополняем в коде, чтобы были удобные примеры запросов с релевантными данными, группировка веб-сервисов и всякое другое. Это и документация, и удобный аналог Postman, с которым можно быстро протестировать нужную ручку. Прекрасно.

#IT #backend #frontend #LMS #tools
Готовлю материал об объектно-ориентированном программировании в Python, ООП. Конечно, он будет актуален в первую очередь для погружающихся в разработку и Python. Вижу по ревью кода новичков, что у многих есть с этим сложности.

Какие темы здесь должны быть освещены, как считаете? С какими вопросами и сложностями сталкиваетесь?

#it #python #backend
Обсудили-собрали сегодня с командой схему работы Telegram бота в #LMS. Она схожа со схемой, которую мы планировали реализовать в боте донат-системы, которая аналог Boosty.

К донат-системе я вернусь позже, пока не до неё. Октябрь или позже. Сейчас активно разрабатываем LMS.

Задача бота — рулить участниками чата, который привязан к курсу. В донат системе задача была схожей — рулить участниками чата, которые оформили подписку на платформе.

Так вот касательно схемы бота. Полезно накидывать такие схемы по результатам обсуждения какой-то новой планируемой функциональности. Чтобы:

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

Вид схемы может быть любым. Текст, схема, текст+схема, наскальные рисунки.

Вжух!

#lms #backend #management
Зачем для uvicorn'а нужен gunicorn?

В питоне есть такая штука как GIL. Глобальная блокировка интерпретатора. Это фундаментальная особенность CPython-реализации питона. Эта особенность не позволяет одновременно работать более чем одному потоку. То есть в питоне можно запускать потоки, но одновременно работать 2 и больше потоков не будет. В каждый конкретный момент времени будет работать только 1 поток. А нам бы хотелось, чтобы одновременно могли обрабатываться несколько http-запросов. Потому что ядер на сервере много, а толку от них с питоновскими тредами=потоками мало.

Поээээтому, чтобы всё было чётенько и одновременно могли обрабатываться несколько http-запросов, а также были утилизированы=задействованы все процессорные ядра, вместо тредов запускают процессы. Процессы не имеют ограничений GIL, могут работать одновременно несколько процессов на многоядерных процессорах, а этого-то нам и надо.

Нооо возникает тогда задачка управления этими процессами. Запустили мы 8 процессов, пришли на них какие-то http-запросы, они легли на разные процессы, и в процессе обработки одного из этих запросов что-то пошло не так, какая-то необработанная ошибка и т.п. и процесс упал. Нужен механизм, который его переподнимет. Да и начальное создание процессов тоже задача, кто-то должен её делать. То есть нужен process manager, менеджер процессов.

Задача обработки http-запросов и задача управления процессами сервера (управления воркерами, которые делают work=работу в данном случае по обработке хттп запросов) — это разные задачи. Какие-то инструменты могут их в себе сочетать, а какие-то могут выполнять только одну из этих двух задач. Вот uvicorn не занимается управлением своими процессами, отдает это на откуп инструмента, который уже давно проверен и хорошо менеджерит процессы — gunicorn.

Вот собственно и всё!

#python #backend #IT
Забрал в ДМК наконец. Хорошо, говорит, что вам досталась, а то уже разобрали все. Ухмыляюсь — похоже, не без моей помощи разобрали:) Обещают ещё допечатать.

#books #IT #python #backend
Открыл, что Red Hat публикует бесплатно на своём сайте (нужна только бесплатная регистрация) бодрые книги и читшиты. Вот, например:

* книга Podman in Action для желающих познакомиться-поработать с Podman вместо Docker
* читшит по podman, по bash, по git, по linux, а также по linux intermediate уровня и advanced

ЗЫ: а вот бесплатный handbook администратора Debian. Есть RU версия. Здесь PDF/EPUB

#IT #books #backend #linux
Упомянул тут в комментах книгу, которую читаю сейчас — по System design. Думаю, будет полезно многим бэкендерам. Показаны подходы к построению больших систем по нагрузке и данным. Прям хорошо. И много ссылок на бодрые статьи в интернете.

Особенно полезна книга своим чётким акцентом на строгое использование кнопочек и манипулятора мышь при написании своих собственых гуглов и твиттеров!

#books #IT #backend #codebetter
Прочёл первые 4 главы книги о PostgreSQL, пока еду в поезде. Огонь. Мне нравится. Ни одного недостатка для себя пока не выявил.

Кто не хотел книжек формата «ля-ля», но хотел мяса, здесь есть оно:)

В конце 4й главы 37 заданий. 37! Не два-три, типа убедиться, что ты там что-то вроде понял. 37.

Причём задания построены так, что в них есть новая информация, а не просто проверка усвоения уже прочитанного. То есть польза о возможностях и способах использования SQL упакована не только в контенте, но и в заданиях.

Кто-то на Ютубе писал, что мол книги это фигня, потому что они не про learning by doing. Нннну да:)

Ещё нравится, что автор продумал реальный сценарий использования БД и примеры всей книги показывает на нём. Задача связана с базой данных аэропортов, самолётов, рейсов, пилотов, билетов, регистраций на рейсы и тп. Хороший продуманный академичный подход. Примеры запросов про реальные бизнес-эадачи выбранной предметной области, а не высосанные из пальца абстрактные штуки. Как говорится, видно, что автор тщательно потрудился:)

Книжный клуб

#IT #books #backend #tools
То, что человек вас собеседует и, раздувая щёчки, задаёт умные вопросы, не всегда значит, что он их сам понимает:)

Индексы занимают место на диске, порой даже много места, и — ох ты ж ну ничоси! — используют это место для хранения данных! Сам офигел, когда узнал. Прям место — и для хранения данных!

А Index only scan даже позволяет делать выборку только из индекса, не обращаясь к данным таблицы.

Ну маааагия!

Хорошего понедельничка, друзья:)

#it #db #backend #gg
Всё о первичных ключах в PostgreSQL. Простые и составные, естественные и искусственные, искусственные числовые, UUID v4, ULID, UUID v6 — в чём разница и когда что выбирать.

https://youtu.be/VC9KbAA_5rE

https://vk.com/video-176970991_456239185

https://dzen.ru/video/watch/63ef506d207f8f08e717a508

Буду постить отныне ссылки не только на YouTube, но и ВК+Дзен. Комменты оставляем там для продвижения видео. Спасибооо!

#youtube #IT #db #backend