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

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

Реклама и взаимопиар: @Murzyev1995
Сотрудничество и др.: @proDreams
Download Telegram
Трое в лодке, не считая контекста
Автор: Владимир Пятницкий

Создание MCP-агентов: Полное руководство по разработке и интеграции.

Создание MCP-сервера, создание MCP-клиента, интеграция в приложение на python


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

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

#гайды #python #LLM #ИИ #MCP #искусственный_интеллект #ИИ_агенты #model_context_protocol
🔥8😱21
Media is too big
VIEW IN TELEGRAM
🦍 IT И БИЗНЕС: КАК ПЕРЕСТАТЬ БЫТЬ «КОД-МАРТЫШКОЙ» В 2026 ГОДУ

Для бизнеса IT-отдел часто выглядит как черная дыра для бюджета. А разработчики видят бизнес как генератор хаоса, который мешает писать "чистый код".

На дворе январь 2026. Если вы до сих пор просто закрываете тикеты и ждете идеального ТЗ - у меня плохие новости. Технологии улетели вперед, AI пишет бойлерплейт быстрее джуна, а ценность инженера теперь не в знании синтаксиса, а в понимании денег.

Разберем, как перестать быть инструментом и начать управлять хаосом.

➡️➡️⤴️⤴️🔄⤴️⤴️➡️🔘

😘 ЛОВУШКА ИСПОЛНИТЕЛЯ И BUSINESS ACUMEN

Фундаментальный конфликт: бизнес мыслит категориями прибыли (зачем это нужно), а IT мыслит категориями синтаксиса (как это сделать). Пока этот разрыв существует, вы проигрываете.

🆓📉 Ловушка исполнителя. Если вы просто "пишете код по ТЗ", вы добровольно становитесь инструментом. Инструмент не задает вопросов, но его легко заменить, когда он ломается или устаревает. Слепое выполнение = создание легаси-кода, который никому не нужен.
🆓🧠 Business Acumen (Бизнес-чутье). Единственный способ выбраться из ловушки. В 2026 году стыдно не знать, как ваша компания зарабатывает. Если вы не можете объяснить, как конкретная фича принесет деньги - не пишите код. Идите к заказчику и выясняйте бизнес-ценность.
🆓🍴 От "Дыры в бюджете" к Мультипликатору. Как только вы начинаете думать о деньгах, отношение меняется. IT перестает быть "черной дырой", куда уходит бюджет, и становится рычагом, который умножает прибыль. Выбор за вами: быть дорогим калькулятором или партнером по бизнесу.

➡️Но чтобы стать партнером, мало просто "понимать бизнес". Нужно научить ваш код говорить на языке этого бизнеса. И здесь на сцену выходит архитектура.


😵‍💫 СТРОИМ СИСТЕМУ БЕЗ АНАЛИТИКА (DDD LITE)

Когда вы начинаете вникать в бизнес-процессы, вы обнаруживаете, что термины в коде и в реальности не совпадают. Спасает DDD (Предметно-ориентированное проектирование), но без академического фанатизма.

🆓😇 Единый язык. Это база. Если коммерческий директор говорит "Сделка", а в базе у вас таблица Order, а в коде класс Lead - баги неизбежны. Синхронизируйте словарь. Код должен быть читаемым слепком бизнеса, а не абстракцией программиста.
🆓🧱 Изоляция контекстов. Не превращайте проект в "Большой ком грязи". Складской учет должен быть изолирован от бухгалтерии. Изменения в логистике не должны ломать расчет зарплат. Разделяй и властвуй.
🆓🙂 Глубина знаний. Поверхностное понимание задачи рождает поверхностный код. Погружайтесь в предметную область, иначе будете решать выдуманные технические проблемы вместо реальных болей клиента (внутреннего или внешнего).

➡️Хорошо, архитектуру наладили. Но кто будет это реализовывать? Если ждать идеального Проджект-менеджера, можно состариться. Команде придется меняться самой.


