Как стать автором
Поиск
Написать публикацию
Обновить

Разработка

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

Марта Шкрета — одна из авторов научной статьи «Feynman-Kac Correctors in Diffusion: Annealing, Guidance, and Product of Experts» (arXiv:2503.02819). В работе описывается применение корректоров Фейнмана — Каца, теоретически выверенной процедуры коррекции траекторий в уже обученных диффузионных моделях, позволяющей генерировать выборки точно из новой, заданной пользователем плотности, а не полагаться на эвристическое смешение скоров.

Статья получила приглашение на International Conference on Machine Learning этого, 2025 года. В рамках конференции ICML в числе прочих форматов проводятся постерные доклады в выставочном зале. В данном формате в отведённый слот времени авторы прикрепляют плакаты одного из типовых размеров (рекомендуется до 182 см в длину) и общаются с любым подошедшим участником. По сути, это сотни одновременных мини-презентаций для тех, кого не посчитали достаточно интересным для большого доклада.

При всей сложности научной работы Шкреты и её соавторов команда подошла к оформлению своего постера с юмором. Авторы воспользовались созвучием сокращения англоязычного написания «Feynman — Kac formula» и названия сети ресторанов быстрого питания KFC. У себя в микроблоге Марта выложила фотографию постера. Заметно, как дизайн постера повторяет шрифты и прочие элементы оформления ресторанов с курятиной, а текст обильно снабжён разнообразными отсылками к еде и её приготовлению.

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

Как создать простейшую модель GPIO для QEMU

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

Апертура и адресное пространство

Как я упоминал в одной из своих статей, любое MMIO-устройство — это MemoryRegion с заданными шириной доступа и размером. Для того, чтобы он был виден CPU или другому устройству, такому как DMA, его нужно разместить в соответствующем адресном пространстве — например, пространстве, назначенном для cpu0:

      0x0                                    0xffffffffffffffff
      |------|------|------|------|------|------|------|------|
0:    [                    address-space: cpu-memory-0        ]
0:    [                    address-space: memory              ]
                    0x102000           0x1023ff
0:                  [             gpio        ]

В любое время можно посмотреть существующие адресные пространства и регионы памяти в мониторе QEMU:

(qemu) info mtree
[...]
address-space: cpu-memory-0
address-space: memory
  0000000000000000-ffffffffffffffff (prio 0, i/o): system
    0000000000102000-00000000001023ff (prio 0, i/o): gpio
[...]

Тогда в модели устройства нам нужно всего лишь создать такой регион и назначить ему соответствующие функции записи и чтения:

static const MemoryRegionOps mmio_mmio_ops = {
    .read = mmio_gpio_register_read_memory,
    .write = mmio_gpio_register_write_memory,
    .endianness = DEVICE_NATIVE_ENDIAN,
    .valid = {
        .min_access_size = 4,
        .max_access_size = 4,
    },
};
 
[...]
memory_region_init_io(iomem, obj, &mmio_mmio_ops, s,
                      "gpio", APERTURE_SIZE);
[...]

Фактически это означает, что все семейство инструкций Load/Store будет вызывать mmio_gpio_register_read_memory()/mmio_gpio_register_write_memory() при совпадении адреса чтения/записи с адресом региона в адресном пространстве.

static uint64_t mmio_gpio_register_read_memory(void *opaque, hwaddr addr, unsigned size);
static void mmio_gpio_register_write_memory(void *opaque, hwaddr addr, uint64_t value, unsigned size);

Передаваемые аргументы и возвращаемое значения интуитивно понятны. Отмечу, что hwaddr addr — это адрес относительно начала нашего региона, а не абсолютный адрес.

Нам остается лишь создать устройство и добавить его регион в файле машины:

gpio = qdev_new(TYPE_MMIO_GPIO);
sysbus_mmio_map(SYS_BUS_DEVICE(gpio), 0, ADDRESS);

