Обновить
565.93

Python *

Высокоуровневый язык программирования

Сначала показывать
Порог рейтинга

HR, простите, но у меня не было выбора - Как я потратил несколько сотен часов на ИИ-ассистента для поиска работы

Привет, Хабр.

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

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

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

Что не так с процессом поиска

Проблема не в самом поиске, а в том, как он реализован.

1. Массовая рассылка вместо выбора.
Осознанный подбор вакансий быстро превращается в пролистывание списков и надежду на статистику.

2. Отклики как механика.
Сопроводительные письма отличаются формально: поменять название компании, чуть переписать вводную — и так десятки раз.

3. Неэффективные затраты времени.
Квалифицированный специалист тратит часы на задачи с минимальной ценностью, причём этот цикл повторяется при каждом новом поиске.

Инженерный взгляд

Если абстрагироваться, поиск работы — это:

  • входные данные (резюме, требования вакансии),

  • правила сопоставления,

  • повторяемые действия,

  • измеримые результаты.

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

Коротко о разработке

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

Довольно быстро стало понятно, что задача сложнее, чем кажется:
нестабильные источники, антибот-механизмы, разные форматы вакансий, неоднородные данные.

За 4+ месяца разработки мы:

  • несколько раз пересобрали архитектуру,

  • получили жёсткий фидбек,

  • убедились, что это не история про «просто прикрутить LLM».

Технические детали осознанно опускаю — при интересе разберу отдельно.

Что получилось в итоге

Сейчас OfferMate — это ассистент, который:

  • ищет релевантные вакансии на hh.ru и в Telegram,

  • автоматизирует отклики,

  • формирует сопроводительные письма под конкретные вакансии,

  • работает в фоне, минимально вовлекая пользователя.

Им пользуются кандидаты разного уровня — от начинающих до опытных специалистов.

Про сопроводительные письма

Корректнее говорить не «ИИ пишет письма», а что система:

  • анализирует резюме,

  • разбирает требования вакансии,

  • ищет пересечения,

  • и на их основе формирует текст.

Это не делает письмо идеальным, но делает его релевантным, что на практике влияет на отклик.

Куда дальше

Сейчас мы работаем над следующей версией проекта.

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

Вместо вывода

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

Если интересно последить за проектом, все новости публикуем в этом Tg-канале:

👉 https://t.me/offermatecrew

Также буду рад вопросам и обсуждению в комментариях.
Если тема зайдёт — сделаю отдельный технический разбор.

Теги:
-3
Комментарии7

Шаблонный сервис

Я всячески люблю, когда разработка идёт предсказуемо – и многое для этого делаю.  

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

Так зачем же нужен шаблонный сервис?

Легко ориентироваться в других сервисах. Иногда нужно залезть в сервис коллег, или поддерживаешь несколько сервисов. Никаких проблем – структура везде одинаковая, всё знакомо, не нужно тратить время на раскопки.

Быстрый старт. Стартуете новый сервис? Полчаса – и он готов. Никаких лишних приседаний.

Единые практики. Шаблон определяет, не только структуру, но и то, как мы, например, делаем ретраи, какие у нас зависимости. как устроен circuit breaker, обработка ошибок и т.д.    

Лучшие практики – в одном месте. Если появляется что-то классное, мы добавляем это в шаблон и новые сервисы сразу это наследуют.     

Обсервабилити, логирование, работа с секретами – готово из коробки. И меньше шансов, что кто-то забьёт на логирование до лучших времён»:)    

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

Просто экспериментировать. Создал веточку от шаблона – и прикручиваешь свою новую махарайку, не тратя время на базовую структуру.

Унификация линтинга. Конфиги линтеров лежат в шаблоне. Ничего настраивать не нужно, а код-ревью идёт быстрее – обо всём уже однажды договорились и зафиксировали.

Базовый CI/CD. Для шаблонного сервиса существует шаблонный ci/cd – и это очень удобно.

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

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

