Вадим Великодный Статьи и заметки

Абстрактные синтаксические деревья и генерация LaTeX

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

Читать дальше

Корректирующие коды на пальцах

Корректирующие (или помехоустойчивые) коды — это коды, которые могут обнаружить и, если повезёт, исправить ошибки, возникшие при передаче данных. Даже если вы ничего не слышали о них, то наверняка встречали аббревиатуру CRC в списке файлов в ZIP-архиве или даже надпись ECC на планке памяти. А кто-то, может быть, задумывался, как так получается, что если поцарапать DVD-диск, то данные всё равно считываются без ошибок. Конечно, если царапина не в сантиметр толщиной и не разрезала диск пополам. Как нетрудно догадаться, ко всему этому причастны корректирующие коды. Собственно, ECC так и расшифровывается — «error-correcting code», то есть «код, исправляющий ошибки». А CRC — это один из алгоритмов, обнаруживающих ошибки в данных. Исправить он их не может, но часто это и не требуется. Давайте выясним, что это такое. Первую версию этой статьи я написал для «Хабра» привожу её здесь с минимальными изменениями.

Читать дальше

Вейвлет-сжатие на пальцах

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

Читать дальше

Вычисления на GPU с помощью OpenGL

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

Читать дальше

Управление мощной нагрузкой

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

Читать дальше