Почти десять лет назад Никита Шубин, ведущий инженер по разработке СнК в YADRO, сделал возможность чтения и записи GPIO для QEMU. Читайте первую часть трилогии о долгом пути до GPIO в QEMU.

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

Сегодня за день я сделал:

1. Переработал FidoJ (современный аналог jNode, на базе микросервисной архитектуры) настолько, насколько это возможно. Поправил все последствия вайбкодинга, и теперь FidoJ - это реально пусечка.

2. NodehistJ (Java-аналог перловому nodehist) также подвергся небольшим изменениям, также касающиеся устранения последствий вайбкодинга.

3. Теперь я не планирую делегировать ИИ бо‌льшую часть своей работы. По моему мнению, ИИ (юзал DeepSeek-V3, ибо Claude слишком дорогой для меня) даже не справлялся с багфиксом, чего уж говорить о полноценном рефакторинге. Поэтому с вайбкодингом я завязываю. Вручную намного быстрее, чем через ИИ.

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

Сегодня у нас задачка с подвохом для тех, кто пишет на Java. Какой результат будет выведен в консоль? Пишите в комментариях!

import java.util.stream.Stream;
public class Main {
    public static void main(String[] args) {
        Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
        Integer result = prepareStream(stream);
        System.out.printf("Result after stream processing: %s%n", result);
    }

    private static Integer prepareStream(Stream<Integer> stream) {
        System.out.printf("Incoming stream with: %d elements%n", stream.count());
        return stream
                .map(integer -> integer++ + ++integer)
                .filter(integer -> integer % 3 == 0)
                .reduce(0, Integer::sum);
    }
}

Дальше будет решение, поэтому если не хотите спойлеров — не читайте!

.

.

.

Подвох в том, что будет выброшено исключение:

Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed
 at java.base/java.util.stream.AbstractPipeline.<init>(AbstractPipeline.java:203)
 at java.base/java.util.stream.ReferencePipeline.<init>(ReferencePipeline.java:96)
 at java.base/java.util.stream.ReferencePipeline$StatelessOp.<init>(ReferencePipeline.java:800)
 at java.base/java.util.stream.ReferencePipeline$3.<init>(ReferencePipeline.java:191)
 at java.base/java.util.stream.ReferencePipeline.map(ReferencePipeline.java:190)
 at Main.prepareStream(Main.java:16)
 at Main.main(Main.java:7)

Исключение выбрасывается из-за того, что при выводе в консоль лога с количеством элементов стрима мы использовали операцию stream.count(), которая является терминальной и делает дальнейшее использование стрима невозможным.

System.out.printf("Incoming stream with: %d elements%n", stream.count());

Ну а после того, как мы избавимся от лога, который нам все ломает, правильный ответ будет — 18.

С учетом postfix и prefix инкремента числа в каждой итерации мы получаем:
.map(1 → 1 + 3)...(5 → 5 + 7)

Потом после фильтрации по делению на 3 без остатка в стриме остаются числа 6 и 12. И при помощи операции reduce() находим сумму этих чисел.

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

В языке C (и C++ тоже) существуют три различных типа: char, unsigned char и signed char.

При этом типы unsigned char и signed char предназначены для хранения чисел. "Предназначены" стоит воспринимать как "рекомендуется использовать для этих целей", фактически, программист волен в этих типах хранить и, выражаясь терминами языка Си, символы.

Когда выбрать unsigned char, а когда signed char? Нужно подумать сколько значений может принимать ваша переменная. Например, если вы храните результат ввода с клавиатуры и у вас вообще не стоит проверка на длину введенного числа, то ... То ваша программа порочна. Следует ограничивать предельную размерность всех данных. Итак, если у вас пользователь вводит
число из диапазона [0..255], тогда используйте unsigned char. Если у вас переменная может быть в диапазоне [-128..127] то используйте signed char. И так далее. Если у вас числа уже не помещаются даже в uint64_t, гуглите Длинная арифметика.