В общем – заходите, смотрите, ставьте звездочки. И если с чем-то не согласны – пишите в комменты, автор обязательно ответит 🙂

Теги:
+1
Комментарии0

Мои топ-3 ресурса по ИИ:

1. Эксперт и специалист в области IT, AL, ИИ и технологий @realmikemozg https://youtube.com/@realmikemozg?si=jEe52LlzSBfVDGed

2. Kaggle Discussions и Notebooks

3. ArXiv. Самые свежие исследования.

А какие авторы помогают вам следить за новостями и разбираться в тонкостях AL?

Теги:
-2
Комментарии1

Как выбрать гиперпараметры для xgboost?

Настройка параметров модели
Настройка параметров модели

Всем привет! Мой жизненный путь в сфере технологий начинался с машинного обучения для финансовых моделей и привел меня к data scientist в IT-компании. Решил написать свою первую статью и затронуть важную тему, которой обычно мало кто придает значение. Многие, работая над моделью, сталкиваются с тем, как правильно выбрать гиперпараметры. Обычно, это делается методом перебора по сетке с байесовской оптимизацией. Так я и делал раньше и не задумывался, что в этом есть какая-то проблема. Благо, у меня был хороший учитель, который обратил внимание на этот незначительный момент.

1. Так в чем, собственно, проблема?

Перебирая по сетке с байесовской оптимизацией вы позволяете поиску выбирать за вас и все, казалось бы, решено. Но хотелось бы объяснить, как именно адаптировать модель под новый датасет, чтобы это соответствовало именно вашим характеристикам. Конечно, настройка гиперпараметров не так важна, как разработка алгоритмов обнаружения. Но если вы не понимаете математику, которая лежит в основе модели, то не увидите, как работают алгоритмы и все будет наугад. В данной статье я хочу представить вам самый простой способ, как достичь идеальных гиперпараметров, а не просто плыть по течению.

Основная мысль:

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

2. Как настроить гиперпараметры так, чтобы не тратить время и добиться нужного результата практически сразу?

Схема довольно простая

eta=0.1
max_depth=10
subsample=1.0
min_child_weight=5
col_sample_bytree=0.2
objective='reg:linear'

Далее, делим на 20% данные для проверки и делаем список значения обнаружения для обучения и тестирования.

num_round=1000000
  • Можно поэкспериментировать с уровнем глубины. Начать с max_depth=10. При ошибки выше, чем на обучении - можно ставить 12, если ниже - ставим 5.

  • Когда определился с глубиной, то настраиваю параметр субдискретизации. Начинаю с 1.0, меняю его на 0.8. Если ошибка выше, то - 0.9 или 1.0

  • Настраиваю так же min child_weight и col_sample_bytree.

  • Eta уменьшаю на 0.05.

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

Заключение.
Надеюсь, вам были полезны мои мысли и находки. И хотя гиперпараметры не идеальные, но такая настройка очень близка к самому лучшему результату, который только может быть. Поделитесь своими идеями по настройке гиперпараметров. Я могу лишь дополнить свой способ рассуждениями моего первого учителя и вдохновителя https://youtube.com/@realmikemozg?si=jEe52LlzSBfVDGed

Теги:
+2
Комментарии0

Учим Python — представлен интерактивный учебник, который работает прямо в браузере. Он поможет освоить базу буквально за пару месяцев:

  • Больше 100 заданий — основы для понимания основных концепций языка, беглого кодинга программ и выстраивания логики сервисов.

  • Примеры кода — не просто теория, анужно решать задачи сразу после прочтения материала.

  • Есть текстовые материалы, вшитые YouTube-уроки, задачи, дополнительные лекции и контрольные вопросы.

Теги:
+2
Комментарии2

Раздолбайский дух Sanic.

Как выглядела версия 18.12.0
Как выглядела версия 18.12.0

