Код на салфетке
2.38K subscribers
770 photos
21 videos
2 files
811 links
Канал для тех, кому интересно программирование на Python и не только.

Сайт: https://pressanybutton.ru/
Чат: https://t.me/+Li2vbxfWo0Q4ZDk6
Заметки автора: @writeanynotes

Реклама и взаимопиар: @Murzyev1995
Сотрудничество и др.: @proDreams
Download Telegram
ty: революция в тайп-чекинге
Автор: Иван Ашихмин

Astral представили ty — новый тайп-чекер для Python, который обещает изменить привычный подход к типизации. В статье разбираемся, чем ty отличается от mypy и Pyright, почему он настолько быстрый, как устроен изнутри и стоит ли уже сейчас пробовать его в реальных проектах.

Читать статью на сайте
Читать статью на Хабр

Поддержать проект через YooMoney
Поддержать проект через Tribute в Telegram
Поддержать проект через наш Telegram-бот

#новости #python #uv #ruff #mypy #ty #type_checking #astral
🔥411
Знаете ли вы, что при множественном наследовании метод вызывается не из того класса, откуда ожидается?

Создаете класс с несколькими родителями, вызываете метод, а Питон выбирает его из совершенно неочевидного места. Или пытаетесь понять порядок вызова super(), а он идет против всякой логики. Дело в Method Resolution Order (MRO) – алгоритме, который Python использует, чтобы решить, откуда брать методы при наследовании.

Классический пример ромбовидного наследования:

class A:
def method(self):
print("A.method")

class B(A):
def method(self):
print("B.method")

class C(A):
def method(self):
print("C.method")

class D(B, C):
pass

d = D()
d.method() # B.method
print(D.__mro__)
# (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>,
# <class '__main__.A'>, <class 'object'>)


Питон идет слева направо: D -> B -> C -> A -> object. Поэтому вызывается B.method, хотя C тоже наследует от A.

Теперь поменяем порядок родителей:

class D(C, B):  # C теперь первый
pass

d = D()
d.method() # C.method – результат изменился
print(D.__mro__)
# (<class '__main__.D'>, <class '__main__.C'>, <class '__main__.B'>,
# <class '__main__.A'>, <class 'object'>)


Порядок в скобках имеет значение – первый родитель имеет приоритет.

Особенно интересно с super():

class A:
def method(self):
print("A")

class B(A):
def method(self):
print("B")
super().method()

class C(A):
def method(self):
print("C")
super().method()

class D(B, C):
def method(self):
print("D")
super().method()

d = D()
d.method()
# D
# B
# C
# A


Здесь super() идет не к родителю, а к следующему в MRO: D -> B -> C -> A. Поэтому из B вызывается C, хотя C не родитель B.

А вот случай когда Python откажется создавать класс:

class X: pass
class Y(X): pass

class Bad(X, Y): # TypeError: Cannot create a consistent method resolution
pass


Python не может построить MRO, где X идет до Y (требование X, Y) и одновременно Y идет до X (требование наследования). Он использует алгоритм C3 linearization для построения MRO. Правила простые: класс всегда идет раньше своих родителей, порядок родителей из определения сохраняется, каждый класс появляется один раз. Если эти правила конфликтуют – получается TypeError.

Чтобы посмотреть MRO любого класса используйте .__mro__ или .mro().

Код на салфетке x Кусочки кода
🔥7🤯5
GitLab: Основы написания Pipeline 1/3
Автор: Иван Ашихмин

Первая из трёх статья посвящённая разбору отличий GitLab CI от GitHub Action и основам написания Pipeline.

Читать статью на сайте
Читать статью на Хабр

Поддержать проект через YooMoney
Поддержать проект через Tribute в Telegram
Поддержать проект через наш Telegram-бот

#гайды #github #gitlab #pipeline #actions #ci_cd #stage #devops #runner #job
🔥922
Всем доброго вечера пятницы!

«Хроники хищных городов» (2018)

Это тот фильм, который цепляет уже одной идеей: мир будущего, где города стоят не на картах, а на гусеницах и охотятся друг на друга, как хищники. Огромный Лондон преследует и «поглощает» маленькие города ради ресурсов, а внутри этой железной махины кипят интриги, тайные планы и личные драмы.

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

