Обновить
5
Сергей Паньков@trapwalker

Backend, python

17
Подписчики
Отправить сообщение

Капельки легче делать, они прочнее, позиционировать слишком точно не нужно, нужно просто снимать с кучи ракурсов и все делать программно

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


Я бы сконцентрировался на разработке дешевого метода производства мелких стеклянных шариков с записью в них инфы лазером формируя пузырьки. Схема такая:
Берём песочек и делаем полностью автоматический завод по производству из него стеклянных бусин с данными внутри, закодированными положением пузырей от лазера внутри.
В каждую такую гранулу поместится немного данных, но мы же делаем действительно "холодное" хранилище и вопрос лишь в аккуратной индексации.
Размер и инертность гранул позволит им быть механически и химически устойчивыми к повреждениям. Слой стекла на поверхности позволит им пережить полировку. Запись осуществляется лазерами, а фокусировать их человечество умеет неплохо. Чтение можно делать многоракурсной фотосъёмкой через микроскоп. Можно добиться огромной избыточности. Легко делать конвейерные линии для автоматической обработки таких гранул. Легко параллелить любые процессы с ними.


Можно даже делать автоматические репликаторы таких данных, которые на входе принимают песочек (или стеклотару) и солнышко (всего этого полно на пляжах или в пустыне), а на выходе несметное число гранул с данными, которые даже экологию не портят.

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


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


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


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


Придётся, блин, писать-таки на эту тему статью. Эх. Давно в загашниках тема статьи о вариантах реализации правильного Датахранилища Судного Дня.

Вместо ваших подавляющих ошибки try-except'ов


try:
    import RPi.GPIO as GPIO
except ModuleNotFoundError:
    pass

можно использовать куда более элегантные конструкции из стандартной библиотеки:


with contextlib.suppress(ModuleNotFoundError):
    import RPi.GPIO as GPIO

def rasperrypi_cleanup():
    with contextlib.suppress(Exception):
        GPIO.cleanup()

Хотя я бы, конечно, сделал класс-адаптер для работы с аппаратной частью и при ошибке инициализации создавал экземпляр мокапа для отладочных целей с соответствующим ворнингом:


class RPiDrvAbstract:
    def __init__(self, led_pin: int = 21):
        self.led_pin = led_pin

    def init(self):
        log.debug('GPIO init')

    def pin_out(self, pin: int, value: bool)
        log.debug(f'GPIO pin #{pin} set to {value}')

    def claenup(self):
        log.debug('GPIO cleanup')

class RPiDrv(RPiDrvAbstract):
    def __init__(self, *av, **kw):
        super().__init__(*av, **kw)
        import RPi.GPIO as GPIO
        self.GPIO = GPIO

    def init(self):
        super().init()
        self.GPIO.setmode(GPIO.BCM)
        self.GPIO.setup(led_pin, GPIO.OUT)

    def rasperrypi_pinout(pin: int, value: bool):
        super().pin_out(pin, value)
        self.GPIO.output(pin, value)

    def cleanup(self):
        super().cleanup()
        self.GPIO.cleanup()

try:
    drv = RPiDrv()
    drv.init()
except Exception as e:
    log.warninig(f'RPi initialization error {e}. Mockup used.')
    drv = RPiDrvAbstract()
    drv.init()

Там автор про асинхронность затеял… Тогда aiohttp уж надо было брать. Уж куда компактнее и прозрачнее получилось бы.

Мы в малине вообще X-ы не ставили

Так и правильно. На кой леший роботу на борту GUI?


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

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


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

Да точно так же можно пробрасывать UART через малинку. Какая разница? Просто указываться будет IP малинки, а один из её портов будет перенаправлен на ногу GPIO чтобы дёргать Мегу.

О, еще можно вот прекрасную лекцию Савватеева послушать: https://www.youtube.com/watch?v=hkhaipY3JmU

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

Да! Класс. Дайтедва! И Бутылку Клейна обмыть приобретение.

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


На тех же соревнованиях наличие автоматизированной или вовсе автоматической прошивки по воздуху — это большое дело. В таких вопросах любая автоматизация деплоя бортового ПО и его обновлений — это, иногда, вопрос жизнеспособности проекта, если речь идёт об обучении неопытных и еще не до конца определившихся в своём энтузиазме юниоров. Не Rocket Science прошивка по воздуху. Такие вещи и отличают серьёзные платформы от кустарных поделок.

