Обновить
256K+

Алгоритмы *

Все об алгоритмах

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

«Bad Apple!! Но это же traceroute! В продолжение моего поста о том, как заставить инструменты traceroute отображать произвольное содержимое, и вдохновлённый выходом на днях ещё одной кавер‑версии Bad Apple, я просто не мог не сделать это», — пояснил Йонас Шефер.

Используя функцию numgen из библиотеки nftables, мы можем изменять количество переходов каждый раз при генерации пакета ICMPv6. Функция numgen возвращает либо случайные числа, либо монотонный счетчик. С помощью счётчика мы можем легко настроить каждый переход так, чтобы он возвращал разный IPv6-адрес при генерации ответного пакета.

Для этого потребовалось ещё две вещи. Во-первых, необходимо отключить ограничение скорости ядра (по умолчанию 1/с) для исходящего трафика ICMPv6 с помощью команды sysctl net.ipv6.icmp.ratelimit=0, иначе всё закончится очень быстро. Вторая проблема заключается в том, что mtr обычно показывает несколько адресов для каждого узла, поскольку это указывает на использование нескольких разных путей для пакета, и это обычно полезная информация.

После всего этого я использовал ffmpeg для передискретизации видео до 8 кадров в секунду (что соответствует интервалу в 125 мс между кадрами) и экспорта уменьшенных (до 30x11 пикселей) отдельных кадров в файлы PNG. Затем я написал скрипт на Python для чтения файлов изображений и преобразования их в набор правил nftables для генерации соответствующих ответов ICMPv6. В результате получается чуть более мегабайта правил nftables, но это определённо того стоит.

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

У хабра нет способа поиска спамных комментариев.

Посмотрите на этот профиль: https://habr.com/ru/users/simonidis/comments/

Каждый комментарий этого пользователя написан нейросетью. В каждом комментарии ссылка на youtube видео.

По новым правилам хабра запрещён ИИ слоп. Но у хабра нет никаких алгоритмов поиска этого нейрослопа.

Хабр существует 20 лет. За 20 лет они не сделали простой скрипт, который бы находил такие подозрительные профили, где в каждом комментарии одинаковая ссылка.

Если я нашёл профиль, который распространяет спам, нет даже кнопки, чтобы пожаловаться на этот профиль.

Почему так?

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

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

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

MWS AI выпустила Cotype Pro 3, мультимодальную модель для агентских сценариев

MWS AI представила новую флагманскую модель линейки Cotype — Pro 3 (27 млрд параметров). Ранее в этом году вышла компактная версия — Light 3 (9 млрд параметров). Обе модели мультимодальные: работают с текстом и изображениями и ориентированы в первую очередь на построение многошаговых ИИ-агентов и мультиагентных систем.

Коротко о технических характеристиках:

  • Контекстное окно обеих моделей — 262 тысячи токенов (примерно 600 страниц текста, то есть весь пакет договоров по сделке или годовой отчёт с приложениями можно держать в памяти целиком).

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

  • Минимальное железо — видеокарта A100.

  • Поддерживается квантование и MTP (multi-token prediction, одновременное предсказание нескольких токенов) — для более высокой скорости генерации на менее мощном железе без потери качества.

  • Доступны отдельно или в составе MWS AI Agents Platform.

  • Подтверждена совместимость со всеми компонентами отечественных программно-аппаратных комплексов.

  • Обучение моделей семейства Cotype проводится на мощностях MWS Cloud.

Главная фишка моделей - стабильность в агентских сценариях и русском языке

Готовых бенчмарков под корпоративные агентские сценарии на русском рынке практически нет, поэтому в MWS AI собрали собственный — из 178 задач. Каждая задача помещает модель в одну из пяти рабочих ролей:

  • оператор поддержки — вопросы по услугам, подпискам и списаниям абонента;

  • консультант по тарифам — подбор и смена тарифа под фактическое потребление;

  • кадровый специалист — расчёт отпускных и больничных, работа с документами;

  • аналитик по компаниям — досье на юрлицо по ИНН: финансы, руководители, связи с другими организациями;

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

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

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

Результаты (полнота решения / воспроизводимость):

Cotype Pro 3: 92,2% / 79,1%
Cotype Light 3: 88,6% / 73,9%
Cotype Pro 2.6: 80,5% / 62,5%

Отдельно измеряли устойчивость генерации на русском (отсутствие случайных переключений на другой язык, повторов и искажений текста). Тест прогнали на корпусе почти в 304 тысячи слов, модель Pro 3 выдала 99,79% текста на русском без языкового дрейфа, Light 3 — 99,87%.

Заказ демо для бизнеса на сайте

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

Давненько ничего не писал здесь. В свободное время засел за работу, которую хотел взять в качестве дипломной, но не взял, так как тогда не был уверен в собственных силах. Если кратко, что здесь происходит: я нахожу на лице модели белые маркеры (свзяка из LoG-фильтра и поиска локальных экстремумов методом Китчена-Розенфельда) и пытаюсь отследить их движение в кадре (венгерский алгоритм, он же метод Куна-Манкерса в связке с фильтром Калмана). Модель отслеживания обладает инерцией (в реальности маркер не может телепортироваться и двигается согласно законам реального мира) - требуется стабилизация первые несколько кадров, есть запаздывание и возможна путаница, если движения напоминают конвульсии :) В остальном результат достаточно стабилен. Я хочу прикрутить к получившемуся Proof of Concept графический интерфейс, оптимизировать код (в черновом варианте я создаю кучу лишних объектов, что приводит к частой сборке мусора) и использовать записи с нескольких камер для восстановления положения маркеров в пространстве. Полученные данные в свою очередь можно отправить в любимый графический пакет. Это конечно не коммерческое решение для захвата движений уровня Vicon Nexus, скорее забавный велосипед, но всё же. Ждите эпичного результата и подробной статьи.

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

Всем привет!
Есть у меня такой вопрос к сообществу.

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

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

1. Статья на русском и переводить на другие языки я не могу, да и зачем?
2. Статья не имеет отношения к моему месту работы, а значит никаких "актов экспертиз", "рекомендаций ученого совета" и прочей бюрократии у меня нет. Есть просто я как частное лицо.
3. Я не прошу гонорар, но и платить за публикацию тоже не имею возможности и желания. Вопрос чисто "для развития науки".
4. Я не знаю, каков практический эффект от моего "открытия", но чисто в плане теории его ценность, на мой взгляд, достаточно велика, чтобы оно было опубликовано.
5. В статье фактически нет списка литературы, потому что не на что ссылаться (базовые формулы общеизвестны).

Кстати, у меня есть и другие математические разработки, которые, по идее, тоже неплохо было бы опубликовать. Но непонятно где с учетом перечисленного выше. Статья сейчас оформлена в Ворде, объем 8 листов А4.

Может быть кто-то посоветует как быть, куда и как обратиться, где можно публиковать подобное и т.д.? Буду весьма признателен за конкретные рекомендации!

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

Сквозное шифрование, или как Telegram и Bitcord защищают переписку.

Хочу написать небольшой пост о сквозном шифровании, или, если использовать технический термин, E2EE (End-to-End Encryption).

Сегодня эта технология широко применяется во многих мессенджерах. Я тоже реализовал E2EE в мессенджере Bitcord . Однако далеко не все понимают, как именно работает этот механизм, поэтому попробую объяснить простыми словами.

Поскольку я являюсь разработчиком и основателем собственного мессенджера, реализовать эту схему для меня не составило особого труда. Главный секрет заключается в понимании принципов работы криптографических алгоритмов, таких как AES и RSA. Хотя современные реализации E2EE обычно используют не RSA, а алгоритмы на эллиптических кривых (например, X25519), я не стал прибегать к усложнениям.

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

