Обновить

Разработка

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

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

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

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

AI-лоботомия отменяется

Представьте, что вы научили LLM всему, а потом поняли, что "всему" включает и рецепты сибирской язвы. Что делать? Простая фильтрация данных — дорого, ненадёжно и оставляет дыры. Пост-тренировочные методы "разучивания" (unlearning) слетают от простого fine-tuning. Новая статья от исследователей из Anthropic и Imperial College London предлагает элегантное решение — Selective GradienT Masking (SGTM).

Технические детали. Идея SGTM — не удалять знания, а локализовать их. Внутри модели создаётся "песочница" для нежелательных знаний (например, о биологии, как прокси для CBRN-угроз).

Как это работает:

  1. Разделение параметров: Нейроны MLP и головы внимания в каждом блоке трансформера делятся на две группы: 0_retain (для обычных знаний) и 0_forget (для опасных).

  2. Маскировка градиентов: Во время обучения, когда модель видит "опасный" пример, градиенты для 0_retain обнуляются. Обновляются только "опасные" параметры 0_forget. И наоборот, на обычных данных замораживаются 0_forget.

  3. Удаление: После обучения достаточно просто обнулить веса 0_forget. Опасные знания исчезают, а основная модель остаётся нетронутой и функциональной.

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

Практическое применение. Основной кейс — это удаление "dual-use" возможностей из моделей. Например, можно обучить модель на всей Википедии, а затем хирургически удалить только знания в области органической химии и вирусологии, оставив при этом общие научные знания. Это позволяет создавать мощные, но безопасные модели для широкого круга задач, не опасаясь, что их используют для создания оружия.

Насколько это эффективно? На мой взгляд, это один из самых перспективных подходов к AI Safety на сегодня.

• Плюсы: Это pre-training метод, что делает его фундаментально более надёжным. В статье показано, что SGTM в 7 раз устойчивее к попыткам восстановить знания через fine-tuning, чем другие методы. Это не "костыль", а часть архитектуры.

• Минусы: За всё надо платить. Метод добавляет около 6% вычислительной нагрузки на обучение. Кроме того, нужно заранее определить, какие именно знания мы хотим изолировать.

Вердикт: SGTM — это не панацея, но огромный шаг вперёд. Это переход от "лоботомии" модели к точечной "нейрохирургии". Для серьёзных систем, где цена ошибки высока, 6% оверхеда — смешная плата за такой уровень контроля. Скорее всего, скоро увидим эту технологию в основе всех крупных моделей от Anthropic, Google и других.

Исследование

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

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

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

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

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

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

Я целую неделю отлаживал свой блок GPU, в котором с мая месяца сделал новый подблок, которого не было у AMD, у которого Самсунг лицензировал технологию RDNA. Моим единственным желанием на Новый Год было чтобы прошел тест. Так как баг проявлялся только на подсистеме, тест которой шел 6 часов в софтвере и 8 часов на эмуляторе, после каждого изменения нужно было ждать это время. И вот я проснулся 1 января и тест прошел. Это значит, что с высокой вероятностью этот новый подблок моего дизайна войдет в телефоны Самсунг 2028 года. Все, сегодня можно не работать, а идти в лес или редактировать статью, которую у меня приняли на крутую конференцию. С Новым Годом!

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

Ссылка на массив переменной длины

Пусть в столбце A лежит массив переменной длины (например, результат работы FILTER или IMPORTRANGE в Google Sheets). В столбце B мы хотим написать формулу массива, например, удвоить все значения столбца A.

Можно применить формулу ко всему столбцу A:

=ARRAYFORMULA(2*A2:A)

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

Есть такое решение:

=ARRAYFORMULA(2*OFFSET(A2;0;0;COUNTA(A2:A)))

  • Функция COUNTA считает количество непустых значений в столбце.

  • Функция OFFSET возвращает диапазон нужного размера, начиная с указанной ячейки.

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

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

Обновлена открытая база по 500+ ИБ-сервисам Awesome OSINT For Everything, включая:

  • базовую сетевую разведку, чтобы собрать «скелет» цели — домены, почты, имена, поддомены, URL;

  • метапоисковики и поиск по специфическим типам данных — кэши, PGP-ключи, публичные бакеты, прямые ссылки и подобное;

  • кастомные поисковые движки;

  • поиск и контроль утечек любых данных — понять, светились ли email/телефон/учетки в открытых базах, найти следы компрометации;

  • просмотр истории владения доменом. Поиск всех доменов, связанных с конкретным человеком;

  • проверка URL на вредоносы, пробив репутации ресурса;

  • поиск по открытым датасетам, реестрам или санкционным спискам;

  • детальный поиск по кусочкам кода в любом репозитории и в сети;

  • гео-поиск с визуализацией на карте;

  • радио/сканеры и Wi-Fi-картография — можно пробить человека в сети и по использованию оборудования;

  • распознавание и анализ автомобильного номера, VIN-номера, а также передвижений машин;

  • поиск следов криптоплатежей из открытых источников;

  • поиск по базам судов, реестрам, зарплатным базам, FOIA-ресурсам, публичным архивы на предмет утечек.

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