Обновлял свои сэмплы простеньких API-сервачков. Версия на Sanic отказывалась работать, так что закатал рукава и пошёл читать их маны. Захожу на сайт, а тут... Батюшки! Всё чинно, благородно, серьёзно так. Я отлично помню, что рисовал их дебаг в консоли. Эх, куда дели раздолбайский дух? :)

Теги:
+1
Комментарии0

5 случаев, когда Fine-tuning лучше RAG

Все говорят "RAG для всего". Но есть кейсы, где fine-tuning выигрывает — и это не только про статичные данные.
Все говорят "RAG для всего". Но есть кейсы, где fine-tuning выигрывает — и это не только про статичные данные.

Все говорят "RAG для всего". Но есть кейсы, где fine-tuning выигрывает — и это не только про статичные данные.

1. Жёсткий формат вывода

Бот для CRM должен всегда возвращать:

{"name": "...", "phone": "...", "intent": "..."}

RAG не гарантирует формат. Fine-tuning — да. Модель "запоминает" структуру на уровне весов.

2. Доменный жаргон

Врач пишет: "в/в капельно NaCl 0.9% 400мл". Юрист: "п.1 ч.2 ст.158 УК".

RAG найдёт документ, но не научит модель "говорить на языке". Fine-tuning встраивает терминологию в модель.

3. Логика без документов

Расчёт стоимости доставки: вес, габариты, зоны, сезонность, тип клиента — 20 переменных.

Это не в документе, это в голове логиста. Fine-tuning переносит экспертизу в модель.

4. Стиль эскалации

Банковский бот не должен говорить "не знаю". Только: "Уточню у специалиста, ожидайте".

RAG учит контенту, fine-tuning — поведению и тону.

5. Скорость

RAG: эмбеддинг → поиск → генерация = 3 вызова, ~2 сек.

Fine-tuned модель: 1 вызов, ~0.5 сек.

Для голосового бота или real-time чата — критично.

Когда всё же RAG: данные часто меняются, нужны ссылки на источник, конфиденциальность.

Гибрид работает: fine-tuning для формата и стиля + RAG для актуальных данных.

А вы где использовали fine-tuning?

Теги:
+1
Комментарии2

пет-проект невозможно доделать - только выпустить в открытую бету

Что ж, встречайте открытую бету проекта

📚📚📚📚📚📚📚📚📚📚
SweetReader!
📚📚📚📚📚📚📚📚📚📚

Что это:
Пространство для авторов и читателей, упор сделан на книги с высоким уровнем визуала (графические романы, комиксы, манги, книги с упором на иллюстрации). 

Преимущества:
Три настраиваемых режима просмотра книг, поиск и фильтры по произведениям, лайки, избранные, страницы авторов и всё в этом духе.

На текущий момент это MVP - буквально базовая версия продукта, есть планы по его доработке и даже (о, ужас) "дорожная карта", которую, может быть, я реализую )))

_____

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

Буду рад обратной связи тут в комментариях. Если найдёте баг или ошибку (а это на текущей стадии несложно), в меню есть кнопка "Ошибка?" специально для неравнодушных пользователей.

Теги:
-2
Комментарии0

Обновлён проект Python Scripts, где более 60 Python-скриптов для любых задач, включая алгоритмы по парсингу, работе с видео и фото, клонированию сайтов, скачиванию с сайтов и другие популярные решения.

Ранее был представлен учебный проект «Числа Python, которые должен знать каждый программист» (Python Numbers Every Programmer Should Know). Проект также доступен на GitHub.

Теги:
-3
Комментарии1

Представлен учебный проект «Числа Python, которые должен знать каждый программист» (Python Numbers Every Programmer Should Know). Проект также доступен на GitHub.