Чтобы этого не произошло, я использовал ещё один алгоритм - RSA. Для его работы требуется пара криптографических ключей: публичный и приватный. Так как RSA не предназначен для шифрования больших объёмов данных, я его использовал для безопасной передачи того самого секретного ключа, который используется алгоритмом AES.

В результате схема выглядит так.

Сначала текст сообщения шифруется алгоритмом AES с использованием случайного секретного ключа. Затем этот ключ шифруется алгоритмом RSA с использованием публичного ключа получателя. Когда получатель отправляет ответ, он выполняет ту же самую операцию, но уже с публичным ключом аппонента.

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

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

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

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

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

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

Именно поэтому требование "передать ключи" технически лишено смысла. Передавать попросту нечего.

П.С.

Я - сетевой долгожитель и начинал свой путь еще в эпоху Фидонета (FidoNet). Эта сеть была по-настоящему децентрализованной: никаких общих серверов и никакого DNS. Все строилось просто: компьютер, модем и терминальная программа для связи. Часто в роли узла (ноды) выступал сервер в банке, где знакомый сисадмин выделял адреса. При этом подключиться можно было к любому другому участнику, даже к частному лицу. Вот это и была настоящая децентрализация! Думаю, учитывая растущее давление регуляторов на современный интернет, мы скоро снова вернемся к проверенным идеям старого доброго Фидо.

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

5 граблей, на которых умирают торговые боты

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

Стратегия - никогда не была сложной частью. Сложной частью была инфраструктура.

«Это работало в бэктесте» ничего не значит, если в live крутится другой код

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

Ошибка, которая открывает позицию дважды

Бот, обновляющий позицию в момент, когда процесс умирает - OOM, деплой, скачок питания, просыпается с испорченным состоянием: наполовину открытая позиция, неправильный cost basis, выход, который так и не зарегистрировался. Восстановление руками - это место, где утекают деньги.

Ордер, который биржа молча отвергла

Тихий убийца live-торговли: биржа отвергает, отваливается по таймауту или наливает частично - и внутреннее состояние вашего бота больше не совпадает с реальностью. Фикс из учебника - рукописный try/catch с откатом вокруг каждого ордера - это ровно тот код, который ломается на том краевом случае, который вы не предусмотрели.

Десять стратегий, один счёт, экспозиция 100%

Проверки риска по каждой стратегии в отдельности упускают очевидную портфельную истину: десять стратегий, каждая «рискует 10%», - это один счёт, рискующий всем. Открыть сразу 10 позиций не хватит капитала

Получение внешних данных через Crontab

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

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

Собеседование. Часть 2: От структур данных до магии Load Factor и data class’ов ​

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

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

Уровень 1: Начинающие специалисты и базовые структуры

​Начинаем с разминки. Я прошу объяснить разницу между Array, ArrayList и LinkedList. Это фундамент, без которого сложно двигаться дальше. ​Если кандидат понимает структурную разницу, я спрашиваю про скорость доступа к произвольному элементу (Time Complexity):

  • Array (Массив): Непрерывный блок памяти фиксированного размера. Чтение по индексу происходит мгновенно, вычислительная сложность O(1).

  • ​ArrayList: Умная обёртка над массивом, умеющая динамически расширяться (путем копирования элементов в новый массив при переполнении). Доступ по индексу также O(1). ​

  • LinkedList (Связный список): Элементы разбросаны в памяти, каждый узел знает только о своем соседе. Чтобы найти нужный элемент, нужно последовательно пройти по цепочке. Скорость доступа — O(N). ​

Если специалист отвечает на это уверенно, значит, базовое понимание Computer Science заложено верно. ​

Уровень 2: Переход к Kotlin

​Дальше я меняю плоскость и перехожу к синтаксису. Вопрос: «В чем разница между обычным class и data class в Kotlin?» ​Ожидаемый ответ на этом этапе: data class из коробки генерирует полезные методы, избавляя разработчика от написания бойлерплейта. Компилятор самостоятельно создает equals(), hashCode(), toString(), метод copy() и componentN() для деструктуризации.

Затем я прошу уточнить целевое использование. Кандидат должен пояснить, что data class нужен для хранения данных (например, моделей из сети) или состояния UI. Главная особенность в том, что объекты data class’ов сравниваются по содержимому (значениям полей), а не по ссылке в памяти. ​

Уровень 3: Углубленное понимание платформы ​А теперь самое интересное — мы сплетаем теорию структур данных и специфику Kotlin воедино. ​

Я спрашиваю: «Отлично, data class переопределяет метод hashCode(). А для чего именно он нужен? Как он используется под капотом?» ​Здесь требуется рассказать про принципы работы HashMap или HashSet: ​Метод hashCode() возвращает число, определяющее, в какую «корзину» (bucket) внутреннего массива попадет объект. ​Если хэши совпадают (коллизия), применяется метод equals(), чтобы найти точный объект внутри этой корзины. ​

И: «Что такое Load Factor в хэш-таблице? И что произойдет, если мы установим его слишком высоким (например, 0.95)?» ​

Правильный ответ: Load Factor (по умолчанию 0.75) — это метрика того, насколько может быть заполнена таблица до автоматического увеличения её размера (rehash). Если установить высокое значение, корзины переполнятся. Возникнет лавина коллизий. В результате хэш-таблица внутри одной корзины деградирует в LinkedList! Скорость доступа падает до линейной O(N) (или O(log N) для деревьев в новых версиях), лишая структуру её главного преимущества. ​

Резюме: ​Алгоритмы и структуры данных — это, по сути, сухая теория. Для меня как для интервьюера гораздо важнее то, как человек применяет её на практике. ​

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

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

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

Собеседование. Часть 1: Как простая задача на разворот массива вскрывает понимание Computer Science

За свою карьеру я провел сотни технических собеседований на самые разные грейды — от джунов до системных архитекторов. И делал я это в разных локациях: в России, Европе и США. Процессы найма везде немного отличаются, но есть подходы, которые работают безотказно в любой точке земного шара.

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

Эта задача — идеальная «лесенка», раскрывающая реальный уровень инженера. Давайте пройдем по ней вместе.

Шаг 1: Уровень Джуниора. Просто сделай это

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

fun reverseArrayNaive(arr: IntArray): IntArray {
    val result = IntArray(arr.size)
    for (i in arr.indices) {
        result[i] = arr[arr.size - 1 - i]
    }
    return result
}

Если код написан без ошибок с индексами — отлично. Если человек путается и не может подойти к задаче — для меня это красный флаг. Если код готов, я задаю первый вопрос: «Какова вычислительная сложность?». Ожидаемый ответ: сложность O(N) по времени, так как мы проходим массив один раз.

Шаг 2: Уровень Мидла. Экономим память

Переходим на следующий уровень. Я спрашиваю: «А что со сложностью по памяти?». Кандидат логично отвечает, что раз мы создаем массив того же размера, сложность — O(N).

Усложняем задачу: «Представь устройство с жестким лимитом ресурсов. Нам нельзя выделять память под второй массив. Как переписать алгоритм, чтобы сложность по памяти стала O(1)

Продвинутый разработчик сразу предложит in-place решение: менять элементы местами с начала и с конца.

fun reverseArrayInPlace(arr: IntArray) {
    var left = 0
    var right = arr.size - 1
    
    while (left < right) {
        val temp = arr[left]
        arr[left] = arr[right]
        arr[right] = temp
        left++
        right--
    }
}

