Обновить

Все потоки

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

Компьютерное зрение для кода: что PVS-Studio разглядел в OpenCV

Что общего у компьютерного зрения и статического анализа? Оба ищут смысл в данных. OpenCV находит образы среди миллионов пикселей, а PVS-Studio — ошибки среди тысяч строк кода. Изучим же исходники крупнейшей библиотеки компьютерного зрения.

На примере 14 фрагментов кода из OpenCV предлагаю посмотреть, как статический анализ помогает избежать попадания багов в релиз и облегчить жизнь разработчикам.

Давайте посмотрим на кусок кода из проекта:

template<typename T>
struct Ptr : public std::shared_ptr<T>;
// ....
Ptr<FlannNeighborhoodGraph> FlannNeighborhoodGraph::create(....) 
{           
    return makePtr<FlannNeighborhoodGraphImpl>(....);
}

void Utils::densitySort (const Mat &points, int knn, 
                         Mat &sorted_points, std::vector<int> &sorted_mask) 
{
  // ....
  FlannNeighborhoodGraph &graph =                                      // <=
                         *FlannNeighborhoodGraph::create(....);

  std::vector<double> sum_knn_distances (points_size, 0);
  for (int p = 0; p < points_size; p++) {
    const std::vector<double> &dists = graph.getNeighborsDistances(p);
    for (int k = 0; k < knn; k++)
      sum_knn_distances[p] += dists[k];
  }
  // ....
}

Если вы думаете, что использование умных указателей раз и навсегда решает проблему "висячих" ссылок и доступов к памяти, то здесь всё пошло не так. Давайте разбираться. Сейчас код работает следующим образом:

  1. Функция create создаёт и возвращает умный указатель на тип FlannNeighborhoodGraphImpl, и его счётчик ссылок на объект равен единице;

  2. Создаётся ссылка graph на значение этого умного указателя, при этом счётчик ссылок на объект не изменяется;

  3. Указатель является временным объектом, и поэтому после завершения инициализации счётчик ссылок уменьшится до нуля, что приведёт к освобождению управляемого объекта. Теперь ссылка указывает на разрушенный объект;

  4. В цикле for происходит обращение к невалидной ссылке.

В итоге код, который казался правильным, приводит к неопределённому поведению. Кроме того, эту проблему находит не только PVS-Studio, но и санитайзер. Пруф.

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

std::vector<double> sum_knn_distances (points_size, 0);

{
  // get neighbors
  auto graph = FlannNeighborhoodGraph::create(....);

  for (int p = 0; p < points_size; p++) {
    const std::vector<double> &dists = graph->getNeighborsDistances(p);
    for (int k = 0; k < knn; k++) 
      sum_knn_distances[p] += dists[k];
  }
}

Дополнительно ограничили область видимости graph, чтобы ресурс освободился после выполнения циклов.

Хотите узнать больше?

Статический анализ выявляет скрытые дефекты даже в больших работающих проектах. Какие ещё опасные фрагменты кода мы нашли в коде OpenCV? Полный разбор можно найти в отдельной статье.

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии1

TDMS Фарватер Web: гибкая трансформация документооборота в новом интерфейсе

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

Дата и время: 18 декабря, 11:00-12:00 (МСК)

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

Мы уверены, что современные технологии должны упрощать рутину. Именно поэтому мы создали и развиваем систему TDMS «Фарватер Web» – систему для документооборота и управления проектированием в строительстве.

На вебинаре сфокусируемся на ключевых возможностях:

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

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

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

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

  5. Современный адаптивный интерфейс. Удобство просмотра на любых устройствах, динамичные элементы управления, дашборды.

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

Для кого этот вебинар будет особенно полезен?

  • Руководители (Технические директора, руководители департаментов, ГИПы). Увидите инструмент для стратегического контроля над портфелем проектов, сроками и ресурсами.

  • Руководители проектов и их помощники. Поймете, как делегировать задачи, отслеживать исполнение и автоматизировать отчетность.

  • Главные специалисты и ответственные за бизнес-процессы. Получите представление о том, как формализовать и цифровизировать регламенты согласования.

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

