Как программисты решают проблемы

    image

    Периодически проверяю раздел «события» на местном айтишном портале, и вот недавно нашел там то, что давно искал — очередной хакатон. Да не простой хакатон, а сложный правильный: без стартаперства, без HRов, без навязывания и ограничения тем, без обедов. В общем, стал я собирать чемоданы…

    О том, что из этого получилось — читайте в статье.

    Что? Опять?!


    Возможно, кто-то из вас знает/помнит, что мне не нравится делать вещи наподобие очередной «социальной сети для {placeholder}». И это мое нежелание, как оказалось, полностью совпадает с целью организаторов предстоящего хакатона. В общем, и в этот раз я решил сделать что-нибудь необычное, попробовать что-то новое. Выбор мой пал на Arduino.

    Ту самую ардуину, которую мы командой проекта подарили на день рождения одному из коллег, и которую мне удалось взять напрокат на выходные («отжать», как выразился ее владелец). Оставалось придумать, что с ней делать.

    Бубен программерский, стандартный, одна штука


    Все знают предание об админском бубне? Том, что оживляет железо и поднимает сети из мертвых? Если нет — тут расписано что и как. Так вот, оказывается, бубны эти не только админам помогают, но и программерские проблемы решают как на духу. Побубнел минутку и все — баги исправляются, проект компилится и работает. И бубен такой у меня есть, программерский, заряженный правильной энергией:

    image

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

    Мозги для бубнилки есть, бубен тоже имеется. Нужно было что-то, что будет ударять в бубен. Так у меня появились две рулевые машинки:

    image

    И такая макетная плата:

    image

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

    Погнали!


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

    Хакатон проходил с вечера пятницы до вечера воскресенья. В первый день решил разобраться с ардуиной, питанием, макетной платой, проводами и сервами. Проблем с подключением серв и ардуины не возникло, если не считать заминок с питанием (БП от тонометра имел нестандартный штекер) и выбором цвета проводов для макетной платы. Первая серва начала выполнять мои команды уже через час.

    Было решено сделать два «молоточка» (по одному на сервопривод) — так можно было бы чередовать и комбинировать удары, варьировать задержки. «Молоточек» — стержень от шариковой ручки с надетым на его конец кусочком ластика, художественно обтертым об стол до шарообразной формы. Крепим его полиэтиленовыми стяжками к качелям сервопривода и получаем неплохой такой «ударный инструмент»:

    image

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

    image

    Бубен + молоточки + основание = eBuben:

    image

    А что внутри?


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

    Прошивки для Arduino нужно писать на С++, моем втором родном языке. Но это не спасло меня от долбания головой об стену по поводу и без. Эмпирическим путем удалось подобрать минимальные и максимальные позиции серв, из которых удары происходили четко и были хорошо слышны; тайминги, необходимые для ударения сервой по бубну (в максимальную позицию) и разударения обратно (в минимальную); и т.д. Был «изобретен» конечный автомат переходов серв из состояний покоя в ударение, разударение и обратно в покой. Добавлен механизм асинхронного управления N-сервами одновременно (в нашем случае их было две), логирование, типы сэмплов (тишина, удар i-й сервой или всеми одновременно), проигрывание и остановка треков, зацикливание трека, проигрывание в течение X-секунд и т.д. По сути, был разработан небольшой секвенсор для бубна. Правда, без возможности записи музыки, а только ее хардкода прямо в прошивку.

    Управлялось все это через последовательный порт. Конечно, можно было бы сделать возможность загрузки пользовательского трека в «ардуину» прямо с компа, но на это не хватало времени — тут бы стабильной работы добиться и не ударить в грязь бубном лицом на презентации.

    Дырявые джинсы, баян и план Б


    В ночь с субботы на воскресенье нужно было сделать прослойку между бубнилкой и будущей веб-страницей с прямой трансляцией. Решением стал консольный сервер на Python, который слушал нужный url и посылал в нужный порт нужный байт. Все просто. Но какой же большой ошибкой было поставить Python 3.x вместо Python 2.x! Кто знает, тот поймет…

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

    Воскресенье было посвящено допиливанию всего выпиленного и увязыванию его с веб-страницей, которой мои коллеги по команде параллельно занимались. К сожалению, на презентации со страницей что-то пошло не так, и она отказалась запускать наше устройство. Думаю, все получилось бы, будь у меня с собой второй бубен. Потому пришлось использовать резервный план: eBuben был запущен запасной кнопкой (всегда должен быть план Б!).

    А вот и eBuben, собственной перcоной:



    Доменное имя bubna.net решили не регистрировать — лениво, да и главной задачей изначально был вовсе не сайт…
    Upd.: оказалось, что домен уже зарегили (проверил в 11:54 по Москве). Возможно, кто-то вдохновился статьей.

    Цель была достигнута, выходные прошли не зря, номинация «Самый технологичный проект» была наша.

    P.S. Хакатон удался на славу. Было много классных проектов и увлеченных своим делом людей. Спасибо организаторам, буду ждать следующего WTH.

    P.P.S. Но самое большое спасибо жене и дочке за то, что отпустили меня на эти айтишные посиделки. Без их одобрения и поддержки у меня ничего бы не получилось.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 23
    • +3
      Идея для развития проекта — привязать запуск «камлания» на событие неудачной компиляции проекта (локально, или можно на билд-сервере)!
      Это больше похоже на дамару (ритуальный барабан в буддизме и индуизме), чем на бубен.
      Звук в первой половине видео здоровский!
      • +1
        Спасибо, самому тоже нравится. Про дамару не знал, всю жизнь думал, что это бубем мои баги исправляет. Абы работал, а что он и как он называется — второстепенно.
      • +4
        И всё-же при всём уважении к автору, бубнист он важный, видимо одминское это таки дело, в бубен бубнить.
        Посмотрите внимательно на ваш «бубен», станет очевидно что это и не бубен вовсе, а какая то разновидность डमरू и висильки на верёвочках отнюдь не для понтов. Если правильно крутить «бубен» за палочку, то они раскручиваются силой Кориолиса, символизируя галактику и всё такое, а при остановке, они совершая движение по инерции таки ударяют в мембраны, символизирующие что-то там вроде мужского и женского начала, типа инь-янь-хрень…
        Короче так творится вселенная, под эту штуку пляшет Шивва и сам же не ней играе…
        Собственно от него и пошли Одмины и закон ОМЪа :-)

        PS>Короче, надо было «бубен» на серву клеить!
        • +1
          Да, собирался на серву закреплять. Но тогда нельзя было бы отбивать произвольные ритмы. Да и слишком просто оно выглядело бы…
          • +1
            Вот она бездуховность, программистов :-) Невозможность отбивать произвольные ритмы, тут не баг, но фича…
            Ветки на дереве, звёзды в космосе, они отнюдь не произвольны, но зависят от длинны ниточек, массы фенечек и ускорения придаваемого Шивой в чём проявляется его божественная воля, хаотичная, но детерминированная периодами дамару.
            Которые и можно было-бы предложить обнаружить самостоятельно через вэб интерфейс манипулируя частотой и динамикой поворота «бубна».
            А так, получается что всю вашу инсталляцию, можно заменить предварительно записанными или даже отрэндеренными видео её работы.
            Это интересная тема «виртуальные культы», и тут уже есть некий опыт, вот у католиков: опустил монетку — зажглась свечка. Не слишком это православно интерактивно…
            • 0
              А вот хотел же, хотел сделать такой красивый алюминиевый корпус, с дыркой в центре под бубен. Беспроводной. Можно с лампочкой. Вставил бубен, лампочка зажглась — девайс готов к работе. Но подумал, что это неспортивно как-то. А зря. Дома в свободное время сделаю, отдам должное Шиве…
        • +2
          Забавная штука ваш электробубен, но мне почему-то ваше видео очень напомнило вот этот урок deathcore на ударной установке:
          — Начинаем медленно, с шестнадцатых нот, постепенно ускоряя темп
          — Поскольку на кардане шестнадцатыми нотами я играть не смогу, заменяем их восьмыми триолями
          • +1
            Но какой же большой ошибкой было поставить Python 3.x вместо Python 2.x! Кто знает, тот поймет…

            Не знаю, но очень хочу понять. Объясните пожалуйста, в чем были проблемы.
            • +1
              Я ждал этого вопроса. Проблема была в том, что была ночь на дворе, тянуло в сон, а все примеры серваков в инете были для 2ого питона: то модуль не находило, то функцию не могло разрезолвить. И мой невыспавшийся и уставший мозг долго бился над этим. Как-то так.
            • +8
              Я как программист не могу решить проблему тайну заглавной картинки. Что имелось ввиду?
              • –1
                Я смотрю уже не одному человеку дедушка Фрейд не дает покоя. Ввиду имелось простое — у человека унылый взгляд, возможно у него поблемы (абстрактные), человек может быть программистом, ему эти проблемы нужно решить. Картинка выбрана под заголовок.
                • +3
                  Есть огромное количество картинок с людьми в позе мыслителя, но без постелей и женщин :).
                  • +5
                    Боюсь, такая картинка тоже вызвала бы вопросы:
                    image
                    • НЛО прилетело и опубликовало эту надпись здесь
                      • +2
                        О решении подобных проблем будет отдельная статья, с правильными картинками :)
                        • 0
                          Боюсь, одними картинками проблему не решить.
                  • 0
                    Вполне подходит под главную линию статьи — «хакатон без навязывания и ограничения тем». Идея, кстати, очень хорошая — нужно было доделать.
                  • +1
                    continuous bubnation! Можно saas-ик сделать и к проектам приклеивать, как CI/CC!
                    • +1
                      Продвинутые в современных айти технологиях гопари, стукнули программиста Серёжу в eBuben.
                      • 0
                        работая в НИИ я подобную штуку видел в системе неразрушающего контроля. Без сервера и питона правда, но на колёсиках и с микрофоном.
                        Молоточек чуть ли не один в один, а в качестве бубуна использовалось полотно, проклейку которго контролировали по звуку от молоточка.
                        • +6
                          Увидев картинку, заголовок и тег Arduino… Чёрт, нельзя быть таким пошлым.
                          • 0
                            Можно. Тут половина таких
                          • 0

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