惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
S
Security Affairs
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
Microsoft Security Blog
Microsoft Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
美团技术团队
月光博客
月光博客
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
有赞技术团队
有赞技术团队
博客园 - 叶小钗
Hugging Face - Blog
Hugging Face - Blog
Microsoft Azure Blog
Microsoft Azure Blog
V
V2EX
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
腾讯CDC
C
Cisco Blogs
T
Tor Project blog
The Hacker News
The Hacker News
雷峰网
雷峰网
MyScale Blog
MyScale Blog
博客园 - 司徒正美
AWS News Blog
AWS News Blog
GbyAI
GbyAI
Y
Y Combinator Blog
D
DataBreaches.Net
Simon Willison's Weblog
Simon Willison's Weblog
S
Securelist
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
T
Tenable Blog
L
LangChain Blog
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium
The Cloudflare Blog
A
About on SuperTechFans
IT之家
IT之家
F
Fortinet All Blogs
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
NISL@THU
NISL@THU
爱范儿
爱范儿
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
W
WeLiveSecurity
A
Arctic Wolf
I
Intezer
Application and Cybersecurity Blog
Application and Cybersecurity Blog

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Как работают системы антиплагиата в 2026 году: шинглы, векторы и ИИ-детекция
Albert_Weske · 2026-05-13 · via Все публикации подряд на Хабре

Уровень сложностиПростой

Время на прочтение10 мин

Охват и читатели594

Обзор

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

В предисловии разочарованно скажу одну вещь. Инновации сделали из многих старых систем для вузов дорогостоящий генератор красивых, но бесполезных отчётов. Для этого хватило простого GPT-4o и его аналогов. Старые системы просто не видят нейросетевой текст, не распознают его.

Для этой статьи я проанализировал архитектуру нескольких ключевых систем и поговорил с разработчиком-архитектором, который строил их изнутри.

Гигиенический минимум — как проверить систему на профпригодность

Сперва закроем вопрос с архаикой.

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

Замена кириллических букв на латиницу. Человек берёт визуально схожие символы — например, кириллическую «а» и латинская «a». Технически это разные символы с разными кодами в Unicode, и когда-то системы этого не замечали. 

Сегодня любая вменяемая система при обработке текста первым шагом проводит нормализацию — принудительно приводит все подобные символы к единому регистру и алфавиту. 

Вставка невидимых символов. Человек пишет «белый» текст на белом фоне или вставляет символы нулевой ширины (zero-width space) между буквами. Всё выглядит нормально, но система получает мешанину вместо привычных слов и фраз.

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

Вставка работы как изображения в PDF. Старый трюк, который полагался на то, что машина не умеет читать картинки. Сегодня любая серьезная система по умолчанию прогоняет все PDF-файлы через модули оптического распознавания символов (OCR). Текст извлекается и анализируется так же, как и обычный.

Если «современная» система не справляется с такими проблемами — выбрасывайте на помойку. У разных современных сервисов есть разные проблемы. Даже тех, что объективно хороши. Я их критиковал, критикую и буду критиковать.

Но со всей критикой я могу точно сказать: на рынке полно программ, которые выполняют этот минимум. Система, которая спотыкается на таких трюках, не имеет права называться системой проверки.

Механика детекторов: шинглы против векторов

Технологии проверки, которые сегодня продают на рынке, делятся на два поколения. Разница между ними — не в процентах точности, а в подходе к проверке.

Метод 1: Хеширование шинглов — хорошо отсеивает копипасту

Это базовый алгоритм, на котором построены 90% массовых систем и практически все старые версии «Антиплагиата». Он был разработан для борьбы с одной конкретной задачей — дословным копированием текста.

Вот как это работает.

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

Шинглование. Система нарезает текст на равные, пересекающиеся фрагменты — шинглы. Обычно это цепочки из 5–7 слов. 

Пример: фраза «Анализ финансовых потоков показал значительный рост прибыли» после нормализации и с шагом шингла в 4 слова превратится в набор:

  • анализ финансовых потоков показал

  • финансовых потоков показал значительный

  • потоков показал значительный рост

  • показал значительный рост прибыли

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

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

Алгоритм работает прекрасно, но ломается на простом переписывании. Он хрупок. Сравнение шинглов работает по бинарному принципу: либо шингл совпал на 100%, либо не совпал. Малейшее изменение разрывает цепочку.

Вернёмся к нашему примеру. Достаточно студенту заменить два слова, и система ослепнет:

«Анализ финансовых потоков показал значительный рост прибыли» →
«Анализ финансовых операций показал значительный рост дохода».

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

Метод 2: Векторная семантика — смотрит на смысл слов

Здесь всё становится в разы сложнее. Алгоритмы строятся не на арифметике, а на высшей математике и статистическом анализ. В основе лежат большие языковые модели (NLP), которые понимают не слова, а контекст. 

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

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

Синонимы и близкие по значению концепты автоматически оказываются рядом. Вот упрощённый пример: векторы для слов «рост», «увеличение», «подъем» будут расположены в одном кластере. Векторы для «прибыли», «дохода», «выручки» — в другом.

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

Теперь посмотрим на тот же кейс обхода. Возьмём оригинал: «Анализ финансовых потоков показал значительный рост прибыли».

Попробуем сделать глубочайший рерайт: «Исследование денежных операций выявило существенное увеличение дохода фирмы».

Ни одного совпадающего слова. Шингловый алгоритм покажет 0% совпадений. 