Тип char предназначен для хранения только символов. В зависимости от настроек компилятора char при компиляции транслируется или в signed char или в unsigned char. Хранение чисел в char возможно, но является признаком быдлокода.

char a = 'a'; //верно
char b = 200; //задумайтесь, может тип указать как uint8_t ?

Отдельно хочу отметить, что в 1999 году уже до всех дошло, что каждый раз писать ансигнед чар долго, очень долго. Были введены синонимы (typedef) в файле stdint.h

typedef unsigned char uint8_t;
typedef signed char int8_t;

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

К слову. Крайние значения для каждого типа хранятся в limits.h. Я напоминаю, что использование магических чисел - плохая практика. Поэтому обратите внимание на возможность написания UCHAR_MAX вместо 255 и так далее см. вики

Для тех, кто пишет код под 8-bit архитектуры (привет, atmega) но планирует в дальнейшем переход на другие платформы, обратите внимание на такие типы, как uint_least8_t...

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

За создание аниме-аватаров для чат-бота Grok в xAI платят до $440 тыс. в год. Разработчику нужно создавать реалистичных ИИ-аватаров, вовсю тестировать геймплей во всех ситуациях и работать с голосовыми командами. Требования — Python, Rust, WebSocket, WebRTC и опыт работы iOS.

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

Автоматическое добавление номера задачи в коммит

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

В своей работе я придерживаюсь структурированного подхода к именованию веток и сообщений коммитов. Подробнее об этом можно почитать здесь:
📎 https://habr.com/ru/articles/820547/

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

Почему это удобно?

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

Пример структуры ветки:

feat/dev-123_filter или fix/dev-432_filter

Сообщения коммитов я пишу в следующем формате:

dev-123 | настроил сортировку в фильтре

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

Скрипт prepare-commit-msg

#!/bin/sh

COMMIT_MSG_FILE=".git/COMMIT_EDITMSG"
BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD)

if echo "$BRANCH_NAME" | grep -qE 'dev-[0-9]+'; then
  TASK_ID=$(echo "$BRANCH_NAME" | grep -oE 'dev-[0-9]+')

  if ! grep -q "$TASK_ID" "$COMMIT_MSG_FILE"; then
    sed -i.bak "1s/^/$TASK_ID | /" "$COMMIT_MSG_FILE"
    rm -f "$COMMIT_MSG_FILE.bak"
  fi
fi

Скрипт нужно сохранить как .git/hooks/prepare-commit-msg и сделать исполняемым:

chmod +x .git/hooks/prepare-commit-msg

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

  • COMMIT_MSG_FILE — путь до файла, в который Git записывает текст коммита.

  • BRANCH_NAME — название текущей ветки.

  • Сначала проверяется, есть ли в названии ветки номер задачи (dev-123).

  • Если он найден и ещё не указан в коммите — скрипт добавляет его в начало первой строки сообщения.

Таким образом, ваш коммит автоматически будет выглядеть так:

dev-123 | добавил пагинацию в список товаров

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

Если будет интересно — это и другие полезные скрипты, на моём GitHub

https://github.com/prog-time

Спасибо за внимание! ✌️

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

На Steam Deck вышел неофициальный плагин lsfg‑vk для утилиты Lossless Scaling, позволяющий повысить производительность в играх путём генерации кадров. Для установки плагина на портативный ПК, потребуется сперва купить основную версию Lossless Scaling в Steam, установить менеджер плагинов Decky Loader и открыть в нём архив с lsfg‑vk. После установки плагина для использования генерации кадров в конкретной игре, её необходимо открывать с командой «~/lsfg%command%» в параметрах запуска.

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

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

В Облаке Рег.ру доступна ОС Astra Linux SE «Смоленск»

В облачной платформе Рег.ру теперь доступна новая редакция отечественной ОС Astra Linux SE «Смоленск» с максимальным набором средств защиты информации. Новое решение позволяет создать безопасную среду и предназначено для работы с данными категории «особой важности». 

