Проект колонии на Марсе на 1 000 000 человек

Прошлое — это локомотив, который тянет за собой будущее.
Жёлтая стрела (Виктор Пелевин)

Международная группа Mars Society объявила конкурс на проект самодостаточной колонии на красной планете. Главный приз — 10 000 $. Условия конкурса просты, и исходя из них я и попытался составить базовый план колонии. Интересно? Подробности под катом.

Текст условий проекта от Mars Society выглядит так.

Общество Марса с радостью объявляет о проведении международного конкурса на лучший проект города-государства Марс с населением 1 000 000 человек. Будет приз в размере 10000 долларов за первое место, 5000 долларов за второе, 2500 долларов за третье, 1000 долларов за четвертое и 500 долларов за пятое. Кроме того, 20 лучших статей будут опубликованы в новой книге «Государства Марс: новые общества для нового мира».
Городское государство должно быть максимально самоокупаемым, то есть полагаться на минимальную массу импорта с Земли. Чтобы сделать все то, что людям нужно на Земле, требуется более 1 000 000 человек, поэтому участвующим командам необходимо будет увеличить как количество, так и разнообразие доступной рабочей силы за счет использования роботов и искусственного интеллекта.

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

Цель состоит в том, чтобы городское государство могло производить все продукты питания, одежду, жилье, электроэнергию, товары широкого потребления, транспортные средства и машины для населения с населением в 1 000 000 человек при минимальном количестве ключевых компонентов, таких как передовая электроника, которые необходимо будет импортировать с Земли.

Как уже отмечалось, импорт всегда будет необходим, поэтому командам нужно будет подумать о полезном экспорте — либо материальных, либо интеллектуальных продуктов, которые колония могла бы производить и транспортировать или перевозить обратно на Землю, чтобы заплатить за них. В будущем можно ожидать, что при использовании космического корабля SpaceX или аналогичной технологии стоимость доставки товаров с Земли на Марс составит 500 долл. США / кг, а стоимость доставки товаров с Марса на Землю — 200 долл. США / кг. В соответствии с этими допущениями, работа команды заключается в том, чтобы спроектировать экономику, оценить ее стоимость и показать, что после определенных первоначальных затрат времени, денег и усилий она может стать успешной.

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

При начислении баллов государственным проектам баллы будут распределяться по следующей схеме:

30 баллов техническое проектирование: какие инженерные системы будут использоваться? Как они будут работать?

30 баллов по экономическим показателям: как сделать городское государство экономически успешным?

20 баллов: социальное / культурное / политическое: каким должно быть марсианское общество? Какие виды школ, искусств, спорта и других видов деятельности должны быть? Как, если начать все заново, можно сделать жизнь на Марсе лучше, чем жизнь на Земле? Как должен управляться город-государство?

Эстетика в 20 баллов: Как сделать город-государство привлекательным и приятным местом для жизни?

Конкурс Общества Марса открыт для всех людей со всего мира. Участники могут работать в одиночку или в команде. Каждый участник должен будет представить отчет не более чем на 20 страницах, представляющих его план, не позднее 30 июня 2020 года. Затем будет сделан предварительный отбор на 10 лучших предложений, авторам которых будет предложено представить их лично в перед судейской коллегией, выбранной Обществом Марса на 23-й ежегодной конференции Международного общества Марса в Лос-Анджелесе в октябре 2020 года.

Чтобы помочь развить идеи, участники, возможно, захотят рассмотреть ряд источников, включая планы SpaceX, данные НАСА, книги Роберта Зубрина «Дело о Марсе» и «Дело о космосе», а также концепции базы для 1000 человек колоний Марса. Конкурс Марсовской премии общества за 2019 год, опубликованный недавно в журнале «Колонии Марса: планы заселения Красной планеты» [книга в мягкой обложке]

В ближайшее время будет размещен веб-сайт для регистрации на Государственный конкурс дизайна в Марс-Сити и загрузки отчетов.

По условиям конкурса есть всего 20 страниц для описания проекта, а значит не так много элементов устройства колонии получится описать. Часть будет описана в этой статье.

Проект называется ИИМ (это аббревиатура, которая расшифровывается как Искусственный Интеллект Марса — главный элемент колонии).

Вода, место для колонии, энергетика

Начать надо с главного — воды! Этот элемент на Марсе представлен в виде льда, и многие проекты предлагают добывать H2О именно с помощью добычи его твердой фазы-состояния. Проще говоря «плавить лед». Идея конечно гениальная, если бы не некоторые нюансы этого дела в виде чистоты изначального материала что в конечном итоге скажется на качестве воды. Лед не всегда чистый… и это если еще не учитывать фактор возможного биологического «заражения» льда т.е. таким образом мы рискуем реально убить «марсиан» или чего хуже заразится каким либо инопланетным вирусом.

Какой же выход из этой ситуации? Решение простое и единственно возможное для Марса — собирать влагу из тумана! Конкретнее утреннего тумана, который подымается над долиной Маринера каждый день.

Конечно дальше возникает логичный вопрос «а как этот туман собрать?», и тут стоит вспомнить что на Земле подобные технологии уже протестированы на реальных установках конденсирования атмосферной влаги!

Технологии конденсации пригодные к использованию на Марсе.

Один из вариантов выглядит так.

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

В древности использовали еще более простые устройства для конденсации влаги из воздуха в виде конденсационных колодецев.

Логично далее разместить в этой туманной местности базу для миллиона колонистов. Лучше всего ее построить в Лабиринте Ночи (это связано с наиболее удобной логистикой с остальными частями будущей колонии).

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

Еще башни Шухова станут своего рода катапультами для дронов Г. для доставки их на дальние расстояния путем запуска их вверх (это же послужит способом раскрутки лопастей без использования топлива). Ключевым элементом для обеспечения прочности ажурных конструкций и башен Шухова будут произведенные на 3D принтере соединительные коннекторы.

Основным источником энергии для И.И.Ма будут АЭС. Размещение блоков на Марсе можно сделать максимально безопасным устанавливая их отдельно от основной базы в разломах каньона, дополнительно экономя на радиационной защите за счет стен породы вокруг. КПД АЭС будет в разы выше чем на Земле за счет использования тепла для обогрева колонии.

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

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

Промышленность

Итак, вода у нас есть… энергия есть. Как дальше строить колонию? Вопрос сложный, особенно если вспомнить что дальнейшее развитие базы напрямую зависит от возможности «копать, копать и еще раз копать», а бульдозер и прочую проходческую технику на Марс не так просто доставить, и тем более обслуживать.

Есть много вариантов снизить зависимость от тяжелой техники (об этом будет ниже), но есть один хороший способ испытанный уже на нашей родной планете, который удобнее всего использовать на 4-ой планете.