2026. Год, когда ваша Loss-функция наконец сойдется. 🎆

Друзья, коллеги, любители данных и градиентного спуска!

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

2025 был годом больших LLM, диффузий и Agentic AI. А что будет ядром 2026? Моя гипотеза — возврат к фундаменту. К математике, которая делает магию машинного обучения возможной.

Вот 3 математических концепции, которые станут вашими лучшими друзьями в новом году:

  1. Теория информации.
    Энтропия Шеннона говорит нам о степени неопределенности:

    H(X)=−i∑​p(xi​)logp(xi​)

А KL-дивергенция измеряет "расстояние" между распределениями — ключ к пониманию distillation's, RLHF и многого другого:

DKL​(P∣∣Q)=i∑​P(i)logP(i)​/Q(i)

2.Дифференциальная геометрия и многообразия.

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

3.Байесовские методы и Uncertainty Quantification.Нас интересует не просто предсказание yy, а апостериорное распределение:

 P(θ∣D)=P(D)P(D∣θ)/P(θ)​

Где θ — параметры модели, а DD — данные. 2026 — год, когда model.predict() будет возвращать не число, а (mean, variance).

А теперь — главное. Как сделать 2026 годом вашего прорыва? Формула года:

 2026=(Цель+Данные)×(Скорость_Обучения⋅Момент)+Регуляризация_Отдых

Где:

  • Регуляризация_Отдых — это не dropout, а сознательное "зануление" для перезарядки: output = 0 if (burnout_risk) else input.

  • Скорость_Обучения — умение учиться быстрее, а не просто больше.

  • Момент — тот самый нетворкинг, комьюнити и поддержка.

И вот ваш подарок от меня на Новый год — маленький "мозговой тизер" (ответ в комментариях!):

Для модели линейной регрессии y∼N(w^Tx,β^−1) с априорным распределением w∼N(0,α^−1) найдите вид апостериорного распределения p(w∣X,Y), выведите формулы для его параметров и покажите, как его максимум (MAP-оценка) связан с ridge-регрессией с коэффициентом регуляризации λ=α/β/

Подсказка: вспомните теорему Байеса: апостериорное распределение пропорционально произведению правдоподобия и априорного распределения.

Давайте встретим 2026 год не как пассивные наблюдатели, а как архитекторы будущего.

С Новым 2026 годом! Пусть ваши градиенты не затухают, обобщающая способность растет, а оптимизатор всегда находит глобальный минимум. 🥂

#MachineLearning #Математика #DataScience #ИИ #2026 #НовыйГод #КарьераВAI #Наука #Формулы

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

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

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

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

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

Новогодняя аномалия в данных мониторинга.

С Новым Годом!
С Новым Годом!

Воспроизвести достаточно просто

  • Скачать и установить Dimension-UI.

  • Развернуть локально PostgreSQL.

  • Запустить в Dimension-UI мониторинг данных PostgreSQL с помощью запроса с интервалом 3 сек.

