Обновить
512K+

Алгоритмы *

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

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

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

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

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

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

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

Я не математик.
При поиске Простых Чисел наткнулся на следующее. (Потому и пишу сюда). Не видел, чтоб кто-то так искал простые числа.

Формула: (p1!) + (2^p2) - 1 = "Возможно простое"

p1 - Первое простое число
p2 - Второе простое число
(p1!) - Факториал первого простого числа
(p_next!) - Факториал следующего простого числа, после p1

Поиск простых чисел, производится в числовом диапазоне между: (p1!) и (p_next!)

Пример обнаруженных чисел: (Не всех, а случайно взятых из найденных)

Число:  5! + 2^13 -1              Количество цифр:  5
Число:  109! + 2^293 -1           Количество цифр:  177
Число:  541! + 2^17 -1            Количество цифр:  1246

Число:  2003! + 2^577 -1          Количество цифр:  5746
Число:  2003! + 2^13799 -1        Количество цифр:  5746
Число:  2003! + 2^14387 -1        Количество цифр:  5746

Число:  3061! + 2^1993 -1         Количество цифр:  9344

Число:  5003! + 2^18541 -1        Количество цифр:  16337
Число:  5003! + 2^19421 -1        Количество цифр:  16337
Число:  5003! + 2^41593 -1        Количество цифр:  16337

Число:  9811! + 2^6011 -1         Количество цифр:  34905
Число:  11351! + 2^54869 -1       Количество цифр:  41102
Число:  15349! + 2^9041 -1        Количество цифр:  57589

Проверку чисел делал через gmplib тестом Миллера-Рабина с reps = 1 (т.е. шанс ошибки, что число не простое 25%)

Наверняка можно придумать эффективный тест простоты для таких чисел.(Сам я этим не стал заниматься)

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

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

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


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

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

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

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

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

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

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

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

Теги:
+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 часто сокращают до «пишите глупый код, использующий умные объекты».

Теги:
+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. Его на работе нагибают на использование ИИ при писании кода — ведут учет потраченных токенов например. Он этого не любит и спросил меня, как к этому относятся у меня на работе.

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

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

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

Надоело ждать квантовый компьютер? Включите видеокарту

Вы когда-нибудь чувствовали себя заложником собственных расчетов? Когда бизнес говорит: «Это невозможно просчитать», — на самом деле он редко имеет в виду «нет идей». Чаще всего это значит: «У нас нет вычислительного бюджета, чтобы умереть от скуки, ожидая ответ».

Логистика, расписания, раскрой листов, планирование производства, биржевые портфели. Везде, где есть слово «оптимизация», прячется монстр NP-трудности. Количество вариантов растет быстрее, чем количество кофе в офисе, и любая команда рано или поздно машет рукой: «Сойдет и так».

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

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

Так родился AGIQ Solver Enterprise. Солвер, который не ждет квантового будущего, а просто берет и решает задачи здесь и сейчас, на вашей GPU.

Почему GPU, а не коробка с кубитами?

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

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

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

AGIQ: Эволюция на стероидах

Наш солвер берет NP-трудную задачу (будь то SAT, MaxSAT, расписание или логистика) и начинает с ней работать не как классический алгоритм, который бредет по дереву решений, спотыкаясь на каждом шаге.

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

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

Честный разговор: Это не магия, это инженерия

Давайте без стартап-трепа. Мы не доказали P=NP. Мы не умеем сворачивать пространство в трубочку. Если вы дадите нам задачу, где вариантов больше, чем атомов во вселенной, за секунду мы её не решим.

Бенчмарк, чтобы было не скучно
Возьмем классическую задачу Max-3SAT. Допустим, 64 переменные и 20 тысяч условий.
На RTX 3090 AGIQ перемалывает это примерно за 45 секунд.
Можно ли быстрее? Можно. Но тут как с супом: если греть на максимальном огне, можно и пригореть. Мы подбираем параметры так, чтобы баланс скорости и качества был честным.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

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

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

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

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

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

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

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

Почему Java?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Всё.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Теги:
+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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Где:

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

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

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

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

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

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

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

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

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

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

Слышу уже от второго человека, что язык 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

Napkin AI обновила алгоритмы генерации интеллект-карт с адаптивным редактированием

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

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

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

Ключевые технические особенности:

  • Парсинг иерархических структур из неструктурированного текста

  • Автоматическое определение уровней детализации и сложности

  • Динамическая адаптация макета без перестроения DOM-структуры

  • Поддержка экспорта в векторные форматы (SVG, PDF)

Алгоритм адаптивного редактирования

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

Принцип работы:

  1. Система создает граф связей независимо от визуального представления

  2. При редактировании изменяется только содержимое узлов

  3. Макет автоматически перестраивается с сохранением общей структуры

  4. Алгоритм балансировки распределяет элементы без пересечений