«Это» — гидрорезка породы (расходный материал в основном в данном случае обычная вода), и в дополнение к этому процессу оплавление породы кислородно-водородным пламенем.

Факты промышленного использования гидро-режущих проходческих установок.

Историческая справка — настоящий прорыв в области гидрорезки произошел в 1935 году, когда выпускник Днепропетровского горного института имени товарища Артема Владимир Мучник предложил использовать высокоскоростную водяную струю для разрушения угольных пластов. Через год в одной из шахт Донбасса были проведены успешные испытания гидромонитора, оснащенного насосом мощностью 7000 атм, а уже в 1939 году в тресте «Орджоникидзеуголь» была запущена первая в мире опытно-промышленная гидрошахта. Несмотря на то что техническое обеспечение гидродобычи оказалось чрезвычайно сложным и дорогим делом, после войны метод Мучника было решено развивать по всей стране. К середине 1980-х годов в Советском Союзе действовало десять предприятий с завершенным технологическим циклом гидродобычи угля, а их научную поддержку обеспечивал специальный институт — ВНИИ Гидроуголь.

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

Ранее я уже упоминал про развитие этой технологии плавки на Земле

Сейчас наиболее перспективным можно считать организацию выплавки различных пеноматериалов (Пенометаллы, пеностекло).

Металлическая пена уже обсуждалась на хабре.

Для создания плана развития тоннелей добычи в Лабиринте Ночи колония должна будет провести качественную гео-разведку.

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

Тема летающих дронов Марса уже упоминалась на Хабре и сейчас только дополнилась проектами различных вариантов вертолетов. Плотность атмосферы в Лабиринте Ночи по объективным причинам в период тумана можно будет считать максимальной для планеты, и поэтому задача полета будет максимально упрощена.

Стройка

дословно слово иим переводится как «куча камней», что в целом и отражает суть строительной стратегии колонии.

Строительные работы в колонии можно разделить условно на внутренние и наружные.

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

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

Примерно то же будут делать роботы на Марсе, но уже со значительно большими по размеру камнями.

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

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

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

Источники света — электрические светодиоды или лампы накаливания.

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

Транспорт

Транспорт марсианского города это… однорельсовый паровоз, велосипеды и собако-подобные роботы (похожие на Spot от компании Boston Dynamics). Это основной транспорт, если не учитывать развлекательного.

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

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

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

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

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

Гироскоп-паровоз Шиловского

В 1921 году «Красная газета» от 15 апреля сообщила что — «Президиум ВСНX обсуждал вопрос о сооружении однорельсовой жироскопической железной дороги. Постановлено использовать ныне бездействующую бывшую царскую ветку Петроград — Детское Село — Александровка.

Это был проект однорельсовой дороги Петра Петровича Шиловского. По проекту этот поезд был рассчитан на скорость до 150 верст в час.

Гиропоезд создавался как электровоз с собственной генераторной станцией, оснащенной двумя ДВС по 250 л. с. Предполагалось, что поезд будет состоять из двух вагонов обтекаемой формы — моторного и пассажирского на 50 человек (по другим данным — общей вместимостью 400 пассажиров). Скорость движения должна была доходить до 150 км/ч. Поэтому модель поезда продувалась в аэродинамической трубе Политехнического института.
За четыре месяца было построено 12 километров монорельсового пути (от Детского Села до Средней Рогатки), а предприятиям в Санкт-Петербурге был заказан подвижной состав. Однако в мае 1922 года финансирование проекта было прекращено.

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

Немного о КПД паровоза…

«Классический» паровой двигатель, который выпускал отработанный пар в атмосферу, имеет КПД не более 8%. Однако паровой двигатель с конденсатором и профилированной проточной частью имеет КПД до 25–30%. Парогазовые установки, где используются «в связке» газовые и паровые турбины, имеют КПД до 55–65%.

А КПД современных бензиновых двигателей составляет 34%.

Передвижение по колонии не обязательно будет по поверхности внутри базы.

Будет и быстрый и развлекательный транспорт в виде различных вариаций воздушного транспорта.

Первый — подобие реактивного ранца на смеси газов.

Второй — мини-дирижабли на водороде.

… и третий (чисто развлекательный) это различные виды мускульного накладного махолета.

Таким образом мечта человека полететь по подобию Икара будет реализована в реальности!

Факт — гравитация на Марсе значительно ниже, чем на Земле, если точнее, то на 62% ниже. Это означает, что марсианская гравитация составляет 38% от Земной. Человек массой 100 кг, на Марсе весил бы 38 кг. Поэтому реактивный ранец, воздушный шар и крылья для полета будут создавать на Марсе достаточную подъемную силу при относительно небольших размерах.

Еда, одежда, обувь

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

Меню стандартных продуктов будет значительно расширенно.

За счет чего будет обеспечен весь этот праздник гастрономии? Определенно сказать сложно… но если вспомнить фильм Матрица мой намек будет более понятен (конкретнее диалог Сайфера и Смита). В общем мозговой имплант у колонистов будет иметь расширенные функции.

Правда будет и момент реальности в этом царстве частичной виртуальности.

Один из реальных продуктов — конопля!

Семена этого растения можно есть.

Издревле на Руси под словом каша подразумевалось именно блюдо из конопли. До 1961г не менее четверти всех посевных площадей в СССР ежегодно засевалось коноплей, а конопляное масло – это исконное растительное масло для северных славян.
Из листьев изготавливать чай.

Делать из марихуаны чай придумали довольно давно. Во всемирной истории употребление конопляного чая впервые упоминается в первом тысячелетии нашей эры. Традиция приготовления напитка из листьев каннабиса зародилась в азиатских странах, в частности, в Индии, известной своими пряностями и широким использованием трав и листьев в пище. На Ямайке коноплю использовали для излечения от всяческих заболеваний. Даже в современном мире беременные ямайки принимают конопляный чай в качестве средства от тошноты, от которой страдает большинство женщин в период токсикоза. Да что там Ямайка, даже в более развитых странах, таких как Россия, Словакия, Австрия, до сих пор принимают чай из конопляных листьев при наступлении различных недугов.

Более популярным чаем среди колонистов все же будет настойка на основе Erythróxylum cóca, которая будет способствовать лучшему самочувствию при перепадах давления внутри базы).

Кроме еды из конопли можно изготовить массу других полезных вещей.

Следующим реальным продуктом будут различные виды грибов! Шампиньоны, вешанки, опята, белые грибы, мухоморы и т. д.

Есть технология производства из грибов даже кирпичей!

Одним из вариантов НЗ (неприкосновенный запас) будут… съедобные лишайники на стенах колонии! Если возникнет недостаток еды в колонии можно будет в буквальном смысле «съесть стены».

Вариантом НЗ №2 будет кактус Опунция, который будет выполнять, как и мох на стенах в основном декоративную функцию, и попутно служить источником еды, лекарств, текилы.