WITH params AS (
    SELECT 
        15 AS total_frames,
        20 AS canvas_height,
        3  AS frame_duration_sec
),
animation_state AS (
    SELECT 
        (CAST(EXTRACT(EPOCH FROM CURRENT_TIMESTAMP) AS INTEGER) / frame_duration_sec) % total_frames AS frame_idx
    FROM params
),
tree_definition AS (
    SELECT 
        frame_id, 
        y_pos,
        CASE
            -- ═══════════════════════════════════════
            -- ЗВЕЗДА на верхушке
            -- ═══════════════════════════════════════
            WHEN y_pos = 20 AND frame_id = 7 THEN '*'
            
            -- ═══════════════════════════════════════
            -- ВЕРХУШКА елки (острая)
            -- ═══════════════════════════════════════
            WHEN y_pos = 19 AND frame_id = 7 THEN 'G'
            
            -- ═══════════════════════════════════════
            -- ЯРУС 1 (y=16-18) — расширяется книзу
            -- ═══════════════════════════════════════
            WHEN y_pos = 18 AND frame_id BETWEEN 6 AND 8 THEN 'G'
            WHEN y_pos = 17 AND frame_id BETWEEN 5 AND 9 THEN 'G'
            WHEN y_pos = 16 AND frame_id BETWEEN 4 AND 10 THEN 'G'  -- широкий низ яруса
            
            -- Сужение перед ярусом 2
            WHEN y_pos = 15 AND frame_id BETWEEN 5 AND 9 THEN 'G'
            
            -- ═══════════════════════════════════════
            -- ЯРУС 2 (y=12-14)
            -- ═══════════════════════════════════════
            WHEN y_pos = 14 AND frame_id BETWEEN 4 AND 10 THEN 'G'
            WHEN y_pos = 13 AND frame_id BETWEEN 3 AND 11 THEN 'G'
            WHEN y_pos = 12 AND frame_id BETWEEN 2 AND 12 THEN 'G'  -- широкий низ яруса
            
            -- Сужение перед ярусом 3
            WHEN y_pos = 11 AND frame_id BETWEEN 4 AND 10 THEN 'G'
            
            -- ═══════════════════════════════════════
            -- ЯРУС 3 (y=8-10)
            -- ═══════════════════════════════════════
            WHEN y_pos = 10 AND frame_id BETWEEN 3 AND 11 THEN 'G'
            WHEN y_pos = 9  AND frame_id BETWEEN 2 AND 12 THEN 'G'
            WHEN y_pos = 8  AND frame_id BETWEEN 1 AND 13 THEN 'G'  -- широкий низ яруса
            
            -- Сужение перед ярусом 4
            WHEN y_pos = 7 AND frame_id BETWEEN 3 AND 11 THEN 'G'
            
            -- ═══════════════════════════════════════
            -- ЯРУС 4 — нижний, самый широкий (y=4-6)
            -- ═══════════════════════════════════════
            WHEN y_pos = 6 AND frame_id BETWEEN 2 AND 12 THEN 'G'
            WHEN y_pos = 5 AND frame_id BETWEEN 1 AND 13 THEN 'G'
            WHEN y_pos = 4 AND frame_id BETWEEN 0 AND 14 THEN 'G'  -- во всю ширину!
            
            -- ═══════════════════════════════════════
            -- СТВОЛ (y=1-3)
            -- ═══════════════════════════════════════
            WHEN y_pos BETWEEN 1 AND 3 AND frame_id BETWEEN 6 AND 8 THEN 'T'
            
            -- Всё остальное — фон
            ELSE 'S'
        END AS pixel_char
    FROM generate_series(0, 14) AS frame(frame_id)
    CROSS JOIN generate_series(1, 20) AS y(y_pos)
),
pixel_data AS (
    SELECT td.*
    FROM tree_definition td
    JOIN animation_state ast ON td.frame_id = ast.frame_idx
),
layers_logic AS (
    SELECT 
        y_pos,
        pixel_char,
        MAX(CASE WHEN pixel_char IN ('T', 'G', '*') THEN y_pos ELSE 0 END) OVER () as max_obj_height
    FROM pixel_data
)
SELECT 
    CURRENT_TIMESTAMP as dt,
    CASE 
        WHEN pixel_char = 'T' THEN '4_Trunk'
        WHEN pixel_char = 'G' THEN '3_Tree'
        WHEN pixel_char = '*' THEN '2_Star'
        WHEN pixel_char = 'S' THEN 
            CASE WHEN y_pos > max_obj_height 
    

p.s. Данные по запросу любезно предоставлены Claude Opus 4.5.

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

Всем привет!

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

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

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

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

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

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

  • Микрокомпьютер с 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

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

Lex Kravetski в ФБ написал оду Микрософт Ворду, с которым у меня плохие отношения еще с конца 1980-х, когда он был под DOS-ом в графическом режиме. Причем тогда Ворд был еще более-менее, хотя бОльшая часть его функциональности лично мне не была нужна, для форматированных текстов хватало Лексикона от Eugene Veselov из ВЦ Академии Наук, затем уехавшим в Микрософт и ныне ставшим очень политизированным.

Главные проблемы с Вордом для меня начались после 2000 года, когда у него стало прыгать форматирование невпопад, особенно в текстах с комбинацией списков, таблиц и картинок. Lex такую проблему упоминает с позиции своих оппонентов: "блин, даже пробел в нём как-то странно работает, по коей причине даже простое форматирование сделать тяжело."

Из-за этого прыгания я сейчас для редактирования форматированных текстов как правило использую простой текстовый редактор joe (который имитирует редактор в TurboC 1988 года, но с квадратными блоками), а в нем - .md Markdown, который потом конвертирую в .pdf с помощью программы pandoc.

Также использую Google Doc, в нем форматирование не прыгает, как в Microsoft Word и в Libre Office, а сделано по человечески.

