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

ПРАВИЛА — https://xn--r1a.website/t0digital/200

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

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

Роскомнадзор: https://vk.cc/cJmDDB
Download Telegram
Пришлось поковырять Тильду еще сейчас. Выяснили, что в процессе построения страницы они создают DOM элементы, потом подчистую их удаляют и создают снова.

Тильда, да ты ж моя няшечка, да кто ж тебя научил так делать-то:)

Удаление/добавление элементов в DOM — дорогие операции и современный веб (ну как современный, уже лет ~10 как, наверное) идет в сторону оптимизаций и уменьшения количества таких операций.

Мда. Технологически хороший продукт и коммерчески успешный продукт — это часто совсем не одно и то же. Не то чтобы Тильда технически плохой продукт, но есть куда стремиться. Сидят же там разработчики, денежку получают за JQuery лапшу свою в 2022м-то.
#frontend #IT #javascript #codebetter
🔥65😁53👍20🤔4🥰2
Ревьюил сейчас финальные проекты ребят по курсу и много говорил о декларативном и императивном подходе в программировании. Понимаете разницу?

На самом деле очень много можно уложить в применение этих подходов.

https://teletype.in/@t0digital/imperative-and-declarative-approach2

#IT #python #codebetter #backend
👍134🔥7🤔4🎉3
Навигация по постам в канале

🍒 #IT — всё, касающееся айтишечки нашей
🍒 #backend — о бэкенде
🍒 #frontend — о фронтенде
🍒 #linux — о Linux, администрировании и смежных темах
🍒 #python — о языке Python
🍒 #javascript — о языке JavaScript
🍒 #typescript — о языке TypeScript
🍒 #css — о CSS
🍒 #rust— о языке Rust
🍒 #db— о СУБД
🍒 #codebetter — о хороших подходах в программировании
🍒 #tools — об инструментах
🍒 #tests — об тестировании ПО

#LMS — о нашей LMS системе для образовательных программ

🌶 #youtube — мои видео на YouTube
🌶 #course — о моём курсе

🍉 #softskills — о софт-скиллах и личной эффективности
🍉 #books — о книгах

🍷 #interview — где-то что-то кому-то комментирую
🍷 #news — что-то касается новинок/новостей
🍷 #interesting — что-то интересное, не обязательно ИТ
🍷 #gg — гыгы

🍓 #management — о менеджменте
🍓 #marketing — о маркетинге

🥝 #soulful — душевное

Ы!
🔥186👍10216😁3😢3
Читаю цикл статей https://testdriven.io/guides/complete-python/
Некоторые новые штуки там узнал. Интересно. Про пайтон инстументарий, тестирование, подходы в разработке и тп. Со ссылками на Фаулера местами, ух!

#python #backend #IT #codebetter
👍89🔥34
Типизированный_Python_для_профессиональной_разработки.pdf
3.4 MB
Рад поделиться с вами книжкой по типизированному Python, о разработке которой я говорил здесь. Вжух!

Здесь актуальная версия книги от 8 июня 2022.

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

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

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

РАСПРОСТРАНЕНИЕ поддерживается, но, пожалуйста, в виде ссылки на этот пост или ссылки на веб-версию, т.к. книга обновляется.

#python #backend #it #codebetter #books
🔥791👍24763🎉27🥰2
Обновил PDF документ «Типизированный Python», новая версия в том же посте : t.me/t0digital/151

* Добавилась информация о протоколах typing.Protocol в главе об интерфейсах
* Добавилась информация о параметрах датаклассов slots и frozen
* Добавлен пример в главу «Интерпретатор не проверяет подсказки типов»
* Расширена глава о Enum, добавлено про наследование от str
* Расширена глава «Подсказки типов нужны только в функциях?»
* Исправлены найденные опечатки

Также обновлён Github с кодом.
Оглавление прошито в PDF документе.

#books #python #IT #backend #codebetter
👍220🔥72🎉52😢1
Если что — книжка снова обновилась, актуалочка всё там же https://xn--r1a.website/t0digital/151. Сорян, если кто-то напечатал:)

* Обновлена глава о Literal
* Добавлена информация о pyright анализаторе кода в дополнение к mypy
* Добавлены рекомендации в главу «Контейнеры — Iterable, Sequence, Mapping и другие»
* Исправлены найденные опечатки

#books #python #IT #backend #codebetter
👍188🔥22😁1610😢1
Статья для тех, кто боится использовать родной модуль logging в Python, не понимает его или не понимает, как настроить всё в своём проекте: https://khashtamov.com/ru/python-logging/

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

#IT #Python #backend #codebetter
👍127🔥181
This media is not supported in your browser
VIEW IN TELEGRAM
А вот потому что читать и юзать надо было 😇

#gg #it #codebetter
👍59😁27😢3🔥21
Диджитализируй!
Типизированный_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
👍124🔥22😁2
В комментах видео по drag-and-drop подсказали лучший способ позиционирования перетаскиваемого элемента — вместо изменения координат top/left использовать CSS правило transform: translate(x,y). Плюсы такого подхода в общем случае — браузеру легче делать оптимизации производительности, легче задействовать GPU и т.п. Но реализация сложнее, во всяком случае вчера весь день мне так казалось, пока я пытался это натыкать:)

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

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

Разницы в Performance в моей задаче, правда, Chrome dev tools не показал. Двигать один элемент в привязке к мыши видимо не так уж и сложно.