Astra Linux SE «Смоленск» представляет собой защищенную ОС, помогающую создать наиболее безопасную и соответствующую законодательным требованиям среду «из коробки». Решение будет полезно как для взаимодействия с корпоративными и государственными IT-ресурсами, так и для всех тех, кто работает с конфиденциальными данными.

Внутри новой ОС:

  • мандатное управление доступом (МРД) и контроль целостности (МКЦ) — обеспечивают контроль действий пользователей на уровне процессов и файлов;

  • замкнутая программная среда (ЗПС) — допускает запуск только верифицированного ПО;

  • защита от угроз «нулевого дня» — для мандатного контроля целостности критичных файлов.

Заказать и потестировать Astra Linux SE «Смоленск» можно в личном кабинете облачной платформы Рег.ру.

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

Откровения евангелистов БЯМ (LLM) для целей софтостроения генерируются публикуются с высокой скоростью. Не только на хабре, LinkedIn заполнен ими "под завязку". Прочитывать всё невозможно, да и не нужно, но некоторый тренд в изложении присутствует.

К сожалению, авторы много пишут о процессе, забывая собственно цели. Упоминание о функциональной сложности программы, как правило, отсутствует. Длина описаний процесса может создать ложное впечатление о развесистой функциональности, хотя большинство примеров находятся на уровне "записная книжка". В этом нет ничего плохого, просто не забываем, что 30 лет назад RAD типа Delphi умели создавать такие же "книжки" без написания кода вообще: достаточно было "накидать" компонентов на форму, настроить, связать их, и нажать "Run".

Накидали, и что дальше?

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

Размер спецификаций псевдокода вкупе с описаниями контекста среды могут превзойти собственно размеры генерируемого кода, написанного программистом на формальном ЯВУ. Спецификации придется так же хранить в Git, и нервно просматривать, что же изменилось в сценариях, почему, ***, вместо слова "опять" кто-то написал "снова".

Для детерминированности процесса желательно, чтобы моделька была в том же состоянии, что и на предыдущем этапе генерации, но для внешних БЯМ-сервисов это недостижимо. Напомню, что компиляторы и классические генераторы кода (CASE, MDD) - детерминированные.

На первый план выходят тесты, их нужно писать "больше и лучше", потому что под капотом теперь только "черный ящик", "белого" больше нет. Тесты нужно постоянно обновлять в зависимости от объема изменений. Если ваши новые спецификации меняют 20% существующей кодовой базы, то тестов придется менять вдвое больше, принимая 2:1 за стандартное соотношение тестов к коду. Для языков без статической типизации тестирование еще более усложняется.

В реальных проектах написание сотен строк в день - это режим стартапа, причем на "нулевом цикле". Достаточно быстро программист приходит к естественной норме десятков строк в день, остальное время занимает понимание текущего потока проблем, поиск ошибок, интеграция и стабилизация. Хороший программист минимизирует объем порождаемого кода. Нужно ли включать БЯМ для написания 50 строк в день - вопрос.

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

Напоследок накину немного философского. Евангелисты любят упоминать, что человеческий мозг и БЯМы работают на одних и тех же принципах. Часто выясняется, что курса "Аналоговые ЭВМ" на их потоке уже не было, что несколько удручает. Еще более простой вопрос на примере несуществующей (пока?) телепортации: "Человек на входе телепортера и на выходе - это одна и та же личность?"

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

Люди остаются наиболее уязвимым звеном в системе безопасности

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

В 2023 г. было совершено 3 300 успешных кибератак ‒ этот год стал рекордным за целое десятилетие. Сергей рассказал, что количество мошеннических операций в отрасли продолжает расти. По разным оценкам, за последние три года их число увеличилось на 30-40%. Основной вклад в такую динамику внесли атаки методом социальной инженерии (включают обман и психологические манипуляции, направленные на то, чтобы заставить жертву совершить нужные злоумышленнику действия), а также схемы обмана при помощи телефонных звонков, мессенджеров и поддельных сайтов.