Грибы, как и конопля будут основой для лекарств.

Если это навевает мысли про употребление этих «поганок» только людьми, то зря! Второй и главный материал для тканей будет шелк от пауков-шелкопрядов Nephila.

Факт

Шелк мадагаскарского паука в 10 раз крепче кевлара, материала, использующегося в большинстве бронежилетов. Считается, что ткань кевлара для мягкой бронезащиты, выпускаемая компанией DuPont, в пять раз прочнее стали, такой материал широко используется полицейскими. Однако прочность шелка паука все-таки выше его искусственных аналогов, и на протяжении нескольких десятилетий ученые предпринимали попытки создать броню в стиле человека паука.

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

В XVIII веке французы поднимали вопрос промышленного производства паучьего шелка. Например, члены Академии наук в Париже высчитали, что для изготовления всего 1 квадратного метра шёлка потребуется 55-60 пауков нефилов. Для промышленного выращивания паутины потребуется мух больше, чем тогда летало по всему государству.

Шелк может использоваться и как проводник электричества после добавки графена.

Как это связано с грибами? Напрямую это сложно понять но логическая цепочка тут такая — грибы служат заменителем ЛСД под которым пауки плетут более совершенную паутину, которую проще собирать.

Последним экзотическим видом реальной еды будут — жуки!

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

Жуки используются в сложных условиях с опасностью повышенной радиации и т. д. Для работ прокапывания каналов и транспортировки необходимых частей.

В случае необходимости сокращения затрат на поддержание жуков их переводят в анабиоз.
Насекомые будут непростые, а кратно увеличенные за счет повышенного содержания кислорода в парниках разведения и местах их работы. Это позволит выполнять работы по строительству нор и увеличению количества «мяса» для еды без кратного увеличения количества контролируемых насекомых (имплант в мозг будет многоразовым, а количество контролируемых насекомых будет иметь разумные пределы).

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

Более простым источником белка будут выращиваемые в отдельных водоемах Золотые медузы. Их «хрустальное» мясо невероятно полезно.

Как утверждают медики, тело медузы содержит в себе едва ли не всю таблицу элементов Менделеева в пропорциях, необходимых для здоровья.

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

На Руси медузу называли «морским салом».

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

Последним съедобным растением будет… бамбук (точнее его молодые побеги). Из волокон бамбука можно изготавливать одежду, обои, мебель и рамы для велосипедов.

Роботы, ИИ, импланты

После описания вопросов материальной основы базы стоит сказать о психологической основе главного элемента — колонистов!

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

Название мозгового импланта человека — BES

Вопреки очевидной первой ассоциации с названием по-настоящему название взято с аббревиатуры программы BES (Battle Encoder Shirase), которая предназначена для разгрузки процессора и снижения его температуры. Функции импланта в мозг колониста будут по сути теми же — снижение интеллектуальной нагрузки на колониста чтоб его голова не «закипала».

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

Часть колонистов будет своего рода полу-киборгами уже на Земле за счет протезов ног и возможно одной руки. Это нужно для обеспечения меньшей массы тела и большего ресурса сердца за счет сниженной массы биологического тела.

Протезы ног и руки не просто элемент экономии в весе и потреблении калорий человеком — это еще часть Роботов-Франкенштейнов (эти роботы образуются ночью из ног и руки протезов для работы ночью, когда колонист спит).

Роботы РФ будут не только самостоятельным элементом, но и частью самого колониста в виде расширенного экзоскелета что со стороны будет напоминать подобие человека-кентавра.

Тот же экзоскилет-робот-РФ будет использоваться И.И. в качестве наездника на втором по важности элементе базы — Жуках-гигантах. Робот в данном случае будет ехать на спине насекомого и собирать еду в среде обитания жука (Парник периода эпохи Карбона).

Каменноугольный период Земли был 360 миллионов лет назад и имел особенности атмосферы схожей с марсианской.

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

Ученые изучили состав атмосферной пыли возрастом 300 миллионов лет и выяснили, что она была богата железом, так необходимым фотосинтезирующим водорослям, производящим кислород. Результаты исследования опубликованы в журнале Geology.

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

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

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

Для своего анализа ученые выбрали карбонатные породы возрастом около 300 миллионов лет из северного и центрального Ирана, содержащие морские организмы, способные существовать только в чистой морской воде, не замутненной речными стоками.
После того, как ученые растворили породообразующие минералы в кислоте, у них осталась нерастворимая фракция — мелкие частицы кварца и глины, представляющая собой древнюю пыль.

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

«Расцвет первичных производителей, таких как растения и водоросли, привел к более активному улавливанию углерода, что может объяснить снижение содержания углекислого газа в атмосфере около 300 миллионов лет назад», — приводятся в пресс-релизе Оклахомского университета слова первого автора статьи Мехрдада Сардара Абади (Mehrdad Sardar Abadi).

Ранее экспериментально было доказано, что добавление биодоступного железа в современные изолированные морские экосистемы приводило к бурному цветению фитопланктона.

«Если что-то подобное происходило в глобальном масштабе, это означает, что эффект „удобрения“ пылью выразился в снижении содержания углекислого газа в атмосфере и был важной частью углеродного цикла в этот период истории Земли», — отметила руководитель исследования Джерилин Сореган (Gerilyn Soreghan), директор Школы наук о Земле при Оклахомском университете.

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

Название импланта жуков — Cordyceps

Название в данном случае полностью отражает суть работы импланта — постепенное уничтожение жука для пользы гриба И.И.

Устройство общества

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

И.И. вынужден будет работать над формированием такой общей структуры общества при которой будет достигнута максимальная взаимозаменяемость каждого элемента человека по большинству необходимых профессий. Ленинское «учится, учится и еще раз учится» в И.И.Ме будет расширенно дополнением «и все это, для того чтобы выжить».

Риски потери людей огромны, и следовательно, колонисты просто не могут себе позволить жить только своей профессией. Смена рода занятий будет оправдана не только повышением взаимозаменяемости колонистов, но и элементарной заботой о психологическом здоровье людей (ведь пенсий и даже в какой-то мере периода «детства» у колонистов и их детей не будет, по причине невозможности тратить ресурсы «вхолостую»).

Стимул к преодолению трудностей первых колонистов.

Маск мечтает «умереть на Марсе»… эта мечта наверняка будет близка и многим другим первым колонистам планеты.

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

Один из вариантов — криогенное хранение умерших в льду по подобию фараонов т. е. Напоказ. Для увековечивания потомков первых людей на Марсе.


Если эта идея понравится многим землянам, то на перспективу это может даже стать своего рода статьей дохода марсианского общества (импорт умерших с Земли для захоронения на Марсе).

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

Импорт/экспорт