Раньше еще писал в текстовом редакторе на HTML, но Markdown удобнее, так как читабильнее в голом виде. Если вы еще не выучили Markdown и мучаетесь Вордом - просто нагуглите его в википедии, он учится за 15 минут.

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

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

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

2025: топ-7 фичей, пицца и прочие достижения

2025 стал для нас годом перемен, открытий и испытаний (куда без этого в современном мире в эпоху AI). Он запомнится новыми фичами, ребрендингом, выставками и митапами от Москвы до Новосибирска.

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

Toп-7 фичей Veai по мнению наших пользователей

  1. Генерация тестов по исполнению (статья на Хабре "Не LLM едиными: генерируем юнит-тесты из реального исполнения на лету")

  2. Агентский режим (статья на Хабре "Как мы сделали AI-агента и пользуемся им на практике")

  3. Пользовательские сценарии (Workflows)

  4. Правила (Rules)

  5. Анализ тестов на моргание (Flaky tests)

  6. Увеличение тестового покрытия

  7. Исправление падающих автотестов из TMS

2025

  • 4 больших релиза, много EAP и nightly-сборок

  • поддержка OpenIDE, GigaIDE, PyCharm, Rider, GoLand, PhpStorm и WebStorm

  • участие в JPoint, Joker, Heisenbug, CodeFest и митапах в Москве, Санкт-Петербурге, Владимире и Новосибирске

  • переезд в новый офис

  • ребрендинг

  • съели с коллегами 1040 пицц в офисе по пятницам :)

Мы уже работаем над следующим релизом и ждём возможности показать вам новые фичи.

С наступающим Новым годом — и спасибо, что вы с нами!

Команда Veai 🎄

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

Обновлён сборник твикеров, кастомайзеров и проверенных системных решений для Windows под названием System Tools. База данных проект включает ссылки на популярные и полезные утилиты для очистки, твика, удалённого доступа, мониторинга, виртуальных машин, менеджеров дисков, периферии и аудио в системе.

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

🎄Уважаемые Хабровцы, коллеги, друзья и партнеры! 🎉

В последние рабочие дни уходящего 2025 года команда SSP SOFT поздравляет вас с наступающим Новым 2026 годом и Рождеством!
Самое время подвести итоги, ощутить атмосферу праздника и с уверенностью посмотреть вперед.

🚀 Нашим заказчикам
Пусть 2026 год принесет устойчивый рост, новые рынки и технологические решения, которые действительно работают. Желаем, чтобы созданные вместе с SSP SOFT продукты были надежными, масштабируемыми и помогали бизнесу расти и развиваться дальше. Мы ценим доверие и рады быть вашим технологическим партнером 📈

💻 Компаниям, работающим с нами в формате аутсорсинга и Workforce-as-a-Service
Готовы направить к вам сильные, мотивированные команды и специалистов, которые быстро встраиваются в процессы, понимают задачи бизнеса и усиливают его изнутри. Пусть люди остаются вашим главным конкурентным преимуществом 💪

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

🏢 Немного о нас
В 2025 году для SSP SOFT мы переехали в новый офис в Москве — в самом центре города, рядом с Красной площадью — чтобы активнее развивать сотрудничество с федеральными компаниями.
📍Весь год у нас было много вакансий, в том числе в этот новый офис. Подробности о вакансиях на нашей странице ХХ.ру

👏 Нашей команде
Отдельная благодарность всем сотрудникам SSP SOFT за профессионализм, вовлеченность и ответственность. Пусть 2026 год принесет вам интересные задачи, развитие, баланс между работой и личной жизнью и уверенность в завтрашнем дне.
Мы искренне рады работать вместе с вами 🤝 

С нами — как дома!

🎄 С наилучшими пожеланиями в Новом году,
Команда SSP SOFT
🌟ssp-soft.com 🌟

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

Проверка на уникальность

Пусть есть список однотипных объектов: товаров, заказов или сотрудников. У каждого элемента есть идентификатор. Как предотвратить ситуацию, когда при заполнении таблицы кто-нибудь добавит элемент дважды? Другими словами, как гарантировать уникальность идентификаторов?

В sql для этого используется PRIMARY KEY или UNIQUE, в электронных таблицах встроенных инструментов нет. Как вариант, можно реализовать подсветку дубликатов с помощью условного форматирования и функции COUNTIF:

Формат → Условное форматирование
Применить к диапазону: A2:A
Правила форматирования → Ваша формула =AND(LEN(A2);COUNTIF(A$2:A;"="&A2)>1)
Цвет фона: красный

Как работает формула:

  • LEN(A2) проверяет, что ячейка заполнена;

  • COUNTIF(A$2:A;"="&A2) считает количество ячеек, совпадающих с текущей. Если оно больше одного, срабатывает условное форматирование.

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

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