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

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

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

Подробнее

Библиотека ppmformats. Чему я научился создавая обработчики PortablePixmap форматов

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

Но, тут меня ждала неудача: dlib отказался работать на смартфоне (что привело к моему первому pull request в репозиторий dlib), а остальные библиотеки не так удобны и точно также отказываются работать в Termux на смартфоне. При этом срочно нужно организовать работу с изображениями и сделать это так, чтобы удобство было на уровне dlib, а весь остальной функционал мог бы работать с минимальным рабочим окружением и не требовал бы сторонних библиотек.

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

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

Подробнее

Циклические сдвиги и криптопримитив enRUPT

Читая статьи с HabrHabr по одному из самых странных языков программирования (называется J, если кому-то интересно), я встретил в комментариях описание очень простого и компактного алгоритма шифрования под названием enRUPT.

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

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

Подробнее

Определить порядок байтов, используемый текущей архитектурой

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

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

Подробнее

Перемещение объектов в heap

Официальная документация частенько удивляет! На этот раз мы нашли полезный рецепт в changelog к старой (на данный момент) версии компилятора.

Шаблон moveToHeap принимает некий объект, извлекает указатель на него, производит выделение памяти с помощью GC.malloc и  moveEmplace (который лежит в std.algorithm) осуществляет перемещение данных из одного участка памяти в другой. С помощью взятия и распечатки указателей на объект до и после перемещения убеждаемся, что указывают они на разные участки памяти (указатель — это адрес, распечатав адреса видим что они разные). Читать далее →

Подробнее

Использование dub для приложений из одного *.d файла

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

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

Подробнее

Простой генератор целочисленных делителей частоты на D

При создании цифровых устройств на базе микросхем программируемой логики (ПЛИС) часто требуется из входной частоты тактового генератора на плате получить некую другую частоту. Казалось бы с этим с успехом справляются встроенные генераторы на базе PLL, но а что если все такие генераторы уже заняты и нужно как-то из входной частоты получить новую, но при этом целочисленную ???

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

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

Подробнее

Алгоритм для «перемешивания» массива случайным образом

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

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

Подробнее

Отрисовка и закраска многоугольников в dlib

Данный простой рецепт публикуется как один из исторических материалов, который является сейчас частью проекта R.I.P и поможет вам справится с отрисовкой многоугольников (и не только правильных), а также с задачей их закраски. Читать далее →

Подробнее

Формула Бэйли-Боруэйна-Плаффа

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

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

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

Подробнее