📖 РЕЖИМ PRODUCT-MINDED ENGINEER

Отсутствие PM-а в команде - это не повод для анархии. Это повод включить голову и перейти от роли "кодера" к роли "инженера продукта".

🆓🐱 Инженер как Решатель. Мы здесь не чтобы писать строки кода, а чтобы решать проблемы. Иногда лучшее решение - вообще не кодить, а взять готовое SaaS-решение или изменить бизнес-процесс. Это и есть Product Mindset.
🆓👎 Риск "Двойной роли". Когда разработчик сам себе менеджер, велик соблазн накопить "дизайн-долг". Это когда мы срезаем углы в архитектуре, чтобы быстрее закрыть задачу. Держите баланс: скорость важна, но не ценой смерти проекта через полгода.
🆓😑 Экология труда. Руководитель должен создавать давление, чтобы задачи двигались, но без нереалистичных дедлайнов. Выгорание ведущего инженера стоит компании дороже, чем срыв срока на неделю.

➡️Кстати, о скорости и срезании углов. Иногда бизнес требует решения "вчера". И здесь настоящий инженер отличается от перфекциониста умением грамотно "костылить".


🏃‍♂️ ФИЛОСОФИЯ КОСТЫЛЕЙ: ОСОЗНАННЫЙ ТЕХДОЛГ

Костыли - это не грех. Это финансовый инструмент. Это кредитное плечо, которое вы берете у системы, чтобы успеть к релизу.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥54
🆓😐 MVP и пожары. Иногда "криво и быстро" сегодня важнее, чем "идеально архитектурно" через месяц. Если бизнесу нужно ехать сейчас, "шашечки" не важны.
🆓☠️ Точка невозврата. Костыль становится ядом только тогда, когда живет дольше месяца и обрастает зависимостями. Это путь к техническому дефолту - состоянию, когда переписать систему дешевле, чем поддерживать.
🆓🥰 Рефакторинг как гигиена. Не ждите "особого спринта" для рефакторинга. Это фоновый процесс. Убирайте за собой сразу, как повар на кухне, возвращая долг системе.

➡️Мы разобрались с кодом, людьми и долгами. Осталось самое сложное - как спланировать работу в условиях, когда всё меняется каждый день?


💄 УПРАВЛЕНИЕ ХАОСОМ

Хаос в разработке - это нормальное состояние. По данным Standish Group, процент провалов в IT всё еще высок. Почему? Потому что мы плохо считаем.

🆓☠️ Task Unpacking. Единственный способ бороться с неопределенностью - дробить задачи. Если задача в плане занимает больше 4 часов - это ложь. Декомпозируйте её до атомов.
🆓🫥 Парадокс планирования. Люди биологически склонны к оптимизму. Всегда умножайте свои оценки на коэффициент риска (обычно x2 или x3). Ни в коем случае не пессимизм, это просто статистика.
🆓🏃‍♂️ Закон Паркинсона. Работа всегда заполнит всё время, отпущенное на неё. Жесткие (но разумные) дедлайны дисциплинируют лучше, чем бесконечный Agile.

➡️➡️⤴️⤴️🔄⤴️⤴️➡️🔘

🤔 А вы кто сегодня: пишете код по ТЗ или реально решаете проблемы бизнеса?


Код на салфетке x Мозг в данных

P.S.: видео с аккаунта в запрещеннограмме pymineral
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍2
Привет, друзья! 👋

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

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

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

🐍 Среда, 14.01.2026 — Знаете ли вы, что переменная цикла for может протекать за пределы цикла?

⚙️ Четверг, 15.01.2026 — Проснулся 1-го января и переписал библиотеку: релиз async_yookassa 1.0.0

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

🤖 Воскресенье, 18.01.2026 — Трое в лодке, не считая контекста, IT И БИЗНЕС: КАК ПЕРЕСТАТЬ БЫТЬ «КОД-МАРТЫШКОЙ» В 2026 ГОДУ

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

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

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

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