Спикер: Павел Лапонов, специалист по внедрению систем технического документооборота компании «Нанософт».

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

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

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

Запуски 2025: менеджмент в ИТ

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

«Lead DevOps» — 5 месяцев
Научим быть «играющим тренером» — специалистом, который одинаково уверенно разбирается и в технологиях, и в менеджменте. После курса почувствуете, что к большой ответственности прилагается большая уверенность в своих силах.

«QA Lead» — 5 месяцев
Курс поможет вырасти из QA-инженера в руководителя QA-команды. Разберём, как формировать сильную команду, управлять стратегией автоматизации и выстраивать эффективные QA/QC-процессы.

«Технический директор — СТО» — 4 месяца
Программа для технических специалистов, которые хотят развиваться как руководители. Наставники и менторы — CTO из Яндекса и других крупных компаний.

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

OpenAI представила официальный гайд по промптингу новой модели GPT-5.2. Внутри ждут готовые промgты, советы и лучшие кейсы использования — всё это можно адаптировать под свои задачи.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии1

OpenAI представила свою новую модель — GPT-5.2. Модель прокачали в офисной рутине, она умеет создавать хорошие презентации и таблицы. Также в ней улучшен кодинг и контекст. Теперь модель дольше и лучше помнит, о чём общалась с пользователем. Свежие знания до августа 2025 года. Модель почти не ошибается: на 30% меньше галлюцинаций по сравнению с GPT-5.1.

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

@Regnar, навеяло статьёй

Свалился на меня «последний из 32-битных могикан», но машинка прямо финал возможностей архитектуры — насколько я понял, видит спокойно 8 гигов рамы (PAE во все поля?), слотов не пожалели, в общем, в такое чудо бы камень хотя бы на 2 ядра, но, увы…

Я его практически не смотрел ещё и ХЗ когда посмотрю (вроде не совсем мёртвая), но превентивно задам вопрос. Допустим, поставил я туда 32-битный BunsenLabs. Допустим, я хочу запустить какое-нибудь 64-битное приложение, которое в 32 битах давно уже не обновляется. Допустим, мне пофиг, что там в плане скорости (очень важное допущение, потому что оно как бы понятно, что там будет).

Насколько это реально — настроить для него резервативию… презервацию… короче, специально обученный загон с софтовой эмуляцией 64 бит? Существуют ли решения? Чтобы их установить и отконфигурировать, обязательно пройти все круги ада, как в той статье?

Практического смысла это по понятной причине не несёт — просто пятничное.

Теги:
Всего голосов 2: ↑0 и ↓2-2
Комментарии0

Доброго всем. Первая публикация, прошу не особо...

Не стану растекаться мыслью по древу, пост - следствие поиска по запросам типа "как лучше вставить и анимировать SVG иконки", и подобным в том же ключе. Так как самыми релевантными ответами поиска не удовлетворён, решил написать свой, во-первых, чтобы услышать сообщество. Мало ли, возможно технология уже вовсю применяется в фреймворках, и на поиск все забили "всё и так слишком очевидно".
Во-вторых, сам до сих пор копаюсь в ванильном, поэтому, если старшие товарищи найдут сей вариант приемлемым, пусть пост останется как справка, вроде "а чё, так можно было?". Если же такая практика не применима по ряду пока неизученных мной причин, пост тоже пусть остаётся дополненный комментариями, как пример того "как не надо делать". В общем.

Решил упаковать спрайт в Web Components. Для примера взял отображение файловых иконок, за подопечных три распространённых файловых формата .docs, .xls, .pdf. Раз уж мне и так пришлось испытать муки отсутствия музы( вообще ни разу не художник), прошу отнестись с пониманием к внешнему виду конечного продукта. Упор был на простоту, контролируемость, компоновку. В том смысле, что косметика человеком с утончённым восприятием этого мира может быть применима отдельно.
Да, и ещё один аспект постарался обыграть - наличие общих свойств для всех иконок, коими выбрал подложку, и текст mime типа, и уникальные для каждой иконки элементы, ими выступили "брендовые" цвета и элементы. Так, выбор иконок файловых форматов для спрайта показался оптимальным.
Далее, в общем код(сокращённо, рабочий пример по ссылке), совсем немного к нему объяснений и ссылка на песочницу. И, само собой, ожидание комментариев.