Методы «цифровых атак» становятся все изощреннее. Помимо традиционно активного использования фишинга (копии сайтов для получения доступа к личной информации клиентов, например паролям), в сети компьютеров, зараженных вредоносным программным обеспечением, растет число случаев использования мошенниками искусственного интеллекта и дипфейков ‒ методов синтеза изображения и голоса клиентов. По данным системного интегратора «Информзащита», с января по октябрь 2024 г. число атак с использованием технологии дипфейк в финансовом секторе выросло на 13% год к году ‒ до 5 700 случаев.

При этом улучшилась и эффективность антифрод-систем банков, количество предотвращенных мошеннических операций значительно выросло. По данным ЦБ, антифрод-системы кредитных организаций в 2024 г. отразили 72,17 млн попыток хищения денег клиентов со стороны злоумышленников. Годом ранее ‒ 34,77 млн.

В первом квартале 2025 г. количество предотвращенных «ОТП Банком» операций без добровольного согласия клиентов увеличилось на 17% по сравнению с IV кварталом 2024 г. и составило 631 транзакцию. Это связано в основном с возросшей активностью мошенников. Вследствие этого системой антифрода банка было выявлено и отклонено больше подозрительных операций по сравнению с предыдущим периодом. При этом в банке уделяют большое внимание влиянию системы антифрода на наших клиентов: в течение первого квартала 2025 г. доля приостановленных антифродом операций от общего их количества была снижена почти вдвое: с 0,27% до 0,18%.


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

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

Продолжение интервью можно прочитать на сайте "Ведомости".

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

По мнению специалиста по этике моделей в OpenAI Шона Гроува, в будущем наиболее ценными программистами станут те, кто умеет чётко формулировать мысли, а не просто писать код.

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

Гроув называет код лишь «потерянной проекцией» (lossy projection) изначального замысла и ценностей. С развитием ИИ систем, по его мнению, главное умение программиста смещается от написания кода к созданию точных спецификаций и промптов, способных передать намерение максимально полно.

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

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

Тест «Какой вы бизнес-аналитик?» — оцените свой уровень и получите чек-лист

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

Что вас ждёт:

✔️ 10 вопросов о работе с требованиями, декомпозиции задач, анализе данных и коммуникации с заказчиками и командой.

✔️ Честный вердикт на каком уровне находитесь: Junior, Middle или Senior.

✔️ Полезный бонус — бесплатный чек-лист лист «Как разбить работу бизнес-аналитика на задачи», который поможет структурировать проекты и избежать ошибок в планировании.

Готовы проверить себя? Переходите по ссылке и узнайте, какие области стоит прокачать для профессионального роста.

P.S. Чек-лист работает, даже если тест выявил, что ваша суперсила — это крепкий кофе и удалёнка.

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

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

Как улучшить режим ночной съемки с помощью нейросети на примере MEFNet

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

MEFNet — это подход к слиянию изображений с разной экспозицией. Он создан для работы со статическими последовательностями кадров произвольного разрешения и в произвольном количестве. Название MEFNet происходит от термина Multi-Exposure Fusion, то есть «многоэкспозиционное смешивание». Отсюда и сокращение MEF.

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

Схема работы алгоритма MEFNet. Источник: Ma, K., Duanmu, Z., Zhu, H., Fang, Y., & Wang, Z. (2019). Deep guided learning for fast multi-exposure image fusion. IEEE Transactions on Image Processing, 29, 2808-2819
Схема работы алгоритма MEFNet. Источник: Ma, K., Duanmu, Z., Zhu, H., Fang, Y., & Wang, Z. (2019). Deep guided learning for fast multi-exposure image fusion. IEEE Transactions on Image Processing, 29, 2808-2819