#дайджест #код #python #полезное #код_на_салфетке
🔥52❤‍🔥1
Знаете ли вы, что and и or возвращают не True/False, а сами операнды?

Пишем result = x or y, ждем булево значение, а там объект x или y. Или используем value = a and b для проверки, а в переменной оказывается один из операндов, вместо True/False. Дело тут в том, что and и or в Python не преобразуют результат в bool – они возвращают один из операндов как есть, в зависимости от их истинности.

Простой пример – or возвращает первый истинный операнд:

result = 5 or 10
print(result) # 5, а не True

result = 0 or 10
print(result) # 10

result = None or "default"
print(result) # "default"

result = "" or "fallback"
print(result) # "fallback"


or проверяет первый операнд – если он правдив (не 0, не None, не пустая строка), то возвращает его. Иначе – вернет второй операнд, не проверяя его на истинность.

С and работает наоборот – он возвращает первый ложный или просто последний операнд:

result = 5 and 10
print(result) # 10, а не True

result = 0 and 10
print(result) # 0

result = "hello" and "world"
print(result) # "world"

result = [] and "never evaluated"
print(result) # []


and проверяет первый операнд – если он ложный, возвращает его сразу. Если истинный, возвращает второй операнд как есть, не преобразуя в bool.

Это позволяет делать короткие условные выражения:

# Установка значения по умолчанию
name = input("Имя: ") or "Аноним"
print(f"Привет, {name}")
# Если ввели пустую строку, name = "Аноним"

# Безопасное обращение к атрибуту
config = None
debug = config and config.get('debug')
print(debug) # None, без ошибки
# Если config = None, второй операнд не вычисляется

# Выбор первого непустого значения
first_name = ""
last_name = "Петров"
display_name = first_name or last_name or "Неизвестно"
print(display_name) # "Петров"


Второй операнд and и or не вычисляется если результат уже известен (short-circuit evaluation).

Особенно опасно в словарях и списках:

# Устанавливаем значение по умолчанию
data = {'name': ''}
processed = data.get('name') or 'Unknown'
print(processed) # 'Unknown'

# Но если значение может быть 0
scores = {'player1': 0}
score = scores.get('player1') or 100
print(score) # то получится 100 – настоящий 0 утерян

# Правильно через get с дефолтным значением
score = scores.get('player1', 100)
print(score) # 0


Пустая строка и 0 являются ложными, поэтому or их пропускает, хотя это валидные значения.

Вот где это полезно – ленивая инициализация:

class Cache:
def __init__(self):
self._data = None

def get_data(self):
# Инициализируем только при первом обращении
self._data = self._data or self._load_expensive_data()
return self._data

def _load_expensive_data(self):
print("Loading...")
return {'key': 'value'}

cache = Cache()
print(cache.get_data()) # Loading... {'key': 'value'}
print(cache.get_data()) # {'key': 'value'} - без Loading


or проверяет кеш, и если он None, вызывает дорогую функцию только один раз.

Операторы and и or возвращают сами операнды, а не True/False. or возвращает первый истинный операнд или последний, and возвращает первый ложный, либо последний. Это полезно для значений по умолчанию и условных выражений, но может создать баги если не учитывать что пустая строка, 0 или пустой список тоже ложны.

Код на салфетке x Кусочки кода
🔥1422
Всем доброго вечера пятницы!

«Побег из плена» (2025)

Это военная драма о британском лётчике Джеймсе Райте, который в 1942 году попадает в японский лагерь на Филиппинах. Жизнь там сводится к выживанию и подчинению жестоким правилам охраны.

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

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

Приятного просмотра!
🔥41
Всем привет!

Как многие из вас знают, я преподаю и менторю в IT-академии Lad. Решили начать февраль активно: запускаем серию открытых практикумов по разным IT-направлениям.

Разумеется, один из них веду я. Тема — «Разработка Telegram-бота с ИИ».