1. И.И. нужны серверы для хранения и обработки данных, а так же датчики и видеокамеры на роботах с Земли в обмен на… трансляцию видео-контента с Марса и хранение данных с земли (сервера на Марсе защищены от влияния государств и т. д.).

2. Ритеги и прочее к АЭС в обмен на… золото, платину и редкоземы от металлургии-геологии.

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

Что дальше?

Конечно на строительстве колонии И.И.М. освоение Марса не закончится, и в дальнейшем будет еще три колонии + одна на орбите (объекты APA, Zevs, Аlba + Olympus star).

Эти базы будут решать ряд задач.

— Альтернатива АЭС на Марсе. (Это не отменит существование АЭС, а лишь дополнит систему, сделав ее значительно более надежной в энергетическом плане. Даже если все АЭС перестанут функционировать — для жизнеобеспечения людей хватит других источников энергии.)

— Защита от последствий слабого притяжения. (это связано с темой альтернативы АЭС)

— Управление климатом Марса. (это не цель — это последствие развития одной из систем колонии).

— Изменение экономики и устройства Земли через освоение Марса (Грета будет рада).

— Снижение затрат на выведение на орбиту грузов с Марса. (связано с 1-м и 2-м пунктом).

— Создание новых типов материалов за счет уникальных условий производства. (1 пункт)

P.S. — Проект ИИМ на данный момент находится в стадии роста количества участников. Есть большая потребность в дизайнерах, разработчиках систем и переводчиках для развития концепции колонии.

Недавно свою помощь предложили специалисты из Технологического института Южного Хармона , но я открыт для сотрудничества и с другими ВУЗами всех остальных стран мира.

ссылка на оригинал статьи https://habr.com/ru/post/494038/

ОЧКИ СУМРАЧНОГО ЗРЕНИЯ. Android Camera2 API от чайника, часть 5 внезапная

Проживая в эпоху технологических прорывов и свершений, взирая на то, как устремляются в небо ракеты Маска и Безоса, мы, простые люди с высшим техническим образованием, часто не замечаем возможности совершить прорыв не там, далеко в космосе, а здесь рядом с нами, буквально не вставая с дивана из-стола.
Судите сами, к какому открытию может привести чтение обычной статьи о современных смартфонах. Источник приводить не буду, чтобы не делиться будущими доходами.

Вершиной вычислительной фотографии можно, пожалуй, считать ночную съемку. Примером может служить «Ночной Режим» в смартфонах Google Pixel. В нём IT гиганту пришлось задействовать съёмку в RAW, HDR-стекинг, компенсацию «смазов», распознавание сцен нейросетями. А появление второй камеры в прошлогоднем Pixel 4 сделало «Night Sight» пригодным даже для съемки звезд. В сумме это создает ощущение волшебства: глаза видят кромешную тьму, а на фотографии лёгкие сумерки. Как шутят на форумах, скоро на смартфон можно будет снять чёрную кошку в тёмной комнате и она будет чёткой.

Другое дело, что ходить ночью и тыриться в экран мобильника как-то неудобно, даже в ночном режиме. И тут мой взгляд случайно упал на VR-гарнитуру для смартфона, валявшуюся на полке. Прорыв свершился! Осталось только, используя её и накопленные за четыре поста знания о Android Camera2 API, направить изображение с «Night Sight» прямо в глаз. Заодно и руки будут свободны, чтобы поймать чёрную кошку в тёмной комнате. Совсем без света, конечно, не получится, фотонов, хоть немного, да нужно. Но по крайней мере уровня котановских гляделок в темноте мы достигнуть (а может, даже превзойти) обязаны.

Итак, чтобы научиться видеть во тьме, нам понадобится:

1: гарнитура виртуальной реальности для смартфона, (можно самую дешёвую)

2: смартфон с поддержкой современных гуглофич для камеры (ну, он точно самым дешевым не окажется)

3: знание основ Android Camera2 API ( это у нас уже есть)
часть первая
часть вторая
часть третья
часть четвертая

Открываем новый проект в Android Studio и начинаем ваять код.

Первым делом надо собрать, собственно VR поверхности, которые будут светить в гарнитуру.

Макет

<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:background="#03061B"     tools:context=".MainActivity">      <TextureView         android:id="@+id/textureView"         android:layout_width="240dp"         android:layout_height="320dp"         android:layout_marginTop="28dp"         app:layout_constraintEnd_toEndOf="parent"         app:layout_constraintHorizontal_bias="0.497"         app:layout_constraintStart_toStartOf="parent"         app:layout_constraintTop_toTopOf="parent" />      <TextureView         android:id="@+id/textureView3"         android:layout_width="240dp"         android:layout_height="320dp"         android:layout_marginTop="16dp"         app:layout_constraintEnd_toEndOf="parent"         app:layout_constraintStart_toStartOf="parent"         app:layout_constraintTop_toBottomOf="@+id/textureView" />      <LinearLayout         android:layout_width="165dp"         android:layout_height="40dp"         app:layout_constraintBottom_toBottomOf="parent"         app:layout_constraintEnd_toEndOf="parent"         app:layout_constraintStart_toStartOf="parent"         app:layout_constraintTop_toBottomOf="@+id/textureView3"         app:layout_constraintVertical_bias="0.838">          <Button             android:id="@+id/button1"             android:layout_width="wrap_content"             android:layout_height="36dp"             android:backgroundTint="#3F51B5"             android:text="вкл"             android:textColor="#1A87DD" />          <Button             android:id="@+id/button3"             android:layout_width="wrap_content"             android:layout_height="37dp"             android:backgroundTint="#3F51B5"             android:text="выкл"             android:textColor="#2196F3" />     </LinearLayout>   </androidx.constraintlayout.widget.ConstraintLayout>   

На выходе должно получится что-то в этом роде:

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

Для этого, собственно, мы пишем скромную такую Activity, в которой всё уже нам знакомо по предыдущим статьям.