Архитектура системы

Napkin AI состоит из нескольких модулей: анализатора текста, генератора визуальных схем и рендеринга. Анализатор использует NLP-модели для извлечения ключевых концепций и их связей.

Компоненты обработки:

  • Text Parser — выделение сущностей и связей

  • Layout Engine — размещение элементов с минимизацией пересечений

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

  • Export Module — конвертация в различные форматы

Типы генерируемых структур

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

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

Сравнение с существующими решениями

Отличия от классических mind mapping инструментов:

  • Автоматическая генерация структуры из текста vs ручное создание

  • Сохранение макета при редактировании vs полная перерисовка

  • ИИ-определение оптимального формата vs фиксированные шаблоны

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

  • XMind, MindMeister — ручное создание карт

  • Lucidchart — фокус на диаграммах процессов

  • Miro — collaborative whiteboarding

  • Napkin AI — автоматическая генерация из текста

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

Для разработчиков:

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

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

  • Генерация схем API и data flow

Для технических писателей:

  • Структурирование сложных технических концепций

  • Создание диаграмм для документации

  • Визуализация пользовательских сценариев

Ограничения и особенности

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

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

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

Платформа предоставляет REST API для интеграции с внешними системами. Поддерживается импорт из популярных форматов (Markdown, JSON) и экспорт в векторные и растровые форматы.

Доступные интеграции:

  • Google Docs через расширение

  • Slack для создания визуализаций в чатах

  • Notion для встраивания интерактивных диаграмм

  • API для кастомных приложений

Система предлагает бесплатный план с ограничениями на количество генераций в месяц. Платные планы включают дополнительные стили, приоритетную обработку и API-доступ.

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

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

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

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

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

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

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

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

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

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

type Transaction interface {
    Close() error

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

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

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

    Commit() error
    Rollback() error
}

А именно:

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

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

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

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

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

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

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

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

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

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

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

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

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

Германский умлаут и славянская третья палатализация
Кто интересовался историей славянских языков (в частности праславянским), тот наверняка слышал, что современные буквы ъ и ь ранее обозначали звуки ŭ и ĭ, сравните, например древнерусское мьзда, стькло и готское mizdo, stikls или древнерусское кънѧзь и финское kuningas. При этом вследствие третьей палатализации «твёрдый знак» мог переходить в «мягкий», например (в дореформенной орфографии) другиня другъ, но княгиня князь. Причиной палатальной перегласовки в данном случае является наличие в слове князь буквы «я», которая как некоторые любознательные читатели, наверное, уже слышали, может переходить в «ин» размять разминать, распять распинать, ну а «и» может переходить в «ь» липнуть, но льнуть (сравните капать / кануть). Иными словами, тем самым фактором из-за которого отражавшийся ранее на конце слов «ъ» перешёл в слове князь в «ь» является засевший в корне ещё один ерь «ь» «сингармонически» уподобляющий идущие за ним гласные себе. Такое уподобление называется прогрессивным.

Теперь же плавно перейдём к умляуту в германских языках по-иному именуемому i-mutation. Сравним, например английское full полный и fill наполнять. Возвращаясь к означенному в самом начале статьи можно заметить некую аналогию и она действительно есть ...

Продолжение следует

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

Sapient представил HRM — ИИ-модель, имитирующую структуру мышления человека

Сингапурский стартап Sapient Intelligence выпустил в открытый доступ Hierarchical Reasoning Model (HRM) — архитектуру нейросети, основанную на принципах работы человеческого мозга. Модель с 27 миллионами параметров обучается на 1000 примерах и превосходит крупные языковые модели в задачах логического мышления.

Архитектура системы

HRM состоит из двух связанных рекуррентных модулей: высокоуровневого (H) для абстрактного планирования и низкоуровневого (L) для быстрых детальных вычислений. Такая структура позволяет избежать быстрой сходимости стандартных архитектур.

Принцип работы основан на двух типах мышления:

  • Абстрактное планирование — формирует общую стратегию решения

  • Детальные вычисления — обрабатывает конкретные операции и нюансы

Архитектура вдохновлена тем, как человеческий мозг использует отдельные системы для медленного обдуманного планирования и быстрых интуитивных вычислений. Это кардинально отличается от chain-of-thought подхода современных LLM.

Результаты тестирования

Модель достигает практически идеальных результатов, используя всего 27 миллионов параметров и около 1000 обучающих примеров без предобучения. Для сравнения — GPT-4 содержит триллионы параметров.

Benchmark ARC-AGI (оценка общего интеллекта):

  • Sapient HRM — 40,3%

  • o3-mini-high — 34,5%

  • Claude Sonnet — 21,2%

  • DeepSeek-R1 — 15,8%

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

Технические преимущества