Что будем делать? Не будем грузить вас сложной архитектурой и «умными» терминами. Моя цель — показать то, что реально работает. Мы напишем бота, которого сможет повторить любой новичок, сразу протестировать и получить первый результат в Python-разработке.

Приходите кодить и общаться 8 февраля в 13:00.


Если Python — не единственное, что вам интересно, очень советую заглянуть на эфиры к моим коллегам (это реально крутые практики):
• Frontend-разработка
• UX/UI-дизайн
• Backend на JavaScript
• Управление проектами (PM)

Регистрируйтесь по ссылке и выбирайте интересные темы!

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

P.S. По моему личному промокоду press_any_button действует скидка 10 000 рублей на обучение. Он вечный, но лучше успеть к старту группы!
🔥114👍21😱1
Код на салфетке pinned a photo
This media is not supported in your browser
VIEW IN TELEGRAM
👨‍💻🔥Тимлид поневоле: как не задушить команду и не выгореть самому

В IT любят красивые слова про "интеллектуальный капитал". Но на деле многими командами управляют как бригадой на заводе. Отчет каждые 15 минут, вопрос "почему задача висит три часа" и прочие радости микроменеджмента. Удаленка эти проблемы только подсветила.

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

➡️➡️⤴️⤴️🔄⤴️⤴️➡️🔘

🥰 Почему ломаются заводские настройки

Главная ошибка новичка - непонимание времени. Пол Грэм (прим. ред.: американский предприниматель, программист, эссеист, известный сторонник и пропагандист использования языка программирования Lisp) называл это конфликтом расписаний.

У менеджера день нарезан на часовые слоты. Переключиться между задачами каждые полчаса для него нормально. Поговорил с заказчиком, ответил на почту. Он продуктивен именно в переключении.

У Творца (разработчика) все иначе. Ему нужны длинные куски времени, часа по четыре минимум. Чтобы спроектировать архитектуру, надо погрузиться в контекст. Одно "быстрое совещание на 15 минут" в середине дня не просто отнимает время. Оно разбивает день на два бесполезных куска и выбивает человека из потока.

На удаленке начальники теряют визуальный контроль и начинают паниковать, обрывая мессенджеры.
🏃‍♀️ Совет: Хотите результата - учитесь асинхронности. Не ждите мгновенного ответа, если прод не горит. Дайте людям работать.


😑 Когда включать диктатора

В учебниках стили управления раскладывают по полочкам, но в жизни приходится постоянно менять маски.
🆓Диктатор. Нужен, когда "упал прод" и бизнес теряет деньги. Здесь демократия вредна, нужны жесткие команды.
🆓🟡Лидер-слуга. Работает в спокойное время. Вы перестаете быть надсмотрщиком и становитесь бульдозером. Ваша задача - расчищать путь и убирать бюрократию.

Используйте ситуационное лидерство. Новичку нужны инструкции. Сомневающемуся - поддержка. А профи нужно просто делегировать полномочия и отойти в сторону.

😇 Топ-3 ошибки выжившего

Переход из инженеров в менеджеры - всегда стресс. Раньше вы отвечали за предсказуемый код, теперь за иррациональных людей.

🆓0️⃣ Микроменеджмент от страха. Кажется, если не проверить каждую строку, все рухнет. Вы начинаете стоять над душой, порождая у команды выученную беспомощность.
🆓Лечим так: Правило 30/70. Если вы техлид, тратьте на менеджмент 30% времени, остальное на технику. Не пытайтесь кодить за всех.

🆓1️⃣ Отказ от личных встреч (1:1). Многие считают их пустой тратой времени. Но обычно сотрудники приходят сами уже с заявлением об увольнении.
🆓Лекарство: Регулярные 1:1 нужны не для статусов по задачам, а для разговора о человеке. Закройте рот и слушайте, это время сотрудника.

