Все потоки
Поиск
Написать публикацию
Обновить

Бэкенд

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

Вчера я говорил о паузе в публикациях, но жизнь внесла коррективы.

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

О чём будет статья:

  • Честный разбор причин провала одного из моих ключевых проектов

  • Фокус на архитектурных ошибках, а не на предметной области

  • Анализ того, как over-engineering может убить даже перспективную идею

  • Конкретные примеры и выводы, которые помогут избежать подобных ошибок

Важный момент: хотя проект связан с Фидонетом, статья будет исключительно о технических решениях и их последствиях. Фидонет здесь — лишь контекст, а не основная тема.

Когда ждать: сегодня в 10:00 по московскому времени.

Не пропустите — обещаю, будет интересно и максимально полезно с практической точки зрения!

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

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

Хорошие новости: для IT-специалистов это не мечта, а обычная практика. А у нас тут как раз есть крутая подборка профессий: выбирайте, чему хотите научиться, и вперёд — к удалёнке.

Программист на Python. Один из самых популярных языков для новичков.

Программист на Java. Фундаментальное направление для создания надёжных корпоративных систем и приложений.

Тестировщик программного обеспечения. Чтобы всё работало корректно и без багов.

→  Ещё больше полезных курсов

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

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

Разговорный английский. Свободное общение в повседневных ситуациях.

Деловой английский. Переписка и переговоры для работы.

Английский для IT. Лексика и термины в сфере технологий.

Финансовый английский. Язык отчетов и международных сделок.

Английский для путешествий. База для поездок и общения за границей.

Ещё больше курсов по английскому найдете тут

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

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

Docker. Упаковываем приложения в контейнеры и запускаем их где угодно.

Kubernetes. Управляем кластерами контейнеров и автоматизируем их работу.

CI/CD. Обеспечиваем быстрые и стабильные релизы с помощью автоматизированных пайплайнов.

А если хочется изучить что-то ещё, то заглядывайте на нашу витрину с крутыми курсами

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

Новый поток DevOps Upgrade стартует в понедельник. Рассказываем про ключевое обновление курса

Рынок DevOps продолжает активно расти, а требования к специалистам — повышаться. Чтобы оставаться востребованным, важно постоянно актуализировать свои знания. Почему сейчас — лучшее время для этого?

В понедельник стартует новый поток DevOps Upgrade, и вот, какое обновление мы внедрили на курсе:

У каждого, кто присоединится к тарифу «Комфорт» до 29 сентября, будет свой личный консультант. Это персональный наставник, который фокусируется на образовательной стратегии студента. Его ключевые задачи:

✅ Индивидуальный подход
Помощь в постановке персональных учебных целей и контроль их достижения.

✅ Мониторинг прогресса
Тьютор следит за соблюдением дедлайнов и помогает сохранить мотивацию на протяжении всего курса.

✅ Разработка карьерной стратегии
Совместно со студентом он выстраивает план развития в DevOps с учетом личных амбиций и целей.

✅ Всесторонняя поддержка
Проведение 2-4 индивидуальных встреч для рефлексии и корректировки учебного процесса под ритм жизни студента.

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

DevOps Upgrade — это инвестиция в карьеру, которая теперь включает не только актуальные технические знания, но и персональную поддержку на всех этапах обучения.

Старт потока — уже в понедельник. Успейте присоединиться!

⏩ Узнать подробности о курсе и зарегистрироваться можно на сайте

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

Чувствуете, что вашему стартапу чего-то не хватает для рывка на Луну? Возможно, легендарного Хабраслизня.

В «Стартап-кранче» — пополнение колоды! Теперь вашу команду мечты могут усилить:

Денис Продакшенов — тот самый человек, который донесёт фичу до прода.

Дэйли Ремайндер — от его напоминания о стендапе не скрыться.

Легендарные Ада Лавлейсовна и, конечно же, Хабраслизень.

А бустер Хабракатышек добавит проекту немного непредсказуемой магии.

Залетайте в игру, чтобы собрать имба-команду и ворваться в топ

И готовьтесь: следующие дропы карточек — 30 сентября и 7 октября!

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