«Существуют цифры\числа\значения, которые должен знать каждый программист на Python. Например, насколько быстро или медленно добавляется элемент в список в Python? А как насчёт открытия файла? Это занимает меньше миллисекунды? Есть ли что‑то, что замедляет этот процесс? Если у вас есть алгоритм, чувствительный к производительности, какую структуру данных следует использовать? Сколько памяти занимает число с плавающей запятой? А как насчёт одного символа или пустой строки? Насколько быстр FastAPI по сравнению с Django? Я хотел бы уделить немного времени и записать показатели производительности, специально ориентированные на разработчиков Python», — сообщил автор проекта Майкл Кеннеди.

Теги:
+7
Комментарии2

Тестирую Claude Code на написание белых модов к игре.

Процесс: обсуждение, сбор данных по структуре игры и установке модов, написание кода и деплой.

С первым модом для WoT справился. Тестирую дальше. Кому-то полезна будет потом информация о процессе, выкладывать или лишнее?

Теги:
+1
Комментарии4

Всем привет!

В этом посту я хочу подвести итоги года.

Во первых всех с наступающим ^-^.

Во вторых в этом году я познал НАМНОГО больше чем в прошлом году.

К примеру - познал что батарея без своего разъёма - это очень плохо.

В этом году я сделал много проектов и до сих пор делаю их:

  • "ЛИСП машина" - мой первый по настоящему крутой проект.

  • Микрокомпьютер с GUI - для меня это был крутой проект из-за попытки реализовать GUI.

  • Компилятор pycc - хоть и не компилирует в машинный код, но для меня это вершина в моём "языкописательстве" (поправьте если что).

  • Ядро Pech - бета скоро станет 2.0.0. Почему так резко? PEF должен был быть с первого релиза но, я не люблю терпеть и выложил без PEF (к моменту выпуска я уже был полностью погружен в создание PEF).

  • Ядро PearKernel - первые попытки соорудить своё ядро.

Также делаю свою ОС на ядре Pech.

Ещё в этом году было много проектов но большая часть из них - не удались, не популярны или были удалены и заброшены.

Желаю вам в следующем году побольше крутых проектов, денег на эти проекты и на жизнь, больше знаний и... Вообще надеюсь чтобы вы отметили этот новый год на отлично.

Кстати как и просили. Пример кода на PEF:

[HEADER]
prio:2
pid:1
name:TEST
[ATTRS]
x:0
[PROG]
while True:
    print(x)
    x += 1
    await asyncio.sleep(SLEEP_TIME) #0.020 секунд (20 мс.)

А проще:

[HEADER]
prio:ваш приоритет.
pid:ваш pid (уникальный).
name:имя вашего процесса.
[ATTRS]
имя:любое значение (В ОДНУ СТРОКУ!)
[PROG]
ваш код

Данный пост хотел закинуть в "Я пиарюсь" но карма не позволяет.

Всем удачи!

Теги:
+3
Комментарии4

Представлен открытый проект на Python под названием Reverse API engineer. Это консольный инструмент, который фиксирует трафик браузера и автоматически генерирует готовые к работе клиенты Python API. Больше никакого ручного реверс‑инжиниринга — просто просматривайте, записывайте и получайте чистый API‑код.

«Этот инструмент выполняет код локально, используя Claude Code‑ пожалуйста, следите за выводом/ На некоторых веб‑сайтах используется расширенная система обнаружения ботов, которая может ограничивать захват или требовать ручного взаимодействия», — пояснил автор проекта.

Особенности Reverse API:

  • автоматизация браузера: создан на базе Playground с режимом скрытности для реалистичного просмотра;

  • режим автономного агента: полностью автоматизированное взаимодействие с браузером с помощью агентов искусственного интеллекта (автоматический режим с MCP, использование браузера, stagehand);

  • запись HAR: фиксирует весь сетевой трафик в архивном формате HTTP;

  • генерация на основе искусственного интеллекта: использует Claude 4.5 для анализа трафика и генерации чистого кода на Python;

  • поддержка нескольких SDK: встроенная интеграция с Claude и OpenCode SDK;

  • интерактивный интерфейс командной строки: минималистичный интерфейс терминала с переключением режимов (Shift+Tab);

  • готовность к работе: сгенерированные скрипты содержат обработку ошибок, подсказки по вводу текста и документацию;

  • история сеансов: все запуски сохраняются локально с полными журналами сообщений;

  • отслеживание затрат: подробное использование токенов и оценка затрат с поддержкой кэширования.