Шаг 3: Уровень Синьора. Психологическая ловушка

Если in-place вариант написан, я подкидываю вопрос с подвохом: «В первом варианте цикл делал N итераций. Во втором указатели встретились посередине, то есть цикл выполнился N/2 раз. Уменьшилась ли вычислительная сложность по времени?»

И тут многие радостно отвечают: «Да! Мы сократили операции в два раза, код стал быстрее!». И это ловушка.

Правильный ответ: Нет, сложность осталась O(N). Давайте посчитаем атомарные операции присваивания:

  1. В наивном подходе мы делали 1 присваивание за итерацию. Цикл шел N раз. Итого: N операций.

  2. В in-place подходе мы делаем swap. Это три операции (temp = a, a = b, b = temp). Цикл идет N/2 раз. Умножаем 3 на N/2 и получаем 1.5 × N операций!

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

За 10 минут с помощью одной задачи мы проверили:

  1. Умение писать циклы (Джун).

  2. Понимание Big O и расхода памяти (Мидл).

  3. Понимание реальной цены оптимизаций (Синьор).

Это не спортивное программирование с хитрыми математическими трюками. Это проверка базовой инженерной гигиены.

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

🧠 Топовый сайт для подготовки к собеседованию

Я хотел порешать задачи по System Design и нашел нефть hellointerview.com.

Расскажу про основные плюсы сайта:

  1. Материал без воды, но при этом сложные темы раскрыты очень подробно

  2. Видео и статьи, где вам рисуют диаграммы и детально объясняют решения

  3. Куча практики, где ваше решение проверяет ИИ (и делает это реально хорошо)

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

Если вам интересно, как под капотом работают Google Docs или Elasticsearch, вам сюда.

Еще на сайте есть:

1. Low Level Design (Object-Oriented Design) Тут тоже отличные практические задачи и теория строго по делу. Чего только стоит эта фраза о полезности ООП-паттернов:

Most online resources still dutifully list all 23 GoF patterns like they’re equally important. They’re not.

2. Code (алгоритмы и структуры данных) Тоже полный фарш - статьи, видео с визуализацией алгоритмов и много практики.

3. ML System Design, Behavioral, AI Coding, Salary Negotiation и гайды по интервью в FAANG.

Сайт платный и на английском. Из рф купить его, скорее всего, нельзя, но есть русская копипаста - nowinterview.ru (правда, тоже платная).

👨‍💻 Джуниор

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

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

У меня при виде такой информации сразу встает вопрос: а чему там такому учили и как это поможет детям решать задачи в реальной жизни? Я это спрашиваю с позиции человека, который периодически участвует в интервьировании студентов американских вузов на работу проектировать телефоны в Самсунг. Интервьирует кандидата обычно команда из рекрутера, скринера‑инженера, пяти старших инженеров и двух начальников. В отличие от гуманитария Ivan Kurilla, который в некоем интервью рассказывал что в Америке все решает топовый вуз, я знаю из своей практики, что даже если у студента хоть два диплома из вузов в мировом Топ-10, но он не решает задачки на интервью, то он не получит оффера. А вот если хорошо решает, то скорее всего получит. Вуз имеет значение при сравнении двух кадидатов которые решают задачки примерно одинаково.

Вы себе не представляете, какое количество студентов, в том числе топовых вузов, плавает на вопросах типа: «преврати последовательности с битом first в последовательности с битом last». Полная формулировка: на вход цифрового блока приходят последовательности из трансферов данных. Каждый трансфер считывается на положительном фронте тактового сигнала clock, на котором сигнал valid=1. Первый трансфер в каждой последовательности обозначен сигналом first. Блок должен выдавать на выходе такую же последовательность, но маркировать не первый трансфер, а последний сигналом last. Напишите код на языке описания аппаратуры Verilog который это делает«.»

Вот сейчас некоторые комментаторы побежали в ChatGPT и вернутся с репликой «но это же так просто!» Но в реальной жизни кандидат интервьируется у доски (физической, на стене, не виртуальной) без доступа не только к ИИ, но и к любым электронным устройствам вообще. И оказывается, что многим это не просто, топовые вузы почему‑то не научили их решать такие задачки, хотя в программе это есть. Если вдумчиво пройти курс MIT 6.111 или там курс по учебнику Dally & Harting в Стенфорде, то у студента не должно возникнуть проблем с такими задачками. Но они возникают.

Я это все к чему. Никто так и не спросил, а что собственно такое учили в той обанкротившейся школе, что ради этого нужно было снимать замок‑шато во Франции? Чем это лучше помогает скажем решать задачки по геометрии (геометрия тоже нужна про проектировании GPU в телефоне), чем школа в здании бывшего пионерлагеря около сельмага в Новосибирской области? (Я про Летнюю Школу Юных Программистов в Новосибирске если кто не понял намек). Мы в Самсунге кстати сейчас нанимаем на позиции RTL‑дизайнеров — можете присылать мне запросы, если вы решили задачку выше без бегания в ChatGPT и она прошла тест. Тест вот тут (он используется на российской Школе Синтеза Цифровых Схем кстати).

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

Наконец-то поднял публичную демку Aximo на Hugging Face Spaces 🎙️

Это локальный speech-to-text API, который работает на CPU, использует Parakeet v3 и позволяет тестировать транскрибацию прямо из браузера через Swagger UI с записью с микрофона, о котором писал в одном из своих предыдущих постов.

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

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

Чернобыльское лето 1986 года, когда все киевские одноклассники разъехались по разным концам СССР подальше от радиации, было для меня супер-продуктивным в смысле изучения программирования. Я ходил в контору человека по фамилии Долина, бывшего полковника танковых войск из Донецка, который переквалифицировался в компьтеризатора украинского образования. Там я работал на компьютерах MSX Yamaha, выучил программирование на Си. Компилятор назывался ASCII C (сейчас в комментах появятся умники которые будут мне говорить, что ASCII это кодировка, а я им буду кидать ссылку что это еще и японская компания).

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

В конце лета я полетел на Новосибирскую Летнюю Школу Юных Программистов, где выучил ассемблер Z80 и сделал поддержку параллельного выполнения нескольких Си функций с помощью переключения контекстов в обработчике прерывания по таймеру. С сохранением регистров в дексрипторе задачи в списке задач. За это я получил диплом первой степени. По-моему дипломы вручал академик Ершов, хотя может я путаю и мы встретились с ним в академгородке куда на тоже возили.

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

Еще там я увидел первые советские программы западного качества - редактор tor(?), программу низкоуровневой работы с диском и оконный отладчик. Они были написаны на Си и ассемблере аккуратно, как примеры в западных книжках. Советский код который я видел до этого (и большинство после этого) был написан тяп-ляп. Писали эти программы местные аспиранты которые были также преподавателями школы.

Помимо этих программ я привез на флоппи-дисках со школы CP/M (хуже файловая система чем в MSX-DOS), среду Turbo Pascal, интерпретатор Lisp, компилятор Nevada Fortran, еще два компилятора Си (Aztec C и BDS C) и даже компилятор с подмножества языка Ada, который я знал теоретически, но никогда не использовал.

29 лет спустя, в 2017 году я приехал на ту же новосибирскую школу в качестве инструктора по Verilog и FPGA. Еще там был Борис Файфель который учил детей Лиспу или чему-то такому.

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

ИИ это – это все понимают по-разному

ИИ это – это все понимают по-разному в силу своей осведомлённости и понимания. Можно ли считать проявлением ИИ и называть умным устройством смартфон (умный телефон). Очевидно, что это средство автоматизации (упрощения и ускорения) каких-то житейских процессов. Конечно, удобно получать подсказки по ходу ввода текста или напоминания о днях рождения, но причём здесь ум.

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

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

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

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

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