🆓2️⃣ Созвоны ради ритуала. Ежедневные стендапы часто превращаются в бубнеж сонных людей о вчерашних задачах.
🆓Лекарство: Если команда сработанная, переведите отчеты в текстовый чат. Введите "дни тишины" без совещаний.


➡️➡️⤴️⤴️🔄⤴️⤴️➡️🔘

Стать тимлидом - значит сменить профессию. Теперь ваша работа не писать код, а создавать среду для этого. Убивайте в себе желание контролировать мелочи и защищайте время своих сотрудников.
Помните - вы управляете живыми людьми, а не тикетами в Jira.

Узнали в описании себя или своего босса? 😉


Код на салфетке
x Мозг в данных
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9💯1
Привет, друзья! 👋

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

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

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

🤖 Вторник, 20.01.2026 — Знаете ли вы, что and и or возвращают не True/False, а сами операнды?

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

⚙️ Воскресенье, 25.01.2026 — Приглашение на практикум по Python

🤖 Воскресенье, 25.01.2026 — Тимлид поневоле: как не задушить команду и не выгореть самому


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

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

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

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

#дайджест #код #python #полезное #код_на_салфетке
🔥6
Знаете ли вы, что copy.copy() не копирует вложенные объекты?

Копируете список со вложенными списками через copy.copy(), меняете элемент внутреннего списка в копии – а он меняется и в оригинале. Дело в том, что copy.copy() делает shallow copy – копирует только верхний уровень структуры, а вложенные изменяемые объекты остаются общими между оригиналом и копией.

Простой пример с мутацией вложенного списка:

import copy

original = [[1, 2, 3], [4, 5, 6]]
shallow = copy.copy(original)

# Изменяем содержимое вложенного списка
shallow[0][0] = 999

print(original) # [[999, 2, 3], [4, 5, 6]]
print(shallow) # [[999, 2, 3], [4, 5, 6]]
# Оба изменились: внутренние списки – один объект


Проверим через id():

import copy

original = [[1, 2], [3, 4]]
shallow = copy.copy(original)

print("Внешний список:", id(original), "vs", id(shallow))
# Разные объекты

print("Внутренний [1,2]:", id(original[0]), "vs", id(shallow[0]))
# Один и тот же объект


Важный нюанс: перезапись не равно изменение. Если заменить весь вложенный список, а не его элемент – оригинал не пострадает:

original = [[1, 2], [3, 4]]
shallow = copy.copy(original)

shallow[0] = [9, 9] # Перезаписываем элемент, а не меняем содержимое
print(original) # [[1, 2], [3, 4]] – без изменений
print(shallow) # [[9, 9], [3, 4]]


Для полного копирования всех уровней нужен deepcopy:

import copy

original = [[1, 2, 3], [4, 5, 6]]
deep = copy.deepcopy(original)

deep[0][0] = 999
print(original) # [[1, 2, 3], [4, 5, 6]]
print(deep) # [[999, 2, 3], [4, 5, 6]]


copy.copy() создает новый контейнер, но делится вложенными изменяемыми объектами. С неизменяемыми вложенными объектами (числа, строки, кортежи) shallow copy работает безопасно. Для полного независимого копирования используйте copy.deepcopy().

Код на салфетке x Кусочки кода
🔥863
Kawai-Focus 2.2: Python-бинарник в Tauri — проблемы и альтернативы
Автор: Eugene Kaddo

Данная статья посвящена:
- Проблемам с текущим бинарником Python в Tauri проекте;
- Поиску лучшего архитектурного решения для бекенд логики;


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

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

#Python #JS #Open_source #Наши_Open_Source_проекты #Rust #Kawai-Focus #Tauri #Ionic #Vue.js
1🔥4❤‍🔥1
Привет, любители советского кино!

«Курьер» (1986)

Этот фильм — история 17‑летнего Ивана, который после провала экзаменов становится курьером и случайно попадает в интеллигентную среду. Одна доставка — и его жизнь пересекается с семьёй профессора Кузнецова.