package com.example.twovideosurfaces; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import android.Manifest; import android.content.Context; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.graphics.SurfaceTexture; import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraCaptureSession; import android.hardware.camera2.CameraDevice; import android.hardware.camera2.CameraManager; import android.hardware.camera2.CaptureRequest; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.os.StrictMode; import android.util.Log; import android.view.Surface; import android.view.TextureView; import android.view.View; import android.widget.Button; import java.util.Arrays; public class MainActivity extends AppCompatActivity  {     public static final String LOG_TAG = "myLogs";     public static Surface surface1 = null;     public static Surface surface2 = null;     CameraService[] myCameras = null;     private CameraManager mCameraManager = null;     private final int CAMERA1 = 0;     private Button mOn = null;     private Button mOff = null;     public static TextureView mImageViewUp = null;     public static TextureView mImageViewDown = null;     private HandlerThread mBackgroundThread;     private Handler mBackgroundHandler = null;     private void startBackgroundThread() {         mBackgroundThread = new HandlerThread("CameraBackground");         mBackgroundThread.start();         mBackgroundHandler = new Handler(mBackgroundThread.getLooper());     }     private void stopBackgroundThread() {         mBackgroundThread.quitSafely();         try {             mBackgroundThread.join();             mBackgroundThread = null;             mBackgroundHandler = null;         } catch (InterruptedException e) {             e.printStackTrace();         }     }     @RequiresApi(api = Build.VERSION_CODES.M)     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();         StrictMode.setThreadPolicy(policy);         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);         setContentView(R.layout.activity_main);         Log.d(LOG_TAG, "Запрашиваем разрешение");         if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED                 ||                 (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)         ) {             requestPermissions(new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);         }         mOn = findViewById(R.id.button1);         mOff = findViewById(R.id.button3);         mImageViewUp = findViewById(R.id.textureView);         mImageViewDown = findViewById(R.id.textureView3);         mOn.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View v) {                 if (myCameras[CAMERA1] != null) {// открываем камеру                     if (!myCameras[CAMERA1].isOpen()) myCameras[CAMERA1].openCamera();                 }             }         });         mOff.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View v) {             }         });         mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);         try {             // Получение списка камер с устройства             myCameras = new CameraService[mCameraManager.getCameraIdList().length];             for (String cameraID : mCameraManager.getCameraIdList()) {                 Log.i(LOG_TAG, "cameraID: " + cameraID);                 int id = Integer.parseInt(cameraID);                 // создаем обработчик для камеры                 myCameras[id] = new CameraService(mCameraManager, cameraID);             }         } catch (CameraAccessException e) {             Log.e(LOG_TAG, e.getMessage());             e.printStackTrace();         }     }     public class CameraService {         private String mCameraID;         private CameraDevice mCameraDevice = null;         private CameraCaptureSession mSession;         private CaptureRequest.Builder mPreviewBuilder;         public CameraService(CameraManager cameraManager, String cameraID) {             mCameraManager = cameraManager;             mCameraID = cameraID;         }         private CameraDevice.StateCallback mCameraCallback = new CameraDevice.StateCallback() {             @Override             public void onOpened(CameraDevice camera) {                 mCameraDevice = camera;                 Log.i(LOG_TAG, "Open camera  with id:" + mCameraDevice.getId());                 startCameraPreviewSession();             }             @Override             public void onDisconnected(CameraDevice camera) {                 mCameraDevice.close();                 Log.i(LOG_TAG, "disconnect camera  with id:" + mCameraDevice.getId());                 mCameraDevice = null;             }             @Override             public void onError(CameraDevice camera, int error) {                 Log.i(LOG_TAG, "error! camera id:" + camera.getId() + " error:" + error);             }         };         private void startCameraPreviewSession() {             SurfaceTexture texture = mImageViewUp.getSurfaceTexture();             texture.setDefaultBufferSize(1280, 1024);             surface1 = new Surface(texture);             SurfaceTexture texture2 = mImageViewDown.getSurfaceTexture();             surface2 = new Surface(texture2);             texture2.setDefaultBufferSize(1280, 1024);             try {                 mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);                 mPreviewBuilder.addTarget(surface1);                 mPreviewBuilder.addTarget(surface2);                 mCameraDevice.createCaptureSession(Arrays.asList(surface1,surface2),                         new CameraCaptureSession.StateCallback() {                             @Override                             public void onConfigured(CameraCaptureSession session) {                                 mSession = session;                                  try {                                     mSession.setRepeatingRequest(mPreviewBuilder.build(), null, mBackgroundHandler);                                 } catch (CameraAccessException e) {                                     e.printStackTrace();                                 }                             }                             @Override                             public void onConfigureFailed(CameraCaptureSession session) {                             }                         }, mBackgroundHandler);             } catch (CameraAccessException e) {                 e.printStackTrace();             }         }         public boolean isOpen() {             if (mCameraDevice == null) {                 return false;             } else {                 return true;             }         }         public void openCamera() {             try {                 if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {                     mCameraManager.openCamera(mCameraID, mCameraCallback, mBackgroundHandler);                 }             } catch (CameraAccessException e) {                 Log.i(LOG_TAG, e.getMessage());             }         }         public void closeCamera() {             if (mCameraDevice != null) {                 mCameraDevice.close();                 mCameraDevice = null;             }         }     }     @Override     public void onPause() {         if (myCameras[CAMERA1].isOpen()) {             myCameras[CAMERA1].closeCamera();         }         stopBackgroundThread();         super.onPause();     }     @Override     public void onResume() {         super.onResume();         startBackgroundThread();     } }   

Да, и не забываем про

манифест

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="com.example.twovideosurfaces">     <uses-permission android:name="android.permission.CAMERA" />     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />     <uses-permission android:name="android.permission.INTERNET"/>     <application         android:allowBackup="true"         android:icon="@mipmap/ic_launcher"         android:label="@string/app_name"         android:roundIcon="@mipmap/ic_launcher_round"         android:supportsRtl="true"         android:theme="@style/Theme.AppCompat.NoActionBar"         >         <activity android:name=".MainActivity">             <intent-filter>                 <action android:name="android.intent.action.MAIN" />                 <category android:name="android.intent.category.LAUNCHER" />             </intent-filter>         </activity>     </application> </manifest> 

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

Всё что теперь осталось — так это убедить Google camera API, что у нас тьма кромешная, и хорошо бы задействовать режим Night Vision, а вместе с ним все эти RAW, HDR-стекинг и распознавание сцен нейросетями.

Для этого всего лишь пропишем в сессии:

  mPreviewBuilder.set(CaptureRequest.CONTROL_SCENE_MODE,                                             CaptureRequest.CONTROL_SCENE_MODE_NIGHT);  

и выкрутим по максимуму экспозицию и светочувствительность

 mPreviewBuilder.set(CaptureRequest.CONTROL_AE_MODE,         CaptureRequest.CONTROL_AE_MODE_OFF); mPreviewBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME,Long.valueOf("100000000"));  mPreviewBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, 30000);  

Ой, я ослеп!

Вот что, оказывается, видит кот, когда его выкидывают из спальни, где он мешает людям заниматься сексом, в гостиную.
Но конечно, это перебор и параметры (а их в API немало и здесь приведена всего парочка) надо подкрутить потом опытным путём.

Теперь нам остаётся только дождаться ночи. Не безлунной, конечно, с плотной облачностью где-нибудь в тайге, а обычной такой ночи со случайными залетными фотонами.
И вот что произойдёт…
Хотя казалось бы, при обычной съёмке практически ничего не видно.

Но современые камеры творят чудеса и таки находят черную кошку…

Теперь можно гулять по ночам, потому что днём нельзя из-за карантина. По идее и ночью тоже нельзя, но кто ж вас увидит, крадущихся во мраке ночи с VR-гарнитурами на головах…