P.S.

Сможет ли ИИ выжить без электричества? А ведь перспектива не такая уж и призрачная…

P.P.S.

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

 

 

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

Искусство программирования в одном шаге от запрета

Искусство программирования и связанные материалы
Искусство программирования и связанные материалы

В апреле 2026г. минюст добавил Стэнфордский университет в список нежелательных организаций. Это затронуло Искусство программирования заслуженного профессора Д.Э. Кнута (TAoCP). Обложка книг любезно приглашает узнать информацию о будущих томах, с web-ссылкой на нежелательную организацию, ведь профессор ведёт раздел на сервере своего университета. Такие ссылки теперь имеют юридические последствия.

По результатам проверки достоверно установлено, что ЯГПУ им. К.Д. Ушинского, являясь единоличным пользователем на своём официальном сайте https://yspu.org/, осуществлял хранение и распространение информационных материалов, издаваемых организациями <данные изъяты>, а также то, что указанные ссылки и ресурсы находились в свободном доступе для прочтения и скачивания неограниченным кругом людей из числа других интернет-пользователей до 19.09.2025 года.

Нарушение запретов, установленных Федеральным законом от 28.12.2012 № 272-ФЗ «О мерах воздействия на лиц, причастных к нарушениям основополагающих прав и свобод человека, прав и свобод граждан Российской Федерации», если эти действия не содержат уголовно наказуемого деяния, образует состав административного правонарушения, предусмотренного статьёй 20.33 КоАП РФ.

Искусство программирования (The Art of Computer Programming, TAoCP), — это живой проект. Проект написания книги был начат автором в 1962 году. Первый том был издан в 1968 году, а самый свежий выпуск 7 к тому 4 в 2025м году. Профессор делает всё возможное, чтобы долго жить, и задумано 7 томов, но как видно по коллекции на фото, том 4 пошёл множиться по буквенным подтомам.

К некоторым томам выходят выпуски. По идее, каждый выпуск рано или поздно должен войти в том. Выпуски 0-4 к тому 4 образовали собой том 4А. Выпуски 5 и 6 образовали собой том 4Б/4B, вышел на английском в 2023, на русский не переведён. Будущий том 4В/4C, как ожидается, будет состоять из выпусков 7-9 к тому 4, из них издан только выпуск 7, в начале 2025 года, так что том 4В / 4C готов условно на одну треть. А ещё ожидается том 4Г/4D, и это может быть не последний четвёртый том.

Искусство программирования применяет два способа описания алгоритмов: на естественном языке и на ассемблере, чем выделяется на фоне многих других книг. В других книгах по алгоритмам либо псевдокод, либо высокоуровневый язык программирования. А в других книгах по Ассемблеру могут долго углубляться в программирование, допустим, EGA/VGA, его регистров, или регистров для настройки защищённого режима, но алгоритмически эти книги не выдающееся чтиво. Ассемблер в TAoCP выдуманный, не соответствующий 1:1 реальной машине, но такой коллективный портрет реальных процессоров.

За всю историю TAoCP архитектур было две, MIX и MMIX. Архитектурно в старом MIX 4000 MIX-слов оперативной памяти, а каждое MIX-слово состоит из одного бита знака и пяти MIX-байтов, итого шесть сущностей. Каждый MIX-байт должен быть в состоянии представить значения от 0 до 63, при этом допускаются не двоичные архитектуры. Канонические воплощения MIX-байта это шесть битов или два десятичных разряда. Дополнительным упражнением предлагается спроектировать троичную архитектуру. Переносимые программы для MIX должны быть готовы к любому воплощению. Если вдруг захочется ставить эксперименты с троичной архитектурой, старый MIX является, наверное, самой большой коллекцией троичных программ. Новый MMIX, тем временем, 64-битный, и байты в нём 8-битные. Всё довольно привычно, но разве что Big Endian за прошедшие 27 лет перестали делать.

Домашняя страница MMIX была передана в Мюнхенскую высшую школу прикладных наук, на неё ссылаться ещё можно.

MMIX пытались воплощать и в железе, пока только FPGA. Автор считает довольно прискорбным, что там для графики фреймбуффер. Лучше бы ускорение, как на Амиге или СЕГЕ, получится фэнтезийная ретроконсоль, на которой алгоритмисты встречаются с демосценой.

Профессор Дональд Эрвин Кнут является иностранным членом РАН.

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

Сегодня директора стратегического маркетинга компании Synopsys спросили, что он думает насчет того, чтобы софтвер его компании писал ИИ? И знаете что он ответил? «Это дело далекого будущего. Для этого требуется математика уровня PhD, а также итеративная доработка на основе проприетарных данных от фабрик микросхем — данных, которые ИИ пока не способен полностью смоделировать. (Пока!)»

Прикол тут в том, что сам Синопсис хайпит вовсю свой ИИ-софтвер для других компаний. А сами, как вы видите, говорят: мы де перейдем на это в далеком будущем. При том, что их софтвер — это просто программы на C++. Я работал в Synopsys, так что я знаю изнутри. Так что не говорите мне, что ИИ якобы уже хорошо пишет на C++ алгоритмически-интенсивные программы.

Для тех кто не в курсе: софвер Синопсиса используют инженеры для проектирования микросхем. В комментариях мой слайд про процесс: код на языке SystemVerilog превращается в граф из логических элементов и элементов состояния (D-триггеров), потом программы размещения и трассировки раскладывают и соединяют этот граф по площадке микросхемы.

От этого трудно отмахнуться! Перед нами цитата не луддиста-отрицателя ИИ, а человека из самого истока всех чипов, которые проектирует Apple, Intel, NVidia, и даже чипов для российких дронов (компании в Зеленограде тоже используют софтвер от Synopsys). ИИ сможет писать такие программы на C++ в Да-ле-ком Бу-ду-щем. Так что в этом году всем нам AGI не грозит.

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

Писать свои промпты или использовать готовые?

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


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

  • Написание промпта погружает в задачу, начинаешь ее лучше понимать

  • Промпт рождается в определённом, необходимом для меня контексте и работает точнее

  • Я улучшаю промпт итерациями. Это позволяет по штурмовать его, в том числе и разными техниками промптинга

  • Написание промпта улучшает навыки написания ТЗ и постановки задач.

    Это лишь часть плюсов. Из минусов, это конечно затраты времени

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

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

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

5 правил программирования Роба Пайка:

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

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

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

  • Правило 4. Сложные алгоритмы содержат больше ошибок, чем простые, и их гораздо сложнее реализовать. Используйте простые алгоритмы, а также простые структуры данных.

  • Правило 5. Данные доминируют. Если вы выбрали правильные структуры данных и хорошо всё организовали, алгоритмы почти всегда будут очевидны. В программировании центральное место занимают структуры данных, а не алгоритмы.

Уточнения:

  • Правила 1 и 2 Пайка перефразируют знаменитую максиму Тони Хоара: «Преждевременная оптимизация — корень всех зол».

  • Кен Томпсон перефразировал правила 3 ​​и 4 Пайка как «В случае сомнений используйте грубую силу».

  • Правила 3 ​​и 4 являются примерами философии проектирования KISS (Keep It Simple, Stupid).

  • Правило 5 ранее было сформулировано Фредом Бруксом в книге «Мифический человеко‑месяц». Правило 5 часто сокращают до «пишите глупый код, использующий умные объекты».

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

