Сайт, работающий на одноразовой электронной сигарете, удивляет скоростью
В эпоху, которую можно было бы назвать расцветом моей деградации, я дошёл до такой стадии никотиновой зависимости, что использовал одноразовых электронных сигарет столько, что даже у самого стойкого эколога могло бы возникнуть отвращение. И теперь я крайне разочарован, что мог превращать все эти ужасные устройства в работающие веб-сайты после того, как в них заканчивался заряд.
Не верите? Просто зайдите на ewaste.fka.wtf. Этот сайт работает на микроконтроллере от одноразовой электронной сигареты, и он удивительно быстро загружается. Некоторые одноразовые вейпы содержат неожиданно много технологий, включая экраны и микроконтроллеры.
Как говорит BogdanTheGeek, создатель сайта на вейпе: «Я бы не хотел быть юристом, которому однажды придётся доказывать, как устройство с USB-C и аккумулятором можно классифицировать как «одноразовое».
Мощность этих маленьких устройств может быть невелика, но её достаточно для размещения полноценного веб-сайта. И да, сейчас мы видим много ошибок 503, но это потому, что множество людей посещают сайт после того, как узнали о нём.
Текстовое содержимое сайта объясняет, как это было достигнуто, но вы можете найти стилизованную версию на блоге BogdanTheGeek. Длинная история довольно сложна, но короткая и упрощённая версия такова: ARM-микроконтроллер вейпа питает сайт, а старый протокол инкапсуляции IP через USB доставляет код и использует виртуальный терминал для взаимодействия с внешним компьютером, чтобы запустить веб-сервер.
Оказалось, что «почти все USB-последовательные устройства фактически эмулируют [коммутируемые] модемы», и в Linux можно использовать Serial Line Internet Protocol (SLIP) для отправки и получения IP-пакетов. Этот код SLIP использует semihosting, который является «по сути системными вызовами для встраиваемых ARM-микроконтроллеров» и работает в двунаправленном режиме.
После настройки и некоторых модификаций файловой системы с помощью Perl, сайт заработал.
Изначально он был медленным: «Простая страница загружалась более 20 секунд. Это настолько плохо, что даже забавно, и я почти хотел оставить всё как есть».
Можно было бы подумать, что медлительность связана с самим железом. После детективной работы BogdanTheGeek выяснил, что у PUYA ASIC было 24 КБ флеш-памяти и 3 КБ ОЗУ: «Дополнительная флеш-память означала, что это, скорее всего, PY32F002B». Arm Cortex M0+ в этом микроконтроллере работает на частоте всего 24 МГц.
На самом деле, причина медленной работы оказалась в другом: «первая реализация читала и писала по одному символу за раз… она сериализовала данные байт за байтом».
Но «у нас есть целых 3 КБ ОЗУ для работы, поэтому я добавил кольцевой буфер для кеширования чтений с хоста и подачи их в функцию опроса SLIP. Я также разбил запись на пакеты, чтобы позволить экранирование».
Результат: «Теперь пинг занимает 20 мс, без потерь пакетов, а полная страница загружается примерно за 160 мс. Это использовало почти всю оперативную память, но я также мог уменьшить размеры буфера, чтобы иметь более чем достаточно места для выполнения других задач».
Это определённо лучшее применение отслужившим устройствам, чем засорение свалок. Так что думайте, друзья, какие крошечные сайты вы хотите разместить? И, кстати, не курите!
0 комментариев