Статья для тех, кто боится использовать родной модуль
Накидал также небольшую демку настройки логирования в проекте — в сообщении выше.
#IT #Python #backend #codebetter
logging в Python, не понимает его или не понимает, как настроить всё в своём проекте: https://khashtamov.com/ru/python-logging/Накидал также небольшую демку настройки логирования в проекте — в сообщении выше.
#IT #Python #backend #codebetter
👍127🔥18❤1
Диджитализируй!
Типизированный_Python_для_профессиональной_разработки.pdf
Вдогоночку. Если надо указать тип для переменной, принимающей класс
Удобно, когда функция принимает класс. Например, функция-фабрика какая-то, которая принимает на вход класс и создаёт его экземпляр.
#IT #backend #python #codebetter
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
Сегодня на свежачок, умываясь, словил из недр подсознания внезапно всплывшую хорошую идею и она быстренько залетела без больших правок в коде.
Вывод — если что-то долго не залетает, то вполне вероятно, что вы тупите. Стоит отдохнуть, переключиться, возможно поспать, а мозг в фоне вам поможет найти новые подходы.
Разницы в Performance в моей задаче, правда, Chrome dev tools не показал. Двигать один элемент в привязке к мыши видимо не так уж и сложно.
#IT #frontend #css #js #codebetter
👍134❤12🥰5🤔1
Упомянул тут в комментах книгу, которую читаю сейчас — по System design. Думаю, будет полезно многим бэкендерам. Показаны подходы к построению больших систем по нагрузке и данным. Прям хорошо. И много ссылок на бодрые статьи в интернете.
Особенно полезна книга своим чётким акцентом на строгое использование кнопочек и манипулятора мышь при написании своих собственых гуглов и твиттеров!
#books #IT #backend #codebetter
Особенно полезна книга своим чётким акцентом на строгое использование кнопочек и манипулятора мышь при написании своих собственых гуглов и твиттеров!
#books #IT #backend #codebetter
www.piter.com
System Design. Подготовка к сложному интервью
Инсайдерская информация: что на самом деле нужно интервьюерам по System Design, 4-х шаговый подход к решению любой задачи, 16 вопросов из реальных интервью с подробными решениями, 188 диаграмм, наглядно объясняющих, как работают реальные системы
👍108🔥25😁4
Запариваетесь ли вы по красоте/длине урлов в своих веб-системах?
Которые не публичные адреса с ЧПУ для SEO, а внутрянка — там, где SEO не нужен, но люди-человеки в адресной строке браузера всё равно адрес видят?
GUID’ы, скажем, всякие смущают вас в URL, м:)?
Мы вот посовещались и решили, что GUID (один) в урле — это ок!
#IT #codebetter
Которые не публичные адреса с ЧПУ для SEO, а внутрянка — там, где SEO не нужен, но люди-человеки в адресной строке браузера всё равно адрес видят?
GUID’ы, скажем, всякие смущают вас в URL, м:)?
Мы вот посовещались и решили, что GUID (один) в урле — это ок!
#IT #codebetter
👍83❤6😢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’вовские исключения в духе
Пургу гонишь!
Стой там на своём пеньке и не возмущайся, у нас с нормальным интернетом всё работает чётенько.
Ну так-то да.
Всем пофик. Фреймворк на фреймворке фреймворком погоняет, смазанный сотнями жирных в пень ненужных npm зависимостей. Профессиональные девелОперы профессионально девелОпят.
Хорошооо!
#IT #frontend #codebetter #javascript #tools
Я сейчас в деревне и здесь по-прежнему мобильная связь работает только вне дома и на возвышенности.
Подтвердить что-то смс-кодом — проблемка. Код актуален 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 #ботаним
Поговорим о возможностях аспектно-ориентированного программирования в Python, о внедрении зависимостей DI и DI-контейнерах в Python на примере punq, а также в целом о Java подходах vs Python подходах к реализации архитектуры.
Из разборов Ботаним!, 11 глава книги Чистый код, Роберт Мартин.
#youtube #IT #python #codebetter #tools #ботаним
YouTube
DI, DI-контейнеры, аспектно-ориентированное программирование в Python vs Java. Чистый код, 11 глава
Поговорим о возможностях аспектно-ориентированного программирования в Python, о внедрении зависимостей DI и DI-контейнерах в Python на примере punq, а также в целом о Java подходах vs Python подходах к реализации архитектуры.
Из разборов Ботаним! https:…
Из разборов Ботаним! https:…
👍69🔥12❤6
Зззнатокам Python хитрый вопрос!
Какой тип поставить у параметра
Код скопировать можно здесь.
Вот так это делается на TS
А как на Python, м:)?
#IT #python #typescript #codebetter
Какой тип поставить у параметра
field функции print_user_field, чтобы последняя строка при проверке типа показала ошибку? Перечислять второй раз поля User — нельзя, ибо делает возможным рассинхрон имён полей в классе и отдельном их перечислении.Код скопировать можно здесь.
Вот так это делается на TS
А как на Python, м:)?
#IT #python #typescript #codebetter
👍38🔥5😁4
Почему перечислять второй раз поля — плохо? Потому что возможна ситуация на скриншоте ⬆️ — поле
Почему вынести эту проверку на переданное значение
Систематических способа минимизировать ошибки в рантайме я знаю два, ТТ — как Тульский Токарев, только Типизация и Тесты.
Оба способа не гарантируют отсутствие ошибок, но позволяют вылавливать какое-то их количество на этапах до рантайма, то есть до пользователей. Чем лучше ТТ, тем меньше ошибок в рантайме.
Можно ли обойтись без типизации? Конечно, драматически увеличив количество тестов и проверок в коде, засорив код этими проверками.
Типизация помогает сократить количество тестов, потому что большой пласт ошибок выявляется на этапе проверки типов.
#python #it #codebetter
name в User переименовалось в username, а в типах параметра field осталось name. Система проверки типов не покажет ошибку при вызове print_user_name(user, "name"), а хотелось бы ошибку увидеть, так как поля name уже нет.Почему вынести эту проверку на переданное значение
field в блок try/except — плохо? Потому что это уведёт ошибку в runtime, а надо минимизировать ошибки в рантайме, ошибки в рантайме = грустящие пользователи.Систематических способа минимизировать ошибки в рантайме я знаю два, ТТ — как Тульский Токарев, только Типизация и Тесты.
Оба способа не гарантируют отсутствие ошибок, но позволяют вылавливать какое-то их количество на этапах до рантайма, то есть до пользователей. Чем лучше ТТ, тем меньше ошибок в рантайме.
Можно ли обойтись без типизации? Конечно, драматически увеличив количество тестов и проверок в коде, засорив код этими проверками.
Типизация помогает сократить количество тестов, потому что большой пласт ошибок выявляется на этапе проверки типов.
#python #it #codebetter
👍43🔥30❤2
Михаил о написании кода, рефакторинге и двух чудо-шапках программиста!
https://www.youtube.com/watch?v=tMbfqsePKHs
#IT #interesting #codebetter
https://www.youtube.com/watch?v=tMbfqsePKHs
#IT #interesting #codebetter
YouTube
Говнокод - необязательно писать код и рефакторить одновременно
В этом видео поговорим о критике, говнокоде, рефакторинге... Все это в принципе связанные темы, но просто эмоции немного бушуют и хотелось высказаться.
Стрим Диджитализируй https://www.youtube.com/watch?v=ExaQHffBE20
Поддержать меня: https://boosty.to/mflenov…
Стрим Диджитализируй https://www.youtube.com/watch?v=ExaQHffBE20
Поддержать меня: https://boosty.to/mflenov…
👍119🔥14❤3