Схема работы алгоритма MEFNet. Источник: Ma, K., Duanmu, Z., Zhu, H., Fang, Y., & Wang, Z. (2019). Deep guided learning for fast multi-exposure image fusion. IEEE Transactions on Image Processing, 29, 2808-2819

Алгоритм MEFNet работает следующим образом. На вход подается серия изображений с разной экспозицией — они сначала переводятся в YUV-формат. Далее основная обработка выполняется только по Y-каналу, который отвечает за яркость. Дело в том, что именно яркостный компонент в наибольшей степени определяет структуру и детализацию сцены.

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

  • Слои 1–6 используют ядра размером 3×3 с разными коэффициентами расширения (dilation rates): 1, 2, 4, 8, 16, 1. Это позволяет захватывать контекст на разных масштабах.

  • Слой 7 — финальный слой с ядром 1×1, который преобразует фичи в весовые карты.

  • Нормализация — после каждого сверточного слоя (кроме последнего) применяется адаптивная нормализация (AN), сочетающая нормализацию по экземпляру (instance normalization) с обучаемыми параметрами.

  • Активация — используется Leaky ReLU (LReLU) для сохранения структурной информации.

Подробнее о MEFNet и других алгоритмах улучшения режима ночной съемки в мобильных устройствах на примере планшета KVADRA_T читайте в статье Полины Лукичевой из команды AI ML Kit в YADRO.

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

Сегодня утро началось не с кофе...

Иногда мне кажется, что это правда
Иногда мне кажется, что это правда

Google Chrome, внезапно обновившийся до версии 138, отключил uBlock Origin и выругался, что расширение более не совместимо с текущей версией браузера, и вообще бяка.

Впрочем, для этой проблемы нашлось временное решение:

  1. Вставляем в адресную строку
    chrome://flags/#temporary-unexpire-flags-m137 и меняем значение на [Enabled]

  2. Перезапустить браузер Chrome

  3. По очереди меняем следующие значения, аналогично п.1
    chrome://flags/#extension-manifest-v2-deprecation-warning ставим [Disabled]
    chrome://flags/#extension-manifest-v2-deprecation-disabled ставим [Disabled]
    chrome://flags/#extension-manifest-v2-deprecation-unsupported ставим [Disabled]
    chrome://flags/#allow-legacy-mv2-extensions ставим [Enabled]

  4. Еще раз перезапустить Chrome

Продолжаем наслаждаться интернетом с меньшим количеством рекламного спама на наших экранах.

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

Меня давно стал мучать вопрос, почему на разных Freelance платформах возникают странные заказы на разработку сайта, но с припиской "Студиям не писать".

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

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

Так в чем же может быть секрет такой не любви?

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

Очень хочу увидеть ваши комментарии объясняющие такое поведение.

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

Всем привет!

Я сделал бесплатное расширение для Chrome, которое помогает SEO-оптимизировать сайты под голосовой и ИИ-поиск.

Недавно я собрал небольшой сайд-проект под названием Voixa — это бесплатное расширение для Chrome, которое помогает сайтам лучше ранжироваться в AI-поисковиках вроде ChatGPT, Perplexity, Siri, Alexa и Google Assistant.

Voixa основано на принципах AEO (Answer Engine Optimization) и даёт вам "оценку голосового поиска", а также полезные рекомендации: анализ структуры данных, проверка speakable-тегов, подбор long-tail ключевых слов и многое другое.

Можно просканировать любую страницу в один клик, получить PDF-отчёт и понять, что нужно улучшить.

https://chromewebstore.google.com/detail/voixa-ai-seo-tool-rank-fi/nhpgpbkighoakfiocoonbbfemffpmmbk?pli=1

Буду рад конструктивной обратной связи или идеям, как сделать лучше!

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

Как навели порядок в работе техписателей и ускорили процессы

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

Чтобы навести порядок, команда предприняла несколько шагов:

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

  • Определили правила именования файлов, веток и структуру репозитория.

  • Согласовали формат взаимодействия внутри команды.

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

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