Эффективность обучения: Модель требует в разы меньше данных и памяти по сравнению с современными LLM. Это решает проблему растущих требований к вычислительным ресурсам.

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

Стабильность обучения: Архитектура обеспечивает устойчивость тренировки при значительной вычислительной глубине.

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

HRM показывает эффективность в задачах, требующих пошагового логического анализа:

  • Решение головоломок и математических задач

  • Навигация в сложных средах

  • Стратегическое планирование

  • Анализ паттернов и закономерностей

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

Значение для отрасли

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

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

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

Мое решение для Нерешаемой Проблемы

Все дети знают, что много мусора создает большие проблемы для Garbage Collector. Ну а взрослые видели и НЕРЕШАЕМЫЕ! Причем, мусора было немного:

We kept digging and learned the spikes were huge not because of a massive amount of ready-to-free memory, but because the garbage collector needed to scan the entire LRU cache in order to determine if the memory was truly free from references.

Что в этом случае делают взрослые? Правильно! Взрослые в ужасе убегают...

У меня есть решение для тех, кто устал убегать: mdb.BlobMap. Это быстрая хеш-таблица, не создающая проблем сборщику мусора:

ОК, что значит "не создающая проблем"? В данном случае это значит, что весь mdb.BlobMap -- это просто массив uint64...

Так НЕ БЫВАЕТ?!

Бывает, чо https://ders.by/go/blobmap/blobmap.html

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

FFTW vs Ne10 на ARM Cortex-A9: кому отдать БПФ в embedded?

Недавно в одном проекте по спектральному анализу ЛЧМ-сигналов на моей AD/DA плате я столкнулся с тем, что FFTW на Cortex-A9 в Zynq рисует задержку в сотни микросекунд — критично для реального времени. Решил проверить лёгкую библиотеку Ne10: оказалось, что на средних размерах БПФ (128–512) Ne10 даёт до +10% производительности (905 MFLOPS против 817 MFLOPS у FFTW) благодаря оптимизациям под NEON.

График производительности FFTW vs Ne10 на Cortex-A9
График производительности FFTW vs Ne10 на Cortex-A9

Однако Ne10 выигрывает не во всём: для очень малых (≤ 64) и произвольных больших размеров FFTW остаётся лидером за счёт агрессивного планирования, double-точности и возможности сохранять «wisdom»-планы. Выбор между ними зависит от сценария: если нужна быстрая интеграция и фиксированные степени двойки — Ne10, а для универсального решения с поддержкой любых N и многопоточности — FFTW.

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

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

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

"Что тут происходит? 😑"
"Что тут происходит? 😑"



Почему это большая проблема?

Распознать что-либо по такому "размытому квадратику" – серьезный вызов для алгоритмов. Стандартные модели, обученные на четких изображениях, часто теряют эффективность, когда объект занимает по высоте всего 32 пикселя (а то и 10!). Это напрямую влияет на точность работы систем в реальных условиях – будь то поиск автомобиля, предмета или распознавание лиц.

В чем сложность?

Главная трудность – "пропасть" между миром четких картинок (на которых обычно учатся модели) и миром размытых кадров. Алгоритмы плохо переносят знания из одного "мира" в другой.

Как с этим бороться?

В нашей новой (и первой) статье мы подробно разобрали ключевые подходы к решению такой проблемы в контексте распознавания лиц:

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

2. Адаптация модели: как "подружить" алгоритм с плохим качеством?

  • Трюки с данными: искусственно ухудшаем хорошие изображения при обучении (сжатие, шум), чтобы модель привыкла к помехам.

  • Дообучение: учим модель на реальных размытых данных. Важно делать это аккуратно, чтобы она не забыла, как работать с четкими изображениями. Помогают методы вроде LoRA (дообучение только маленькой части сети).

  • "Учитель" для "ученика": мощная модель, видящая четкие картинки, учит компактную модель работать с размытыми, передавая свои "знания".

3. PETALface: новый подход, который динамически комбинирует разные "настройки" (LoRA-адаптеры) в модели в зависимости от качества конкретного входящего кадра. Перспективно, но требует дальнейшего изучения.

Хотите разобраться глубже?

В статье мы подробно разбираем плюсы и минусы каждого подхода, рассматриваем специализированные датасеты (TinyFace, BRIAR) и анализируем нюансы свежего метода PETALface.

Сталкивались ли вы с проблемой низкого разрешения в своих проектах? Какие методы оказались эффективными? Делитесь опытом в комментариях!

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

Представлен бесплатный ресурс GoalKicker с книгами по IT-тематике от проджект-менеджмента и UX-райтинга до тем по алгоритмам, структурам данным и низкоуровневым языкам, включая ОС и архитектуру компьютеров,.Bash, UNIX, Linux, гайды по работе с командной строкой и прочими тулзами типа Vim, книги по самым востребованным на рынке языкам программирования, всё о работе с базами данных от основ до построения связанных таблиц и интеграции их в системы.

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

