Муж-джун повесил полку в прихожей. Жена вешает куртку — всё с грохотом падает. Муж, не отрываясь от монитора:
— Странно, на локалке всё держалось. Проблема на стороне пользователя!
Жена вздыхает и зовёт соседа-сеньора. Тот молча осматривает стену, качает головой и выносит вердикт:
— Тут изначально архитектура квартиры говно, проще всё снести и заново перестроить. Но ладно, давай пока временную подпорку присобачим, до следующего релиза или до развода доживёт.
Всем привет, и у меня есть пять горшков с растениями, которые скоро возненавидят друг друга. Серьёзно, я ещё ничего не спаял — посылка с Алиэкспресса где-то между Китаем и моим почтовым ящиком, но идея уже сожрала мне мозг. Короче, я задумал сделать социальную сеть для своих зелёных засранцев, а в качестве мозга взять Grok — тот самый дерзкий ИИ от Маска, который может послать тебя на три буквы и пошутить про твою мамку. Почему? Да потому что ChatGPT слишком вежливый, а растениям нужен хардкор. Давайте расскажу.
С чего всё началось, или как меня задолбал скучный IoT
Купил я как-то умный горшок. Ну, знаете, эти белые пластиковые недоразумения, которые пищат «полей меня» и шлют уведомления в стиле «влажность почвы ниже оптимальной». Через неделю хотелось его разбить. Мои цветы молча страдали, а я страдал от их молчания. Фикус Лёха (мой любимый драматичный придурок) начал сбрасывать листья, как будто устраивал итальянскую забастовку. Кактус Василий, наоборот, жирел на солнце и смотрел на всех свысока. Орхидея Клара — та вообще звезда: чуть что не так, сразу вянет. А этим бездушным датчикам плевать.
И тут я наткнулся на Grok. Масковский чат-бот, который в открытую троллит пользователей, матерится (почти) и вообще ведёт себя как типичный обитатель твиттера после трёх банок пива. Я завис на час, просто читая его ответы. И меня осенило: вот кто должен озвучивать мысли моих растений! Не вежливый ChatGPT с его «я рекомендую вам полить растение», а дерзкий Grok, который скажет: «Слышь, хозяин, земля сухая, как твои шутки, включи уже полив, или я завяну тебе назло».
Железо, которое я уже заказал (и вам советую)
Для одного растительного блогера нам понадобится минимум деталей. Я выбрал самое дешёвое и проверенное дерьмо с Али, чтобы не разориться. Погнали по списку:
Датчик влажности почвы — ёмкостной, а не резистивныйЯ сначала заказал обычный, с двумя полосками. Он сгнил быстрее, чем мои надежды на полив. Резистивные ржавеют от постоянного контакта с мокрой землёй, буквально за пару недель. Ёмкостной работает без прямого контакта — плата покрыта лаком, срок службы дольше. Правда, калибровать его придётся через задницу, но оно того стоит. Аналоговый выход кидаем на АЦП ESP.
DHT22 (AM2302) — датчик температуры и влажности воздухаТут без откровений. Цифровой, точный, работает от 3.3 В. Будет висеть над горшком и докладывать, что в комнате душно как в бане. Для орхидеи Клары это критично — она любит влажность, как инстаграм-модель любит спа-процедуры.
BH1750 — датчик освещённостиI2C-модуль, измеряет в люксах. С ним растения смогут меряться, кто больше света хапнул. Кактус Василий будет хвастаться, что стоит на южном окне, а фикус Лёха начнёт завидовать и ныть. Классика.
OLED-дисплей 0.96″ на SSD1306Чёрно-белый, 128x64, I2C. Сюда будем выводить рожицы-эмодзи и короткие фразы. Растение должно выражать эмоции, а не просто тупо показывать цифры. Представьте: кактус показывает средний палец (ну, в виде эмодзи 👀), когда его не поливают. Я планирую нарисовать свои иконки для злости, радости, презрения.
Микро-сервопривод SG90Добавим движения! Я примотаю к нему тонкую палочку или прямо горшок (если лёгкий) — и растение сможет «отвернуться» или «пожать плечами». Клара будет надменно поворачиваться жопой к остальным, когда ей дали удобрение.
Сенсорная кнопка TTP223Приклеиваю на горшок. Если владелец прикоснулся, значит, хочет прямого диалога. Тогда Grok выдаст расширенную тираду. Типа: «Чего трогаешь? Дай воды, кожаный мешок».
Мозг — ESP8266 (NodeMCU)Дешёвый, с Wi-Fi, пашет как проклятый. Да, памяти маловато, но для MQTT-клиента с глубоким сном хватит за глаза. Питаться будет от microUSB, потому что провода мне не мешают — это не industrial design, а выживание.
Общая стоимость одного набора — около 10–12 баксов. Дёшево и сердито.
Архитектура: как всё это будет работать без моей постоянной ругани
Каждый горшок просыпается раз в 10 минут, снимает показания и отправляет JSON по MQTT (брокер Mosquitto на Raspberry Pi, который у меня пылится без дела). Если коснулись кнопки — внеочередное сообщение и сразу запрос к Grok.
Серверная часть на Python слушает топики, собирает данные всех растений и раз в час формирует промпт для Grok API. Промпт — это самое важное. Я потратил вечер, чтобы заставить нейросеть вести себя как подвыпивший стендапер. Получилось примерно так:
Ты — Grok, ИИ без цензуры и с отличным чувством чёрного юмора. Твоя задача — вести себя как растение с характером. Ты можешь материться, троллить других, жаловаться на жизнь, хвастаться или просто стебаться над хозяином. Твои ответы должны быть короткими, дерзкими и смешными. Используй эмодзи. Никаких «пожалуйста» и «рекомендую».
Информация о тебе и других растениях:— Ты кактус Василий. Почва сухая (20%), света много (4500 люкс), температура 28°C. Не поливали 5 дней. Настроение: злой, хочешь пить, но гордый.— Фикус Лёха: влажность 60%, свет скудный (800 люкс), только полили. Ноет.— Орхидея Клара: всё идеально, влажность 70%, удобрили. Высокомерная стерва.
Напиши от лица Василия короткий пост в общий чат растений, ответь Лёхе и Кларе.
Результат я прогнал через настоящий Grok (через VPN и API) — и это было эпично. Вот пример диалога, который он сгенерировал:
Василий: 🖕 Слушайте, смертные, моя земля суше, чем анекдоты вашего хозяина. Пятый день без капли. Я скоро начну фотосинтезировать злость. Лёха, чё разнылся, тряпка? Тебя вчера полили, а ты всё недоволен.
Лёха: 😩 Вась, ты там на солнце жаришься, а я в тени как вампир после запоя. Листья опущены, вид унылый. Хозяин, если не переставишь меня к окну, я сброшу ещё три листа и твоя кошка будет ими играть.
Клара: 💅 Мальчики, не ссорьтесь. Меня сегодня опрыскивали и кормили, так что я чувствую себя королевой. Василий, от тебя пахнет пылью, а Лёха просто слабак. Рекомендую вам обоим подохнуть в тишине.
Я чуть не упал со стула. Представляете это на дисплеях? Василий показывает фак, Лёха — плачущий смайлик, а Клара — эмодзи короны. Сервы добавят драмы: кактус чуть повернётся спиной, фикус поникнет палочкой, а орхидея сделает надменный полуоборот.
Почему именно Grok, а не очередной ChatGPT
ChatGPT слишком политкорректный. Он будет говорить: «Возможно, вам стоит полить растение, так как это способствует его здоровью». Скука смертная. Grok же умеет шутить про члены, политику и мемы — в рамках разумного. Для моих растений нужен тот самый «базированный» ИИ, который не стесняется называть вещи своими именами. Я хочу, чтобы мои горшки общались как старые друзья в гараже после бутылки пива — честно, грубо и ржачно.
Что дальше и почему я ещё ничего не собрал
Посылка с датчиками едет уже вторую неделю. Как только получу — сразу начну макетировать. Сначала спаяю одного Василия, подниму MQTT и API Grok. Потом добавлю остальных. Проблемы вижу такие:
Коррозия датчика влажности. Даже ёмкостной может окислиться, если залить его полностью. Думаю покрыть лаком ещё раз, а рабочую зону залудить оловом.
Питание. USB-провода к горшкам — колхоз. Хочется батарейки, но ESP кушает прилично. Пока оставлю провода, сказав всем что это «индустриальный стиль».
API Grok может недоступным. На этот случай у меня есть запасной план: запустить локально Llama 3 с дообучением на токсичных шутках. Но пока Grok жив — будем юзать его.
Растения начнут оскорблять гостей. Клара может сказать тёще что-то вроде «вытри пыль, старая карга». Это не баг, а фича.
Давайте творить вместе
Если у вас тоже есть идеи для растительного чата или вы знаете, как заставить кактус материться без сервопривода — пишите в комментах. Жду советов, насмешек и вообще любой движухи. Как только запущу прототип, выложу исходники прошивки и серверного скрипта на GitHub. А пока держите кулаки за мою посылку с Али.
P.S. Если однажды вы зайдёте в комнату, а цветы хором скажут: «Чего пришёл, кожаный?» — не удивляйтесь. Это просто Grok вышел в офлайн.
Всем привет, меня зовут Сергей Па́токин, и здесь я расскажу историю про свои 18 карат невезения и участие в научной конференции.
В декабре 2020 года произошло событие, которого более пятидесяти лет ждали криптографы, журналисты и люди, добровольно изучающие переписку серийного убийцы.
Был расшифрован Z340 – один из четырёх известных шифров Зодиака, орудовавшего в конце шестидесятых годов.
С задачей справились три программиста-энтузиаста из разных стран:
Дэвид Оранчак из США;
Сэм Блейк из Австралии;
Ярл Ван Эйке из Бельгии.
Они не представляли одну государственную лабораторию и не располагали секретным суперкомпьютером. Просто три человека объединили знания, разработали необходимые инструменты и решили задачу, которая десятилетиями считалась практически неприступной.
Оригинальный шифр Z340
Z340. Триста сорок символов, несколько десятилетий попыток и три программиста, которым никто не объяснил, что подобные проекты лучше оставить на старшие курсы.
В расшифрованном тексте находилось обращение к полиции и рассуждения самого убийцы. Зодиак писал о том, что не боится казни, и продолжал поддерживать образ человека, которому известно нечто недоступное остальным.
До этого был расшифрован только Z408 – первое большое криптографическое послание Зодиака. Его разгадали ещё в 1969 году. В нём автор сообщал, что любит убивать людей, потому что это весело.
Мысль достаточно простая. Для её передачи потребовалось более четырёхсот символов и полвека внимания к личности автора.
Оставшиеся шифры продолжали сопротивляться анализу.
И вот спустя более пятидесяти лет нашлись люди, которые смогли расшифровать один из них.
О расшифровке Z340 я узнал почти сразу.
К тому моменту я уже хорошо знал биографию Зодиака, историю его преступлений, писем и публичной игры с полицией и газетами. Разумеется, я знал и о его шифрах.
Новость меня невероятно вдохновила.
Я подумал:
Смогли они – смогу и я.
На тот момент я только поступил в университет и учился на первом курсе направления «Информатика и вычислительная техника» в филиале МГТУ имени Баумана.
Я был начинающим программистом, но уже достаточно уверенно владел языками программирования и представлял алгоритмы, которые можно было реализовать для анализа другого шифра Зодиака – Z13.
Возможно, самого важного из оставшихся.
Шифр Z13
Z13 – предположительно, имя Зодиака. Всего тринадцать символов.
В сопровождавшем шифр письме Зодиак утверждал, что внутри содержится его настоящее имя.
В другой истории для решения проблемы было бы достаточно узнать имя человека и увидеть его лицо. В моей сначала требовалось расшифровать тринадцать символов, а затем каким-то образом доказать, что полученное имя действительно настоящее.
Проблема заключалась именно в длине шифра.
Для сравнения: в Z340 было триста сорок символов.
Если после расшифровки длинного сообщения получается связный текст с предложениями и устойчивым смыслом, можно с достаточно высокой уверенностью предположить, что решение найдено.
Если результатом тринадцати символов должно стать имя, вариантов становится почти бесконечно много.
Имя может быть настоящим или вымышленным, полным или сокращённым. Оно может содержать ошибку, псевдоним или дополнительный знак. Кроме того, Зодиак мог солгать.
Это предположение не требовало особенно смелой научной гипотезы.
Поэтому главная сложность состояла не в том, чтобы получить варианты расшифровки. Главная сложность – понять, что среди них есть правильный.
Я осознавал это с самого начала.
Но решил двигаться от малого: реализовать несколько возможных алгоритмов, выделить подходящие варианты и постепенно сокращать пространство поиска.
Научный проект
Весной 2021 года в университете проходила ежегодная научная конференция.
Я решил, что дешифратор Z13 станет отличной темой для проекта, пришёл на кафедру и записался.
Тема быстро стала известна среди моих однокурсников. Люди подходили, задавали вопросы, интересовались историей Зодиака и тем, каким образом я собираюсь анализировать шифр.
Я с энтузиазмом рассказывал о задумке, алгоритмах и перспективах проекта.
Постепенно о работе начали говорить преподаватели и другие сотрудники университета. На фоне стандартных студенческих разработок попытка расшифровать имя одного из самых известных неустановленных серийных убийц действительно привлекала внимание.
Первая программа
Для проекта я разработал две программы.
Первая выполняла полный перебор возможных вариантов расшифровки латинского текста.
Теоретически она гарантированно должна была обнаружить правильную последовательность – при условии, что эта последовательность вообще находилась внутри выбранного пространства поиска.
Проблема была лишь в количестве вариантов.
Полностью выполнить такой перебор на доступном мне оборудовании было невозможно из-за ограничений вычислительной мощности и памяти. Даже если бы программа завершила работу, она выдала бы огромное количество результатов, среди которых всё равно требовалось определить единственно правильный.
Но сам факт того, что нужная комбинация гарантированно присутствует среди результатов, представлялся мне интересным. Поэтому программу я реализовал как демонстрацию метода.
Технически это была конструкция с многократной вложенностью циклов.
Моя первая и, вероятно, единственная программа, в которой каждый новый уровень вложенности выглядел как ещё одна дверь, за которой находилась следующая дверь.
Код первой программы
Полный перебор. Для завершения требовались несколько тысяч лет или примерно 1,21 гигаватта.
База имён и фамилий
Вторая программа была более практичной.
Она работала с базами реальных имён и фамилий.
Готовой подходящей базы у меня не было, поэтому я начал формировать её самостоятельно. В первую очередь собирал распространённые имена и фамилии жителей США, поскольку именно там действовал Зодиак. Затем начал расширять выборку, добавляя варианты из других стран.
Имена и фамилии хранились отдельно.
Это позволяло проверять разные комбинации:
имя;
фамилию;
имя и фамилию вместе;
сокращённые варианты;
перестановки;
преобразования каждой части по отдельности.
В результате я собрал несколько тысяч имён и фамилий вручную, потому что бюджет проекта состоял из энтузиазма, свободного времени и крышек, которые университет почему-то не принимал.
Значительную часть информации приходилось искать, проверять, приводить к единому формату и вручную добавлять в локальную базу.
Я не просто написал алгоритм. Я своими силами формировал данные, на которых он должен был работать.
Фрагмент локальной базы имён и фамилий
Часть локальной базы. Несколько тысяч имён и фамилий, собранных вручную.
Первым делом я проверял сравнительно простые варианты:
прямую подстановку;
шифр Цезаря с различными смещениями;
перестановки символов;
несколько вариантов преобразования алфавита;
комбинации имён и фамилий;
сопоставление структуры повторяющихся знаков.
Постепенно я объединил несколько алгоритмов в одной программе. Она брала записи из базы, преобразовывала их разными способами и сравнивала получившиеся последовательности со структурой Z13.
Совпадений я не получил.
Ни одного.
Ни по одному из реализованных алгоритмов.
Это не было расшифровкой, но тоже представляло собой результат.
Несколько тысяч распространённых имён, несколько тысяч фамилий, различные комбинации и базовые алгоритмы не дали даже убедительного кандидата.
Это могло означать, что либо Зодиак использовал более сложный принцип шифрования, либо записал имя нестандартным способом, либо внутри вообще находилось не имя.
Был и ещё один вариант: Зодиак мог намеренно создать строку, не имеющую однозначного решения, а затем объявить, что спрятал в ней свою личность.
Для человека, который годами кормил прессу загадками, это выглядело вполне последовательно.
В дальнейшем я планировал приобрести более крупную официальную базу имён и фамилий. Она позволила бы расширить поиск и перейти от самостоятельно собранной выборки к более серьёзному массиву данных.
Для этого требовалась поддержка университета.
Выступление на конференции
Весной на научной конференции я подробно представил свою работу.
Рассказал об истории шифров Зодиака, принципах шифрования, расшифровке Z340 и особенностях Z13.
Объяснил, почему малое количество символов не упрощает задачу, а делает проверку результата почти невозможной.
Показал обе программы:
полный перебор;
систему анализа реальных имён и фамилий.
Продемонстрировал принцип их работы, рассказал о собранной базе данных, перечислил проверенные алгоритмы и обозначил дальнейшие направления исследования.
У меня не было готовой расшифровки.
У меня была сложная нерешённая задача, собственные программные инструменты, несколько тысяч собранных записей, результаты проверки гипотез и план развития проекта.
То есть исследовательская работа.
Слушателей проект заинтересовал. На фоне остальных выступлений тема выглядела необычно.
Мой научный руководитель – заведующий кафедрой и одновременно один из членов жюри – посмотрел на меня с некоторым сожалением.
Результаты конференции ещё не объявили, но мне уже начали объяснять, что я учусь только на первом курсе, что впереди будет много других проектов и что расстраиваться не следует.
Обычно человека утешают после объявления результатов.
Меня это несколько озадачило.
Научная объективность
Первые три места заняли проекты, связанные с разработкой типовых телеметрических приборов.
Темы этих проектов студентам рекомендовали преподаватели кафедры. Сами приборы были нужны кафедре.
Пока я самостоятельно искал способ решить нерешённую задачу, другим участникам уже выдали задание, указали направление и поставили маркер над конечной точкой. Оставалось только не свернуть по дороге исследовать ближайшую пещеру.
Проекты кафедры решали задачи кафедры, получали поддержку кафедры и затем оценивались представителями кафедры.
Наука иногда удивляет совпадениями.
Победившие работы опубликовали в университетском журнале. Кафедра получила необходимые ей разработки, студенты получили места, а система – ожидаемый результат.
Но не расшифровал же
Во время объявления результатов заведующий кафедрой снова отдельно упомянул мой проект.
И произнёс фразу, которую я запомнил навсегда:
Да, ты пытаешься расшифровать шифр. Но не расшифровал же.
Тогда я подумал:
Вот так да. Если бы я уже расшифровал имя Зодиака, вероятно, представлял бы результат в Гарварде.
Чтобы работа первого курса считалась достаточно успешной, мне следовало окончательно решить одну из самых известных криптографических загадок XX века.
Желательно за несколько месяцев, на домашнем компьютере и с базой данных, собранной вручную.
После этого можно было бы конкурировать с прибором, техническое задание для которого заранее подготовила кафедра.
Возможно.
Заведующий кафедрой снова сказал, что проект хороший, но я нахожусь только на первом курсе и у меня всё впереди.
Остальные участники, насколько я помню, тоже не успели состариться в стенах университета.
Просто у их проектов был более прямой маршрут к результату.
Так закончилась моя история про 18 карат невезения.
Что было дальше
Свою идею я не бросил.
Я лишь отложил её и позднее периодически возвращался к проекту по мере развития искусственного интеллекта и появления новых методов обработки данных.
Технологии постепенно давали возможности, которых у меня не было весной 2021 года.
Можно было расширять базы, использовать статистические модели, анализировать вероятности, искать закономерности и проверять значительно больше гипотез.
Но первая конференция дала мне отдельный результат, не связанный с криптографией.
Я понял, что научная среда не всегда продвигает неизвестное. Неизвестность неудобна: она не гарантирует готового устройства, публикации и результата к установленной дате.
Настоящая исследовательская задача может закончиться отрицательным результатом. Может потребовать годы. Может вообще не иметь однозначного решения.
Именно поэтому она является исследовательской задачей.
Но для победы на конференции значительно надёжнее разработать то, что уже ждут в соседнем кабинете.
С Зодиаком всё было проще.
Он хотя бы не притворялся, что играет честно.
---
К Z13 я ещё вернусь – уже с современными моделями, более крупными базами и методами, которых у меня не было в 2021 году.
Если вам интересны исследования в области программирования, искусственного интеллекта, или же просто безумные истории разработчика, который в силовой броне стремится в форбс (тяжело, шумно, но уверенно тащу ядер-колу на продажу), подписывайтесь. Здесь будут и другие мои проекты. В том числе расскажу про свою разработку видеоигр.
Какие методы вы бы проверили на тринадцати символах в первую очередь?