Теги:
+1
Комментарии0

Ближайшие события

Я создал обвязку вокруг Pywikibot для простой загрузки файлов в Wikimedia Commons: https://gitlab.com/vitaly-zdanevich/pwb_wrapper_for_simpler_uploading_to_commons

Stateless, позволяет загружать по одному файлу и все из текущей папки (для поддерживаемых расширений). Примеры синтаксиса:

upload.py --file my.jpg --source https://example.com --license 'PD-old' --category 'Sunsets in Batumi' --date '2025-12-27' --desc 'A beautiful sunset from the beach' --target myrenamed.jpg

Либо например

upload.py my.jpg --category 'Sunsets in Batumi' --date '2025-12-27'

Я туда много загружаю - мы живём в горящей библиотеке, и мне важно спасти побольше данных. Базовый загрузчик (Upload Wizard) в браузере так себе. Существуют и прочие инструменты загрузки в Commons, и это мой третий инструмент для этой задачи - уже был скрипт для gThumb и браузерное расширение.

Только этим своим новым скриптом загрузил уже сотни файлов. Вам теперь тоже ещё легче будет спасти какие-нибудь сканы старых газет - помните что в Commons можно загружать только файлы со свободной лицензией - например когда автор умер более 70 лет назад.

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

Теги:
0
Комментарии0

Перевел почти всё на Grok 4.1 с декабря не смотря на ажиотаж в других моделях.
1. Дешево за большой контекст
2. Code execution дает возможность дешево анализировать данные
3. Реальные расходы токенов на задачи уровня flash и mini моделей, но качество заметно лучше
4. Хорошо следует схемам
5. Контекст 2M

Экономия в 3-4 раза с Claude Sonnet.

Где использовал:
HR-тематика: массовая обработка резюме и вакансий
Анализ данных, поиск информации

  • Claude Sonnet: $3 / $15 за 1M токенов (input/output)

  • Grok 4.1 Fast: $0.20 / $0.50 за 1M токенов

Использую Grok 4.1 Fast для простых задач и 4.1 Fast Reasoning когда нужно "подумать".

Расскажите в комментариях, на каких моделях работаете и для каких задач?

Теги:
-3
Комментарии3

IMPulse - Open Source менеджмент инцидентов. Freeze, Jira, ChatOps

Прошло достаточно времени с прошлой публикации: мы добавили много нового и хотим поделиться этим и нашими планами.