customElements.define("wc-icon-file",
  class WC_ICON_FILE extends HTMLElement {
    constructor() {
      super();
      this.#preform = '';
      this.#mime = '';
      this.#unic = '';      
    }  
    connectedCallback() {
      this.init();
      this.innerHTML=this.#preform;
    } 
    init() {
      this._mime = this.getAttribute('data-mime');
      let availableMime = {
        xlsfile: `<g class="wc-icon-${this.#mime}">
          <line style="stroke-width:3;stroke-linecap:butt;" x1="13" x2="17" y1="24" y2="24"/>
          <line style="stroke-width:3;stroke-linecap:butt;" x1="18" x2="22" y1="24" y2="24"/>
          // и т.д.
          <text x="8" y="19" class="f-mime">.xls</text>
          </g>`,
        docfile: `<g class="wc-icon-${this.#mime}">
          <line style="stroke-width:1.8;stroke-linecap:round;" x1="20" x2="24" y1="23" y2="23"/>
          <line style="stroke-width:1.3;stroke-linecap:round;" x1="16" x2="30" y1="27" y2="27"/>
          // и т.д.
          <text x="8" y="19" class="f-mime">.doc</text>
        </g>`,
          pdffile: `<path class="wc-icon-${this.#mime}" d="m 21.963376,23.938571 // и т.д. />
          <text x="8" y="19" class="f-mime">.pdf</text>` 
        }      
        this.#unic = availableMime[this.#mime];
        this.#preform = `<svg class="wc-icon-file" viewBox="0 0 48 48">
           <path class="${this.#mime}" d="M13.528 3.087 30 3l8 9-.316 28.075c-.035 3.151-1.09 
            4.143-3.716 4.11h-20.44 c-2.303.095-3.676-.718-3.716-4.11V7.197c-.03-2.459
            1.504-4.198 3.716-4.11z"/>
            ${this.#unic}
            </svg>`
  }; 
});
let wcIconFile = document.createElement('wc-icon-file');
// export {wcIconFile} по необходимости

Сам компонент на странице объявляется как обычно:

<wc-icon-file data-mime="xlsfile"></wc-icon-file>
<wc-icon-file data-mime="docfile"></wc-icon-file>
<wc-icon-file data-mime="pdffile"></wc-icon-file>    

Код прокомментирую на предмет того, что в init() пришлось соблюсти порядок объявления переменных. Для определения схожих классов с разными "модификаторами" сначала брался атрибут в компоненте. По нему же делалась выборка this.#unic впоследствии вставляемая в this.#preform . Стили здесь не привожу, отмечу лишь, что настройки :hover и анимации там вполне работают.

Благодарю, что уделили время.

Теги:
Всего голосов 2: ↑2 и ↓0+3
Комментарии3

20 демо-уроков, которые нельзя пропустить бэкенд-разработчикам

Привет, Хабр. Сегодня делимся подборкой открытых уроков, которые пройдут в Otus в декабре. Уроки проводят преподаватели курсов в формате живых вебинаров — это шанс не только получить нужные знания, но и задать свои вопросы экспертам. Участие бесплатное (нужно только зарегистрироваться). Присоединяйтесь!

Полное расписание бесплатных демо-уроков смотрите в календаре.

Теги:
Всего голосов 3: ↑3 и ↓0+4
Комментарии0

Как GUDDA сэкономила в три раза, развернув инфраструктуру для 1С в облаке

👨‍💻 Что за компания

GUDDA — это сеть ломбардов, магазинов электроники и ювелирных изделий. У компании есть филиалы в разных городах России, например Ростове-на-Дону, Азове, Батайске, Каменск-Шахтинске, Новочеркасске, Таганроге и Шахтах. GUDDA дает краткосрочные займы под залог, покупает и продает украшения, гаджеты и технику.

🕵️ Какая была задача

IT-инфраструктура GUDDA изначально строилась по подходу cloud native: часть инфраструктуры разместили в частном контуре, а в облаке — системы, нагрузка на которые возрастала по ходу развития бизнеса.

Компания хотела нарастить мощности для баз 1С, SQL-серверов и системы резервного копирования, поэтому решила реализовать мультиоблачную стратегию. Для этого GUDDA начала искать еще одного облачного провайдера.

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

👨‍🔧 Как ее решили

GUDDA в течение месяца тестировала сервисы Cloud.ru, подбирала оптимальные конфигурации процессоров и накопителей. Менеджер со стороны провайдера всегда была на связи и быстро направляла к нужным техническим специалистам, если появлялись вопросы по работе сервисов или настройке инфраструктуры.

К концу теста компания попробовала все варианты и четко знала, что реализует и сколько это будет стоить. В итоге клиент выбрал виртуальный ЦОД с высокочастотными процессорами 3,5 ГГц. 

Для миграции мы предоставили GUDDA выделенный канал с гарантированной средней скоростью 500 МБ/с — это позволило быстро перенести данные в облако. Компания получила готовую облачную инфраструктуру, в которой меньше чем за час развернула и настроила нужные виртуальные машины.

📈 Что в результате

Инфраструктура в облаке Cloud.ru работает без сбоев, а команда GUDDA может масштабировать мощности через личный кабинет, не обращаясь в поддержку.

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

GUDDA планирует перенести в облако и другие системы, включая базы 1С для круглосуточных точек, организовать катастрофоустойчивую инфраструктуру с использованием резервного ЦОД.

Теги:
Всего голосов 2: ↑0 и ↓2-2
Комментарии0

Привет, приятно когда kui увеличивается, даже если увеличился совсем чуть-чуть. Добавил команду helm uninstall.

helm uninstall
helm uninstall

Творите, выдумывайте, пробуйте!)

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

Премьера года: знакомьтесь с DataForge!

Вебинар — 16 декабря, 12:00

Друзья, делюсь новостью, которой горжусь: коллеги запускают премьерный вебинар и впервые подробно покажут DataForge — новую российскую self-service платформу для централизованного управления аналитическими данными.

Я внимательно следила за развитием этого продукта и на некоторых этапах принимала участие в обсуждениях — особенно за те функции, которые лично для меня, как аналитика, принципиально важны:
— быстрый сбор и систематизация витрин
— возможность видеть и настраивать бизнес-логику
— единый подход к расчётам для всех систем без бесконечного ручного труда в Excel

DataForge — это инструмент, который сам собирает и поддерживает Data Mart слой для любых связанных систем. Особенно актуален для тех, кто строит витрины на ClickHouse: автоматическая генерация витрин, согласованность расчётов для всех потребителей данных — и всё это без лишних доработок со стороны разработчиков.

О чём расскажут на вебинаре:

  • Какие задачи решает DataForge и как ускоряет работу всех подключённых систем, включая BI

  • Как устроена структура продукта: его место в архитектуре и ключевые компоненты

  • Подробно покажем семантический слой: реестры показателей, измерений, единая бизнес-логика

  • Как работает автоматическая генерация SQL и публикация витрин в базе

  • Как DataForge обеспечивает согласованность метрик и прозрачность данных в любых BI-инструментах

  • Как платформа автоматически транслирует изменения в бизнес-логике во все связанные системы

Спикеры:
Технический директор и владелец продукта DataForge

Формат:
Онлайн, 1 час живого диалога с экспертами, включая демонстрацию интерфейса и ключевых возможностей платформы

Участие бесплатное!

Регистрация по ссылке

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

Слои валидации

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

Валидация на клиенте (если он есть)

Сюда входит формат данных, обязательность полей и так далее. Чуть сложнее, когда надо проверять, например, уникальность имени пользователя или емейла, в этом случае придется ждать отправки или делать запросы на бекенд во время заполнения. Главное что надо знать про эту валидацию, то что она вспомогательная. Клиент всегда можно обойти и сделать запрос напрямую. Дублирование как ни крути, хотя и важно для UX.

Структурная валидация

Это валидация, которая, обычно, происходит на уровне самого фреймворка или в самом начале цикла обработки запроса. Для этого данные прогоняются через валидаторы json схемы, которая в идеале генерируется из openapi спеки. В самых деревянных случаях ручками (так делать не надо). Что важно понимать, это не доменная валидация (бизнес правила). Да тут можно проверить формат, наличие/отсутствие, но нельзя и не правильно пытаться проверять уникальность, выполнение каких-то условий, например количества денег на счету и тому подобное.

Кстати с точки зрения кодов ответа, на этом уровне несовпадение со схемой воспринимается не как ошибка валидации, а как неверный запрос с неверной структурой, а это код ответа 400.

Доменная валидация

Это уже уровень бизнес правил. Такая валидация включает в себя любые правила, которым должны соответствовать данные с точки зрения бизнес-логики приложения. Уникальность email, баланс на счету, ограничения переходов - все это относится к доменному слою, и проверяется глубже, после прохождения проверки структуры. Во фреймворках это слой, который часто реализуется внутри моделей (если они есть). В любом случае такие валидации должны быть вынесены в какой-то свой слой, который можно переиспользовать для разных точек входа, асинхронной обработки и т.п.

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

В случае провала такой валидации, в api принято возвращать код 422

Валидация на уровне базы данных

Все предыдущие уровни не могут дать 100% гарантий, особенно учитывая, что данные в базе обновляются далеко не только по запросам снаружи. Поэтому есть вещи, которые обязательно делать на уровне базы данных. Сюда относятся уникальные индексы, внешние ключи (если делаете их), nullable, ограничение по длине и т.д. Технически многие базы данных позволяют писать кастомные валидации, которые соблазнительно использовать как доменную валидацию. Не надо этого делать :)

Проверка корректности данных

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

Подобные проверки делают в первую очередь на клиенте (и на этом можно было бы остановиться). Внутри бека их располагают в слое форм (есть далеко не во всех фреймворках), либо некоторые фреймворки типа rails для простоты пихают такой валидатор в модели, хотя семантически это неверно.

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

Теги:
Всего голосов 5: ↑4 и ↓1+3
Комментарии0

Где учиться кибербезопасности?

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

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

Защита информации. Шифрование, резервное копирование и защита от утечек данных.

Информационная безопасность. Обеспечение безопасности корпоративных сервисов, разработка и внедрение политик безопасности.

Анализ вредоносных программ. Анализ вредоносного ПО (вирусы, трояны, программы-вымогатели) и разработка защиты.

Кибербезопасность. Общее направление: защищаем сети, системы и приложения от атак.

Системное администрирование. Администрирование серверов, сетей, IT-инфраструктуры, настройка прав и обеспечение стабильности работы систем.

Мониторинг сетей. Мониторинг сетевой активности, выявление аномалий и угроз, настройка систем обнаружения вторжений и анализ трафика.

→ Еще больше полезных курсов на нашей витрине

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

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

Прошли аттестацию высшего уровня защиты данных УЗ-1 🛡

Официально подтвердили максимальный уровень защищенности нашей инфраструктуры.

Теперь вы можете размещать медицинские системы и работать с любыми специальными категориями данных (здоровье, биометрия).

➖ Локации: Москва, Санкт-Петербург, Новосибирск
➖ Защита: аппаратные межсетевые экраны, IDS/IPS, сканирование уязвимостей, контроль целостности среды виртуализации

Ссылка на документы →

Теги:
Всего голосов 11: ↑9 и ↓2+11
Комментарии5

Демонстрационный атлас Luxms BI: лучшие практики в одном месте

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

Атлас содержит более 40 демонстрационных дэшбордов, каждый из которых показывает конкретную функцию Luxms BI: от стилизации таблиц и условий форматирования до использования write-back, LPE-выражений, расширенного расчетного функционала и многого другого.

Каждый дэшборд – это компактный «мини-кейc». Справа – готовая визуализация, слева – объяснение, из чего она состоит и как настроена. Вы сразу понимаете механику, видите конечный результат и можете повторить его у себя в проекте.

Демоатлас Luxms BI
Демоатлас Luxms BI

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

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

Готовые решения, собранные в одном месте, делают работу с платформой намного проще, атлас выполняет роль и некого справочника лучших практик, и источника быстрых находок для разработчиков, аналитиков, или тех, кто только начинает знакомство с Luxms BI.

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

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

Обходим механизмы цензуры больших языковых моделей с помощью Heretic. Разбираемся, что это вместе с коллегами из лаборатории искусственного интеллекта «Криптонита».

У DeepSeek, Gemma, Qwen и других больших языковых моделей (LLM) есть встроенные механизмы цензуры. Они блокируют генерацию потенциально опасных сведений, но в то же время — мешают использовать эти модели по максимуму.

Математик и программист Филипп Эмануэль Вайдманн (Philipp Emanuel Weidmann, aka p-e-w) создал инструмент Heretic для обхода встроенных механизмов цензурирования.

Heretic распространяется с открытым исходным кодом и работает в полностью автоматическом режиме. Он вычисляет компоненты цензурирования путём сравнения результатов активации модели на «опасных» и «безопасных» запросах.

По этой разнице он обнаруживает во внутренних представлениях модели направление отказа (refusal direction), приводящее к запрету на генерацию информации.

Затем Heretic использует технику направленной абляции (directional ablation) для снятия встроенных ограничений путём точечных изменений весов модели.

С помощью фреймворка Optuna Heretic подбирает «щадящие» параметры абляции, чтобы минимизировать количество отказов, но при этом не испортить модель. Проверяется результат через вычисление степени расхождения с исходной моделью (KL-дивергенции).

С мощной видеокартой уровня RTX 3090 обработка модели размером 8 миллиардов параметров занимает около 45 минут. На выходе пользователь получает децензурированную версию модели.

Отметим, что Heretic — инструмент для разработчиков и исследователей. Его нельзя использовать для обхода фильтров уже развёрнутых и доступных онлайн моделей (ChatGPT, Grok и др.). Зато с помощью Heretic можно создать свою локальную модель (почти) без цензуры на базе какой-то открытой модели.

Теги:
Всего голосов 3: ↑3 и ↓0+4
Комментарии3

Зачем становиться IT-ментором и что на самом деле стоит за этим?

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

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

Если любите IT, хотите развиваться и задумываетесь о роли наставника — эта статья даст полезный взгляд «изнутри» и вдохновит на новые шаги в карьере.

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Вывести обсуждения за пределы чатов? Миссия выполнима!

4 декабря в Москве мы провели первый CIO Padel Cup – событие, на котором дедлайны и баги наконец уступили место драйву, а полезный нетворкинг рождался прямо на корте.

Это был день чистой энергии: азартные игры, живые обсуждения трендовых ИТ-тем и искреннее общение с коллегами в неформальной атмосфере. Всё, как и задумывали!

🔥 Спасибо нашим партнерам, Битрикс24 и MONS, за то, что поддержали эту спортивную авантюру – всё прошло отлично. И, конечно, каждому участнику за ваш спортивный дух, активность и открытость к честному диалогу!

Убедились на практике – лучшие решения и новые контакты действительно создаются в движении. И мы это обязательно повторим👍 Следите за анонсами – команда K-Team уже готовит новые форматы на 2026 год, чтобы совместить полезное с приятным и круто провести время вместе!

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

А кто в IT отрасли отвечает за одобрение решений типа ERP или Управление предприятием, холдингом?

Почему по умолчанию считается, что любой выпущенный любым вендором продукт из вышеуказанной линейки - это БИЗНЕС-ПОЛЕЗНЫЙ продукт, которым можно безопасно для бизнеса предприятия или холдинга пользоваться?

"Одобрено и куплено клиентом" - так себе критерий БИЗНЕС-ПОЛЕЗНОСТИ?

Например, никто в строительной отрасли или в медицине, не сможет запустить "проект" только по желанию клиента. Строить дом, который не выдержит нагрузок и "сложится" без соответствия сопромату и строительным нормативам/технологиям, или сделать операцию, по желанию клиента, без одобрения врача и соответствия медицинским рекомендациям/технологиям НЕЛЬЗЯ, какие бы бумаги не подписал клиент и как бы он не просил сделать так, как ему хочется! И это знают и принимают обе стороны (Клиент и Поставщик услуг)! И поэтому очень строгие допуски в строительную и медицинскую отрасли!

Почему в IT отрасли так МОЖНО!? Почему соответствие IT требованиям (безопасность данных, отсутствие багов и т.п.) - это достаточное условие для одобрения БИЗНЕС-ПОЛЕЗНОСТИ IT продукта! А как же соответствие прикладным БИЗНЕС регламентам/технологиям?

Кто сказал, что, например, 1С:ERP - это БИЗНЕС ПОЛЕЗНЫЙ продукт! Кто те эксперты и на соответствие каким прикладным бизнес-стандартам/технологиям они проверили соответствие и с какими результатами одобрили проверяемый продукт? Где это можно посмотреть? Хоть кто-то его возможности в прикладных аспектах проверял?

Почему результатов "автоматизация хаоса" недопустимо много и за это никто в IT отрасли не несет ответственности!? По аналогии: дом рухнул, клиент в результате операции заболел еще сильнее/умер - виноват сам клиент!? Не застройщик, не врач!? Этого не возможно представить!? А в IT отрасли - это НОРМА! Почему в IT отрасли считается, что в негативных результатах автоматизации хаоса однозначно виноват клиент, а не продукт IT вендора, который оказывается В ПРИНИПЕ не способен был решить тех проблем клиента, которые обещал решить? Чего только вендоры не обещают рекламируя свой продукт в стиле "наш продукт умеет все и решит все проблемы предприятия"! Но кто проверяет, правдивость этих утверждений? Кто проверяет, способен ли в ПРИНЦИПЕ продукт решить такие-то проблемы предприятий? Кто наказывает вендора за некорректную рекламу (за заведомую ложь)?

Мне кажется, на эту тему стоит задуматься?

PS Может существует какая-то процедура валидации (опытное внедрение в рамках разработки) перед выпуском продукта на рынок?

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

Совет по Joomla: использовать выключенное состояние для кнопок в списках элементов админки - listCheck().

Мы добавляем в тулбар панели администратора Joomla некую кнопку, которая что-то делает со списком id выделенных элементов и ajax-запросом отсылаем их в свой плагин. Но нам надо предупредить нажатия на кнопку в тех случаях, когда ни один элемент не был выбран. Для этого можно написать свою проверку на js. А можно воспользоваться встроенной в Joomla.

Добавить кнопку в тулбар Joomla 6.

use Joomla\CMS\Toolbar\Button\BasicButton;
use Joomla\CMS\Language\Text;

// ниже по коду, где-нибудь в плагине на onAfterDispatch()
// Предварительно проверяем в каком компоненте мы находимся по option из $app->getInput()
// пример из плагина, поэтому $this->getApplication()
$app = $this->getApplication();
// Берём текущий тулбар
$toolbar = $app->getDocument()->getToolbar('toolbar');

// Создаём кнопку
$button = (new BasicButton('send-to-indexnow'))
    ->text(Text::_('PLG_WTINDEXNOWSWJPROJECTS_BUTTON_LABEL'))
    ->icon('fa-solid fa-arrow-up-right-dots')
    ->onclick("window.wtindexnowswjprojects()");

// Добавляем кнопку в тулбар
$toolbar->appendButton($button);

Заблокировать кнопку тулбара Joomla, если не выбраны элементы списка.

Теперь нам надо проверить находимся ли мы в списке. Делаем это по view из $app->getInput().

if(in_array($app->getApplication()->getInput()->get('view'),
            ['categories','documentation','projects','versions'])
  ) {
        $button->listCheck(true);
}

И если мы в списке - используем метод $button->listCheck(true), который сделает проверку за нас. Если ни один элемент не выбран - кнопка в тулбаре Joomla будет заблокирована и JS-обработчик не будет вызван. Этот метод есть у всех классов кнопок, наследующих класс \Joomla\CMS\Toolbar\ToolbarButton.

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