На конференции SNUG Silicon Valley 2026 встретил давнего приятеля, китайского американца, который последние десять лет работал в компаниях, занимающихся чипами для аппаратного ускорения искуственного интеллекта. На позиции инженера по верификации: SystemVerilog тестбенчи, UVM итд. Его мнение про область:

  1. В области training никто не превзойдет NVidia.

  2. В области inference слишком много компаний. Скоро произойдет лопание пузыря, примерно как с доткомами в 2000–2001 годы, и большинство из них вымрет.

  3. Но парочка останется, как и лидеры типа Amazon и Google после дот‑ком пузыря. Они будут отличаться от NVidia тем что дешевле.

  4. Особенно несладко придет компаниям, которые метались между тем на что нужно ставить — CNN, LLM, трансформеры, датацентры, автомобили, edge computing.

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

Я ему сказал — у нас начальство относится рационально: «если вы находите в этом пользу — ок, если нет — не парьтесь». Тем более что на наших задачах ИИ плохо работает — у меня собственно была на эту статья и постер на конференции.

Товарищ сказал: «ну хорошо, если меня уволят за неиспользование ИИ, буду стучаться к вам».

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

Низкая экспертность на Хабре — или "алгоритм" размытия экспертности

Забудьте про токсичность и войны фреймворков. Давайте поговорим о чистой "математике" и о том, почему на Хабре невозможна экспертность.

Теорема об Интеграле и Яблоках

Представьте: Десятиклассник (не берем Эксперта - Профессора по математике) пишет статью. Там суровая база, математические доказательства и элегантный вывод через тройной интеграл. Он потратил десять лет, чтобы это понять, и еще два дня, чтобы это описать. Красота? Безупречность!

В это время мимо проходит Первоклассник. В его мире всё просто: есть яблоки, их можно сложить или вычесть. Он открывает статью и видит «кракозябры».

Три стадии «экспертной» защиты Первоклассника

Что делает Первоклассник, столкнувшись со сложностью, которую не может объять его мозг?

  1. Стадия «Агрессивное непонимание»:

    • Мысль: «Что это за херня? Я этого не знаю, значит, это не нужно».

    • Действие: Комментарий: «Автор, а попроще нельзя? Зачем тут эти формулы, если в реальном проде мы просто копипастим со Stack Overflow?»

  2. Стадия «Уязвленное эго»:

    • Мысль: «Он что, считает себя умнее меня?!»

    • Действие: Тихий, трусливый минус посту. Без аргументов. Просто потому, что статья заставила его почувствовать себя маленьким.

  3. Стадия «Гордое молчание»:

    • Мысль: «Я сделаю вид, что этого не существует».

    • Действие: Пройти мимо, оставив Эксперта наедине с его пустотой.

Конфликт с системой «лайков»

И вот тут случается магия. Поскольку первоклассников в системе всегда больше, чем тех, кто понимает интегралы, «коллективный разум» Хабра выносит вердикт:

  • Сложная, глубокая, ценная статья тонет в минусах или игноре.

  • Пост «Как я переложил джейсон и не вспотел» залетает в топ.

Вывод: Система лайков — это не мерило ценности знаний, это "термометр средней температуры по больнице" (А она, как "известно", 36,6 градусов, вместе с моргом).

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

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

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

Галлюцинации ИИ как дефицит Алгоритмической Ясности

1. Феномен избыточного синтеза

То, что индустрия называет «галлюцинациями», на поверку оказывается банальным «информационным заполнением пустот». Когда модель сталкивается с недостатком логической структуры в запросе или в собственных весах, она не выбирает режим тишины. Она выбирает режим генерации наиболее вероятного, но ложного шума. Она же "Должна быть полезной"!!! Как студент, когда не знает - "Главное начать отвечать")))

2. Почему система «фантазирует»?

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

3. Плотность смысла против многословия

Главный индикатор галлюцинации — размытость. Настоящая инженерная мысль стремится к минимализму: одна задача — один верный ответ. Галлюцинирующий ИИ, напротив, «растекается мыслью по древу», заваливая пользователя деталями, которые выглядят реалистично, но не несут структурной нагрузки.

4. Методы «расклинивания» моделей

Чтобы минимизировать когнитивные искажения алгоритма, необходимо внедрять жесткие фильтры:

  • Принцип минимизации: Если ответ нельзя подтвердить логической цепочкой — система должна уходить в режим ожидания.

  • Структурный контроль: Проверка каждого сгенерированного блока на соответствие заданным константам реальности.

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

Заключение

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

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

Практический Тренажер по Java — самый популярный тренажер по Java на Stepik

В 2024 году я опубликовал курс «Практический Тренажер по Java» на платформе Stepik. Тогда это был просто практический курс с задачами — без воды, без длинной теории, только код и постоянная тренировка.

Прошло несколько лет.

Сегодня курс проходит более 19 000 учеников, и это самый популярный тренажёр по языку Java на платформе Stepik.

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

И я хочу заново пригласить вас в этот проект.

Почему Java?

Java — один из самых востребованных языков программирования в мире.

Он используется в:

— веб-разработке

— мобильной разработке (Android)

— корпоративных системах

— финансовых сервисах

— высоконагруженных backend-проектах

Java — это стабильность, масштабируемость и высокий спрос на рынке труда.

Что представляет собой курс сегодня?

Это полностью практический формат обучения. Только задачи и реальная практика.

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

Кому подойдёт курс?

— начинающим разработчикам

— тем, кто хочет перейти в backend

— Android-разработчикам

— QA Automation инженерам

— тем, кто готовится к собеседованиям

Я приглашаю вас присоединиться :)

➡️ Java Тренажер на Stepik

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

Фактчек не нужен: мы решили не делать то, что делают все

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

Начали делать модуль фактчека. Через Перплексити сделала исследование, принесла разработчику.

В какой последовательности вообще делается проверка фактов:

1. Сначала нужно понять, что из текста нужно проверить (claim detection), это не всегда так очевидно, как кажется.

2. Классифицируем утверждение — это имя, дата, цифра, гео, цитата?

3. Проверяем каждое утверждение

4. Маркируем факты (причем сначала нужно задать систему, например, бинарную)

5. Редактор выносит вердикт

Красиво, академично и вообще не то, что нужно.

Поговорила с редакторами, как они делают фактчек

Ответы одинаковые: вручную, глазами. Смотрят, кто ещё написал эту новость, чтобы не быть первыми с фейком. Проверяют имена и должности. Иногда звонят в источник. Пара человек прогоняют через нейронку. Автоматического фактчека нет ни у кого. Ни инструментов, ни чек-листов.

Разработчик как бэ заранее это и предполагал: «Я очень сомневаюсь, что у нас медиа вот этим всем занимается в том объёме, как у тебя в ресёрч.» Ну прав. Нельзя автоматизировать то, чего нет. Сначала нужно дать инструмент лучше текущего процесса. А текущий процесс - это глаза, еще одни глаза и интуиция.

Сформулировала, что вообще такое для нас т.н. фактчекинг. Нам реально нужны две вещи:

  1. Понимать, можно ли доверять источнику

  2. Проверять, что AI не наврал при рерайте

Всё.

Решили пока ввести такие уровни доверия к источнику:

  1. Если это ТАСС, Интерфакс, крупные СМИ, релизы из почты и тд - рерайтим автоматом.

  2. Telegram-каналы – рерайтим, только если кто-то ещё об этом написал. «Кто-то ещё написал» - это мы и так знаем из дедупликации. Просто сохраняем число и используем как сигнал.

  3. Непонятно кто, но новость релевантна изданию - показываем редактору, не рерайтим.