Стали шире использовать возможности разметки: избавились от лишнего, ввели переиспользование через ключи (conkeyref, keyref) и упростили поддержку кода. Поработали и с визуальной частью:

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

  • Стандартизировали визуальный стиль.

  • Убрали визуальный шум, сфокусировались на главном.

  • Установили лимит на размер изображений для ускорения загрузки.

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

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

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

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

Automate Your Daily Tasks in 10 Minutes: A Practical Guide to n8n for Beginners

Until 2022, I thought automation was only large companies. But in 2022 I discovered n8n, and everything changed. Now, I automate routine work, reports, and even whole business processes—sometimes in under 10 minutes. Here’s how it works, what surprised me, and what you can try today.

In 2022, I deployed n8n on a separate VPS to demonstrate the ability to process design data from Revit and show that it's like working in Dynamo or Grasshopper, but for data managers and automation pipelines outside of Autodesk products.

But it was hard to get experts interested in 2022 - at the time, n8n was still in its early stages: there were no Python nodes, no LLM integration, and most workflows took weeks to create, relying on scattered blog posts and incomplete examples on forums.

Fast forward to 2025, and everything has changed.

Today, thanks to native LLM nodes, you can simply ask ChatGPT, Claude, or any advanced AI assistant to generate automation n8n pipelines — whether for validating parameters or producing custom QTO tables — and get ready-to-run workflows in seconds.

Why Bother with Automation?

Let’s be honest: most “office work” is repetitive. Copy-paste, renaming files, sending the same email—again and again. It’s boring and, more importantly, wastes hours every week. For me, automation started as an experiment, but quickly became a must-have. Once you automate your first task, you won’t want to go back.

What is n8n and Why Use It?

n8n (pronounced “n-eight-n”) is a free, open-source tool for automating anything—emails, file operations, notifications, even AI tasks. The best part? No coding needed. You just drag, drop, connect blocks, and press play. It runs on Windows, Mac, or Linux. I set up my first workflow in under 15 minutes.

How I Got Started (And You Can Too)

  1. Install Node.js (from the official site, takes 2 minutes)

  2. Install n8n with one command

  3. Open n8n in your browser (local or online)

  4. Start building: drag blocks (“nodes”) to connect apps, add logic, or even call ChatGPT to write emails for you!

Video Tutorial:
Automate Your CAD-BIM Workflows Local with n8n + ChatGPT & Claude | No Code, No Plugins, No Internet

My first workflow? Automating project reports — collecting data, formatting it, and sending it as an email, all triggered by a single button.

Video Tutorial:
Automate Your CAD-BIM Workflows Local with n8n + ChatGPT & Claude | No Code, No Plugins, No Internet

Where the Magic Happens: AI & Templates

The next “wow moment” for me was connecting n8n to AI tools like Claude and ChatGPT. Need to generate text, analyze data, summarize, or respond to messages? Just add a ChatGPT node—no API coding, just your prompt.

Short on time? n8n has a big library of ready-made templates. You can find workflows for almost any need: document processing, cloud backups, database syncs, even advanced stuff like BIM/CAD data processing. Grab a template, tweak it for your needs, done.

Lessons Learned and Tips

  • Don’t overthink: Start simple. Even automating one small task (like downloading attachments from email) pays off.

  • Debug as you go: n8n makes it easy to see where something breaks—just follow the logs, tweak, and re-run.

  • Experiment: The community is active and shares real-life examples. Some of my best workflows came from GitHub repos or the official n8n library.

  • Combine tools: I use n8n with spreadsheets, databases, cloud storage, and AI. Everything connects!

Why You Should Try It

After a few weeks, I realized how much time I was saving. Reports that took 30 minutes now take 2. Integrations that seemed impossible (like sending BIM data to a spreadsheet, then to Teams) were suddenly simple.

Automation isn’t just for techies anymore. With tools like n8n, anyone can build and run real workflows—saving hours, reducing errors, and focusing on what really matters.

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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