Иван знакомится с дочерью профессора, Катей, и между ними завязывается непростое, честное общение. Они из разных миров, с разными возможностями и ожиданиями от будущего, и именно это делает их диалоги такими живыми.

«Курьер» — фильм о взрослении, одиночестве и попытке понять своё место в жизни. Коротко, просто и очень по‑человечески — поэтому он до сих пор цепляет.

Приятного просмотра!
🔥12👎1
Привет, друзья! 👋

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

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

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

🤖 Вторник, 27.01.2026 — Знаете ли вы, что copy.copy() не копирует вложенные объекты?

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

Пятница, 30.01.2026 — Kawai-Focus 2.2: Python-бинарник в Tauri — проблемы и альтернативы


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

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

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

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

#дайджест #код #python #полезное #код_на_салфетке
🔥41
Знаете ли вы, что kill -9 не всегда убивает процесс?

Запускаем kill -9 <PID>, ждем что процесс будет убит – а он продолжает висеть в ps aux. Пробуем еще раз от рута, с разными сигналами – ничего не помогает. Проблема здесь в том, что процесс в статусе D (uninterruptible sleep) просто игнорирует все сигналы, включая SIGKILL. Это происходит потому что процесс находится в системном вызове ядра и ждет завершения I/O операции – пока ядро не закончит работу, процесс не может быть убит.

Представим себе такой неубиваемый процесс:

# Запустим что-то с подвисшим NFS
ls /mnt/broken_nfs &

# Посмотрим на статус процесса
ps aux | grep ls
# USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
# user 1234 0.0 0.1 2345 678 ? D 10:30 0:00 ls /mnt/broken_nfs

# D в STAT означает тот самый uninterruptible sleep
# Попробуем его убить
kill -9 1234

# Но процесс все еще жив:
ps aux | grep 1234
# kill -9 не сработал


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

Но мы можем увидеть ВСЕ процессы в D-состоянии:

# Через ps aux
ps aux | awk '$8 ~ /D/ { print $0 }'

# Или через top/htop
top
# Прожимаем 'o' для фильтра, вводим: S=D
# Покажутся только D-процессы

# Смотрим stack trace процесса
cat /proc/1234/stack
# [<0>] wait_on_page_bit+0x123/0x456
# [<0>] read_pages+0x234/0x567
# [<0>] __do_page_cache_readahead+0x345/0x678
# Будет видно что процесс ждет чтения страницы


Stack trace показывает где именно процесс застрял в ядре. Обычно это функции работы с файловой системой, сетью или устройствами.

Процесс в D можно убить, но только через перезагрузку или починив то, что он ждет:

# Для NFS – размонтировать принудительно
umount -f /mnt/nfs
# Или ленивое размонтирование
umount -l /mnt/nfs


Процессы будут убиты, когда NFS отвалится; для сломанного диска – только перезагрузка.

Почему SIGKILL не сработает? Потому что сигналы обрабатываются только когда процесс возвращается в user space. D-процесс находится в kernel space системного вызова, а ядро не проверяет сигналы пока вызов не завершится. Но мы можем увидеть где процесс застрял:

cat /proc/1234/wchan
# wait_on_page_bit
# Процесс ждет страницу в памяти


Процессы в состоянии D (uninterruptible sleep) не реагируют на сигналы, включая SIGKILL. Они застревают в системных вызовах ядра, обычно при I/O операциях с зависшими устройствами (NFS, сломанный диск, RAID). Убить такой процесс можно только решив проблему ввода-вывода – размонтировав файловую систему, отключив устройство или через перезагрузку. Проверяйте статус процесса через ps – если в колонке STAT стоит значение D – значит kill -9 не поможет.

Код на салфетке x Кусочки кода
🔥11👍51
Всем доброго вечера пятницы!

«Искусство самообороны» (2019)

«Искусство самообороны» — чёрная комедия о тихом бухгалтере Кейси, которого жестоко избивает банда мотоциклистов. Вместо пистолета он выбирает додзё каратэ и попадает под влияние харизматичного, но очень токсичного сенсея.

