[Перевод] Создаём аппаратный навигатор рандонавта

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

У этой деятельности есть метафизическая подоплёка: предполагается, что намерения рандонавта воздействуют на процесс случайного выбора точки на карте. Лучше всего об этом сказали в статье NY Times: «Подумайте: закон притяжения соприкасается с геокешингом».

3a3e772ea672db527a32239007f61b0f.jpg

Навигатор рандонавта «Dujour»
С чего бы это было возможным? Дело в том, что есть люди, которые верят в то, что используя случайные числа, полученные с опорой на квантовые процессы, например — с применением аппаратного генератора случайных чисел (Hardware Random Number Generator, HRNG), можно силой мысли влиять на то, какие именно координаты будут выбраны. В результате можно столкнуться с некими удивительными, познавательными или даже неприятными последствиями. Хорошей иллюстрацией этой идеи служит одно мрачное видео из TikTok, в котором подростки-рандонавты находят чемодан с частями тела.

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

Что произойдёт в том случае, если сконцентрироваться на конкретном намерении в точности тогда, когда генерируются случайные географические координаты? В этом — суть рандонавтинга.

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

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

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

50f0212aee15b8134107581694e5c15e.png

Пустоты и аттракторы (источник)

Это — один из моих самых сложных проектов. Вам, чтобы его воспроизвести, понадобится кое-какое «железо» и навыки программирования на Python. Я называю это устройство «Dujour» (в честь одного из персонажей «Матрицы»). Вам, чтобы сделать себе такое же устройство, понадобится следующее:

  • 2 Raspberry Pi (или аналогичных одноплатных компьютера).
  • 1 аппаратный генератор случайных чисел с интерфейсом USB. Я рекомендую либо OneRNG, либо TrueRNG.
  • LCD- или VFD-дисплей (я использовал дисплей Matrix Orbital VK204–25).
  • Аккаунт на Twilio, нужный для рассылки текстовых сообщений.
  • Гирлянда из цветных светодиодов (ну, эта «железка» не такая уж и нужная, но как по мне, с ней устройство лучше выглядит).
  • Python-скрипты: rabbit.py, sendSMS.py, orbitalWrite.py и restrngsever.py.

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

Некую разновидность моего проекта можно создать и с использованием всего одной платы Raspberry Pi, подключив HRNG к локальному USB-порту, но я предпочитаю применять отдельное устройство. Я много экспериментировал с генераторами случайных чисел и пришёл к выводу о полезности использования удалённого RNG-сервера, к которому могут обращаться несколько клиентских устройств.

Ниже приведена схема, демонстрирующая высокоуровневое представление процесса, на котором основан рандонавтинг. Главный скрипт носит имя rabbit.py, он работает на первой плате Raspberry Pi, которую я называю Dujour1. Когда его запускают, он (1) выполняет REST-запрос ко второму устройству — Dujour2 (к хосту аппаратного генератора случайных чисел) и получает от него (2) несколько случайных чисел с плавающей запятой. Эти числа используются (3) для выбора близлежащего места, которое можно исследовать, и для указания времени посещения этого места. Затем скрипт собирает (4) URL для сервиса Google Maps и отправляет его (5) на телефон в виде текстового сообщения с использованием службы Twilio.

ce130d7ab9dcf47f3c52019f534abc57.png

Высокоуровневая схема проекта

Вот видеоклип, на котором можно увидеть работу моего устройства.


Навигатор рандонавта в действии

На плате Raspberry Pi, называемой Dujour1, нужно установить и настроить Linux. К ней нужно подключить дисплей (вот инструкции для Matrix Orbital VK204–25). На следующем снимке показано подключение моего дисплея к плате.

b2ddf7ec8cd0bababd1995c35649a624.jpg

Подключение Matrix Orbital VK204–25 к Raspberry Pi

Я поместил Raspberry Pi и дисплей под стеклянный колпак и присоединил LED-гирлянду к выходам GPIO 5V и GND. Стеклянный колпак показался мне удобным «корпусом», в котором помещается всё что нужно. К тому же, мне нравится то, как всё это выглядит.

Для обеспечения работы скрипта rabbit.py нужен Python и следующие библиотеки:

  • math
  • numpy
  • subprocess
  • sys
  • time
  • json
  • urllib2

Если у вас при запуске скрипта появится ошибка, связанная с зависимостями, это значит, что вам понадобится установить недостающий модуль.

До запуска скрипта нужно задать несколько переменных. Все они находятся в разделе скрипта User Defined Variables. Вот описание некоторых из них:

  • loghandle: путь к текстовому файлу, в котором логируются все запуски скрипта
  • window_secs: максимальное число секунд, используемое при нахождении времени для посещения выбранного места.
  • meters_out: максимальное расстояние в метрах от текущего местоположения рандонавта, используемое при выборе места, которое ему нужно посетить.
  • latitude1, longitude1: текущие координаты, которые используются как начальная точка при поиске целевых координат.
  • lcd_addr: шестнадцатеричный адрес LCD-дисплея при использовании интерфейса I2C.
  • HWRNG: IP-адрес и порт удалённого HRNG-сервера в формате XXX.XXX.XXX.XXX:YYYY.

Проект зависит от нескольких внешних скриптов. sendSMS.py используется для отправки текстовых сообщений с координатами. orbitalWrite.py применяется для работы с дисплеем. Оба скрипта надо поместить в ту же папку на плате Dujour1, в которой находится скрипт rabbit.py. Обратите внимание на то, что мой скрипт рассчитан на работу с определённым дисплеем Matrix Orbital (VK204–25). Если вы решите использовать какой-то другой дисплей — вам понадобится соответствующим образом отредактировать код. В скрипте есть комментарии относительно участков кода, ответственных за взаимодействие с дисплеем.

Для обеспечения работы скрипта sendSMS.py нужна пара переменных окружения, которые позволят ему пройти аутентификацию в службе Twilio: TWILIO_ACCOUNT_SID и TWILIO_AUTH_TOKEN. Вот инструкция по настройке этих переменных. Кроме того, нужно установить вспомогательную Python-библиотеку Twilio.

На плате Raspberry Pi, которую я называю Dujour2, играющей роль сервера, надо тоже установить и настроить Linux. Именно к этой плате подключается аппаратный генератор случайных чисел. Я использовал USB-устройство OneRNG, инструкции по его настройке можно найти здесь.

Ниже показан мой сервер.

e6d28a04cd46085e508c14c2cd2263ba.jpg

HRNG-сервер, использующий OneRNG

После того, как первоначальная настройка сервера завершена, на нём надо запустить скрипт rngrestserver.py, который используется для передачи случайных чисел устройству Dujour1. Подробности о работе скрипта REST-сервера можно найти здесь.

Итоги


Если вы, пользуясь моим руководством, создали собственное устройство, это значит, что у вас теперь есть всё необходимое для рандонавтинга. Просто запустите из терминала скрипт ./rabbit.py, после чего на ваш телефон придёт сообщение со ссылкой на карту (то, что вы увидите после открытия ссылки, будет выглядеть примерно так, как показано ниже).
2eae3608e72be4a19b9ab560ca0fa444.png

Место, найденное с помощью аппаратного генератора случайных чисел

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

Возможно, я когда-нибудь сделаю особый навык для Amazon Alexa. Это позволило бы мне пользоваться моим рандонавтическим сервером с телефона.

А вы примеряли на себя костюм рандонавта?

oug5kh6sjydt9llengsiebnp40w.png

© Habrahabr.ru