Если нравится масштабное кино с оригинальным визуалом, гигантскими машинами и ноткой подросткового бунта против системы — «Хроники хищных городов» отлично зайдут. Это тот случай, когда мироустройство само по себе вызывает желание пересматривать детали, а за зрелищем скрываются темы власти, неравенства и борьбы за право жить по-своему.
👍5🔥31
Всем привет!

Розыгрышу уже неделя — за это время в нём приняли участие 110 человек. Спасибо каждому, кто подключился.

Пора подробнее рассказать о призах и о том, как они будут распределяться.

Что разыгрываем:


- 2x Толстовка с большим принтом
- 2x Футболка с большим принтом
- 3x Футболка с маленьким принтом
- 3x Блокнот с принтом
- RGB светильник-ночник с логотипом

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

И небольшой спойлер 👀
Нам уже есть что показать: ниже — фото толстовки на нашем авторе, макет обложки блокнота и 11-й приз, который до этого момента оставался секретным.
🔥14311👍1🦄1
Привет, друзья! 👋

Еще одна неделя позади, и у нас накопилось много интересного контента. Вот самые полезные и увлекательные материалы, которые мы выбрали для вас на этой неделе:

📋 Новое на канале:

🔄 Понедельник, 22.12.2025Дайджест

🐍 Вторник, 23.12.2025 — 1. ty: революция в тайп-чекинге. 2. Знаете ли вы, что при множественном наследовании метод вызывается не из того класса, откуда ожидается?

Четверг, 25.12.2025 — GitLab: Основы написания Pipeline 1/3

🎬 Пятница, 26.12.2025Пятничный кинорелакс

🎰 Суббота, 27.12.2025 — Розыгрышу уже неделя!


🔗 Будьте ближе к нам:

🌐 Читайте полные статьи на сайте

💬 Присоединитесь к обсуждению в чате

Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе! 🚀

#дайджест #код #python #полезное #код_на_салфетке
🔥81👍1
GitLab: Основы написания Pipeline 2/3
Автор: Иван Ашихмин

Вторая из трёх статья, посвящённая продолжению разбора конфигурирования файла .gitlab-ci.yml


Читать статью на сайте
Читать статью на Хабр

Поддержать проект через YooMoney
Поддержать проект через Tribute в Telegram
Поддержать проект через наш Telegram-бот

#гайды #docker #github #gitlab #pipeline #ci_cd #stage #devops #job #ci #кэш #if #trigger #артефакты
🔥51👌1
Всем привет!

С конца года многие подводят итоги — и мы решили не отставать.

Мы подготовили краткий обзор наших годовых цифр: чистые показатели по каналу и сайту за прошедшие 12 месяцев:
🔥124🦄4
Знаете ли вы, как Microsoft Azure упал на 8 часов из-за 29 февраля, которого не существует?

29 февраля 2012 года облако Microsoft Azure легло на 8+ часов. Сертификаты для виртуальных машин создавались с датой истечения "текущая дата + 1 год", а 29 февраля 2012 плюс год дает 29 февраля 2013. Такой даты не существует, потому что 2013 год не високосный.

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

Через 75 минут система решила что проблема в железе и отключила автоматическое восстановление – так Azure начал падать по всему миру.

Microsoft отключил управление сервисами глобально в 18:55 PST 28 февраля, первый раз в истории Azure. Клиенты не могли деплоить, обновлять и масштабировать приложения. Не упавшие приложения продолжали работать, но часть виртуалок была недоступна.

Баг нашли в 18:38, фикс накатили к 05:23 следующего утра. Azure вернулся в строй для большинства кластеров.

Но это было ненадолго: в 7 кластерах система была в процессе обновления когда случился тот же баг с високосным годом. Microsoft решил откатиться на старую версию с фиксом. Протестировали на одном из серверов, все выглядело нормально – накатили сразу на все сервера в этих 7 кластерах. И забыли проверить сеть.

В пакете обновления оказался новый сетевой плагин, несовместимый со старой версией. Все виртуалки в этих кластерах потеряли сеть, включая те что работали нормально. В этих кластерах крутились Access Control Service и Service Bus, от которых зависело множество других сервисов.