Из нового

  • У нас появился механизм Freeze, который выполняет пару задач. С одной стороны он отключает уведомления по инциденту на некоторое время, например на выходные. С другой - исключает создание таких же инцидентов на время "заморозки". Этот функционал похож на Silence Alertmanager'а.

  • Появилась интеграция с системой трекинга задач, Jira.

  • Теперь есть возможность просматривать закрытые (архивные) инциденты.

  • Добавлены метрики.

  • IMPulse теперь можно запускать в нескольких экземплярах. В случае недоступности основного (primary) инстанса, работу подхватит запасной (standby).

  • Webhook'и стали ещё мощнее. Теперь с их помощью можно очень гибко формировать JSON для отправки в любую сторонюю систему.

  • Появилась интеграция с алертами из Grafana.

  • IMPulse научился перечитывать (reload) конфигурацию без полной перезагрузки. Также вы можете добавить проверку конфигурации в CI/CD перед её применением.

  • В UI теперь есть индикатор online / offline, чтобы понимать, актуальная ли сейчас информацию на экране. К слову, несмотря на внешнюю простоту, UI очень гибок: умеет фильтровать инциденты по лейблам (в качестве фильтров можно использовать regex'ы), можно сортировать инциденты по нескольким столбцам, а также выделять цветом интересующие данные.

  • В случае заполнения диска, IMPulse теперь продолжит работать. Обновления по инцидентам будут храниться в оперативной памяти пока не появится место на диске. Настройте алерты на ERROR логи, чтобы вовремя среагировать.

Планы

В первой статье я уже упоминал, что мы считаем крайне важным для всех, кто работает с инцидентами, иметь общий контекст. Многие решения при проектировании принимались, исходя из этого. Сейчас можно констатировать, что ChatOps стал основой IMPulse и дальнешее движение будет под этим знаменем. Мы будем глубже интегрироваться с мессенджерами, чтобы команде дежурных / devops'ов не нужно было переходить в UI. Да, обязательно останутся задачи, которые не решить в рамках мессенджера, но мы постараемся минимизировать их количество.

Здесь часть из наших планов на ближайшие пару месяцев:

  • добавить работу с группами в Slack и Mattermost;

  • добавить в UI механизм аутентификации;

  • перенести кнопки для работы с инцидентами в UI;

  • реализовать механизм подавления инцидентов на основе правил по аналогии с Inhibition в Prometheus. Если согласно правилам инцидент становится дочерним, то уведомления по нему прекращаются пока не будет решена основная проблема. Это позволит уменьшить количество активности по инцидентам.

По поводу других новшест мы пока сохраним интригу!

Критика и советы

Мы растём, решаем всё больше проблем, но конечно же всегда остаются незакрытые потребности. Будем рады услышать, чего не хватает лично вам и постараемся с этим помочь. Особенно интересно услышать мнение людей, которые ищут куда мигрировать с Grafana OnCall. Мы открыты к обратной связи и критике, будем рады услышать замечания. Наша задача - стать лучше благодаря сообществу.

Оставайтесь с нами в Telegram - мы используем его для общения с русским сообществом, следите за обновлениями в GitHub. Мы продолжаем!

Предыдущие публикации

Теги:
-1
Комментарии0

Всем привет!

Сегодня был выпущен релиз Pech 2.0.0 BETA!

Основные изменения:

  1. Новый формат написания: PEF (Pech Executable File):

    Этот формат был сделан с целью упростить написания

    кода и работы с переменными.

Мало да? Ну это же бета :-).

Также не основные изменения (это не грандиозно, но нужно):

  1. Выяснилось, что моё ядро с функциями НАМНОГО медленнее

    чем с exec и compile (с exec минимум на 10 тыс. задачах 10.7 мс!)

  2. Выяснилось, что нужно будет сделать кэширование для процессов.

Планы на будущее:

Сделать кэширование.

Сделать кучу серверов.

Да этого мало, но эти изменения пригодятся.

Удачи!

Теги:
-3
Комментарии2

Как разделить строку в Python: «split()» и альтернативы для разработчиков и аналитиков данных

Разделение строк — рутина для разработчиков и аналитиков: парсинг CSV, обработка логов, пользовательского ввода. Подготовили подробный обзор, где разобрали, как работает «split()» (включая «sep» и «maxsplit»), когда выбирать «partition()/rpartition()», «splitlines()», преобразование в список символов и «re.split()» для сложных правил. И добавили практические примеры, где и какой подход удобнее и надежнее применять.

Подробную инструкцию смотрите в базе знаний Рег.облака.

Теги:
+1
Комментарии0

Еще один вариант маршрутизации трафика через два сетевых интерфейса на основе списка доменных имен.

Сразу оговорюсь: все лучшие и хорошие варианты решения этой проблемы уже были рассмотрены на Хабре. Но для тех, кто использует linux и кого существующие варианты почему-либо не устраивают, предлагаю рассмотреть еще один.

Краткое содержание: ставим локальный dns resolver с плагином на python, который, при разрешении имени в адрес, устанавливает маршрут через альтернативный интерфейс, если адрес соответствует регулярному выражению. Для использования решения требуется умение сконфигурировать и запустить сервис в вашем любимом дистрибутиве/сервис-менеджере, готового пакета для установки нет.