ссылка на оригинал статьи https://habr.com/ru/post/493922/

Мир после Covid-19

Я пишу эти строки из самоизоляции, которая продлится еще не меньше месяца. Чтобы выйти на улицу надо пометиться QR-кодом. За нефть скоро придется доплачивать. Обнуление, хоть и сдвинулось, но не дальше горизонта.

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

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

Дракон насытится коронавирусом: рецессия не затянется. С окончанием эпидемии экономика начнет резко расти. Правительства зароют топор торговой войны и будут активно накачивать свои экономики дешевой ликвидностью. Выплаты «вертолетных денег» в некоторых странах так и не будут отменены и превратятся в безусловный общий доход. Компании возобновят инвестиционные программы и запустят новые, в отраслях, ставших перспективными во-время эпидемии. Истосковавшиеся потребители выйдут из своих домов и начнут тратить деньги. Очень скоро центробанкам придется повышать учетную ставку, чтобы избежать перегрева экономики.

Кризисы 2008 и 2014 года были купированы действиями правительства и не выполнили свою функцию переформатирования экономики. Но в этот раз это случится. Уже случилось. Накопленные структурные напряжения получили разрядку и глобальная экономика начнет активно развиваться.

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

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

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

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

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

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

Рынок недвижимости также ждут серьезные изменения: спрос на малогабаритное жилье в спальных районах снизится. Это приведет к запустению и маргинализации таких районов, что окончательно обесценит недвижимость в них. Однако, возможно их место займут те, кто большую часть своего времени, как рабочего, так и личного проводит в виртуальной вселенной. Люди предпочтут селиться либо в просторных домах с рабочими кабинетами в приятном климате и живописной местности, либо в районах с развитой инфраструктурой, преимущественно в исторических центрах. Торговые центры начнут переоборудовать в досуговые и спортивные комплексы, а также под коворкинги для тех, у кого в квартире не хватило места для кабинета. Оплата места в таком коворкинге может сразу входить в контракт удаленного сотрудника.

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

Напуганные пандемией правительства направят невиданные ресурсы на исследования вирусов и методов борьбы с ними. Следом за государственными инвестициями в фундаментальные исследования придут частные инвестиции в фармацевтику, медицину и биотехнологии. На финансовых рынках появится множество ценных бумаг и фондов, работающих в этих отраслях. Это ускорит разработку лекарств и вакцин не только от семейства короно-вирусов, но и других вирусов, вызывающих ОРВИ и даже от ВИЧ, гепатита С, герпеса и ВПЧ. Разойдясь каскадом по всей отрасли, инвестиции и выполненные на них исследования приведут к прогрессу в лечении и профилактики многих других заболеваний, включая онкологические.

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

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

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

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

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

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

ссылка на оригинал статьи https://habr.com/ru/post/495044/