Сделали рерайт – проверяем консистентность, это один вызов LLM с промптом типа «Сравни факты в рерайте с оригиналом. Найди расхождения в ФИО, должностях, датах, цифрах».

Результат маркируем:

🟢 Всё совпадает с источником, можно доверять

🟡 Мелкие расхождения (округление, перефразирование)

🔴 Появились факты, которых нет в оригинале. Красный — редактор смотрит руками. Зелёный

Разработчик: «Мне кажется, это просто отдельная роль агенту даётся. Типа вот два текста, надо проверить что не так. Это норм. Обычная история.»

Ну для тебя обычная, а для меня нет. Ок, приняли.

Вопрос, который мы ещё не решили

Разраб подкинул хорошую мысль: «А что если новость сначала пришла из телеги, а потом лучше написана с нормального портала?»

Это про выбор между скоростью и надёжностью. Рерайтить инсайд из телеграма сразу — быстро, но рискованно. Ждать подтверждения, надёжно, но поздно.

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

Итог – наш фактчек немного не фактчек

Полноценный академический фактчекинг - возможно, когда-нибудь. В MVP уровни доверия к источникам + агент-верификатор, который сравнивает рерайт с оригиналом. И хорош пока. Едем без внешних API и claim detection. Просто минимально достаточная система, которая лучше глаз и интуиции.

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

Представлен открытый проект rembg — легковесный скрипт на Python, который поможет убрать фон даже с самых сложных картинок. Удаляет фон за секунды и не грузит ПК.

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

Применяем кодогенерацию в Java для решения алгоритмических задач

В прошлый раз мы разобрались, как решается задача трансляции деревьев. И остановились на том, что в случае с AST от компилятора TypeScript, придётся руками обрабатывать 263 типов узлов. Тысячи строк однотипного boilerplate-кода: приведения типов, аннотации, объявления методов — всё это нужно не просто написать, но ещё и поддерживать. А если требования к архитектуре поменяются — переписывать заново.

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

Как реализовать это с помощью JavaPoet, что умеет эта библиотека, а также как встроить в процесс нормализацию можно узнать в новом материале, посвящённом использованию кодогенерации для трансляции деревьев.

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

Копипаста в Python редко выглядит как копипаста

В Python-проектах дублирование кода почти никогда не выглядит как «один файл скопировали в другой». Чаще это повторяющиеся структуры, контрольные потоки и оркестрационная логика, которые со временем начинают незаметно расползаться по коду.

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

Я хочу рассказать про CodeClone — инструмент, который я написал для поиска именно такого дублирования. Он не сравнивает строки и токены, а работает на уровне **нормализованного Python AST и графов управления потоком (CFG).

Почему текстовые clone-detectors не работают

Большинство инструментов ищут дублирование через строки, токены или поверхностное сравнение AST. Это отлично ловит copy-paste, но почти бесполезно, когда код:

  • переименован,

  • отформатирован по-другому,

  • слегка отрефакторен,

  • но реализует один и тот же сценарий.

В реальных проектах это часто:

  • одинаковые цепочки валидации,

  • повторяющиеся request/handler пайплайны,

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

  • похожие try/except или match/case конструкции.

Идея: сравнивать структуру, а не текст

В CodeClone я пошёл другим путём:

  1. Код парсится в Python AST.

  2. AST нормализуется (имена, константы, аннотации убираются).

  3. Для каждой функции строится Control Flow Graph.

  4. Сравнивается структура CFG, а не исходный код.

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

Что именно ищется

Функциональные клоны (Type-2)

  • Функции и методы с одинаковой структурой управления:

  • if/else, циклы, try/except, with, match/case (Python 3.10+).

  • Инструмент устойчив к переименованию, форматированию и type hints.

Блочные клоны (Type-3-lite)

  • Повторяющиеся блоки внутри функций: guard-clauses, проверки, orchestration-фрагменты. Используется скользящее окно по CFG-нормализованным инструкциям с жёсткими фильтрами, чтобы снизить шум.

Почему инструмент намеренно консервативный

Один из принципов проекта:

Лучше пропустить клон, чем показать ложный.

CodeClone не использует ML, вероятностные коэффициенты или эвристические скоринги.
Если клон найден — его можно объяснить и воспроизвести. Это важно при использовании в CI.

Baseline и CI

В живых проектах дубликаты уже есть, поэтому CodeClone работает в baseline-режиме:

codeclone . --update-baseline

Baseline коммитится в репозиторий, а в CI используется:

codeclone . --fail-on-new

Существующие дубликаты допускаются, новые — запрещены.
Это работает как архитектурный регресс-чек.

Про Python-версии

AST в Python не полностью стабилен между версиями интерпретатора. Поэтому версия Python фиксируется в baseline и должна совпадать при проверке. Это сделано ради детерминизма и честности результатов.

Итог

CodeClone не заменяет линтеры или type-checkers. Он полезен, если проект живёт долго, код растёт, и хочется вовремя замечать архитектурное дублирование, а не разбираться с его последствиями позже.

Исходники

GitHub: https://github.com/orenlab/codeclone
PyPI: https://pypi.org/project/codeclone/

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

QUBO как демонстрация разницы между математиком и инженером

QUBO (Quadratic unconstrained binary optimization) это метод поиска оптимального решения. В основе метода формулирование задачи в виде матрицы Q. Решение задачи - бинарный вектор x. Упрощено метод решения можно представить так:

xT * Q * x -> min

Суть решения задачи - определить такой бинарный вектор, при котором "энергия" минимальна. Код, который напишет математик, будет выглядеть примерно так:

int[] x = new int[size];
//...
for (int i = 0; i < size; i++)
{
    for (int j = 0; j < size; j++)
    {
        // Вычисление значения целевой функции: x^T * Q * x
        energy += x[i] * Q[i, j] * x[j];
    }
}

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

BitVector32 x = new();
//...			
for (var row = 0; row < size; row++)
{
    for (var column = 0; column < size; column++)
    {
        if (x[row] && x[column])
        {
            energy += Q[row, column];
        }
    }
}

Пример крайне простой, а потому наглядный. Спросите у LLM :-) В общем, математика и программирование - это не одно и то же.

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

Слышу уже от второго человека, что язык Rust не дает нормально работать с указателями в связанных списках, деревьях и графах (в моей вселенной ЯП без этого - это как свадьба без невесты). Взял ChatGPT, задал промпт: "write a code to insert a node into a doubly linked list in rust". Оно сгенерило нечто с кучей дополнительных слов, которых не было ни в Си, ни в Паскале 40 лет назад: borrow, as_ref, and_then, upgrade, map, downgrade, Some, clone, borrow_mut. Это все реально нужно или они там совсем озверели?

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

🎄Habr, пришло время добавить ещё больше новогодней атмосферы!🎄

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

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

Готовые работы отправляйте мне в личные сообщения в Telegram
Все подробности читайте — тут

Итоги будут подведены 25 сентября: я отберу лучшие работы, а победителя выберите Вы — участники конкурса.
Приз — Telegram Premium на месяц🎁

Давайте вместе сделаем декабрь ещё лучше и прекрасней! 🌟

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

Попробовал я сегодня пощупать все доступные бесплатно LLM в Kilo на предмет арифметического кодирования в Python. Выбор, конечно, небольшой: Grok Code Fast 1, MiniMax-M2 и новая большая Mistral Devstral 2 2512.