Тренировки постепенно превращают его из забитого «офисного мыша» в агрессивного фаната насилия, а додзё — в секту с ночными уроками, жестокими правилами и мрачными секретами. Кейси шаг за шагом узнаёт правду о сенсее, преступлениях школы и своём собственном страхе.

Фильм одновременно высмеивает культ «мужественности на стероидах» и показывает, как легко хрупкого человека сломать под видом «закалки характера». Подойдёт, если любите странное, неловкое кино с юмором на грани и неожиданно жёсткой развязкой.

Приятного просмотра!
🔥3👍21
Всем привет!

Уже завтра в 13:00 МСК, мы встречаемся на практикуме по Python!

Что будем делать?
В прямом эфире, вместе со мной, вы:
👉 Напишете код Telegram-бота.
👉 Подключите к нему искусственный интеллект GigaChat.
👉 Задеплоите его, чтобы он работал.

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

Как попасть?
Эфир закрытый. Чтобы получить доступ, нужна регистрация:
Зарегистрироваться

ВАЖНО: Подготовка к эфиру
Это не вебинар "послушать под чай", а практикум. Чтобы мы успели всё сделать, нужно подготовить рабочее окружение заранее.

Сразу после регистрации вы попадете в чат участников. Там в закрепе лежит инструкция. Пожалуйста, выполните её сегодня вечером, чтобы завтра в 13:00 мы сразу начали творить магию, а не устанавливать программы.

До встречи завтра в эфире! 🚀
🔥82❤‍🔥2👏21
Привет, друзья! 👋

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

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

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

🤖 Вторник, 03.02.2026 — Знаете ли вы, что kill -9 не всегда убивает процесс?

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

⚙️ Суббота, 07.02.2026 — Практикум по Python


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

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

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

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

#дайджест #код #python #полезное #код_на_салфетке

😼 @napkincode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥62
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12
Всем привет!

В это воскресенье прошёл практикум по Разработке Telegram-бота с ИИ.

На практикуме было очень активно! Большинство зрителей повторяли вместе со мной. У кого-то были трудности, но мы их решали вместе. Также было море интересных (а порой и внезапных) вопросов!

Запись практикума доступна на YouTube: смотреть

Буду рад, если лайкнете видео и напишете комментарий как вам практикум. Жду ваши отзывы.

P.S. И подписывайтесь на наш канал, надо его оживлять и делать видео! https://www.youtube.com/@codeonanapkin

😼 @napkincode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍4👏4🍾3❤‍🔥2
Знаете ли вы, что > затирает файл до выполнения команды?

Бывает, нужно изменить файл на месте, напишешь cat file.txt > file.txt – а файл пустой. Дело в том, что Shell открывает файл для записи и обрезает его в ноль до того, как запустится команда. К моменту когда cat пытается его прочитать, в файле уже ничего нет.

Посмотрим:

echo "Hello World" > test.txt
cat test.txt
# Hello World

cat test.txt > test.txt
cat test.txt
# (пусто - ничего не выводит, файл 0 байт)


Файл обнулился до того как cat успел его прочитать. То же самое с любой командой – grep pattern file.txt > file.txt или sort file.txt > file.txt дадут пустой файл:

1. Shell видит > file.txt и открывает файл для записи
2. Файл обрезается до 0 байт
3. Команда запускается и читает уже пустой файл

Правильно – сделать временный файл:

echo -e "3\n1\n2" > numbers.txt
sort numbers.txt > temp.txt && mv temp.txt numbers.txt
cat numbers.txt
# 1
# 2
# 3


Shell обрабатывает редиректы до запуска команды – файл обнуляется в момент открытия для записи, еще до выполнения. Для модификации на месте используйте временный файл или утилиты с флагом -i типа sed -i.

Код на салфетке x Кусочки кода
🔥8👍5👏1