И целого байта мало… (Часть #1)

Дамы, господа, сегодня отличный день!

Скорее всего вы помните, что существует такая форма компьютерного искусства как «демосцена», но если слышите это слово впервые — просто прочитайте тематический хаб и теги на Хабре, а так же пару популярных статей по этому вопросу.

image

Одной из форм соревнования на демосцене является sizecoding — программирование визуальных эффектов в крайне ограниченном объеме машинного кода. Прежде чем мы перейдем к достижениям сегодняшнего дня (а они есть и более чем масштабные), давайте очень быстро пробежимся по наследию дедов. Все приведенные ниже работы сделаны в разные годы, объединяет их требование к платформе — PC, x86, DOS (никакого GPU, обычная видеокарта). В идеале вам стоит поставить DosBox и запускать каждую работу самостоятельно, благо авторы не особенно озадачиваются созданием видео и загрузкой его на YouTube. Мы постарались выбрать по одной показательной работе в каждой номинации.

Для начала посмотрим на «крупные» релизы, те, которые занимают килобайты. Здесь золотым стандартом является 64 килобайта. Категория 40 килобайт популярна на компьютере Commodore Amiga, а в случае с PC здесь обычно лежат работы, которые авторы не захотели дописывать до 64k. Говоря про 32k и 16k — это чаще всего cracktro и bbs intro, которые формально тоже можно отнести к демосцене.

64k introheaven seven by Exceed

40k introAlien Incident Cracktro by Hybrid & Superior Art Creations

32k introQuake 3 Cracktro (RZR #07) by Razor 1911 & Superior Art Creations

16k introBlastersound BBS (2) by Iguana

А вот отсюда начинается настоящая демосцена, здоровенная, демосцена моей мечты!

8k intromars by Tim Clarke

4k introOmniscent by Sanction

1k intropaleozoa by fsqrt

512b introAFLAtoxin

256b introPuls by Rrrola

128b introcross by Queue Members Group

64b introinto a new era by Desire

32b introProjektbeschreibung by Desire

На этом официальны градации на Pouet заканчиваются, но не заканчивается погоня за эффектами в минимальном объеме кода. Вот в качестве примера эффект из Матрицы размеров всего восемь байт:

8b introm8trix 8b

Вопрос дня: может ли быть интро размером в 4 байта? А в 2 байта?
Ответ: ДА.

Вот машинный код для процессора x86:

#EB #80

А вот результат на экране:

Заинтригованы? Во второй части мы детально расскажем как такое возможно! Уж такой сегодня
день…

Вторую часть можно и не ждать, если вы умеете держать ассемблер в руках и язык вероятного противника вам знаком. Вот ссылка: www.pouet.net/prod.php?which=85118

ссылка на оригинал статьи https://habr.com/ru/post/495042/

Java простое веб-приложения. Логин и регистрация

Всем доброго времени суток.

Эта статья рассчитана для новичков в мире Web и Java. Мы рассмотрим стандартную архитектуру веб-приложения и сделаем небольшой проект с нуля.

Будем использовать Spring (Огромный фреймворк для веба), но по минимуму. Если не иметь предыдущего опыта использования и сразу пытаться использовать весь функционал, то не будет базового понимания, так как имеется перечень подводных камней.

Что будет делать приложение

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

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

Исходный код вы сможете найти здесь.

Что будем использовать

  • любимую IDE (я использую IntelliJ IDEA)
  • не замутненную голову
  • Maven (сборщик проекта)
  • JDBC (звено между Java и СУБД)

Создание проекта

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

image

И так, что мы видим.

  • java — основное место где будет происходить "магия"
  • resources — место где хранятся наши ресурсы. (Это могут быть файлы, картинки и чего только душа пожелает, зачастую тут хранится front часть приложения)
  • test — место где принято писать тесты к приложению. (Вы можете с чистой совестью удалять эту папку, тестирование мы рассматривать не будем)
  • pom.xml — сердце Maven. В нем содержится информация о проекте, тут прописываются все зависимости, указывается какой тип "упаковки" должен быть у проекта и тд.

Кстати, не пропустите сообщения от IDE, и разрешите авто-импорт для Maven.

image

Архитектура веб-приложения

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

image

На картинке показаны слои веб-приложения, каждый слой может взаимодействовать только со своими соседями, если приложение написано "по-правильному".

И так пробежимся по каждому слою и разберем их назначения.

  1. Browser — это лицо нашего приложения. То что видит пользователь и что называют Frontend. Он может взаимодействовать с Backend — серверной частью, а именно с контроллером. Этот слой должен уметь отправлять и получать данные от контроллера.
  2. Controller — должен контролировать запросы от Frontend, уметь их обрабатывать и возвращать данные. И, конечно же, задачей контролера является общение со следующим слоем.
  3. Service — в этом слое должна быть реализована бизнес-логика приложения. Можно считать этот слой корнем приложения. В нем происходят самые тяжеловесные операции.
  4. DAL(data access layer) — этот слой должен общаться с нашей БД. В нём реализованы все запросы к БД, которые нужны для приложения, а именно запросы на выборку, изменения и тд.
  5. Database — она же БД, структурированная туса данных.

Проектирование базы данных

Один из самых первых этапов разработки веб-приложения является проектирование БД.

Выбор БД предоставляется на ваше усмотрение, но у меня в примере будет использоваться H2.

Так как я хочу чтобы пример вышел небольшой, но чтобы в нем удалось рассмотреть как можно больше скользких моментов и понять всеобщие принципы построения веб-приложений. В примере будет только одна таблица User.

create table DATABASE.USER (     ID INT auto_increment,     NAME VARCHAR not null,     SURNAME VARCHAR not null,     LOGIN VARCHAR not null,     PASSWORD VARCHAR not null,     constraint USER_PK         primary key (ID) ); 

Добавляем Spring в проект

Вспоминаем про нашу папку java.

Создаем внутри java пакет com.zuk(вы можете называть иначе), в нем класс App с обычной main функцией.

И добавим щепотку магии Spring. Не будем вдаваться сильно в то что здесь происходит, с помощью @SpringBootApplication мы просто говорим Spring, чтобы он делал автоматическую настройку, чтобы он сканировал все что ему нужно. Сейчас рекомендую рассматривать Spring как автономную республику.

//com.zuk.App @SpringBootApplication public class App {      public static void main(String[] args) {         SpringApplication.run(App.class, args);     } }

Не впадаем в панику если все красное и не забываем подключать зависимости в pom.xml.

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>      <groupId>org.zuk</groupId>     <artifactId>LoginAndRegistration</artifactId>     <version>1.0-SNAPSHOT</version>      <properties>         <maven.compiler.source>1.8</maven.compiler.source>         <maven.compiler.target>1.8</maven.compiler.target>     </properties>      <dependencies>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-web</artifactId>             <version>2.2.5.RELEASE</version>         </dependency>     </dependencies>  </project>

Если вы все сделали правильно у вас появится возможность сделать билд проекта, и Spring скажет вам привет.

image

Spring говорит что он стартанул сервер на порту 8080. Мы можем сами убедиться в этом, сходив на http://localhost:8080.

Подключаем БД к проекту

И так мы уже создали нашу Базу даных, подключили Spring к проекту, но они ещё не знают о существование друг друга.

Давайте создадим application.properties по пути src.main.resources.

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

spring.datasource.driverClassName=org.h2.Driver spring.datasource.url=jdbc:h2:~/test  spring.datasource.username=sa spring.datasource.password=

Это стандартные ключи для Spring, и он сам может их прочитать.

Чтобы вы смогли убедиться в соединении, предлагаю проверить сможем ли мы подключиться в БД.
Хочу предупредить, моё решение будет спорным. На мой взгляд для новичка оно будет показательным и не будет вызывать много вопросов, но не стоит сильно опираться на данный подход. В Spring есть интересные реализации для работы с БД.
Советую почитать несколько статей по данной тематике.

По пути java.com.zuk.connection создадим класс ConnectionManager, он должен отдавать нам соединение с БД, и с этим соединением мы в дальнейшем будем работать.
Для этого нам понадобится вытянуть наши properties, сделаем это с помощью FileInputStream.

//ConnectionManager FileInputStream fis; Properties property = new Properties();

Проберемся к нашему application.properties, и вытянем с него properties.

//ConnectionManager fis = new FileInputStream("src/main/resources/application.properties"); property.load(fis);

Создаем метод getConnection.

  //ConnectionManager   public Connection getConnection() {             Connection connection = null;             try {                 connection = DriverManager.getConnection(property.getProperty("spring.datasource.url"),property.getProperty("spring.datasource.username"),property.getProperty("spring.datasource.password"));             } catch (SQLException e) {                 e.printStackTrace();             }             return connection;         }

Теперь можете проверить есть ли соединение, сделать это можно и в App.

Если у вас все получилось, должно вывести такое.

conn2: url=jdbc:h2:~/test user=SA

Ах да, не забываем добавить зависимость в наш любимый pom.

<dependency>     <groupId>com.h2database</groupId>     <artifactId>h2</artifactId>     <version>1.4.200</version> </dependency>

POJO (Plain Old Java Objects)

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

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

Для нашего проекта, это будет описание сущности таблицы User.
То есть мы реализуем таблицу в виде класса.

И так создаем пакет java.com.zuk.entity, в нем класс User.
Запишем в поля класса поля таблицы, и реализуем для каждого геттер и сеттер.

User.java

public class User {      int id;     String name;     String surname;     String login;     String password;      public int getId() {         return id;     }      public void setId(int id) {         this.id = id;     }      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     }      public String getSurname() {         return surname;     }      public void setSurname(String surname) {         this.surname = surname;     }      public String getLogin() {         return login;     }      public void setLogin(String login) {         this.login = login;     }      public String getPassword() {         return password;     }      public void setPassword(String password) {         this.password = password;     } }

DAL

Что же, самое время приступить к следующему слою, а именно DAL. Тут будут реализованы все запросы к нашей БД, которые нам понадобятся. Честь этого слоя будет отстаивать DAO (data access object) — интерфейс к какому-либо типу базы данных или механизму хранения.

Создаем пакет java.com.zuk.dao в нем интерфейс UserDao (принято сначала писать имя таблицы). Опишем пока что только два метода findByLogin, save.

public interface UserDao {     User findByLogin(User user);     Boolean save(User user); }

Дальше напишем реализацию для этого интерфейса, создаем пакет java.com.zuk.dao.impl,
в нем класс UserDaoImpl.
Вы можете спросить зачем так сильно разделять все — это будет служить хорошей привычкой, вдруг вам придется работать в большом проекте, там скорее всего будут специфические реализации (например, если используется несколько БД).

public class UserDaoImpl implements UserDao {     @Override     public User findByLogin(User user) {         return null;     }      @Override     public Boolean save(User user) {         return null;     } }

Начнем с findByLogin. Нам нужно сделать такой SQL запрос.

SELECT  * from DATABASE.User where LOGIN=login

Далее нужно вернуть объект класса User.

Проверим есть ли у нас соединение с базой, если же его не будет мы вернем null.

//UserDaoImpl ConnectionManager cm = new ConnectionManager(); Connection con = cm.getConnection();  @Override     public User findByLogin(String login) {         User user = null;         if (con != null) {               //..           }         return user;      }

Если условие в if правильное, мы выполним SQL запрос, и запишем значение в user.

//findByLogin PreparedStatement pr = con.prepareStatement("SELECT * FROM DATABASE.User where LOGIN=?"); pr.setString(1 , login); ResultSet resultSet = pr.executeQuery();//return sql result if(resultSet.next()) {        user = new User();        user.setId(resultSet.getInt("ID"));        user.setName(resultSet.getString("NAME"));        user.setSurname(resultSet.getString("SURNAME"));        user.setLogin(login);        user.setPassword(resultSet.getString("PASSWORD"));        return user; }  pr.close();  con.close();

Не забываем покрывать возможные исключения.

Попробуйте реализовать save своими руками.
Код оставлю под спойлером.

save

//UserDaoImpl @Override     public Boolean save(User user) {         ConnectionManager cm = new ConnectionManager();         Connection con = cm.getConnection();         if (con != null) {             try {                 PreparedStatement pr = con.prepareStatement("insert into DATABASE.USER (NAME,SURNAME,LOGIN,PASSWORD) values (?,?,?,?)");                 pr.setString(1,user.getName());                 pr.setString(2,user.getSurname());                 pr.setString(3,user.getLogin());                 pr.setString(4, DigestUtils.md5DigestAsHex((user.getPassword()).getBytes()));                 pr.executeUpdate();                 pr.close();                 con.close();                 return true;             } catch (SQLException e) {                 e.printStackTrace();              } catch (Exception e) {                 e.printStackTrace();             }         }         return false;     }

Service

В сервисе будет находится наша бизнес-логика. Создаем пакет java.com.zuk.service, в нем интерфейс UserService с двумя методами: login, registration. И создаем класс UserServiceImpl в java.com.zuk.service.impl, который имплементирует UserService.

public class UserServiceImpl implements UserService {     @Override     public String login(User user) {         return null;     }      @Override     public String registration(User user) {         return null;     } } 

Предлагаю начать с login.
Алгоритм будет таким:

  1. Проверим существует ли поле "login" в БД.
  2. Если условие 1 выполняется, проверяем совпадает ли пароль.
  3. Если условие 2 выполняется, скажем "life is beautiful"

//UserServiceImpl UserDaoImpl userDao = new UserDaoImpl();     @Override     public String login(User user) {         User findUser = userDao.findByLogin(user.getLogin());         if(findUser!=null){             if(DigestUtils.md5DigestAsHex((user.getPassword()).getBytes()).equals(findUser.getPassword())){                 return "life is beautiful";             }         }         return "do not give up";     }

Попытайтесь сделать регистрацию своими руками.

registration

 @Override     public String registration(User user) {         User findUser = userDao.findByLogin(user.getLogin());         if(findUser==null) {             userDao.save(user);             return "life is beautiful";         }         return "this login is not available";     }

Controller

Настала звездный час контроллера, и мы наконец-то сможем увидеть результат наших деяний.
Создаём пакет java.com.zuk.controller в нем класс Controller. Перед классом разместим "магическую" аннотацию RestController, она поможет Spring понять, что этот класс будет служить нам как Rest Controller.
Создаём метод, который возвращает строку и аннотируем его с помощью @RequestMapping("/") и @ResponseBody.

@RestController public class Controller {     @RequestMapping("/")     @ResponseBody     String main() {         return "Hello from Controller";     } }

Делаем билд проекта, и переходим на http://localhost:8080.
Мы должны увидеть "Hello from Controller".

Теперь создаём два html файла. Один будет с формой регистрации, второй с формой логина.
Правильным тоном будет сохранение этих файлы внутри resources, а еще лучше в папку resources.static.

html

<!--loginFrom.html--> <html> <title>Login</title> <body> <form action="http://localhost:8080/login">     <input type="text" required name="login" placeholder="login" />     <input type="password" required name="password" placeholder="password" />     <button>login</button> </form> <a href="http://localhost:8080/registrationForm">don't have account</a> </body> </html>

<!--registrationForm.html--> <html> <title>Registration</title> <body> <form action="http://localhost:8080/registration">     <input type="text" required name="name" placeholder="name" />     <input type="text" required name="surname" placeholder="surname" />     <input type="text" required name="login" placeholder="login" />     <input type="password" required name="password" placeholder="password" />     <button>registration</button> </form> <a href="http://localhost:8080/loginForm">already have account</a> </body> </html>

Теперь я хочу, чтобы при переходе по ссылке http://localhost:8080/loginForm, или http://localhost:8080/registrationForm выводились наши html файлы с формами.
Возвращаемся к нашему контроллеру, тут мы должны добавить мапинг для /loginForm, /registrationForm и отдавать соответствующую html. В этом нам поможет ModelAndView.

//Controller  @RequestMapping("/loginForm")     @ResponseBody     ModelAndView loginForm() {         ModelAndView modelAndView = new ModelAndView();         modelAndView.setViewName("loginForm.html");         return modelAndView;     }      @RequestMapping("/registrationForm")     @ResponseBody     ModelAndView registrationForm() {         ModelAndView modelAndView = new ModelAndView();         modelAndView.setViewName("registrationForm.html");         return modelAndView;     }

Если вы заметили, то в форме я уже написал action на http://localhost:8080/login и registration, но мы ещё не ловим эти переходы в контроллере.
Пора это исправлять и связаться с нашим service.

//Controller UserServiceImpl userService = new UserServiceImpl(); //..  @RequestMapping("/login")     @ResponseBody     String login(@RequestParam String login,@RequestParam String password) {         User user = new User();         user.setLogin(login);         user.setPassword(password);         return userService.login(user);     }      @RequestMapping("/registration")     @ResponseBody     String registration(@RequestParam String name,@RequestParam String surname, @RequestParam String login,@RequestParam String password) {         User user = new User();         user.setName(name);         user.setSurname(surname);         user.setLogin(login);         user.setPassword(password);         return userService.registration(user);     }

Мы видим, что наши методы в Controller начали принимать параметры. Это те параметры, которые мы пишем в наших формах. Их имена должны совпадать с именами input.

Заключение

Надеюсь эта статья смогла ответь на некоторые ваши вопросы, и помогла расширить свои горизонты.

Всем приятного развития.

ссылка на оригинал статьи https://habr.com/ru/post/495010/