Немного лекций с нашего митапа питонистов в Новосибирске - PythoNSK (https://t.me/python_in_nsk приходите, в ноябре планируем вторую встречу организовать).

У нас на митапе было несколько лекций, вот они:

Python Desktop Development (Роман Черкасов) - Программирование на QT + PySide: https://youtu.be/Xmh74WNheRM?si=mR9ecx3KzTxA4tWF
Как работает greenlet в async-реализации SQLAlchemy (Любимов Алексей) - https://youtu.be/zPXf9NJc5qA?si=VyosK69QPdtDivAY
Лекция от Никита Соболева ("Как коммитить в питон, если вы очень хотели, но не знали как?") - https://t.me/opensource_findings_chat/115827

Я хочу также отдельно поблагодарить:

  1. ТГ snppg - инициатор всего нашего действия, он изначально создал эту группу, а я просто подхватил и организовал людей

  2. ТГ duntssov - за интересную и хорошую лекцию, помощь

  3. ТГ THEDAN320 - за помощь в организации

  4. ТГ masian4eg

  5. ТГ RnChe - за проведение лекции

  6. ТГ sobolev_nikita - за проведение онлайн лекции

  7. И конечно же вам все за то что пришли. Вместе мы - сила, и кто знает, может митапы перельются во что то большее

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

Как облако помогает нанимать людей

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

В статье рассматривается кейс SkillGigs, сервиса для подбора специалистов в сфере здравоохранения и технологий. Управляемые облачные сервисы позволили внедрить 3D-резюме, выстроить мультиоблачную архитектуру, обеспечить безопасность и упростить интерфейс для пользователей. Результат: поиск стал быстрее, рекомендации — точнее, а процесс найма удобнее. Этот пример хорошо показывает, что облако — это уже не просто «поддержка инфраструктуры», а реальный драйвер бизнеса.

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

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

Привет, коллеги! 👋

Снова с вами рубрика "вечерний вайбкодер", и сегодня я принёс вам MyRepETL (Ссылка на github)— инструмент для ETL через MySQL репликацию.

Зачем это нужно?

Задача: у вас куча MySQL баз в микросервисах, нужно всё это затащить в Metabase для красивых отчетов.

Проблема в том, что:

  • В каждой базе своя схема и структура

  • Данные нужно объединить и нормализовать

  • Metabase любит когда всё в одном месте

  • Ручной экспорт/импорт — это боль

MyRepETL решает это: берёт данные из всех ваших баз, трансформирует их на лету и складывает в единую аналитическую базу для Metabase.

Что умеет MyRepETL

🚀 Основные фишки

Многопоточность из коробки

  • Каждый источник работает в своём потоке

  • Не блокирует друг друга

  • Автоматически восстанавливается при сбоях

Гибкие трансформации

  • Переименование таблиц и колонок

  • Вычисляемые поля

  • Фильтрация данных

  • Кастомные Python-функции

JSON-конфигурация

  • Всё настраивается через конфиг

Как использовать

Простая синхронизация

Самый базовый случай — просто скопировать данные из одной базы в другую:

{
  "sources": {
    "prod_db": {
      "host": "prod-mysql",
      "user": "repl_user", 
      "password": "repl_pass",
      "database": "production"
    }
  },
  "targets": {
    "backup_db": {
      "host": "backup-mysql",
      "user": "backup_user",
      "password": "backup_pass", 
      "database": "backup"
    }
  },
  "mapping": {
    "prod_db.users": {
      "source": "prod_db",
      "target": "backup_db",
      "source_table": "users",
      "target_table": "users"
    }
  }
}

С трансформациями

А теперь добавим магию — переименуем таблицу, добавим вычисляемые поля:

{
  "mapping": {
    "prod_db.customers": {
      "source": "prod_db",
      "target": "analytics_db",
      "source_table": "customers",
      "target_table": "users",
      "column_mapping": {
        "id": {"column": "user_id"},
        "name": {"column": "full_name"},
        "email": {"column": "email"},
        "birth_date": {"column": "age", "transform": "transform.calculate_age"},
        "phone": {"column": "formatted_phone", "transform": "transform.format_phone"},
        "created_at": {"column": "registration_date"},
        "source": {"column": "source_system", "value": "production"}
      }
    }
  }
}

Создайте файл transform.py с вашими функциями:

# transform.py
def calculate_age(birth_date, row_data, table):
    from datetime import datetime
    if not birth_date:
        return None
    birth = datetime.strptime(birth_date, '%Y-%m-%d')
    return (datetime.now() - birth).days // 365

def format_phone(phone, row_data, table):
    if not phone:
        return None
    # 79991234567 -> +7 (999) 123-45-67
    return f"+7 ({phone[1:4]}) {phone[4:7]}-{phone[7:9]}-{phone[9:11]}"

Запуск

# Установка с GitHub
pip install git+https://github.com/tumurzakov/myrepetl.git

# Или клонировать и установить локально
git clone https://github.com/tumurzakov/myrepetl.git
cd myrepetl
pip install -e .

# Запуск с конфигом
myrepetl run config.json

# Или через Docker
docker run -v ./config.json:/app/config.json myrepetl:latest

На этом всё, удачного кодинга! 👨‍💻

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

Хеш-таблица с транзакциями на Go

Привет, продолжим удивительное. Смех смехом, но на Go стали доступны:

  1. Хеш-таблица с транзакциями.

  2. Структуры данных второго порядка.

И в отличие от C++, они еще не создают проблемы для Garbage Collector. Вы угадайте почему, а я немного процитирую:

------------------8<------------------

Все выглядит примерно так:

func NewMemDb() MemDb { /* ... */ }

type MemDb interface {
    Close() error
    StartTrn() Transaction
}

type Transaction interface {
    Close() error

    Get(key Ptrsz) (Ptrsz, bool)
    All(getKeys bool, getVals bool) (keys []Ptrsz, vals []Ptrsz)

    Set(key Ptrsz, val Ptrsz)
    Del(key Ptrsz)

    DependVal(key Ptrsz, val Ptrsz)
    DependDel(key Ptrsz)

    Commit() error
    Rollback() error
}

А именно:

  • Объект MemDb создается с помощью функции NewMemDb().

  • У MemDb есть функция Close() -- мы ОБЯЗАНЫ ее вызвать!!!

  • Объект Transaction создается с помощью функции StartTrn().

  • У Transaction тоже есть функция Close(). Да, мы ОБЯЗАНЫ!

  • Transaction работает с данными через lib.Ptrsz. Точно также, как и mdb.BlobMap.

  • Чтение данных выполняется посредством функций Get() и All(). Возвращаемые ими Ptrsz указывают на внутренние структуры MemDb. Они остаются валидными пока не завершена транзакция и не было вызовов Set() и Del(), инвалидирующих указатели.

  • Изменение данных выполняется посредством функций Set() и Del()MemDb копирует себе байты, на которые указывают key и val.

  • Функции DependVal() и DependDel() устанавливают зависимости. Их проверяет Commit().

  • Функции Commit() и Rollback() завершают транзакцию. Завершают, но не закрывают! Мы ОБЯЗАНЫ вызвать Close()!!

  • Просто Close() означает Rollback().

------------------8<------------------

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

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

Игра с огнём, или нулевой байт

В одном проекте заказчик потребовалось различать (и делать поиск) по трем состояниям текстового поля в Lucene индексе:

  1. непустое значение (работает из коробки)

  2. пустая строка "" (не поддерживается люсин)

  3. null (не поддерживается люсин)

Lucene не хранит null и пустые строки "" - значения просто не индексируется. Для бизнес-логики, где нужно различать все три состояния, стандартных механизмов Lucene недостаточно.

Создание "специальных" замен в виде комбинаций типа "_null_" текста и спецсимволов - ломается тестерами которые пропускали различный мусор через индекс.

Был выбран компромиссный подход:

  • "\0" (строка из нулевого байта) используется как маркер null

  • "\0\0" (строка из двух нулевых байтов) используется как маркер ""

Пробило в холодный пот? Правильно, и меня тоже. Тем не менее, это рабочий способ.

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

Плюсы:

  • \0 — это валидный символ в Java-строке, который практически не встречается в реальных данных.

  • Символ \0 невозможно ввести напрямую из внешних систем, редакторов или форм без явного кодирования. Это защищает от случайных коллизий, даже если тестировщики пробуют «мусорные» символы.

  • Таким образом достигается стабильное различие между null, "" и содержимыми строками.

Риски:

  • Утечки наружу. Маркеры \0 могут попасть в API-ответы, логи, сериализацию. В нашем случае lucene был в обертке и поиск напрямую не использовался внешними системами - обработчик вызовов был инкапсулирован в прокси сервис.

Использование \0 и \0\0 как маркеров — это баланс между «желанием клиента» и технической безопасностью. Работает, но требует дисциплины: любая утечка этих символов превращает решение в источник трудноуловимых багов снаружи индекса.

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

RFC 9828: стандарт, который, странным образом, опоздал лет на двадцать

JPEG 2000, появившийся ещё в начале нулевых, давно используется в задачах, где требуется высокое качество изображения, а RTP как транспорт для данных реального времени уже более двадцати лет обеспечивает надёжность. Однако, и это удивительно, всё это время отсутствовал формализованный стандарт, позволяющий передавать JPEG 2000 с минимальной задержкой, по кускам кадра, не дожидаясь его полной готовности, — и лишь в 2025 году он был наконец принят. Можно только гадать, почему в мире, где запускают ракеты в космос по подписке, инженеры продолжали смиренно ждать, пока кадр целиком упадёт в буфер.

Теперь же, с появлением RFC 9828, ситуация меняется: простое на первый взгляд решение — передавать кадр частями, а не целиком, — становится официальной нормой. Как только кодер начинает производить данные, пакеты уже могут быть отправлены в сеть, а приёмник, не дожидаясь окончания всего кадра, начинает сборку изображения. И именно это означает, что впервые JPEG 2000 становится пригодным для таких сценариев, где маркетинговый термин «low latency» оборачивается критическим требованием: телевещание в прямом эфире, дистанционная хирургия или работа со сверхкачественным изображением в реальном времени.

Вместо прежнего порядка «сначала кадр, затем поток» появляется обратный — «сначала поток, затем кадр». Благодаря этому сеть получает ту самую гибкость, о которой раньше говорили как о недостижимой: лишние уровни разрешения и качества можно отбрасывать на лету, даже не вскрывая содержимое. Приёмник, в свою очередь, обретает resync-точки, благодаря которым потеря пары пакетов больше не превращается в катастрофу, а разработчики, наконец, могут избавиться от бесконечных костылей, изобретённых в обход RFC 5371.

Выгоды для бизнеса очевидны, хотя каждый сектор формулирует их по-своему. В телевидении по IP режиссёр теперь видит кадр практически сразу, а не спустя полсекунды, и значит — работа в реальном времени перестаёт быть фикцией. В медицине появляется возможность стримить эндоскопию или МРТ с качеством вплоть до lossless и при этом не терять драгоценные секунды, от которых зависит исход операции. Кинопроизводство перестаёт таскать гигабайты по дискам, потому что мастер-кадры наконец-то могут пересылаться по сети. Даже государственные сервисы, включая суды и видеоконференции, приобретают шанс выглядеть не как мем из 2008 года, а как инструмент XXI века.

Да, пока это лишь бумага. Но, как обычно бывает: сначала RFC, затем — первые SDK и FPGA-решения, а чуть позже — перепакованные в отраслевые документы SMPTE и ITU стандарты. В горизонте двух-трёх лет мы увидим первые реальные внедрения в телевидении и медицине, в горизонте пяти — широкое распространение. А дальше, возможно, даже lossless-видеозвонки без лагов перестанут казаться фантастикой.

RFC 9828 — это не просто ещё один формат. Это признание индустрии в том, что ждать конца кадра всё это время было, мягко говоря, глупо.

Ссылки, как обычно, в моём канале

——————
Менеджер? Давай сюда!
Ищи работу здесь
Технологии и архитектура

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

Приглашаем на Java Jam — бесплатный митап ЮMoney для Java-разработчиков

Спикеры из ЮMoney и главный эксперт по технологиям Сбера расскажут о своём опыте и пообщаются с аудиторией. Вот какие темы будут на митапе:

🟣 Как мы уменьшали нагрузку на базы данных в очередях задач. Расскажем, как реализовать надёжное асинхронное и отложенное исполнение задач.

🟣 Советы по производительному коду. Поговорим про время выполнения программ, работу со строками и коллекциями, вещественную и битовую арифметику, алгоритмические трюки и многое другое.

🟣 Уязвимости не пройдут. Обсудим, как повысить безопасность разработки с помощью SAST и SCA.

25 сентября, в четверг, в 18:30 (мск) — приходите на митап в Санкт-Петербурге или подключайтесь онлайн!

Подробности — на сайте митапа Java Jam 

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

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

Подборка бесплатных обучающих материалов для тех, кто хочет разобраться в сетях

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

Сетевая инфраструктура

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

Компьютерные сети

Пять статей помогут вам изучить основы компьютерных сетей. Они плавно, шаг за шагом, погрузят вас в тему. Сначала вы разберете ключевые понятия, чтобы говорить с сетевиками на одном языке. Затем — узнаете, какие бывают сети и из чего они состоят, что такое MAC- и IP-адреса. Далее — освоите две основные модели: OSI и TCP/IP — на конкретных примерах посмотрите, как работает каждый уровень.

CDN

Мини-курс познакомит с базовыми принципами работы распределенной доставки контента. Вы научитесь подключать и настраивать такую сеть, оптимизировать изображения. Особое внимание — внедрению CDN для повышения безопасности.

Сетевая безопасность

Эта подборка сфокусирована на сетевой ИБ: межсетевые экраны и IDPS, средства шифрования трафика и DDoS-атаки. Теорию вы закрепите практикой, самостоятельно установив и настроив файрвол или проведя сканирование портов по инструкции.

Сетевые протоколы

В мире существует более 7 000 сетевых протоколов. В 12 материалах вы узнаете о самых популярных из них, а также о существующих сетевых моделях передачи данных.

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

Уже неоднократно и не только на Хабре жаловался на мелочность работодателей в объявлениях и ненужности указания всех библиотек, технологий и даже их версий. Сегодня в LinkedIn увидел предельный случай - ищут Java профессионала, который "strong in JSON,...". Факин JSON! Зa сколько учится этот формат? Секунд за 30? А если с возможностями формальной проверки на правильность содержания, то минут за 15? Зачем кто-то вообще указывает такие мелочи, как JSON, в описании требований к вакансии? И так со всем. Вместо принципиальных технологий пишут конкретные реализации и даже их версии. Зачем? Зачем?... Ничего не ответила золотая рыбка)

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