Эффективные хеш-таблицы на Go

В Go нет недостатка хеш-таблиц. Вы всегда можете использовать встроенную map[Key]Val, с ошеломительной скоростью обладающую непревзойденным удобством! А изобилие типов Keyразрешенных к использованию, способно довести до изумления!

Вот только ни указатель, ни слайс не подходят... Невозможно подсунуть свои операции (равенства и хеширования). Но хоть со скоростью все хорошо! (извините, не удержался)

Итого, мне пришлось написать HashMap[K, V any], закрывающую проблемы.

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

В это трудно поверить, но:

  • Без резервирования памяти (конфигурация R0), map[uint64]uint64 работает в 1.93 раза медленнее UintMap! И производит в 5.64 раза больше мусора!!

  • А с полным резервированием (R1), в 1.72 раза медленнее! И аж в 16.5 раз больше мусора!!!

Вдумайтесь! На коленке написанная хеш-таблица для целых чисел UintMap почти в два раза обгоняет ЖУТКО оптимизированную нативную map[uint64]uint64!! И существенно менее мусорит!!!

Но раз трудно поверить, то давайте проверим:

func MyUintMap() {
    const N = umN

//R0|    um := lib.NewUintMap(0)
    um := lib.NewUintMap(N) //R1|

    for i := uint64(0); i < N; i++ {
        um.Findsert(i, i+N)
    }
    lib.Assert(um.Size() == N)

    cnt := 0
    for i := uint64(0); i < N; i++ {
        if *um.Val(um.Find(i)) == i+N {
            cnt++
        }

        if um.Find(i+N) == -1 {
            cnt++
        }
    }
    lib.Assert(cnt == N*2)

    for i := uint64(0); i < N; i++ {
        um.Delete(i)
    }
    lib.Assert(um.Size() == 0)
}

func GoUintMap() {
    const N = umN

//R0|    m := make(map[uint64]uint64)
    m := make(map[uint64]uint64, N) //R1|

    for i := uint64(0); i < N; i++ {
        m[i] = i + N
    }
    lib.Assert(len(m) == N)

    cnt := 0
    for i := uint64(0); i < N; i++ {
        if m[i] == i+N {
            cnt++
        }

        if _, ok := m[i+N]; !ok {
            cnt++
        }
    }
    lib.Assert(cnt == N*2)

    for i := uint64(0); i < N; i++ {
        delete(m, i)
    }
    lib.Assert(len(m) == 0)
}

Здесь всего-то лишь вставка, два поиска и удаление. Запустите go test -bench=UintMap -benchmem и увидите сами. Вот только можно ли ругать Google за неэффективный map[uint64]uint64?

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

Итоги?

  1. Смело берите HashMap[K, V any] для слайсов и указателей!

  2. Немного оптимизированная BytesMap -- лучший выбор для []byte.

  3. Интересно оптимизированная UintMap -- это выбор для целых чисел. Разберитесь, что там "не так", и используйте за основу.

И как всегда, исходный код, подробности и пару неудачных шуток вы можете найти в моей статье https://ders.by/go/hashmap/hashmap.html

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

🔒 Ваш сервис готов к "Кузнечику"?

У нас в РФ есть ГОСТ 34.12-2018, в котором описана реализация этого алгоритма и еще одного "Магма" - это импортозамещение международного AES.

Как думаете, как скоро дадут приказ переходить на данные алгоритмы?

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

Задача о Тирексе, который строил сеть наугад

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

Условие

Тирекс построил собственный дата-центр и теперь хочет объединить 15 серверов в одну сеть. Он не задумывается о надежности топологии, поэтому хочет использовать минимально возможное количество кабелей — 14. 

Схема дата-центра Тирекса.
Схема дата-центра Тирекса.

Задача

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

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

Предлагайте свое решение в комментариях. А правильный ответ можно подсмотреть в Академии Selectel.

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

Представлена игра 2048 на Bash в терминале с 64 битами состояния.

«Поделитесь своим игровым состоянием с друзьями, просто отправив им число! Если переменная $STATE env не установлена, она генерирует новое случайное начальное число. В противном случае состояние доски и все будущие созданные ячейки будут детерминированными»,‑ пояснил автор проекта.

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

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

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

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

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

И вот сегодня я такой Бозон Хиггса засек на LinkedIn. Выпускник этого самого вуза X написал пост, как он изучал учебник Хеннесси-Паттерсона. Он показал фото листка бумаги, испещренного заметками и диаграммами. Он просто сидел, читал по частям учебник и делал такие заметки.

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

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

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

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

Хотя зачем я все это говорю. Сейчас грянет LLM и наша цивилизация исчезнет.

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