При написании кода использовалась статья Составляем DNS-запрос вручную, огромное спасибо автору и переводчику.

Для реализации идеи нужен ДНС сервер, который позволяет достаточно просто писать плагины/хуки. Первым попавшимся на глаза был PowerDNS Recursor, который позволяет писать плагины на lua. И первая реализация была для него. Но lua это больше про компактность, чем про удобство, например, поддержку регулярных выражений можно так назвать только из вежливости. Тем не менее, всё работало как предполагалось, и достаточно надежно, пока не был найден Unbound DNS который позволяет писать плагины на python, и, в итоге, был написан аналог на питоне, который и предлагаю вашему вниманию.

Все файлы доступны на github. Файлов всего 5 и все достаточно короткие.

Файл reroute.conf: пример файла конфигурации ДНС сервера. 192.168.0.1 и 172.16.17.1 — это адреса маршрутизаторов для первого и второго интерфейсов, соответственно. /etc/unbound/reroute.py — собственно плагин выполняющий основную работу. Из существенных моментов: chroot необходимо отключить, чтобы могли нормально работать скрипты на python и сервис должен работать от root чтобы добавлять маршруты.

Файл reroute.py — плагин, который выполняет необходимые дествия, reroute_conf.py — файл конфигурации для плагина, можно записать оба параметра прямо в плагин и обойтись без него. Вся работа выполняется в функции do_reroute, весь остальной код взят, практически без изменений, из документации unbound dns.

Файл rrdomains.txt — список регулярных выражений в формате python regex, при совпадении с которыми для всех ip-адресов разрешаемого доменного имени выполняется установка альтернативного маршрута.

Файл bashrc содержит определение функции reroute. Если во время работы наткнулись на сайт, для которого необходима маршрутизация через второй интерфейс, можно воспользоваться быстрым перенаправлением с помощью команды reroute в терминале. Или добавить доменное имя или регулярное выражение для него в rrdomains.txt и перезапустить dns сервер.

На этом всё, успешного маршрутизирования!

Теги:
+2
Комментарии0

Всем привет!

Сегодня состоялся релиз версии 1.0 моего исследовательского ядра Pech (ранее PearKernel). Проект прошел большой путь трансформации архитектуры, и я готов поделиться результатами.

Основные изменения:

  1. Архитектура системных серверов:
    Теперь Pech следует микроядерным концептам. Вместо монолитной логики я внедряю систему серверов. Это изолированные процессы, которые наделены специфическими полномочиями (Capabilities). Например, реализованный в этом релизе FS-сервер имеет прямой доступ к файловой системе и предоставляет интерфейсы для других пользовательских процессов.

  2. Асинхронный IPC:
    Механизм межпроцессного взаимодействия (IPC) полностью переработан. Теперь он базируется на системе полнодуплексных (full-duplex) асинхронных каналов. Для управления очередями сообщений была разработана собственная реализация асинхронной очереди (asyncio.Queue), так как в asyncio для MicroPython не было asyncio.Queue.

  3. Переход на кооперативную многозадачность:
    Я принял решение временно отказаться от собственной реализации вытесняющей многозадачности в пользу модели на базе asyncio. Это позволило значительно повысить стабильность работы системы и упростить логику переключения контекста между серверами. В планах на будущие версии — гибридная модель, объединяющая гибкость asyncio и строгий контроль ресурсов.

  4. Рефакторинг ядра:
    Я отошел от структуры «всё в одном классе». Логика ядра теперь декомпозирована, что упрощает масштабирование. При проектировании я ориентировался на концепции Mach 3.0, стараясь адаптировать их под современный асинхронный подход.

Планы:

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

Ссылка на репозиторий в первом комментарии. Жду конструктивной критики и идей по развитию архитектуры IPC!

Удачи!

Теги:
-5
Комментарии13
1
23 ...

Вклад авторов