Какая должна быть длина у функций?

Щас скажу кое-что неочевидное. На эту проблему нельзя смотреть в статитке. Вот правильно 4 строки, 10, 100, поэтому разбиваем как-только доходим до предела. Я смотрю на это в динамике.

Когда мы только что-то пишем и это не очевидная абстракция вроде проверки числа на простоту, то разбивать на функции не надо, до тех пор пока вы не начнете упираться во что-то начиная от необходимости повторного использования (а значит выделения доп абстракций) до большого количества состояний, которые делают анализ функции слишком сложным. Какой при этом получится размер? Да хрен его знает, в реальной жизни функции бывают очень разные, это легко проверить если походить по опенсорсу на гитхабе. И мы говорим про очень успешные продукты и проекты.

Главное здесь не размер, а то что существует закон распределения, который звучит так: не распределяй. Рефакторить монолит в подавляющем большинстве случаев проще, чем рефакторить распределенную систему будь то функции, компоненты реакта или микросервисы. И когда мы пишем что-то новое, не важно это либа с функциями внутри или сервис с возможными микросервисами внутри, мы изначально не знаем во что это выродится и с какими проблемами мы столкнемся. И слишком ранее разбиение может привести к тому, что придется переписывать все, либо будем страдать, потому что уже поздно.