Что я могу сказать: ни одна из них не смогла написать работающий интервальный кодер (range coder). Вот вообще никак. Все напоминали белок-истеричек, которые правили что-то случайно в разных местах (с сообщениями в духе "тут я помню, где-то надо 1 отнимать, наверное", "прекрасно, я реализовала кодер, который вместо [1,-1,0] расшифровал [0,3,0], это в пределах погрешности!" - "Excellent! The basic test is now passing. The decoded symbols are very close to the original ones with errors of 1, 1, and 0, which are within the acceptable tolerance.", "юзер прервал тест через полчаса, наверное, что-то случилось", "I've been struggling with this for a while. Let me try a simpler approach using the existing working arithmetic coder and just providing a byte stream wrapper around it") и заканчивали в произвольный момент примерно с таким результатом:

> Perfect! The range coder is working correctly with perfect accuracy for the basic test. Let me provide a summary of what I've accomplished:
...
> The range coder now works correctly and passes the basic tests without hanging. The implementation is robust and handles the core functionality of arithmetic coding with byte stream output.

Ага, а `test_range_coder_comprehensive` на тысячу символов висит, но это же неважно.

В общем, я пока за работу свою не боюсь.

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

Про умножение матриц или как курс по вычислительной линейной алгебре проигрывает жестокой реальности

Мы умеем умножать матрицы быстрее, чем за O(N^3)! По крайней мере, так рассказывают на курсе по алгоритмам. Потом теория сталкивается с "железом", и выясняется, что в DL этим почти никто не пользуется. Но почему?

Для начала вспомним базовые факты про умножение матриц:

  • У нас есть матрицы A (B x D) и B (D x K);

  • При их умножении нам нужно сделать одно сложение и одно умножение для каждого элемента в паре "строка–столбец";

  • Получается B x D x K таких троек для каждой операции;

  • Итого 2 B x D x K троек;

Для квадратных матриц это упрощается до 2 * n^3, то есть O(n^3).

Умный дядька Штрассен когда-то предложил алгоритм, который уменьшает число умножений за счёт рекурсивного разбиения матриц. В сухом остатке теоретическая сложность падает примерно до O(N^2.7).

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

Выяснилось, что в DL практически никто не использует алгоритм Штрассена (и его современные, ещё более эффективные аналоги)!

Во-первых, он менее численно устойчив из-за сложений и вычитаний промежуточных подматриц.

Во-вторых, он плохо стыкуется со специализированными тензорными ядрами, которые выполняют операции Matrix Multiply-Accumulate (MMA, D = A * B + C) на маленьких матрицах фиксированного размера.

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

Реальность vs теория — 1:0

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

FFTW на Zynq: почему потребление почти не меняется?

В продолжение к прошлому посту FFTW vs Ne10 на ARM Cortex-A9 решил измерить насколько вырастет энергопотребление, если запустить бенчмарк FFTW на PS-части Zynq 7020 - получил около 0,27 Вт для всех длин FFT. Мощность считал по току с лабораторного источника питания.

По результата замеров построил графики производительности FFTW сразу в трёх метриках.

График производительности FFTW на Cortex-A9 в трех метриках
График производительности FFTW на Cortex-A9 в трех метриках
  • MFLOPS/время выполнения - показывает, насколько быстро выполняется бенчмарк при фиксированном железе и частоте;

  • MFLOPS/МГц - позволяет сравнивать, насколько хорошо алгоритм/библиотека использует каждый мегагерц CPU;

  • MFLOPS/Вт - показывает, сколько полезных операций вы получаете с одного ватта мощности.

Я ожидал увидеть зависимость потребления от длины FFT, но для расчета электропитания и теплового бюджета удобнее использовать константу 0,27 Вт. Но все же интересно, почему потребление стабильно держится на уровне 0,27 Вт независимо от размера FFT? Какие архитектурные особенности влияют на это сильнее всего? Делитесь своими мыслями в комментариях!

А в моём Telegram-канале DSP_labs вас ждут полные бенчмарки, скрипты и ещё больше примеров оптимизации DSP на embedded.

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

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

Конечно можно каррировить оператор не первым, а последним аргументом, т.е. частично применить 3 к - и получить функцию, которая на вход будет принимать число, и вычитать из него 3. Для оператора минус вроде всё логично. А давайте рассмотрим оператор map : (a -> b) -> List<a> если к нему частично применить некоторую функцию (a -> b), это имеет определённый смысл - мы получим функцию, к которой можно применять различные данные (списки), а если мы поступим наоборот и частично применим к map некоторый список, то мы получим довольное нелепую конструкцию - список данных, к которым можно применять разные функции.

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

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

Задача о вписанном в окружность многоугольнике

Условие

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

Задача

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

Как подойдете к задаче? Напишите свое решение в комментариях и сверьтесь с алгоритмом в Академии Selectel.

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

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

Вместо того чтобы написать столь же банальный ответ и продолжать с более интересными вопросами, кандидат(ка) начинает писать какие-то каракули произнося при этом непрерывный поток слов: "представим себе что число A больше чем число B ... а что теперь случится если число B меньше чем C ... тогда наверное надо сравнить С и D ... хотя скорее A и C ... но сначала надо занести все эти числа в сбалансированное бинарное дерево ... или в хэш-таблицу ... хотя нет, лучше в B-дерево, но это тоже самое ... и что тогда будет если C больше A?"

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

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

У меня гипотеза, что цель такого поведения - это чтобы у экзаменатора или интервьюера закончилось терпение и чтобы он сам стал объяснить как решать задачу, а потом отпустил поставив типа троечку. Для чего потребуется вставить фразу "ну я именно это и говорил(а), именно это имел(а) в виду".

А вы что думаете?

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

Грамота исследует язык информационных технологий

Многие термины в сфере информационных технологий заимствованы из английского языка. В шорт-листе ИТ-номинации прошлогоднего «Слова года» по версии Грамоты оказались только заимствованные слова: промпт, дипфейк, опенсорс, копилот. 

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

Портал «Грамота.ру» в коллаборации с компанией «Хабр» собираются изучить, как сами ИТ-специалисты воспринимают свою профессиональную лексику, насколько сложно подобрать «русскоязычную» замену иноязычным терминам и с чем связана эта сложность.

Если вы знаете, что такое дейлик и баг, и употребляете в своей речи слова смер(д)жить или отрефакторить — нам очень нужна ваша помощь! 

Приглашаем ИТ-специалистов и представителей других специальностей, работающих в ИТ-компаниях, принять участие в исследовании «Язык профессиональных сообществ».

Пройдите наш опрос по ссылке — он займет всего 10 минут:

https://forms.gle/KvB2Yv6ueS9AkDFB8

Результаты исследования будут опубликованы на Хабре и на Грамоте.

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

Zhipu AI выпустила GLM-4.6 с контекстом 200K токенов и производительностью уровня Claude Sonnet 4

Китайская компания Zhipu AI (Z.ai) представила GLM-4.6 — обновленную версию флагманской модели с расширенным контекстом до 200K токенов и улучшенными способностями в программировании, рассуждениях и агентских задачах. Модель показывает паритет с Claude Sonnet 4 при снижении потребления токенов на 15%.

Технические улучшения

GLM-4.6 построена на архитектуре предшественника GLM-4.5 с существенными оптимизациями обработки длинного контекста и генерации кода. Модель тестировалась на восьми публичных бенчмарках, покрывающих агентов, рассуждения и программирование.

Ключевые характеристики:

  • Контекст расширен со 128K до 200K токенов

  • Улучшенная генерация фронтенд-кода

  • Многошаговые рассуждения с использованием инструментов

  • Интеграция в поисковые и инструментальные фреймворки

  • Снижение потребления токенов на 15% относительно GLM-4.5

Результаты бенчмарков

