IT Ready
Качественные IT ресурсы, сайты, репозитории, курсы и инструменты для обучения. Информация ежедневно пополняется! Cотрудничество: @energy_c Реклама на бирже: https://telega.in/channels/+oQDlPHBPTg82MmU6/card РКН: https://clck.ru/3NJE9E
Show more📈 Analytical overview of Telegram channel IT Ready
Channel IT Ready in the Russian language segment is an active participant. Currently, the community unites 17 220 subscribers, ranking 7 556 in the Technologies & Applications category and 37 989 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 17 220 subscribers.
According to the latest data from 14 November, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by 88 over the last 30 days and by -10 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 8.73%. Within the first 24 hours after publication, content typically collects 4.63% reactions from the total number of subscribers.
- Post reach: On average, each post receives 1 503 views. Within the first day, a publication typically gains 797 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 19.
- Thematic interests: Content is focused on key topics such as github, api, habr, собеседование, хабре.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Качественные IT ресурсы, сайты, репозитории, курсы и инструменты для обучения.
Информация ежедневно пополняется!
Cотрудничество: @energy_c
Реклама на бирже: https://telega.in/channels/+oQDlPHBPTg82MmU6/card
РКН: https://clck.ru/3NJE9E”
Thanks to the high frequency of updates (latest data received on 15 November, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
firewall не показывает явных блокировок. В таких случаях полезно посмотреть, что происходит с пакетами на самом деле.
Например, запрос завершается ошибкой:
curl https://api.example.com
Получаем Connection timed out, но непонятно, где именно возникает проблема. Для диагностики используем tcpdump, который позволяет перехватывать сетевые пакеты прямо на интерфейсах Linux.
Посмотрим весь TCP-трафик на HTTPS-порту:
sudo tcpdump -nn -i any 'tcp port 443'
Параметр -nn отключает преобразование адресов и портов в имена, а -i any захватывает трафик со всех доступных интерфейсов.
Если в выводе видим:
IP 10.0.0.15.42310 > 203.0.113.10.443: Flags [S]
Это SYN-пакет — попытка установить TCP-соединение. Если SYN повторяется, но ответа нет, стоит проверить маршрутизацию, сетевую фильтрацию и доступность удалённого сервера.
Если приходит ответ:
IP 203.0.113.10.443 > 10.0.0.15.42310: Flags [S.]
Это SYN-ACK — сервер отвечает на запрос соединения. Если клиент затем отправляет ACK, TCP handshake завершён, и дальнейшую диагностику можно сосредоточить на TLS или приложении.
На production удобнее фильтровать пакеты по конкретному адресу и порту. Например, при проверке соединения с PostgreSQL:
sudo tcpdump -nn -i any 'host 10.0.0.5 and tcp port 5432'
Так можно увидеть попытки подключения, повторные передачи и сбросы соединений, не анализируя посторонний трафик.
Для просмотра содержимого незашифрованных HTTP-запросов:
sudo tcpdump -A -s 0 -i any 'tcp port 80'
Флаг -A отображает данные в ASCII, а -s 0 захватывает пакеты целиком. Для HTTPS содержимое HTTP-запросов останется зашифрованным.
Если нужно сохранить трафик для последующего анализа в Wireshark:
sudo tcpdump -i any 'tcp port 443' -c 100 -w capture.pcap
Команда запишет первые 100 подходящих пакетов в файл, который можно изучить отдельно.
🔥 tcpdump помогает быстро определить, на каком этапе возникает сетевая проблема: при отправке пакетов, получении ответа или уже после установки TCP-соединения. Особенно полезно, когда логи приложения не дают никаких зацепок.
➡️ IT Ready | #практика• Узнаете, почему акции Intel, Alphabet и Amazon резко упали, несмотря на сильные финансовые показатели и рост ИИ-направлений;
• Разберётесь, как дефицит оперативной памяти, нехватка электроэнергии и задержки строительства дата-центров тормозят развитие ИИ;
• Поймёте, почему миллиардные инвестиции в нейросети пока не обеспечивают ожидаемой отдачи и чем нынешняя ситуация отличается от пузыря доткомов.
🔊 Продолжай читать на Habr!➡️ IT Ready | #статья
sudo и получили ошибку доступа. Вместо повторного ввода достаточно написать:
apt install nginx
sudo !!
Bash подставит вместо !! предыдущую команду целиком и выполнит её с повышенными правами.
А если нужно повторить команду, которую запускали несколько шагов назад, используйте относительный номер:
!-2
Bash выполнит команду, находящуюся на две позиции раньше в истории текущей оболочки.
Если помните только начало команды, можно найти последнее совпадение:
!docker
!grep
Bash найдёт последнюю команду, начинающуюся с указанного текста, и сразу выполнит её.
Команду можно сначала посмотреть, не выполняя. Для этого добавьте :p:
!docker:p
!grep:p
Так Bash покажет найденную команду, чтобы вы могли проверить её перед запуском.
🔥 Подстановка команд из истории Bash экономит время при работе с длинными командами и избавляет от постоянного поиска уже введённых инструкций. Главное помнить, что без :p найденная команда выполняется сразу.
➡️ IT Ready | #советОставляю ссылочку: GitHub 📱➡️ IT Ready | #репозиторий
nftables могут привести к блокировке SSH-доступа, особенно при использовании политики drop или изменении разрешённых портов. Перед применением новой конфигурации полезно проверить её и изучить действующие правила, не изменяя firewall.
Практика рассчитана на линукс с установленным nftables. Все команды ниже не изменяют активные правила фильтрации. Сначала посмотрим текущий набор правил:
sudo nft list ruleset
Команда покажет таблицы, цепочки, правила и другие объекты nftables.
Сохраним снимок текущих правил для диагностики:
sudo sh -c 'umask 077; nft list ruleset > /root/nft-rules-snapshot.conf'
Файл будет доступен только root. Это диагностический снимок, а не гарантированная резервная копия для восстановления динамических правил.
Теперь проверим подготовленную конфигурацию, например /etc/nftables.conf:
sudo nft -c -f /etc/nftables.conf
Параметр -c проверяет конфигурацию без применения изменений. Если обнаружены ошибки, nft выведет диагностическое сообщение. Успешная проверка не гарантирует сохранения SSH-доступа после применения правил.
Дополнительно посмотрим действующие цепочки, политики и идентификаторы правил:
sudo nft -a list ruleset
Особое внимание уделим базовым цепочкам с hook input, их приоритетам и политикам accept или drop.
Проверим, на каких TCP-портах сервер принимает подключения:
sudo ss -ltnp
Найдём SSH-сервер в выводе и убедимся, что его порт учтён в планируемой конфигурации. Прослушивание порта само по себе не гарантирует доступность через firewall.
Команды не изменяют действующие правила. Для их применения на удалённом сервере необходимы отдельный механизм отката и резервный консольный доступ.
🔥 Предварительная проверка через nft -c помогает обнаружить ошибки конфигурации без риска заблокировать SSH из-за её применения.
➡️ IT Ready | #практикаfaulthandler.
Он позволяет вывести стеки вызовов Python-потоков по истечении заданного времени.
import faulthandler
faulthandler.dump_traceback_later(5)
while True:
pass
Через пять секунд Python выведет текущие стеки вызовов в stderr с указанием файлов и номеров строк. Это работает даже тогда, когда программа продолжает выполняться без исключений.
Для наблюдения за длительными зависаниями можно включить периодический вывод.
faulthandler.dump_traceback_later(5, repeat=True)
Теперь стеки будут выводиться каждые пять секунд, помогая определить, на каком участке кода находится каждый поток.
После завершения проверяемой операции запланированный вывод можно отменить.
faulthandler.cancel_dump_traceback_later()
Важно учитывать, что faulthandler не определяет зависание автоматически: вывод происходит по таймеру независимо от состояния программы.
🔥 faulthandler.dump_traceback_later() помогает диагностировать зависания без отладчика, показывая стеки Python-потоков с указанием файлов и номеров строк.
➡️ IT Ready | #советpip install -U openai pydantic
export OPENAI_API_KEY="your_api_key"
Опишем структуру ответа через Pydantic. Поле need_search отвечает за выбор маршрута, а query содержит поисковую строку:
from openai import OpenAI
from pydantic import BaseModel
client = OpenAI()
class SearchDecision(BaseModel):
need_search: bool
query: str
Создадим функцию классификации. responses.parse() обеспечивает структурированный вывод согласно заданной схеме без ручного разбора JSON:
def route(question: str) -> SearchDecision:
response = client.responses.parse(
model="gpt-4.1-mini",
instructions=(
"Определи, нужен ли интернет-поиск. "
"Для актуальных данных используй поиск. "
"Для общих вопросов поиск не нужен. "
"Если поиск не нужен, query пустой."
),
input=question,
text_format=SearchDecision,
)
if response.output_parsed is None:
raise RuntimeError("No routing decision")
return response.output_parsed
Проверим маршрутизатор на двух запросах. Первый не требует актуальных данных, второй предполагает проверку последнего релиза библиотеки:
for question in [
"Что такое декоратор в Python?",
"Что изменилось в последней версии FastAPI?",
]:
print(route(question).model_dump())
Один из возможных результатов показывает, что модель выбирает разные маршруты. Конкретная поисковая строка может отличаться между запусками:
{'need_search': False, 'query': ''}
{'need_search': True, 'query': 'FastAPI latest release changes'}
Результат классификации используется в обработчике агента. При необходимости приложение выполняет поиск и передаёт найденные данные модели. Ниже показан фрагмент интеграции; search_web() и answer_with_llm() реализуются отдельно:
def handle(question: str):
decision = route(question)
if decision.need_search:
results = search_web(decision.query or question)
return answer_with_llm(question, context=results)
return answer_with_llm(question)
Маршрутизация не гарантирует правильного выбора и требует тестирования на реальных запросах. Дополнительный LLM-вызов также имеет стоимость, поэтому эффективность определяется экономией на поиске и общей задержкой обработки.
🔥 LLM-маршрутизация позволяет управлять вызовами внешних инструментов и исключать избыточный поиск там, где достаточно знаний модели.
➡️ IT Ready | #практика• Узнаете, как команда восстановила критичные сервисы на новой площадке менее чем за сутки после масштабной аварии;
• Разберёте, какую роль сыграли Terraform, Ansible, GitOps, документация и заранее проверенные бэкапы;
• Поймёте, почему для аварийного восстановления недостаточно просто сохранить данные и как правильно учитывать зависимости между сервисами.
🔊 Продолжай читать на Habr!➡️ IT Ready | #статья
scikit-learn её можно экспортировать в ONNX и выполнять предсказания через ONNX Runtime. Это позволяет запускать модель без установленного scikit-learn в окружении инференса, а в некоторых случаях — ускорить обработку данных за счёт оптимизированного выполнения.
Разберём, как конвертировать обученную модель в ONNX, запустить инференс и проверить корректность предсказаний. Для начала установим зависимости:
pip install scikit-learn skl2onnx onnxruntime numpy
Обучим классификатор RandomForestClassifier на встроенном датасете Iris. Он содержит характеристики цветков трёх видов ириса, а наша модель будет определять вид по четырём числовым признакам:
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
X, y = load_iris(return_X_y=True)
model = RandomForestClassifier(
n_estimators=100,
random_state=42
)
model.fit(X, y)
Теперь экспортируем обученную модель в ONNX с помощью skl2onnx. Конвертер преобразует структуру Random Forest в операции ONNX, сохраняя обученные параметры. Переданный массив задаёт тип входных данных float32 и количество признаков, а размер батча остаётся переменным:
from skl2onnx import to_onnx
import numpy as np
onnx_model = to_onnx(
model,
X[:1].astype(np.float32),
target_opset=12
)
with open("model.onnx", "wb") as f:
f.write(onnx_model.SerializeToString())
Получили файл model.onnx, содержащий всё необходимое для выполнения модели. Теперь создадим сессию ONNX Runtime, которая загрузит вычислительный граф и подготовит его к инференсу. Через CPUExecutionProvider явно укажем выполнение на процессоре:
import onnxruntime as ort
session = ort.InferenceSession(
"model.onnx",
providers=["CPUExecutionProvider"]
)
input_name = session.get_inputs()[0].name
Имя входного тензора получаем непосредственно из модели, поэтому его не нужно прописывать вручную. Передадим сразу пять объектов одним батчем, предварительно приведя данные к float32 — именно такой тип ожидает экспортированная модель:
samples = X[:5].astype(np.float32)
predictions = session.run(
None,
{input_name: samples}
)
print(predictions[0])
Метод session.run() выполняет инференс и возвращает список выходных значений. Для нашего классификатора первый элемент содержит предсказанные классы, а второй — вероятности классов.
Осталось проверить, что конвертация не изменила результат классификации. Получим предсказания исходной модели на тех же данных и сравним их с результатом ONNX Runtime:
sklearn_preds = model.predict(samples)
onnx_preds = predictions[0]
print(np.array_equal(
sklearn_preds,
onnx_preds
))
Ожидаемый результат — True. Предсказанные классы совпадают, но для других моделей после конвертации возможны численные расхождения.
ONNX Runtime может ускорить инференс за счёт оптимизаций, однако результат зависит от модели, размера батча и оборудования. Не все операции scikit-learn поддерживают конвертацию, а прирост скорости стоит проверять бенчмарками.
🔥 ONNX Runtime позволяет запускать ML-модели без зависимости от обучающего фреймворка, что удобно при развёртывании API и сервисов инференса.
➡️ IT Ready | #практикаscikit-learn её можно экспортировать в ONNX и выполнять предсказания через ONNX Runtime. Это позволяет запускать модель без установленного scikit-learn в окружении инференса, а в некоторых случаях — ускорить обработку данных за счёт оптимизированного выполнения.
Разберём, как конвертировать обученную модель в ONNX, запустить инференс и проверить корректность предсказаний. Для начала установим зависимости:
pip install scikit-learn skl2onnx onnxruntime numpy
Обучим классификатор RandomForestClassifier на встроенном датасете Iris. Он содержит характеристики цветков трёх видов ириса, а наша модель будет определять вид по четырём числовым признакам:
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
X, y = load_iris(return_X_y=True)
model = RandomForestClassifier(
n_estimators=100,
random_state=42
)
model.fit(X, y)
Теперь экспортируем обученную модель в ONNX с помощью skl2onnx. Конвертер преобразует структуру Random Forest в операции ONNX, сохраняя обученные параметры. Переданный массив задаёт тип входных данных float32 и количество признаков, а размер батча остаётся переменным:
from skl2onnx import to_onnx
import numpy as np
onnx_model = to_onnx(
model,
X[:1].astype(np.float32),
target_opset=12
)
with open("model.onnx", "wb") as f:
f.write(onnx_model.SerializeToString())
Получили файл model.onnx, содержащий всё необходимое для выполнения модели. Теперь создадим сессию ONNX Runtime, которая загрузит вычислительный граф и подготовит его к инференсу. Через CPUExecutionProvider явно укажем выполнение на процессоре:
import onnxruntime as ort
session = ort.InferenceSession(
"model.onnx",
providers=["CPUExecutionProvider"]
)
input_name = session.get_inputs()[0].name
Имя входного тензора получаем непосредственно из модели, поэтому его не нужно прописывать вручную. Передадим сразу пять объектов одним батчем, предварительно приведя данные к float32 — именно такой тип ожидает экспортированная модель:
samples = X[:5].astype(np.float32)
predictions = session.run(
None,
{input_name: samples}
)
print(predictions[0])
Метод session.run() выполняет инференс и возвращает список выходных значений. Для нашего классификатора первый элемент содержит предсказанные классы, а второй — вероятности классов.
Осталось проверить, что конвертация не изменила результат классификации. Получим предсказания исходной модели на тех же данных и сравним их с результатом ONNX Runtime:
sklearn_preds = model.predict(samples)
onnx_preds = predictions[0]
print(np.array_equal(
sklearn_preds,
onnx_preds
))
Ожидаемый результат — True. Предсказанные классы совпадают, но для других моделей после конвертации возможны численные расхождения.
ONNX Runtime может ускорить инференс за счёт оптимизаций, однако результат зависит от модели, размера батча и оборудования. Не все операции scikit-learn поддерживают конвертацию, а прирост скорости стоит проверять бенчмарками.
🔥 ONNX Runtime позволяет запускать ML-модели без зависимости от обучающего фреймворка, что удобно при развёртывании API и сервисов инференса.
➡️ IT Ready | #практикаОставляю ссылочку: GitHub 📱➡️ IT Ready | #репозиторий
data = [1, 2, 3]
data.append(data)
После такой операции последний элемент не становится копией исходного списка. Он ссылается на тот же объект, что легко проверить с помощью оператора is.
print(data[-1] is data) # True
Интересно, что Python умеет корректно отображать подобные структуры. При выводе механизм repr() списка обнаруживает рекурсивную ссылку и обозначает её многоточием, предотвращая бесконечный вывод.
print(data) # [1, 2, 3, [...]]
Подобные связи встречаются в графах, объектных моделях и структурах с обратными ссылками. Однако при самостоятельном обходе таких данных необходимо учитывать циклы, иначе рекурсивный алгоритм может зациклиться.
Например, поверхностное копирование создаёт новый список, но сохраняет ссылки на исходные элементы:
copy = data.copy()
print(copy[-1] is data) # True
print(copy[-1] is copy) # False
При работе с циклическими структурами важно различать копирование контейнера и копирование всей связанной структуры объектов.
🔥 Понимание самоссылочных объектов помогает избегать ошибок при копировании, рекурсивном обходе и обработке графовых структур, где один объект может встречаться несколько раз.
👉 IT Ready | #совет