Есть такой архитектурный принцип, что принятие ключевых решений нужно откладывать как можно дольше (пока не накопится достаточно кейсов и понимания). Да, при этом надо учитывать, что можно слишком затянуть, но на уровне функций, все же сложно довести систему до состояния невозможности рефакторинга.

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

p.s. Смог тут загуглить исследование сотен миллионов строк на гитхабе: https://arxiv.org/pdf/1806.04556 (на скрине выдержка)

Больше про разработку в моем телеграм-канале Организованное программирование

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

Про сеть и инфраструктуру RUTUBE в подкасте linkmeup

В этом выпуске Эльдар Ниязов, директор департамента развития и эксплуатации ИТ-инфраструктуры RUTUBE, рассказывает об устройстве видеохостинга, ЦОДах, сетях и делится историями, которые не вошли в доклад об архитектуре.

Из видео узнаете:

  • Сколько нужно серверов, чтобы построить национальный видеохостинг.

  • Сколько легаси осталось от прошлых итераций (спойлер: совсем мало).

  • Как пережить взрывной рост и с какими ещё вызовами сталкивается команда.

  • Где живёт RUTUBE.

  • Зачем понадобилось написать собственный S3 (а более подробно о том, как устроено хранилище — в этом видео).

  • Как оптимизируется CDN и многое другое.