#IT #frontend #css #js #codebetter
👍13412🥰5🤔1
Упомянул тут в комментах книгу, которую читаю сейчас — по System design. Думаю, будет полезно многим бэкендерам. Показаны подходы к построению больших систем по нагрузке и данным. Прям хорошо. И много ссылок на бодрые статьи в интернете.

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

#books #IT #backend #codebetter
👍108🔥25😁4
Запариваетесь ли вы по красоте/длине урлов в своих веб-системах?

Которые не публичные адреса с ЧПУ для SEO, а внутрянка — там, где SEO не нужен, но люди-человеки в адресной строке браузера всё равно адрес видят?

GUID’ы, скажем, всякие смущают вас в URL, м:)?

Мы вот посовещались и решили, что GUID (один) в урле — это ок!
#IT #codebetter
👍836😢5🔥4
Надо делать хорошо, а нехорошо делать не надо!

Я сейчас в деревне и здесь по-прежнему мобильная связь работает только вне дома и на возвышенности.

Подтвердить что-то смс-кодом — проблемка. Код актуален 60 сек, за которые смс тупо не удаётся поймать иногда. И осложняется сиё мероприятие тем, что помимо смс надо ведь ещё и чтобы интернет как-то ловился, чтобы было куда этот код ввести.

И знаете что? Вот, стоя во весь рост на пеньке посреди поля с поднятым над головой телефоном и пытаясь загрузить личный кабинет оплачиваемого сервиса с постоянно отваливающимся интернетом, очень хочется, чтобы там грузилось чууууточку поменьше долбаных мегабайтов джаваскрипта:)

Professional highly complex ultra-modern frontend

Для загрузки кабинета Selectel надо грузануть 4.2 мегабайта, из которых 3.5 мегабайта JS. Angular — привеееет, дружочек-пирожочек!

Там же highly complex frontend у селектела, там стартануть без 3.5 метров скриптов никак низя. Иначе ж оно как на первом сайте в Интернет получится, недостаточно professional, слишком не modern, и вообще developer experience без этого пострадает и фронтендеры будут плак-плак и хнык-хнык, ибо их розовые IDEшные жопки на такое не подписывались!

Уууу, и што делать?!

Любой добавляемый npm пакет нужно проверить на размер в сборке через bundlephobia.com или аналоги. На каждый чих-пых добавлять плюс несколько десятков, а то и сотен килобайт чужих скриптов в сборку — может, мммм, не надо? А то в глазик тук-тук да по макушечке хрясь-хрясь:)?

А ещёёёё есть lazу loading, чтобы скрипты грузить по мере необходимости. А ещё есть SSR. А ещё есть сильно более легковесные фреймворки, чем Angular. А ещё есть островная архитектура. И ещё много-много-много всякого хорошего.

NullPointerException

Ну и, конечно, забавно наблюдать, как начинают сыпаться мобильные приложения на таком интернете. Кто молодец, добавляет плашку — пропал доступ к интернет, и мягко её убирает затем. Кто немолодец, начинает сыпать java’вовские исключения в духе NullPointerException. Альфа-банк привееееет, как дела:)?

Пургу гонишь!

Стой там на своём пеньке и не возмущайся, у нас с нормальным интернетом всё работает чётенько.

Ну так-то да.

Всем пофик. Фреймворк на фреймворке фреймворком погоняет, смазанный сотнями жирных в пень ненужных npm зависимостей. Профессиональные девелОперы профессионально девелОпят.

Хорошооо!
#IT #frontend #codebetter #javascript #tools
🔥312👍92😁43🎉4
https://youtu.be/haqLhNN5ZdY

Поговорим о возможностях аспектно-ориентированного программирования в Python, о внедрении зависимостей DI и DI-контейнерах в Python на примере punq, а также в целом о Java подходах vs Python подходах к реализации архитектуры.
Из разборов Ботаним!, 11 глава книги Чистый код, Роберт Мартин.

#youtube #IT #python #codebetter #tools #ботаним
👍69🔥126
Зззнатокам Python хитрый вопрос!

Какой тип поставить у параметра field функции print_user_field, чтобы последняя строка при проверке типа показала ошибку? Перечислять второй раз поля User — нельзя, ибо делает возможным рассинхрон имён полей в классе и отдельном их перечислении.

Код скопировать можно здесь.

Вот так это делается на TS

А как на Python, м:)?

#IT #python #typescript #codebetter
👍38🔥5😁4
Почему перечислять второй раз поля — плохо? Потому что возможна ситуация на скриншоте ⬆️ — поле name в User переименовалось в username, а в типах параметра field осталось name. Система проверки типов не покажет ошибку при вызове print_user_name(user, "name"), а хотелось бы ошибку увидеть, так как поля name уже нет.

Почему вынести эту проверку на переданное значение field в блок try/except — плохо? Потому что это уведёт ошибку в runtime, а надо минимизировать ошибки в рантайме, ошибки в рантайме = грустящие пользователи.

Систематических способа минимизировать ошибки в рантайме я знаю два, ТТ — как Тульский Токарев, только Типизация и Тесты.

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

Можно ли обойтись без типизации? Конечно, драматически увеличив количество тестов и проверок в коде, засорив код этими проверками.

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

#python #it #codebetter
👍43🔥302