Вот, кстати, задался тем же вопросом, но в статье не увидел внятного объяснения.
Почему бы вообще не задействовать GPIO RPi для подключения неосновной периферии, а на долю ESP оставить только контроль аккумулятора, управления драйверами двигателей, одометры и самые базовые неотключаемые сенсоры, плюс низкоуровневый веб-интерфейс и канал для связи.


Вообще эволюционный процесс более менее угадывается, если учесть, что RPi изначально не было. Всё таки сделать on-board самопрошивку ESP по вайфай — это, видимо, очень непростая задача, если вообще возможная.

Раз уж вы не слабо так заморочились на стандартизации модулей, что, в общем-то, имеет смысл, наверно полезно было бы найти подходящую симуляционную платформу и сделать для неё модель вашего робота для отладки алгоритмов, так сказать, in vitro.
Если удастся сделать достаточно адекватную модель, то к развитию программной составляющей проекта сможет подключиться гораздо больше народу.
Можно даже организовать своеобразные соревнования алгоритмов на вашей платформе. Разрабатывается несложная полоса препятствий, публикуется её модель и полный SDK с симулятором в комплекте, разрабатывается регламент турнира и устраиваются отборочные соревнования с очным финалом на реальном полигоне в каком-нибудь спортзале.
Участвовать в таком мероприятии можно даже удалённо, если сделать процесс загрузки прошивки в робота максимально дружественным и автоматизированным.
Мне кажется это бы здорово позволило популяризировать как платформу, так и направление в целом. Может быть и спонсоры на такой замечательный проект подтянутся.

Интересно, кто-нибудь додумался выпускать Ковёр Серпинского IRL, чтобы можно было его на стену повесить или как буржуи у кроватки или камина положить...

Присоединюсь к вопросу. Какова получается примерная себестоимость робота включая и не включая 3d-печать. Для печати можно взять средние цены в fab-lab'ах.


Не думали адаптировать свою платформу под что-то утилитарное, вроде пылесоса. Уж очень форм-фактор располагает.

Странный вывод. Ну и открытые вопросы остаются: настоящее пополнение или просто смс "якобы от банка"? Имя и отчество получить вообще не проблема, просто по номеру делаешь перевод и прежде чем согласиться на его отправку увидишь "Имя Отчество Ф." Этого достаточно, чтобы обратиться к человеку от имени сотрудника банка и запудрить ему мозги. Смотря что за человек. А если человек еще и занят окажется и не готов вникать в проблему...


UPD. Ой… не понял сразу. Пополнение не от мошенников. Ок. Да, тут вопрос. Может быть жулики просто в корзине с чеками около банкомата покопались?

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


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

А вы что же считаете, что чиновники совсем не виноваты, а только пешеходы? Какая-то однобокая позиция.
Я не знаю что там за конкретная ситуация, но часто вижу такие решения "в лоб":


  • Часто давят на переходе? — убрать переход;


  • Лезут через дорогу без перехода? — влупить забор.


  • Забор даёт водителям лишнюю уверенность и те разгоняются и чаще давят на следующем переходе? — построить 6-метровый переход с трёхпролётными лестницами.


  • Бабки всё равно лезут через заборчик, поскольку по обледенелой крутой лестнице просто не в силах ходить? — усилить забор, вскопать полосу, развести грязь, штрафовать бабок, еще сильнее спровоцировать разгон потока в городе...


  • Разогнанный поток начинает биться, нанизываться на забор, создавать огромные пробки? — отлично, давайте расширять проезжую часть за счет тротуаров, заодно по улице не будут ходить пешеходы и не полезут через заборы, и не нужен больше переход… город разделён на гетто, район становится неинтересным, кафешки исчезают, молодёжь не селится...



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


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

Я по-прежнему считаю, что пример с телеграммом неподходящий, поскольку он про другое. Этот запрет не для граждан, а для Дурова. Граждане не нарушают запрет, поскольку пользоваться телегой не запрещается. Телеге запрещается работать в России, но мало ли что и кем ей запрещается=).


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

Да всё мне понятно, сударь. Я же пошутил! Причем поддержал ваше недоумение в связи с предполагаемым появлением трупов. Мне тоже не понятно откуда им взяться, кроме как из-за зомби-апокалипсиса.

Информация

В рейтинге
Не участвует
Откуда
Белгород, Белгородская обл., Россия
Дата рождения
Зарегистрирован
Активность