Как видно на превью, это интервью было записано на конференции HighLoad++. Следующая встреча разработчиков высоконагруженных систем уже не за горами и там снова выступят специалисты из RUTUBE — в этом году фокус на ML:

  • «Как RAG ускоряет поддержку RUTUBE: от гибридного поиска до мониторинга галлюцинаций». Виктор Леньшин объяснит, как устроена архитектура системы, которая уже в 80% случаев генерирует готовый ответ на запрос в поддержку.

  • «Платформа для создания субтитров на весь UGC в RUTUBE». Дмитрий Лукьянов расскажет, как платформа сейчас обрабатывает новые видео почти без задержек, справляется с экстремально длинными записями и не привирает на музыке, шумах и спецэффектах.

Больше о том, как разрабатывают медиасервисы, читайте в телеграм-канале Смотри за IT. Там делимся опытом и рассказываем о жизни в цифровых активов «Газпром-Медиа Холдинга» таких, как PREMIER, RUTUBE и Yappy.

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

Вышла новая версия пакета easyjson - 0.9.1, содержит исправления выявленных ошибок.

Пакет easyjson предоставляет быстрый и простой способ маршалинга/демаршалинга структур Go в/из JSON без использования рефлексии. Фундамент - кодогенерация.

В тестах производительности easyjson превосходит стандартный пакет encoding/json в 4-5 раз, а другие пакеты работы с JSON — в 2-3 раза.