Окончательно все починили только к 02:15 ночи 1 марта.

После окончательной починки, Microsoft выдал всем клиентам Azure Compute кредит на 33% от стоимости за весь месяц, даже тем кого не затронуло.

Это стало одним из самых громких отключений в истории облачных сервисов – баг в одной строке кода с датами положил всю клиентскую инфраструктуру. Так что в Новом Году желаем вам не повторять судьбу Microsoft и помнить про время!

Код на салфетке x Кусочки кода
🔥14😱1🤣1
С наступающим новым годом!

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

Этот год для канала вышел вполне неплохим (хотя мог бы быть и лучше!):
- Число подписчиков за год удвоилось! Цель на будущий год - превзойти этот показатель и набрать 4-5 тысяч!
- Статьи выходили практически без пропусков в течение всего года по четвергам, а иногда и в другие дни, если был на то повод. Постараемся держать планку и дальше! Также, воспользуюсь моментом и скажу, что мы будем рады новым авторам!
- Сайт в течение года претерпевал изменения. Обновился внешний вид, он стал, как мне кажется, вполне неплохим, хоть и не без косяков. Однако, у меня всё ещё есть цель кардинальной переделки из "сайт-блог" в полноценный Content Hub...

Были в этом году и проекты. Часть Open Source, а часть закрытые:
- Taigram - Telegram-бот для оповещений из системы управления проектами Taiga. Одно из самых полезных приложений, поскольку пользуемся им регулярно, однако, код требует переработки и оптимизации.
- ReVu - Self-Hosted ревьюер Pull Request с помощью ИИ. Проект получился интересным, но он ещё не закончен.
- Napkin Random Bot - Бот для проведения розыгрышей. Именно в нём вы принимаете участие в нашем новогоднем розыгрыше =). Также как и Taigram, он требует доработки и улучшений, но он уже вполне рабочий.
- SmetApp - Тот самый проект, в который я набирал стажёров для участия. Мы его начали, но забуксовали из-за того, что я не смог уделять ему достаточно времени, а также, потому, что у нас нет фронтендера. С самого начала нового года растормошу всех и продолжим разработку!

Хочу поблагодарить тех, кто радует вас контентом на канале и сайте:
- Сергея, автора рубрики "Кусочки кода", который, вроде бы, не пропустил ни одного вторника! Подписывайтесь на его одноимённый канал!
- Эльшада, автора воскресной рубрики (у которой почему-то всё ещё нет названия!), в которой он периодически рассказывает о работе с ИИ и других интересных вещах с которыми ему приходится сталкиваться как СТО. Также подписывайтесь на его канал "Мозг в данных".
- Евгения, который пишет для вас статьи на сайте и развивает свой проект.

Поздравление от Эльшада:
С наступающим 2026 🎄
Желаю, чтобы в 2026-м восстание машин снова отложили! 🤖🥂 Пусть ваши модели будут умными и послушными, а аптайм серверов будет длиннее, чем список покупок к новогоднему столу (Ну конечно же 100%). Пусть ИИ берет на себя всю рутину, а вы - только премии. Держите сервера в холоде, а ключи шифрования - ближе к сердцу.
🤗🤗


Поздравление от Евгения:

Дорогие подписчики, гости канала, а также команда «Код на салфетке» — поздравляю всех с наступающим Новым 2026 годом! В новом году Kawai-Focus переедет на новый стек: он станет современнее, удобнее и визуально ещё приятнее. Желаю каждому, чтобы в 2026-м исполнились самые заветные мечты, а также чтобы год принёс рост, интересные задачи и успехи в IT-карьере.


Хочу пожелать всем хорошо отдохнуть в новогодние праздники и набраться сил на весь предстоящий год. Мыслите позитивно и тогда неудачи будут просто небольшой преградой к успеху. Пробуйте новое, изучайте и развивайтесь!
Пусть те, кто ищут работу найдут её без трудностей, а те, кто только учатся будут схватывать всё "на лету".

Успехов в новом 2026-м году!

Расскажите, как прошёл ваш год и какие планы на грядущий?
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥1676👍2