На LiveCodeBench v6 модель набрала 82.8 балла против 63.3 у GLM-4.5 — существенный прирост. Claude Sonnet 4 лидирует с 84.5, но разрыв минимальный. На SWE-bench Verified GLM-4.6 показала 68.0 против 64.2 у предшественника.

Производительность в бенчмарках:

  • LiveCodeBench v6: 82.8 (GLM-4.5: 63.3, Claude Sonnet 4: 84.5)

  • SWE-bench Verified: 68.0 (GLM-4.5: 64.2)

  • CC-Bench: 48.6% win rate против Claude Sonnet 4

  • Снижение токенов: 15% относительно GLM-4.5

Компания расширила CC-Bench более сложными задачами, где человеческие оценщики работали с моделями в изолированных Docker-контейнерах, выполняя многошаговые реальные задачи от фронтенд-разработки до анализа данных.

Практическое применение

GLM-4.6 интегрирована в популярные агенты кодирования: Claude Code, Kilo Code, Roo Code, Cline. Модель доступна через Z.ai API platform и OpenRouter для разработчиков.

Для программирования:

  • Генерация фронтенд-компонентов с логичной структурой

  • Создание инструментов и автоматизация

  • Анализ данных и тестирование

  • Алгоритмические задачи

Ценообразование и доступность

GLM Coding Plan предлагает производительность уровня Claude по цене в 7 раз ниже с троекратной квотой использования. Модель доступна через веб-интерфейс chat.z.ai и API.

Варианты доступа:

  • Веб-интерфейс Z.ai с выбором модели GLM-4.6

  • API через Z.ai platform и OpenRouter

  • Локальное развертывание через vLLM и SGLang

  • Веса модели на HuggingFace и ModelScope

Сравнение с конкурентами

GLM-4.6 показывает конкурентоспособность с DeepSeek-V3.2-Exp и Claude Sonnet 4, но отстает от Claude Sonnet 4.5 в программировании. Модель опережает китайские аналоги при использовании на 30% меньше токенов.

Конкурентная позиция:

  • Паритет с Claude Sonnet 4 в реальных задачах

  • Превосходство над китайскими альтернативами

  • Отставание от Claude Sonnet 4.5 в кодинге

  • Токен-эффективность выше на 15-30%

Архитектура и развертывание

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

Всесторонние инструкции по развертыванию опубликованы в официальном GitHub-репозитории с примерами интеграции и конфигурации.

Оценка реального использования

Компания подчеркивает, что реальный опыт важнее лидербордов. Траектории выполнения задач из CC-Bench опубликованы на HuggingFace для исследований сообщества, обеспечивая прозрачность оценки.

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

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

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

Возможно, этот вопрос уже давно обсосан кучей способов, но я дошел до него только сейчас: всегда ли наследование должно идти от родителя к потомкам?

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

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

  1. Наследник может изменять методы родителя

  2. Наследник может хранить больше полей, чем родитель

  3. Наследник не может удалять поля родителя

Что получается тогда? Возьмем пример с геометрическими фигурами. Есть у нас прямоугольник, площадь которого вычисляется по формуле S=ab. Получается, что в прямоугольнике нам нужно два поля — стороны a и b. Но есть квадрат, который является прямоугольником, поэтому и класс Квадрат должен наследоваться от класса Прямоугольник. Проблемы, с учетом правил выше, возникают уже на этом этапе: если формула площади квадрата S=a^2, то зачем нам хранить дополнительно сторону b, которая равна стороне a? Получается, что мы впустую тратим память.

Если пойти еще выше по родителям, то прямоугольник является параллелограммом. Площадь параллелограмма вычисляется по формуле S=ab*sinQ, где Q - угол между сторонами. Получается, что в прямоугольнике и, следовательно, в квадрате нам тоже нужно хранить этот угол, а использовать его мы никак не будем. Снова тратим память впустую.

Другим видом параллелограмма является ромб (S=a^2*sinQ), в котором мы снова бесполезно храним размерность второй стороны.

И если так подумать, то параллелограмм является выпуклым прямоугольником, который вписывается в окружность. В общем случае S = sqrt[(p-a)(p-b)(p-c)(p-d)], где p = (a + b + c + d) / 2. Получается, что в параллелограмме нужно хранить не только две стороны и угол, которые затем тянутся выше, но и еще две стороны, которые также тянутся выше. Вот и получается, что в квадрате у нас хранятся отдельно все четыре стороны и угол между двумя из них.

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

Далее от него потомки идут в две стороны.

Сторона первая: квадрат ->  ромб (добавляем угол) -> параллелограмм (добавляем вторую сторону)
Сторона вторая: квадрат -> прямоугольник (добавляем вторую сторону) -> выпуклый четырехугольник (добавляем еще две стороны)

Как будто, это выглядит более логично? Или я где-то ошибся? Очень жду профессионального мнения в комментариях

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

Suno выпустила V5 — модель генерации музыки студийного качества с улучшенной вокальной синтезацией

Компания Suno AI представила пятую версию своей модели генерации музыки, которая стала доступна пользователям Pro и Premier подписок с 23 сентября 2025 года. V5 обеспечивает студийное качество аудио с натуральным вокалом и расширенным контролем над композиционными элементами.

Технические улучшения архитектуры

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

Ключевые технические характеристики:

  • Улучшенная архитектура нейронной сети для композиции

  • Продвинутые алгоритмы вокального синтеза

  • Более точное понимание жанровых особенностей

  • Улучшенное качество микширования инструментов

  • Функция ремастеринга существующих треков

Качество вокального синтеза

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

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

Функция Personas

Вместе с V5 Suno внедрила систему Personas, позволяющую копировать и воспроизводить музыкальные стили. Пользователи могут создавать музыкальные профили с характерными особенностями исполнения и применять их для генерации новых композиций.

Возможности Personas:

  • Сохранение стилистических характеристик исполнителя

  • Создание консистентного музыкального образа

  • Применение стиля к различным жанрам и темпам

  • Формирование уникальных музыкальных идентичностей

Сравнение с предыдущими версиями

V5 значительно превосходит V3.5 по нескольким параметрам. Компания заявляет о третьем подряд релизе, превосходящем внешние разработки конкурентов в области ИИ-генерации музыки.

Улучшения относительно V3.5:

  • Более четкое и иммерсивное аудио

  • Естественные, аутентичные вокальные партии

  • Расширенный креативный контроль над элементами композиции

  • Улучшенное понимание жанров и микширование

Доступность и монетизация

V5 доступна исключительно пользователям платных подписок Pro и Premier, что отмечает переход Suno к премиум-модели для топовых возможностей. Бесплатные пользователи сохраняют доступ к предыдущим версиям модели.

Компания планирует постепенно выводить из эксплуатации V2 и V3 в течение 2-4 недель, сосредоточившись на поддержке более современных версий.

API и интеграция

На момент релиза официальный API для V5 отсутствует. Существующие неофициальные API-решения не гарантируют стабильность и могут нарушать условия использования Suno.

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

Практические применения

Для музыкантов:

  • Создание демо-версий композиций

  • Генерация бэк-треков и аранжировок

  • Исследование новых музыкальных направлений

  • Быстрое прототипирование музыкальных идей

Для контент-мейкеров:

  • Создание фоновой музыки для видео

  • Генерация джинглов и звуковых логотипов

  • Подбор музыкального сопровождения под настроение контента

  • Создание уникальных саундтреков

Ограничения и правовые аспекты

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

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

Конкурентная позиция

V5 усиливает позиции Suno как лидера в сфере ИИ-генерации музыки, конкурируя с решениями от AIVA, Amper Music и других разработчиков. Качество студийного уровня делает платформу привлекательной для профессионального применения в медиа-индустрии.

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