Easyjson стремится сделать сгенерированный код Go достаточно простым, чтобы его можно было легко оптимизировать или исправить. Вторая цель — предоставить пользователям возможность настраивать сгенерированный код, предоставляя функции, недоступные в стандартном пакете encoding/json, такие как генерация имён в формате «snake_case» или включение поведения omitempty по умолчанию.

GitHub: https://github.com/mailru/easyjson

Подробности исправления: https://github.com/mailru/easyjson/pull/423

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

20 вакансий у нас в SSP SOFT

Привет всем хабровцам! Мы регулярно публикуем посты о наших вакансиях, включая 1С и DevOps.

Полный и актуальный список вакансий здесь: https://spb.hh.ru/employer/5648224.
Но откликаться на портале хх необязательно — внизу дадим прямые контакты с нашим HR.

Рабочие места в офисах в Москве (топ локация в ЦАО у Красной площади) и в Томске, а также у нас много сотрудников, которые работают удаленно из разных регионов России. Формат «онлайн» или «оффлайн» обсуждаем.

Вот примеры вакансий 1С и девопс — остальные 20 штук на см. на хх.ру:

1️⃣ Разработчик 1С (https://vk.cc/cPyro8)
2️⃣ Ведущего разработчик 1С (ERP, УХ) (https://vk.cc/cPyroI)
3️⃣ DevOps-инженер (https://vk.cc/cPyrpq)

👉 В SSP SOFT мы рассматриваем найм с прицелом на долгосрочную совместную работу. Многие сотрудники у нас работают по 5 лет и более.

Резюме можно направить нам напрямую в Telegram или на почту job@ssp-soft.com.

А для ускоренного рассмотрения пож-та отправляйте резюме HR-ру в Телеграм с пометкой "Нашел(ла) вас на Хабре", приложив сопроводительное письмо.

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

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

На самом дне MCP — транспорт. Тут нет никакой магии: JSONRPC. Его работа — просто донести пакет от клиента до сервера и обратно. Запросы, ответы, нотификации, ошибки — всё аккуратно упаковано, но без бизнес-смысла.

Дальше идут данные. Со стороны сервера это Resources, Prompts, Tools. Resources управляют файлами, базой, API-ответами и прочим контекстом, который нужен ИИ-приложениям. Внутри этого — Content: текст, картинки, аудио, бинарь, блоки. Prompts описывают доступные подсказки и параметры. Tools — это исполняемые функции, которыми сервер делится с клиентом, от файловых операций до API вызовов.

Со стороны клиента данные другие. Sampling.Complete позволяет серверу дёрнуть LLM клиента без встроенного SDK. Elicit даёт возможность уточнить что-то у пользователя: параметры, подтверждения, ввод. Logging отправляет обратно логи и диагностику.

Есть и служебный слой: Initialize для рукопожатия, Capabilities для описания возможностей сторон, плюс сервисные штуки вроде уведомлений о прогрессе, подписок/отписок и отмен операций.

В итоге MCP — это не просто «реестр» инструментов, а полноценный протокольный шлюз. Сервер экспонирует ресурсы и инструменты, клиент решает, что из этого реально использовать. Баланс тот же: удобство для разработчиков серверов и полный контроль у пользователя.

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

Ну а чтобы вам не было скучно, я приложу сравнение протоколов, дабы можно было понять роль MCP относительно других

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