А вот векторная система вычислит, что угол между векторами этих двух предложений близок к нулю (косинусная близость > 0.9), и выдаст предупреждение о заимствовании. 

Как итог, такая система ловит любой плагиат. Его становится невозможно замаскировать. 

Умный рерайт? Система вычисляет, что все смыслы работы те же, что у другой, и показывает — плагиат.

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

Каскадные переводы типа «русский → английский → французский → английский → русский»? Как и с рерайтом, слова в работе использованы другие, но смыслы те же.

Векторный поиск найдёт одинаковые идеи.

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

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

Чтобы избавиться от этой проблем, передовые системы настраивают. Так, к самой модели можно «прикрутить» всплывающие окна, где они покажут заимствованный фрагмент.

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

Но есть ещё одно ограничение — куда более важное и глобальное. О нём и поговорим.

Почему все не перешли на модели с векторной семантикой

Потому что модели с векторной семантикой дорогие. Даже очень.

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

  • Сам анализ тоже обходится недёшево. Одной только оперативной памяти требуются терабайты. Стоимость серверов с таким количеством оперативной памяти можете представить. 

Делать публичные сервисы с «векторным» антиплагиатом просто нерентабельно. Запускать же такое в каких-нибудь вузах — а зачем, когда есть старые, проверенные решения, которые обойдутся дешевле и за трату на которые не придётся оправдываться?

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

Как итог, векторные системы применяет только тяжелый энтерпрайз на своих серверах. Для них это целесообразно:

  • «Дорого? Ну, деньги есть, а вот если мы чужие интеллектуальные права нарушим, то влетим на суммы в сотни раз больше»

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

Для ВУЗов обе проблемы весомы. Рано или поздно положение дел изменится — но вряд ли мы увидим массовый переход на векторные системы в ближайшие годы.

Морфологический барьер. Почему западные модели спотыкаются о русский язык

На рынке существует миф о Turnitin как о неком «золотом стандарте», абсолютном мериле качества. 

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

Ключевое различие — разница в строениях языков. Английский и русский сильно отличаются друг от друга. 

Английский язык — аналитический. В нем строгий порядок слов (Subject-Verb-Object). Смысл предложения определяется в первую очередь позицией слова. Фразы Dog bites man и Man bites dog — две разные истории, хотя набор слов один и тот же. Нейросеть, обученная на миллиардах английских текстов, усваивает: позиция слова — критически важный признак.

Русский язык — синтетический. У нас свободный порядок слов. Смысловые связи выражаются не позицией, а через то, что в лингвистике называются «флексиями» — падежные окончания, склонения, спряжения.

Вот три предложения:

  • «Собака кусает человека».

  • «Человека кусает собака».

  • «Кусает собака человека».

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

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

Внутренняя математика фиксирует отклонение от «нормы». Эти отклонения оказываются для модели схожими с признаками, характерными для некачественного машинного перевода или ранних версий ИИ.

Как итог — огромное количество ложных срабатываний.

«Но ты же выше говорил, что векторная модель сравнивает смыслы!». Да. Проблема как раз в том, что система, которая подстроена под аналитический язык, намного хуже считает смыслы работы на синтетическом языке, и, как следствие, «собьётся».

Что интересно, при этом система, которая понимает синтетические языки, наверняка неплохо воспримет аналитический язык, разве что у неё «сломается» ИИ-детектор.

Это не гипотеза. Стэнфордское исследование (2023) показало, что AI-детекторы значительно чаще помечают как сгенерированные тексты студентов, для которых английский не является родным

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

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

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

Как итог: западные модели хороши — но у нас не сработают. NLP-модели — это высокоточный инструмент. Если откалибровать его на аналитическом строе языка, он будет давать систематическую погрешность при работе с синтетическим. 

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

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

Почему всё это не помогает понять, хорош ли сервис

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

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

Сами посудите. Вы читаете огромную статью, чтобы разобраться в нюансах. А маркетолог просто пишет: «Система антиплагиата с новейшими технологиями — AI-детекцией, семантическим анализом, кросс-языковым поиском». Что проще прочесть? Во что проще поверить?

Вопрос в том, как реализована каждая «фича». Никто ведь не говорит, каковы принципы проверки. Зато на шингловые модели легко накручивают разные не очень хорошие «дополнения».

Например, «семантический кросс-языковой анализ» оказывается простым «переводом на лету» и последующим шингловым сравнением. Никаких мультиязычных векторов.

AI-детектор может накидывать любой процент — но при этом его могут не проверять, и не фиксировать ложные срабатывания. А они должны документироваться.

Наконец, некоторые системы даже не показывают детальный путь заимствования. «Брат, это плагиат, мамой клянус, своровали текст».

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

В идеале машина должна:

  • указать все сплагиаченные элементы;

  • указать источник плагиата по конкретному элементу;

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

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

Только так можно понять, насколько хорошо работает антиплагиат. Любой иной подход означает, что вам придётся принять что-то на веру.

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

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

Вместо выводов — подготовка к аудиту

В следующей статье я прекращу теоретизировать и в лоб сравню трёх ключевых игроков на российском B2B-рынке: массового Антиплагиат, западного Turnitin и энтерпрайз-системы Руконтекст.

Сравнение будет идти не по рекламным слоганам, а по техническим критериям: 

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

  • технологиям, 

  • AI-детекции, 

  • прозрачности отчётов.

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

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